Revision
11956 <http://viewcvs.osafoundation.org/chandler?view=rev&rev=11956>
Author
vajda
Date
2006-10-06 09:37:14 -0700 (Fri, 06 Oct 2006)
Log Message
- fixed bug 6895
<http://bugzilla.osafoundation.org/show_bug.cgi?id=6895> again (index
check and repair were still broken)
(http://bugzilla.osafoundation.org/show_bug.cgi?id=6895)
(--repair broken)
Modified Paths
* trunk/chandler/repository/item/Indexed.py
<#trunkchandlerrepositoryitemIndexedpy>
* trunk/chandler/repository/item/Indexes.py
<#trunkchandlerrepositoryitemIndexespy>
* trunk/chandler/repository/item/RefCollections.py
<#trunkchandlerrepositoryitemRefCollectionspy>
* trunk/chandler/repository/item/Sets.py
<#trunkchandlerrepositoryitemSetspy>
* trunk/chandler/repository/persistence/DBRefs.py
<#trunkchandlerrepositorypersistenceDBRefspy>
* trunk/chandler/repository/persistence/RepositoryView.py
<#trunkchandlerrepositorypersistenceRepositoryViewpy>
Diff
Modified: trunk/chandler/repository/item/Indexed.py (11955 =>
11956)
--- trunk/chandler/repository/item/Indexed.py 2006-10-06 00:04:06 UTC (rev
11955)
+++ trunk/chandler/repository/item/Indexed.py 2006-10-06 16:37:14 UTC (rev
11956)
@@ -289,10 +289,10 @@
del self._indexes[indexName]
self._setDirty(True) # noMonitors=True
- def fillIndex(self, index):
+ def fillIndex(self, index, excludeIndexes=False):
prevKey = None
- for key in self.iterkeys():
+ for key in self.iterkeys(excludeIndexes):
index.insertKey(key, prevKey)
prevKey = key
@@ -646,29 +646,25 @@
result = True
if self._indexes:
- try:
- indexes = self._indexes
- self._indexes = None
- count = len(self)
+ indexes = self._indexes
+ count = self.__len__(True)
- for name, index in indexes.iteritems():
- if not index._checkIndex(index, logger, name, self,
- item, attribute, count, repair):
- if repair:
- logger.warning("Rebuilding index '%s' installed on
value '%s' of type %s in attribute '%s' on %s", name, self, type(self), attribute,
item._repr_())
- kwds = index.getInitKeywords()
- kwds.pop('ranges', None)
- indexes[name] = index = \
- self._createIndex(index.getIndexType(), **kwds)
- self.fillIndex(index)
- self._setDirty(True)
+ for name, index in indexes.iteritems():
+ if not index._checkIndex(index, logger, name, self,
+ item, attribute, count, repair):
+ if repair:
+ logger.warning("Rebuilding index '%s' installed on value
'%s' of type %s in attribute '%s' on %s", name, self, type(self), attribute,
item._repr_())
+ kwds = index.getInitKeywords()
+ kwds.pop('ranges', None)
+ indexes[name] = index = \
+ self._createIndex(index.getIndexType(), **kwds)
+ self.fillIndex(index, True)
+ self._setDirty(True)
- result = index._checkIndex(index, logger, name,
- self, item, attribute,
- count, repair)
- else:
- result = False
- finally:
- self._indexes = indexes
+ result = index._checkIndex(index, logger, name,
+ self, item, attribute,
+ count, repair)
+ else:
+ result = False
return result
Modified: trunk/chandler/repository/item/Indexes.py (11955 =>
11956)
--- trunk/chandler/repository/item/Indexes.py 2006-10-06 00:04:06 UTC (rev
11955)
+++ trunk/chandler/repository/item/Indexes.py 2006-10-06 16:37:14 UTC (rev
11956)
@@ -15,6 +15,7 @@
from struct import pack, unpack
from itertools import izip
+from traceback import format_exc
from chandlerdb.item.c import DelegatingIndex
from chandlerdb.util.c import Nil, SkipList, CLinkedMap
@@ -131,10 +132,15 @@
result = False
else:
- size, result = _index._checkIterateIndex(logger, name, value,
- item, attribute, repair)
- if size != 0:
- logger.error("Iteration of index '%s' (%d) installed on value '%s'
of type %s in attribute '%s' on %s doesn't match length (%d)", name, count - size,
value, type(value), attribute, item._repr_(), count)
+ try:
+ size, result = _index._checkIterateIndex(logger, name, value,
+ item, attribute,
+ repair)
+ if size != 0:
+ logger.error("Iteration of index '%s' (%d) installed on value
'%s' of type %s in attribute '%s' on %s doesn't match length (%d)", name, count -
size, value, type(value), attribute, item._repr_(), count)
+ result = False
+ except Exception, e:
+ logger.error("Iteration of index '%s' installed on value '%s' of
type %s in attribute '%s' on %s caused an error: %s", name, value, type(value),
attribute, item._repr_(), format_exc(5))
result = False
return result
Modified: trunk/chandler/repository/item/RefCollections.py
(11955 => 11956)
--- trunk/chandler/repository/item/RefCollections.py 2006-10-06 00:04:06 UTC
(rev 11955)
+++ trunk/chandler/repository/item/RefCollections.py 2006-10-06 16:37:14 UTC
(rev 11956)
@@ -737,6 +737,14 @@
return "\n%s<RefList> %s<->%s" %(' ' * indent,
self._name, self._otherName)
+ def __iter__(self, excludeIndexes=False):
+
+ for key in self.iterkeys():
+ yield self[key]
+
+ def __len__(self, excludeIndexes=False):
+ return self._count
+
def iterItems(self):
return self.itervalues()
Modified: trunk/chandler/repository/item/Sets.py (11955 => 11956)
--- trunk/chandler/repository/item/Sets.py 2006-10-06 00:04:06 UTC (rev
11955)
+++ trunk/chandler/repository/item/Sets.py 2006-10-06 16:37:14 UTC (rev
11956)
@@ -78,53 +78,56 @@
return not self
- def __iter__(self):
+ def __iter__(self, excludeIndexes=False):
- index = self._anIndex()
- if index is not None:
- view = self._view
- return (view[key] for key in index)
+ if not excludeIndexes:
+ index = self._anIndex()
+ if index is not None:
+ view = self._view
+ return (view[key] for key in index)
- return self._itervalues()
+ return self._itervalues(excludeIndexes)
- def itervalues(self):
+ def itervalues(self, excludeIndexes=False):
- return self.__iter__()
+ return self.__iter__(excludeIndexes)
- def _itervalues(self):
+ def _itervalues(self, excludeIndexes=False):
raise NotImplementedError, "%s._itervalues" %(type(self))
- def iterkeys(self):
+ def iterkeys(self, excludeIndexes=False):
- index = self._anIndex()
- if index is not None:
- return index.iterkeys()
+ if not excludeIndexes:
+ index = self._anIndex()
+ if index is not None:
+ return index.iterkeys()
- return self._iterkeys()
+ return self._iterkeys(excludeIndexes)
# the slow way, via items, to be overridden by some implementations
- def _iterkeys(self):
+ def _iterkeys(self, excludeIndexes=False):
- return (item.itsUUID for item in self)
+ return (item.itsUUID for item in self.__iter__(excludeIndexes))
def iterItems(self):
return self.itervalues()
- def __len__(self):
+ def __len__(self, excludeIndexes=False):
- index = self._anIndex()
- if index is not None:
- return len(index)
+ if not excludeIndexes:
+ index = self._anIndex()
+ if index is not None:
+ return len(index)
- return self._len()
+ return self._len(excludeIndexes)
# the slow way, via keys, to be overridden by some implementations
- def _len(self):
+ def _len(self, excludeIndexes=False):
count = 0
- for key in self.iterkeys():
+ for key in self.iterkeys(excludeIndexes):
count += 1
return count
@@ -227,32 +230,30 @@
return getattr(self._view[source[0]], source[1])._anIndex()
- def _iterSource(self, source):
+ def _iterSource(self, source, excludeIndexes=False):
if isinstance(source, AbstractSet):
- for item in source:
+ for item in source.__iter__(excludeIndexes):
yield item
else:
- for item in getattr(self._view[source[0]], source[1]):
+ for item in getattr(self._view[source[0]],
+ source[1]).__iter__(excludeIndexes):
yield item
- def _iterSourceKeys(self, source):
+ def _iterSourceKeys(self, source, excludeIndexes=False):
if isinstance(source, AbstractSet):
- return source.iterkeys()
+ return source.iterkeys(excludeIndexes)
- return getattr(self._view[source[0]], source[1]).iterkeys()
+ return getattr(self._view[source[0]],
+ source[1]).iterkeys(excludeIndexes)
- def _sourceLen(self, source):
+ def _sourceLen(self, source, excludeIndexes=False):
if isinstance(source, AbstractSet):
- return len(source)
+ return source.__len__(excludeIndexes)
- try:
- return len(getattr(self._view[source[0]], source[1]))
- except AttributeError:
- print source, type(source), self, type(self)
- raise
+ return getattr(self._view[source[0]],
source[1]).__len__(excludeIndexes)
def _reprSource(self, source, replace):
@@ -559,15 +560,15 @@
return False
- def _itervalues(self):
+ def _itervalues(self, excludeIndexes=False):
return iter(())
- def _iterkeys(self):
+ def _iterkeys(self, excludeIndexes=False):
return iter(())
- def _len(self):
+ def _len(self, excludeIndexes=False):
return 0
@@ -629,17 +630,17 @@
return self._sourceContains(item, self._source,
excludeMutating, excludeIndexes)
- def _itervalues(self):
+ def _itervalues(self, excludeIndexes=False):
- return self._iterSource(self._source)
+ return self._iterSource(self._source, excludeIndexes)
- def _iterkeys(self):
+ def _iterkeys(self, excludeIndexes=False):
- return self._iterSourceKeys(self._source)
+ return self._iterSourceKeys(self._source, excludeIndexes)
- def _len(self):
+ def _len(self, excludeIndexes=True):
- return self._sourceLen(self._source)
+ return self._sourceLen(self._source, excludeIndexes)
def _repr_(self, replace=None):
@@ -803,31 +804,33 @@
self._sourceContains(item, self._right,
excludeMutating, excludeIndexes))
- def _itervalues(self):
+ def _itervalues(self, excludeIndexes=False):
left = self._left
- for item in self._iterSource(left):
+ for item in self._iterSource(left, excludeIndexes):
yield item
- for item in self._iterSource(self._right):
- if not self._sourceContains(item, left):
+ for item in self._iterSource(self._right, excludeIndexes):
+ if not self._sourceContains(item, left, False, excludeIndexes):
yield item
- def _iterkeys(self):
+ def _iterkeys(self, excludeIndexes=False):
- leftIndex = self._aSourceIndex(self._left)
- if leftIndex is not None:
- for key in leftIndex:
- yield key
- for key in self._iterSourceKeys(self._right):
- if key not in leftIndex:
+ if not excludeIndexes:
+ leftIndex = self._aSourceIndex(self._left)
+ if leftIndex is not None:
+ for key in leftIndex:
yield key
- else:
- for key in self._iterSourceKeys(self._left):
+ for key in self._iterSourceKeys(self._right):
+ if key not in leftIndex:
+ yield key
+ return
+
+ for key in self._iterSourceKeys(self._left, excludeIndexes):
+ yield key
+ left = self._getSource(self._left)
+ for key in self._iterSourceKeys(self._right, excludeIndexes):
+ if not left.__contains__(key, False, excludeIndexes):
yield key
- left = self._getSource(self._left)
- for key in self._iterSourceKeys(self._right):
- if key not in left:
- yield key
def _op(self, leftOp, rightOp, other):
@@ -861,28 +864,30 @@
self._sourceContains(item, self._right,
excludeMutating, excludeIndexes))
- def _itervalues(self):
+ def _itervalues(self, excludeIndexes=False):
left = self._left
right = self._right
- for item in self._iterSource(left):
- if self._sourceContains(item, right):
+ for item in self._iterSource(left, excludeIndexes):
+ if self._sourceContains(item, right, False, excludeIndexes):
yield item
- def _iterkeys(self):
+ def _iterkeys(self, excludeIndexes=False):
- rightIndex = self._aSourceIndex(self._right)
- if rightIndex is not None:
- for key in self._iterSourceKeys(self._left):
- if key in rightIndex:
- yield key
- else:
- right = self._getSource(self._right)
- for key in self._iterSourceKeys(self._left):
- if key in right:
- yield key
+ if not excludeIndexes:
+ rightIndex = self._aSourceIndex(self._right)
+ if rightIndex is not None:
+ for key in self._iterSourceKeys(self._left):
+ if key in rightIndex:
+ yield key
+ return
+ right = self._getSource(self._right)
+ for key in self._iterSourceKeys(self._left, excludeIndexes):
+ if right.__contains__(key, False, excludeIndexes):
+ yield key
+
def _op(self, leftOp, rightOp, other):
left = self._left
@@ -915,28 +920,30 @@
not self._sourceContains(item, self._right,
excludeMutating, excludeIndexes))
- def _itervalues(self):
+ def _itervalues(self, excludeIndexes=False):
left = self._left
right = self._right
- for item in self._iterSource(left):
- if not self._sourceContains(item, right):
+ for item in self._iterSource(left, excludeIndexes):
+ if not self._sourceContains(item, right, False, excludeIndexes):
yield item
- def _iterkeys(self):
+ def _iterkeys(self, excludeIndexes=False):
- rightIndex = self._aSourceIndex(self._right)
- if rightIndex is not None:
- for key in self._iterSourceKeys(self._left):
- if key not in rightIndex:
- yield key
- else:
- right = self._getSource(self._right)
- for key in self._iterSourceKeys(self._left):
- if key not in right:
- yield key
+ if not excludeIndexes:
+ rightIndex = self._aSourceIndex(self._right)
+ if rightIndex is not None:
+ for key in self._iterSourceKeys(self._left):
+ if key not in rightIndex:
+ yield key
+ return
+ right = self._getSource(self._right)
+ for key in self._iterSourceKeys(self._left, excludeIndexes):
+ if not right.__contains__(key, False, excludeIndexes):
+ yield key
+
def _op(self, leftOp, rightOp, other):
left = self._left
@@ -1058,31 +1065,31 @@
return False
- def _iterkeys(self):
+ def _iterkeys(self, excludeIndexes=False):
sources = self._sources
for source in sources:
- for key in self._iterSourceKeys(source):
+ for key in self._iterSourceKeys(source, excludeIndexes):
unique = True
for src in sources:
if src is source:
break
- if self._sourceContains(key, src):
+ if self._sourceContains(key, src, False, excludeIndexes):
unique = False
break
if unique:
yield key
- def _itervalues(self):
+ def _itervalues(self, excludeIndexes=False):
sources = self._sources
for source in sources:
- for item in self._iterSource(source):
+ for item in self._iterSource(source, excludeIndexes):
unique = True
for src in sources:
if src is source:
break
- if self._sourceContains(item, src):
+ if self._sourceContains(item, src, False, excludeIndexes):
unique = False
break
if unique:
@@ -1125,33 +1132,35 @@
return True
- def _iterkeys(self):
+ def _iterkeys(self, excludeIndexes=False):
sources = self._sources
if len(sources) > 1:
source = sources[0]
- for key in self._iterSourceKeys(source):
+ for key in self._iterSourceKeys(source, excludeIndexes):
everywhere = True
for src in sources:
if src is source:
continue
- if not self._sourceContains(key, src):
+ if not self._sourceContains(key, src,
+ False, excludeIndexes):
everywhere = False
break
if everywhere:
yield key
- def _itervalues(self):
+ def _itervalues(self, excludeIndexes=False):
sources = self._sources
if len(sources) > 1:
source = sources[0]
- for item in self._iterSource(source):
+ for item in self._iterSource(source, excludeIndexes):
everywhere = True
for src in sources:
if src is source:
continue
- if not self._sourceContains(item, src):
+ if not self._sourceContains(item, src,
+ False, excludeIndexes):
everywhere = False
break
if everywhere:
@@ -1224,11 +1233,11 @@
return self.__contains__(item, excludeMutating, excludeIndexes)
- def _itervalues(self):
+ def _itervalues(self, excludeIndexes=False):
return self._view[self._extent].iterItems(self._recursive)
- def _iterkeys(self):
+ def _iterkeys(self, excludeIndexes=False):
return self._view[self._extent].iterKeys(self._recursive)
@@ -1254,9 +1263,9 @@
return op
- def _len(self):
+ def _len(self, excludeIndexes=False):
- return AbstractSet._len(self)
+ return AbstractSet._len(self, excludeIndexes)
def iterSources(self):
@@ -1296,22 +1305,22 @@
return False
- def _iterkeys(self):
+ def _iterkeys(self, excludeIndexes=False):
- for uuid in self._iterSourceKeys(self._source):
+ for uuid in self._iterSourceKeys(self._source, excludeIndexes):
if self.filter(uuid):
yield uuid
- def _itervalues(self):
+ def _itervalues(self, excludeIndexes=False):
- for item in self._iterSource(self._source):
+ for item in self._iterSource(self._source, excludeIndexes):
if self.filter(item.itsUUID):
yield item
- def _len(self):
+ def _len(self, excludeIndexes=False):
count = 0
- for key in self._iterkeys():
+ for key in self._iterkeys(excludeIndexes):
count += 1
return count
Modified: trunk/chandler/repository/persistence/DBRefs.py
(11955 => 11956)
--- trunk/chandler/repository/persistence/DBRefs.py 2006-10-06 00:04:06 UTC
(rev 11955)
+++ trunk/chandler/repository/persistence/DBRefs.py 2006-10-06 16:37:14 UTC
(rev 11956)
@@ -321,7 +321,7 @@
RefList.__init__(self, item, name, otherName, dictKey, readOnly,
(new and CLinkedMap.NEW or 0) | CLinkedMap.LOAD)
- def iterkeys(self, firstKey=None, lastKey=None):
+ def iterkeys(self, excludeIndexes=False, firstKey=None, lastKey=None):
return self._iterrefs(firstKey, lastKey)
Modified:
trunk/chandler/repository/persistence/RepositoryView.py (11955
=> 11956)
--- trunk/chandler/repository/persistence/RepositoryView.py 2006-10-06
00:04:06 UTC (rev 11955)
+++ trunk/chandler/repository/persistence/RepositoryView.py 2006-10-06
16:37:14 UTC (rev 11956)
@@ -1610,6 +1610,9 @@
def _setDirty(self, noMonitors=False):
pass
+ def iterkeys(self, excludeIndexes=False, firstKey=None, lastKey=None):
+ return super(NullViewRefList, self).iterkeys(firstKey, lastKey)
+
def _unloadRef(self, item):
key = item.itsUUID
------------------------------------------------------------------------
_______________________________________________
Commits mailing list
[email protected]
http://lists.osafoundation.org/mailman/listinfo/commits