Bugs item #2009556, was opened at 2008-07-03 11:41
Message generated for change (Comment added) made by stmane
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=482468&aid=2009556&group_id=56967
Please note that this message will contain a full copy of the comment thread,
including the initial issue submission, for this request,
not just the latest update.
Category: PF/runtime
Group: Pathfinder "stable"
Status: Open
Resolution: None
Priority: 5
Private: No
Submitted By: Luc Touraille (touraillel)
Assigned to: Lefteris Sidirourgos (lsidir)
Summary: XQ: "Zombie" document in collection
Initial Comment:
[Jun 2008 release]
A deleted document from a collection where there is more than 1 document is
still visible using the collection("mycoll") function.
On Feb 2008 release, the pf:collection function worked correctly, but not the
fn:collection function, that produced the same bug.
Stefan reproduced this bug, giving the following trace :
========
$ cat /tmp/MyDoc1.xml
--------
<a/>
========
$ cat /tmp/MyDoc2.xml
--------
<b/>
========
========
$ mclient -lx -s'pf:add-doc("/tmp/MyDoc1.xml","MyDoc1","MyCol")'
--------
========
$ mclient -lx -s'pf:collections()'
--------
<collection updatable="false" size="99 KiB" numDocs="1">MyCol</collection>
========
$ mclient -lx -s'pf:collection("MyCol")'
--------
<a/>
========
$ mclient -lx -g -s'fn:collection("MyCol")'
--------
<?xml version="1.0" encoding="utf-8"?>
<a/>
========
$ mclient -lx -s'pf:documents()'
--------
<document updatable="false" url="/tmp/MyDoc1.xml"
collection="MyCol">MyDoc1</document>
========
$ mclient -lx -s'pf:documents("MyCol")'
--------
<document updatable="false" url="/tmp/MyDoc1.xml"
collection="MyCol">MyDoc1</document>
========
========
$ mclient -lx -s'pf:del-doc("MyDoc1")'
--------
========
$ mclient -lx -s'pf:collections()'
--------
========
$ mclient -lx -s'pf:collection("MyCol")'
--------
========
$ mclient -lx -g -s'fn:collection("MyCol")'
--------
========
$ mclient -lx -s'pf:documents()'
--------
========
$ mclient -lx -s'pf:documents("MyCol")'
--------
========
========
$ mclient -lx -s'pf:add-doc("/tmp/MyDoc1.xml","MyDoc1","MyCol")'
--------
========
$ mclient -lx -s'pf:add-doc("/tmp/MyDoc2.xml","MyDoc2","MyCol")'
--------
========
$ mclient -lx -s'pf:collections()'
--------
<collection updatable="false" size="99 KiB" numDocs="2">MyCol</collection>
========
$ mclient -lx -s'pf:collection("MyCol")'
--------
<a/><b/>
========
$ mclient -lx -g -s'fn:collection("MyCol")'
--------
<?xml version="1.0" encoding="utf-8"?>
<a/>
,
<?xml version="1.0" encoding="utf-8"?>
<b/>
========
$ mclient -lx -s'pf:documents()'
--------
<document updatable="false" url="/tmp/MyDoc1.xml"
collection="MyCol">MyDoc1</document>,
<document updatable="false" url="/tmp/MyDoc2.xml"
collection="MyCol">MyDoc2</document>
========
$ mclient -lx -s'pf:documents("MyCol")'
--------
<document updatable="false" url="/tmp/MyDoc2.xml"
collection="MyCol">MyDoc2</document>,
<document updatable="false" url="/tmp/MyDoc1.xml"
collection="MyCol">MyDoc1</document>
========
========
$ mclient -lx -s'pf:del-doc("MyDoc2")'
--------
========
$ mclient -lx -s'pf:collections()'
--------
<collection updatable="false" size="99 KiB" numDocs="1">MyCol</collection>
========
$ mclient -lx -s'pf:collection("MyCol")'
--------
<a/><b/>
========
$ mclient -lx -g -s'fn:collection("MyCol")'
--------
<?xml version="1.0" encoding="utf-8"?>
<a/>
,
<?xml version="1.0" encoding="utf-8"?>
<b/>
========
$ mclient -lx -s'pf:documents()'
--------
<document updatable="false" url="/tmp/MyDoc1.xml"
collection="MyCol">MyDoc1</document>
========
$ mclient -lx -s'pf:documents("MyCol")'
--------
<document updatable="false" url="/tmp/MyDoc1.xml"
collection="MyCol">MyDoc1</document>
========
========
$ mclient -lx -s'pf:del-doc("MyDoc1")'
--------
========
$ mclient -lx -s'pf:collections()'
--------
========
$ mclient -lx -s'pf:collection("MyCol")'
--------
========
$ mclient -lx -g -s'fn:collection("MyCol")'
--------
========
$ mclient -lx -s'pf:documents()'
--------
========
$ mclient -lx -s'pf:documents("MyCol")'
--------
========
----------------------------------------------------------------------
>Comment By: Stefan Manegold (stmane)
Date: 2009-02-16 01:08
Message:
cf.
http://monetdb.cwi.nl/testing/projects/monetdb/Stable/pathfinder/.mTests103/GNU.64.64.d.1-Fedora8/tests_BugTracker/Zombie_document.SF-2009556.out.00.html
http://monetdb.cwi.nl/testing/projects/monetdb/Stable/pathfinder/.mTestsg103/GNU.64.64.d.1-Fedora8/tests_BugTracker/Zombie_document.SF-2009556.out.00.html
----------------------------------------------------------------------
Comment By: Stefan Manegold (stmane)
Date: 2009-02-15 21:58
Message:
Lefteris,
what is the status of this one?
Stefan
----------------------------------------------------------------------
Comment By: Lefteris Sidirourgos (lsidir)
Date: 2008-12-16 09:12
Message:
During the pathfinder skype meeting on Monday 15/12 the solution that was
proposed was to apply the docfilter proc after the pf:collection+step. This
will fix the fn:collection results. However if a query serializes the
results of pf:collection, the delete documents will still appear. This is
acceptable since pf:collection was not designed for such use, and users
should use the built in functions of XQuery (i.e., fn:collection) rather
than pf:collection.
In addition docfilter should break to 2 new functions to separate the
"swizzling" from the filtering.
----------------------------------------------------------------------
Comment By: Lefteris Sidirourgos (lsidir)
Date: 2008-12-15 16:45
Message:
Hi, the bug is still around indeed. The bug characteristics are as follows:
* If the mil proc ws_collection_root() is invoked, delete documents still
appear
* if the mil proc ws_collection() is invoked, delete documents do not
appear.
By investigating a little more, after the second document is deleted the
database looks like that:
mil>print(doc_name);
#---------------------------------#
# h alias # name
# oid str # type
#---------------------------------#
[ 1000000...@0, "MyDoc1" ]
[ 1000000...@0, nil ]
Which is expected. On the other hand,
mil>print(doc_collection);
#---------------------------------#
# h t # name
# oid oid # type
#---------------------------------#
[ 1...@0, 1...@0 ]
[ 1000000...@0, 1000000...@0 ]
[ 0...@0, 1000000...@0 ]
[ 1000000...@0, 1000000...@0 ]
thus the delete document appears in the tail, which it looks that this is
known and correct since the implementation of ws_collection() knows that
and has the following two lines of code:
var docs := doct.leftjoin(doc_name).select(str_nil,str_nil); # selected
existing docs
doc := doch.leftjoin(docs.mirror().leftjoin(doct)); # reduced doc to
existing docs
thus from the doc_name BAT decides which document still exists, but in the
implementation of ws_collection_root this is not the case, since no
filtering is happening. Notice that the PRE_Table, after deleting the
document and after restarting the logger looks like:
PRE table
[ 0...@0 ]
#-------------------------------------------------------------------------#
# h nid size level prop kind tag cont
# name
# void oid int chr oid str str oid
# type
#-------------------------------------------------------------------------#
[ 0...@0, nil, nil, 'þ', nil, "COLLECTION", nil, nil
]
[ 1...@0 ]
#-------------------------------------------------------------------------#
# h nid size level prop kind tag cont
# name
# void void int chr oid str str oid
# type
#-------------------------------------------------------------------------#
[ 0...@0, 0...@0, 4, 'þ', nil, "COLLECTION", nil, 1...@0
]
[ 1...@0, 1...@0, 1, 'ÿ', nil, "DOCUMENT", nil, 1...@0
]
[ 2...@0, 2...@0, 0, '\000', 0...@0, "ELEMENT", "||a",
1...@0
]
[ 3...@0, 3...@0, 1, 'ÿ', nil, "DOCUMENT", nil, 1...@0
]
[ 4...@0, 4...@0, 0, '\000', 1...@0, "ELEMENT", "||b",
1...@0
]
thus the elements etc. still exist
I am not sure what is the best way to fix this problem, so I am open to
suggestions, I am also not sure what are the steps taken after a document
is deleted, so I will need Peter's help on this one
----------------------------------------------------------------------
Comment By: Peter Boncz (boncz)
Date: 2008-12-12 00:02
Message:
Lefteris, can you check if the output is correct (the extra <aap>??) and
this bug really fixed? If so, close it. If not, re-open it. Thanks!
----------------------------------------------------------------------
Comment By: Stefan Manegold (stmane)
Date: 2008-11-18 11:48
Message:
The URLs are indeed to be ignored --- not trivial with Mtest.py right now,
though, I'll check and think about it.
The changes sizes in KB look very suspicious to me --- I would strongly
object to ignoring or approving them unless we know for sure why they
differ, or better, which size they represent --- I honestly don't know
either, yet ...
Moreover, the current output shows an extra
<aap>
Hello World
</aap>
compared to the stable/approved output --- also that needs to be checked
before considering this bug fixed ...
----------------------------------------------------------------------
Comment By: Lefteris Sidirourgos (lsidir)
Date: 2008-11-18 11:31
Message:
Hi,
the test Zombie_document.SF-2009556 seems to be failing not because the
bug is still there, but because of some dynamic(?) information in the
documents, such as size in kb and URL. I am not aware if and how can we
make testweb to ignore these differences. Assigning to Stefan:) I
considering this bug fixed though. We just have to manage the tests a
little, the same holds for the rest, of the related to this bug, reports.
lefteris
----------------------------------------------------------------------
Comment By: Stefan Manegold (stmane)
Date: 2008-07-03 22:34
Message:
Logged In: YES
user_id=572415
Originator: NO
Might be related to
[ 1976341 ] XQ: leftovers after deleting document
http://sourceforge.net/tracker/index.php?func=detail&aid=1976341&group_id=56967&atid=482468
----------------------------------------------------------------------
Comment By: Stefan Manegold (stmane)
Date: 2008-07-03 22:33
Message:
Logged In: YES
user_id=572415
Originator: NO
The problem seems to be "even worse":
* add 2 documents to a single collection "MyCol"
* delete one of them, again
=> + pf:colections(), pf:documents(), & pf:documents("MyCol") correctly
show only one remaining document
- pf:collection("MyCol") & fn:collection("MyCol") wrongly show both
documents
* stop Mserver
* restart Mserver
=> - all above functions wrongly show *both* documents, again!
This happens both with the (now) default Algebra back-end and with the
(old) "milprint_summer" back-end.
----------------------------------------------------------------------
Comment By: Stefan Manegold (stmane)
Date: 2008-07-03 14:48
Message:
Logged In: YES
user_id=572415
Originator: NO
Added test in
pathfinder/tests/BugTracker/Tests/Zombie_document.SF-2009556.*
----------------------------------------------------------------------
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=482468&aid=2009556&group_id=56967
------------------------------------------------------------------------------
Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA
-OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise
-Strategies to boost innovation and cut costs with open source participation
-Receive a $600 discount off the registration fee with the source code: SFAD
http://p.sf.net/sfu/XcvMzF8H
_______________________________________________
Monetdb-bugs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-bugs