Skip to content

Commit a391485

Browse files
committed
Change get_document to a method of IndexingMiddleware
1 parent 54fb0b6 commit a391485

File tree

1 file changed

+27
-29
lines changed

1 file changed

+27
-29
lines changed

src/moin/storage/middleware/indexing.py

Lines changed: 27 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -105,33 +105,6 @@
105105
INDEXER_TIMEOUT = 20.0
106106

107107

108-
def get_document(indexer: IndexingMiddleware, revid: str, retry: bool = False, **kwargs):
109-
"""
110-
Return a valid indexer document or raise a KeyError.
111-
112-
Under heavy loads, the Whoosh AsyncWriter writer may be delayed in writing
113-
indexes to storage. Try several times before failing.
114-
115-
:param indexer: instance of IndexingMiddleware
116-
:param revid: revision to search
117-
:param retry: retry backend search if document not found, required when server load is high
118-
:param kwargs: idx_name, name of index used for searching (optional)
119-
"""
120-
until = time.monotonic() + INDEXER_TIMEOUT
121-
while True:
122-
doc = indexer._document(revid=revid, **kwargs)
123-
if doc is not None:
124-
break
125-
if not retry:
126-
msg = f"revid: {revid} not found. Please check meta data and indexes"
127-
raise KeyError(msg)
128-
if time.monotonic() > until:
129-
msg = f"revid: {revid} - Server overload may have corrupted the index; rebuild it."
130-
raise KeyError(msg)
131-
time.sleep(2)
132-
return doc
133-
134-
135108
def parent_names(names):
136109
"""
137110
Compute list of parent names (same order as in names, but no dupes)
@@ -1049,6 +1022,31 @@ def existing_item(self, **query):
10491022
"""
10501023
return Item.existing(self, **query)
10511024

1025+
def get_document(self, revid: str, retry: bool = False, **kwargs):
1026+
"""
1027+
Return a valid indexer document or raise a KeyError.
1028+
1029+
Under heavy loads, the Whoosh AsyncWriter writer may be delayed in writing
1030+
indexes to storage. Try several times before failing.
1031+
1032+
:param revid: revision to search
1033+
:param retry: retry backend search if document not found, required when server load is high
1034+
:param kwargs: idx_name, name of index used for searching (optional)
1035+
"""
1036+
until = time.monotonic() + INDEXER_TIMEOUT
1037+
while True:
1038+
doc = self._document(revid=revid, **kwargs)
1039+
if doc is not None:
1040+
break
1041+
if not retry:
1042+
msg = f"revid: {revid} not found. Please check meta data and indexes"
1043+
raise KeyError(msg)
1044+
if time.monotonic() > until:
1045+
msg = f"revid: {revid} - Server overload may have corrupted the index; rebuild it."
1046+
raise KeyError(msg)
1047+
time.sleep(2)
1048+
return doc
1049+
10521050

10531051
class PropertiesMixin:
10541052
"""
@@ -1361,7 +1359,7 @@ def store_revision(
13611359
self.indexer.index_revision(meta, content, backend_name, force_latest=not overwrite)
13621360
gc.collect() # triggers close of index files from is_latest search
13631361
if not overwrite:
1364-
self._current = get_document(self.indexer, revid=revid, retry=True)
1362+
self._current = self.indexer.get_document(revid=revid, retry=True)
13651363
if return_rev:
13661364
return Revision(self, revid, retry=True)
13671365

@@ -1414,7 +1412,7 @@ def __init__(self, item: Item, revid: str, doc=None, name=None, retry=False):
14141412
if is_current:
14151413
doc = item._current
14161414
else:
1417-
doc = get_document(item.indexer, idx_name=ALL_REVS, revid=revid, retry=retry)
1415+
doc = item.indexer.get_document(idx_name=ALL_REVS, revid=revid, retry=retry)
14181416

14191417
if is_current:
14201418
revid = doc.get(REVID)

0 commit comments

Comments
 (0)