1212import threading
1313
1414from lib .core .data import conf
15+ from lib .core .settings import HASHDB_FLUSH_THRESHOLD
1516from lib .core .settings import UNICODE_ENCODING
1617from lib .core .threads import getCurrentThreadData
1718from lib .core .threads import getCurrentThreadName
@@ -54,15 +55,17 @@ def retrieve(self, key):
5455 retVal = None
5556 if key :
5657 hash_ = HashDB .hashKey (key )
57- while True :
58- try :
59- for row in self .cursor .execute ("SELECT value FROM storage WHERE id=?" , (hash_ ,)):
60- retVal = row [0 ]
61- except sqlite3 .OperationalError , ex :
62- if not 'locked' in ex .message :
63- raise
64- else :
65- break
58+ retVal = self ._write_cache .get (hash_ , None )
59+ if not retVal :
60+ while True :
61+ try :
62+ for row in self .cursor .execute ("SELECT value FROM storage WHERE id=?" , (hash_ ,)):
63+ retVal = row [0 ]
64+ except sqlite3 .OperationalError , ex :
65+ if not 'locked' in ex .message :
66+ raise
67+ else :
68+ break
6669 return retVal
6770
6871 def write (self , key , value ):
@@ -75,10 +78,13 @@ def write(self, key, value):
7578 if getCurrentThreadName () in ('0' , 'MainThread' ):
7679 self .flush ()
7780
78- def flush (self ):
81+ def flush (self , forced = False ):
7982 if not self ._write_cache :
8083 return
8184
85+ if not forced and len (self ._write_cache ) < HASHDB_FLUSH_THRESHOLD :
86+ return
87+
8288 self ._cache_lock .acquire ()
8389 items = self ._write_cache .items ()
8490 self ._write_cache .clear ()
0 commit comments