diff options
author | Michael Hamann <michael@content-space.de> | 2011-05-02 23:21:38 +0200 |
---|---|---|
committer | Michael Hamann <michael@content-space.de> | 2011-05-02 23:26:07 +0200 |
commit | 26f7dbf522bd7473a47791384d73d5721bca8984 (patch) | |
tree | abfc122d6354fcb6a5b646fbfebb10bdddb4444e /inc | |
parent | 42c58e90cbc5b1f19b2ff784225a3e33a8331b4f (diff) | |
download | rpg-26f7dbf522bd7473a47791384d73d5721bca8984.tar.gz rpg-26f7dbf522bd7473a47791384d73d5721bca8984.tar.bz2 |
Add a test to do=check that should detect search index corruption
With this test it should be possible to detect if the search index has
been corrupted by using Rincewind RC or a git version of the weeks
before the RC release.
Diffstat (limited to 'inc')
-rw-r--r-- | inc/indexer.php | 2 | ||||
-rw-r--r-- | inc/infoutils.php | 31 |
2 files changed, 32 insertions, 1 deletions
diff --git a/inc/indexer.php b/inc/indexer.php index 107845e24..64e172b5b 100644 --- a/inc/indexer.php +++ b/inc/indexer.php @@ -1323,7 +1323,7 @@ function idx_listIndexLengths() { $dir = @opendir($conf['indexdir']); if ($dir === false) return array(); - $idx[] = array(); + $idx = array(); while (($f = readdir($dir)) !== false) { if (substr($f, 0, 1) == 'i' && substr($f, -4) == '.idx') { $i = substr($f, 1, -4); diff --git a/inc/infoutils.php b/inc/infoutils.php index 5f406aa3e..f720e957a 100644 --- a/inc/infoutils.php +++ b/inc/infoutils.php @@ -238,6 +238,37 @@ function check(){ Make sure this directory is properly protected (See <a href="http://www.dokuwiki.org/security">security</a>)',-1); } + + // Check for corrupted search index + $lengths = idx_listIndexLengths(); + $index_corrupted = false; + foreach ($lengths as $length) { + if (count(idx_getIndex('w', $length)) != count(idx_getIndex('i', $length))) { + $index_corrupted = true; + break; + } + } + + foreach (idx_getIndex('metadata', '') as $index) { + if (count(idx_getIndex($index.'_w', '')) != count(idx_getIndex($index.'_i', ''))) { + $index_corrupted = true; + break; + } + } + + if ($index_corrupted) + msg('Your search index is corrupted. It might produce wrong results + unless you fix it. See + <a href="http://www.dokuwiki.org/faq:searchindex">faq:searchindex</a> + for ways to rebuild your search index.', -1); + elseif (!empty($lengths)) + msg('Your search index seems to be okay.', 1); + else + msg('Your search index is empty. See + <a href="http://www.dokuwiki.org/faq:searchindex">faq:searchindex</a> + for help on how to fix your search index unless you are using an + external indexer or your wiki is actually empty.'); + } /** |