|
105 | 105 | INDEXER_TIMEOUT = 20.0 |
106 | 106 |
|
107 | 107 |
|
108 | | -def get_doc(fn, revid, retry=False, **kwargs): |
| 108 | +def get_document(indexer: IndexingMiddleware, revid: str, retry: bool = False, **kwargs): |
109 | 109 | """ |
110 | | - Return a valid document or raise a KeyError. |
| 110 | + Return a valid indexer document or raise a KeyError. |
111 | 111 |
|
112 | 112 | Under heavy loads, the Whoosh AsyncWriter writer may be delayed in writing |
113 | 113 | indexes to storage. Try several times before failing. |
114 | 114 |
|
115 | | - :param fn: the indexer function |
| 115 | + :param indexer: instance of IndexingMiddleware |
116 | 116 | :param revid: revision to search |
117 | 117 | :param retry: retry backend search if document not found, required when server load is high |
118 | 118 | :param kwargs: idx_name, name of index used for searching (optional) |
119 | 119 | """ |
120 | | - until = time.time() + INDEXER_TIMEOUT |
| 120 | + until = time.monotonic() + INDEXER_TIMEOUT |
121 | 121 | while True: |
122 | | - doc = fn(revid=revid, **kwargs) |
| 122 | + doc = indexer._document(revid=revid, **kwargs) |
123 | 123 | if doc is not None: |
124 | 124 | break |
125 | 125 | if not retry: |
126 | 126 | msg = f"revid: {revid} not found. Please check meta data and indexes" |
127 | 127 | raise KeyError(msg) |
128 | | - if time.time() > until: |
| 128 | + if time.monotonic() > until: |
129 | 129 | msg = f"revid: {revid} - Server overload may have corrupted the index; rebuild it." |
130 | 130 | raise KeyError(msg) |
131 | 131 | time.sleep(2) |
@@ -1361,7 +1361,7 @@ def store_revision( |
1361 | 1361 | self.indexer.index_revision(meta, content, backend_name, force_latest=not overwrite) |
1362 | 1362 | gc.collect() # triggers close of index files from is_latest search |
1363 | 1363 | if not overwrite: |
1364 | | - self._current = get_doc(self.indexer._document, revid=revid, retry=True) |
| 1364 | + self._current = get_document(self.indexer, revid=revid, retry=True) |
1365 | 1365 | if return_rev: |
1366 | 1366 | return Revision(self, revid, retry=True) |
1367 | 1367 |
|
@@ -1414,7 +1414,7 @@ def __init__(self, item: Item, revid: str, doc=None, name=None, retry=False): |
1414 | 1414 | if is_current: |
1415 | 1415 | doc = item._current |
1416 | 1416 | else: |
1417 | | - doc = get_doc(item.indexer._document, idx_name=ALL_REVS, revid=revid, retry=retry) |
| 1417 | + doc = get_document(item.indexer, idx_name=ALL_REVS, revid=revid, retry=retry) |
1418 | 1418 |
|
1419 | 1419 | if is_current: |
1420 | 1420 | revid = doc.get(REVID) |
|
0 commit comments