Skip to content

Commit 88d0d90

Browse files
committed
Fixed inconsistent cache read of concurrent threads
1 parent dbe1a0d commit 88d0d90

File tree

13 files changed

+171
-54
lines changed

13 files changed

+171
-54
lines changed

src/Products/PluginIndexes/BooleanIndex/tests.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -257,19 +257,19 @@ def test_reindexation_when_index_reversed(self):
257257
def test_getCounter(self):
258258
index = self._makeOne()
259259

260-
self.assertEqual(index.getCounter(), 0)
260+
self.assertEqual(index.getCounter(), (0, False))
261261

262262
obj = Dummy(1, True)
263263
index.index_object(obj.id, obj)
264-
self.assertEqual(index.getCounter(), 1)
264+
self.assertEqual(index.getCounter(), (1, False))
265265

266266
index.unindex_object(obj.id)
267-
self.assertEqual(index.getCounter(), 2)
267+
self.assertEqual(index.getCounter(), (2, False))
268268

269269
# unknown id
270270
index.unindex_object(1234)
271-
self.assertEqual(index.getCounter(), 2)
271+
self.assertEqual(index.getCounter(), (2, False))
272272

273273
# clear is a change
274274
index.clear()
275-
self.assertEqual(index.getCounter(), 3)
275+
self.assertEqual(index.getCounter(), (3, False))

src/Products/PluginIndexes/DateIndex/tests.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -337,21 +337,21 @@ def test_getCounter(self):
337337
from DateTime import DateTime
338338

339339
index = self._makeOne()
340-
self.assertEqual(index.getCounter(), 0)
340+
self.assertEqual(index.getCounter(), (0, False))
341341

342342
index.index_object(1, Dummy('b', DateTime(0)))
343-
self.assertEqual(index.getCounter(), 1)
343+
self.assertEqual(index.getCounter(), (1, False))
344344

345345
index.unindex_object(1)
346-
self.assertEqual(index.getCounter(), 2)
346+
self.assertEqual(index.getCounter(), (2, False))
347347

348348
# unknown id
349349
index.unindex_object(1234)
350-
self.assertEqual(index.getCounter(), 2)
350+
self.assertEqual(index.getCounter(), (2, False))
351351

352352
# clear is a change
353353
index.clear()
354-
self.assertEqual(index.getCounter(), 3)
354+
self.assertEqual(index.getCounter(), (3, False))
355355

356356
def test_precision(self):
357357
from DateTime import DateTime

src/Products/PluginIndexes/DateRangeIndex/tests.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -284,22 +284,22 @@ def test_resultset(self):
284284

285285
def test_getCounter(self):
286286
index = self._makeOne('work', 'start', 'stop')
287-
self.assertEqual(index.getCounter(), 0)
287+
self.assertEqual(index.getCounter(), (0, False))
288288

289289
k, obj = dummies[0]
290290
index.index_object(k, obj)
291-
self.assertEqual(index.getCounter(), 1)
291+
self.assertEqual(index.getCounter(), (1, False))
292292

293293
index.unindex_object(k)
294-
self.assertEqual(index.getCounter(), 2)
294+
self.assertEqual(index.getCounter(), (2, False))
295295

296296
# unknown id
297297
index.unindex_object(1234)
298-
self.assertEqual(index.getCounter(), 2)
298+
self.assertEqual(index.getCounter(), (2, False))
299299

300300
# clear is a change
301301
index.clear()
302-
self.assertEqual(index.getCounter(), 3)
302+
self.assertEqual(index.getCounter(), (3, False))
303303

304304
def test_precision(self):
305305
precision = 5

src/Products/PluginIndexes/KeywordIndex/tests.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -275,19 +275,19 @@ def test_value_removes(self):
275275
def test_getCounter(self):
276276
index = self._makeOne('foo')
277277

278-
self.assertEqual(index.getCounter(), 0)
278+
self.assertEqual(index.getCounter(), (0, False))
279279

280280
obj = Dummy(['hello'])
281281
index.index_object(10, obj)
282-
self.assertEqual(index.getCounter(), 1)
282+
self.assertEqual(index.getCounter(), (1, False))
283283

284284
index.unindex_object(10)
285-
self.assertEqual(index.getCounter(), 2)
285+
self.assertEqual(index.getCounter(), (2, False))
286286

287287
# unknown id
288288
index.unindex_object(1234)
289-
self.assertEqual(index.getCounter(), 2)
289+
self.assertEqual(index.getCounter(), (2, False))
290290

291291
# clear is a change
292292
index.clear()
293-
self.assertEqual(index.getCounter(), 3)
293+
self.assertEqual(index.getCounter(), (3, False))

src/Products/PluginIndexes/PathIndex/PathIndex.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,11 @@ def _increment_counter(self):
198198

199199
def getCounter(self):
200200
"""Return a counter which is increased on index changes"""
201-
return self._counter is not None and self._counter() or 0
201+
counter = self._counter is not None and self._counter() or 0
202+
changed = (self._counter is not None and
203+
self._counter._p_changed or False)
204+
205+
return (counter, changed)
202206

