| #
61dea710
|
| 08-Jul-2026 |
Andreas Gohr <gohr@cosmocode.de> |
fix(search): wait for a contended index lock and apply dperm
The Lock rewrite (c66b5ec65) made Lock::acquire() fail immediately when the lock directory already existed, where the old indexer lock re
fix(search): wait for a contended index lock and apply dperm
The Lock rewrite (c66b5ec65) made Lock::acquire() fail immediately when the lock directory already existed, where the old indexer lock retried until the holder released it. Concurrent saves or indexer runs then aborted indexing instead of serializing (recoverable only via the .indexed tag on the next edit), and the lock directory was created without the configured directory permissions, unlike every other directory DokuWiki creates.
Mirror the io_lock() convention: wait for a contended lock, bounded by a tunable wait timeout, before throwing; keep clearing locks older than five minutes as stale; and chmod the new lock directory to $conf['dperm']. The give-up path still throws IndexLockException, so the self-healing retry via the .indexed tag is unchanged.
show more ...
|
| #
4e61aa71
|
| 05-Jul-2026 |
Andreas Gohr <andi@splitbrain.org> |
fix(search): create index lock directories inside data/locks
Index locks were built by concatenating the configured lock directory and the index name without a path separator.
That produced paths l
fix(search): create index lock directories inside data/locks
Index locks were built by concatenating the configured lock directory and the index name without a path separator.
That produced paths like data/lockspage.index instead of data/locks/page.index, so index lock directories were created in the data root rather than inside the configured lock directory.
Fix this by joining the lock directory and index name with an explicit slash, and update the lock test to assert the correct location and guard against the old broken path.
show more ...
|
| #
c66b5ec6
|
| 05-Apr-2026 |
Andreas Gohr <andi@splitbrain.org> |
SearchIndex: rewrite Lock as static registry with reference counting
Replace the instance-based Lock class with a static registry that tracks held locks per-process with reference counting. This sol
SearchIndex: rewrite Lock as static registry with reference counting
Replace the instance-based Lock class with a static registry that tracks held locks per-process with reference counting. This solves three problems:
- Split indexes (w3, w4, ...) share a single lock name and now coordinate naturally via the registry - Multiple callers can acquire the same lock without conflict - Indexes enforce their own writability through lock()/unlock() methods on AbstractIndex
The Lock registry manages both the filesystem lock (mkdir) and the in-process tracking. The first acquire creates the directory, subsequent acquires increment the refcount. Release decrements, and only removes the directory when the count reaches zero.
Note: I am not sure if implementing this as a static object is a great idea or if we should pass an instance through the collection to the indexes...
show more ...
|
| #
596d5287
|
| 11-May-2023 |
Andreas Gohr <andi@splitbrain.org> |
Working fulltext collection and search
This finalizes the FulltextCollection and FulltextCollectionSearch classes. Proper locking is implemented, tests have been enhanced.
It should be possible to
Working fulltext collection and search
This finalizes the FulltextCollection and FulltextCollectionSearch classes. Proper locking is implemented, tests have been enhanced.
It should be possible to reimplement the page full text search on top of it.
show more ...
|