Please don't commit when the tinderbox is not green (except to fix the tree).

[email protected] wrote:

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
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

Open Source Applications Foundation "chandler-dev" mailing list
http://lists.osafoundation.org/mailman/listinfo/chandler-dev

Reply via email to