203207
def numObjects(self):
204208
""" See IPluggableIndex.

src/Products/PluginIndexes/PathIndex/tests.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -537,19 +537,19 @@ def test__search_w_level_0(self):
537537
def test_getCounter(self):
538538
index = self._makeOne()
539539

540-
self.assertEqual(index.getCounter(), 0)
540+
self.assertEqual(index.getCounter(), (0, False))
541541

542542
doc = Dummy('/aa/bb')
543543
index.index_object(1, doc)
544-
self.assertEqual(index.getCounter(), 1)
544+
self.assertEqual(index.getCounter(), (1, False))
545545

546546
index.unindex_object(1)
547-
self.assertEqual(index.getCounter(), 2)
547+
self.assertEqual(index.getCounter(), (2, False))
548548

549549
# unknown id
550550
index.unindex_object(1)
551-
self.assertEqual(index.getCounter(), 2)
551+
self.assertEqual(index.getCounter(), (2, False))
552552

553553
# clear changes the index
554554
index.clear()
555-
self.assertEqual(index.getCounter(), 3)
555+
self.assertEqual(index.getCounter(), (3, False))

src/Products/PluginIndexes/TopicIndex/TopicIndex.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,11 @@ def _increment_counter(self):
101101

102102
def getCounter(self):
103103
"""Return a counter which is increased on index changes"""
104-
return self._counter is not None and self._counter() or 0
104+
counter = self._counter is not None and self._counter() or 0
105+
changed = (self._counter is not None and
106+
self._counter._p_changed or False)
107+
108+
return (counter, changed)
105109

106110
def numObjects(self):
107111
"""Return the number of indexed objects."""

src/Products/PluginIndexes/TopicIndex/tests.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -97,18 +97,18 @@ def test_getCounter(self):
9797
index = self.TI
9898
index._counter.set(0)
9999

100-
self.assertEqual(index.getCounter(), 0)
100+
self.assertEqual(index.getCounter(), (0, False))
101101

102102
index.index_object(1, Obj(1, 'doc1'))
103-
self.assertEqual(index.getCounter(), 1)
103+
self.assertEqual(index.getCounter(), (1, False))
104104

105105
index.unindex_object(1)
106-
self.assertEqual(index.getCounter(), 2)
106+
self.assertEqual(index.getCounter(), (2, False))
107107

108108
# unknown id
109109
index.unindex_object(1)
110-
self.assertEqual(index.getCounter(), 2)
110+
self.assertEqual(index.getCounter(), (2, False))
111111

112112
# clear changes the index
113113
index.clear()
114-
self.assertEqual(index.getCounter(), 3)
114+
self.assertEqual(index.getCounter(), (3, False))

src/Products/PluginIndexes/UUIDIndex/tests.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -179,19 +179,19 @@ def test_non_unique(self):
179179
def test_getCounter(self):
180180
index = self._makeOne('foo')
181181

182-
self.assertEqual(index.getCounter(), 0)
182+
self.assertEqual(index.getCounter(), (0, False))
183183

184184
obj = Dummy('a')
185185
index.index_object(10, obj)
186-
self.assertEqual(index.getCounter(), 1)
186+
self.assertEqual(index.getCounter(), (1, False))
187187

188188
index.unindex_object(10)
189-
self.assertEqual(index.getCounter(), 2)
189+
self.assertEqual(index.getCounter(), (2, False))
190190

191191
# unknown id
192192
index.unindex_object(1234)
193-
self.assertEqual(index.getCounter(), 2)
193+
self.assertEqual(index.getCounter(), (2, False))
194194

195195
# clear is a change
196196
index.clear()
197-
self.assertEqual(index.getCounter(), 3)
197+
self.assertEqual(index.getCounter(), (3, False))

src/Products/PluginIndexes/tests/test_unindex.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ def _getTargetClass(self):
2525
return UnIndex
2626

2727
def _makeOne(self, *args, **kw):
28+
2829
index = self._getTargetClass()(*args, **kw)
2930

3031
class DummyZCatalog(SimpleItem):
@@ -142,25 +143,27 @@ def testQuery(record, expect=1):
142143
testQuery(record)
143144

144145
def test_getCounter(self):
146+
145147
index = self._makeOne('counter')
146148

147-
self.assertEqual(index.getCounter(), 0)
149+
self.assertEqual(index.getCounter(), (0, False))
148150

149151
class Dummy(object):
150152
id = 1
151153
counter = 'counter'
152154

153155
obj = Dummy()
154156
index.index_object(obj.id, obj)
155-
self.assertEqual(index.getCounter(), 1)
157+
self.assertEqual(index.getCounter(), (1, False))
156158

157159
index.unindex_object(obj.id)
158-
self.assertEqual(index.getCounter(), 2)
160+
self.assertEqual(index.getCounter(), (2, False))
159161

160162
# unknown id
161163
index.unindex_object(1234)
162-
self.assertEqual(index.getCounter(), 2)
164+
self.assertEqual(index.getCounter(), (2, False))
163165

164166
# clear changes the index
165167
index.clear()
166-
self.assertEqual(index.getCounter(), 3)
168+
self.assertEqual(index.getCounter(), (3, False))
169+

0 commit comments

Comments
 (0)