Bug in ZSQL method result caching?

Chris Withers <[email protected]>
Newsgroups gmane.comp.web.zope.database
Message-ID <[email protected]>
Hi All,

I'm seeing a fair few errors as follows using Zope 2.8.4:

     results = self.aZSQLMethod(p1=value1, p2=value2)
   File "lib/python/Shared/DC/ZRDB/DA.py",line 453, in __call__
     result=self._cached_result(DB__, (query, self.max_rows_))
   File "lib/python/Shared/DC/ZRDB/DA.py",line 375, in _cached_result
     if int(cache[q][0]) == key:
KeyError: ("execute dbo.aStoredProcedure 'VALUE1', 'VALUE2'\n",
            1000,
            '\nDBConnId: None')

The code in question is this, from DA.py:

         # Try to fetch from cache
         if hasattr(self,'_v_cache'): cache=self._v_cache
         else: cache=self._v_cache={}, Bucket()
         cache, tcache = cache
         max_cache=self.max_cache_
         now=time()
         t=now-self.cache_time_
         if len(cache) > max_cache / 2:
             keys=tcache.keys()
             keys.reverse()
             while keys and (len(keys) > max_cache or keys[-1] < t):
                 key=keys[-1]
                 q=tcache[key]
                 del tcache[key]
                 if int(cache[q][0]) == key:
                     del cache[q]
                 del keys[-1]


The if clause seems a bit dodgy...

Is that while loop maybe iterating over a mutable object while deleting 
stuff from it?

I'm only stabbing in the dark here...

Does anyone have any better ideas?

cheers,

Chris

-- 
Simplistix - Content Management, Zope & Python Consulting
            - http://www.simplistix.co.uk
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.