[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: kdesupport/strigi/src/luceneindexer
From: Jos van den Oever <jos () vandenoever ! info>
Date: 2008-04-06 20:31:13
Message-ID: 1207513873.627343.14883.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 794186 by vandenoever:
Use a more precise way of checking whether an index has changed and whether the \
indexreader should be reopened.
M +5 -11 cluceneindexmanager.cpp
M +2 -3 cluceneindexmanager.h
M +18 -10 cluceneindexreader.cpp
M +1 -1 cluceneindexreader.h
--- trunk/kdesupport/strigi/src/luceneindexer/cluceneindexmanager.cpp #794185:794186
@@ -61,7 +61,7 @@
} else {
ramdirectory = 0;
}
- mtime = 0;
+ gettimeofday(&mtime, 0);
//remove any old segments lying around from crashes, etc
//writer->cleanUp();
@@ -146,7 +146,6 @@
return;
}
// update the timestamp on the index, so that the readers will reopen
- setIndexMTime();
try {
indexwriter->close();
delete indexwriter;
@@ -157,11 +156,8 @@
// clear the cache
//bitsets.clear();
derefWriter();
+ setIndexMTime();
}
-int
-CLuceneIndexManager::docCount() {
- return luceneReader()->reader->numDocs();
-}
int64_t
CLuceneIndexManager::indexSize() {
// sum the sizes of the files in the index
@@ -195,9 +191,9 @@
setIndexMTime();
openWriter(true);
}
-time_t
+struct timeval
CLuceneIndexManager::indexMTime() {
- time_t t;
+ struct timeval t;
lock.lock();
t = mtime;
lock.unlock();
@@ -205,10 +201,8 @@
}
void
CLuceneIndexManager::setIndexMTime() {
- struct timeval t;
- gettimeofday(&t, 0);
lock.lock();
- mtime = t.tv_sec;
+ gettimeofday(&mtime, 0);
lock.unlock();
}
--- trunk/kdesupport/strigi/src/luceneindexer/cluceneindexmanager.h #794185:794186
@@ -53,7 +53,7 @@
CLuceneIndexWriter* writer;
lucene::index::IndexWriter* indexwriter;
lucene::analysis::Analyzer* analyzer;
- time_t mtime;
+ struct timeval mtime;
static int numberOfManagers;
void openWriter(bool truncate=false);
@@ -68,11 +68,10 @@
Strigi::IndexReader* indexReader();
Strigi::IndexWriter* indexWriter();
CLuceneIndexReader* luceneReader();
- int32_t docCount();
int64_t indexSize();
void deleteIndex();
void closeWriter();
- time_t indexMTime();
+ struct timeval indexMTime();
void setIndexMTime();
};
--- trunk/kdesupport/strigi/src/luceneindexer/cluceneindexreader.cpp #794185:794186
@@ -124,8 +124,10 @@
}
CLuceneIndexReader::CLuceneIndexReader(CLuceneIndexManager* m,
- const string& dir) :manager(m), p(new Private(*this)), dbdir(dir), otime(0),
+ const string& dir) :manager(m), p(new Private(*this)), dbdir(dir),
reader(0) {
+ otime.tv_sec = 0;
+ otime.tv_usec = 0;
openReader();
}
@@ -144,8 +146,8 @@
} else {
reader = lucene::index::IndexReader::open(dbdir.c_str());
}
- //fprintf(stderr,
- //"reader at %s: %i\n", dbdir.c_str(), reader->numDocs());
+ // fprintf(stderr,
+ // "READER at %s: %i\n", dbdir.c_str(), reader->numDocs());
} catch (CLuceneError& err) {
fprintf(stderr, "could not create reader %s: %s\n", dbdir.c_str(),
err.what());
@@ -165,12 +167,18 @@
}
bool
CLuceneIndexReader::checkReader(bool enforceCurrent) {
- if (manager->indexMTime() > otime) {
- struct timeval t;
- gettimeofday(&t, 0);
- if (enforceCurrent || t.tv_sec-otime > 60) {
- otime = t.tv_sec;
+ struct timeval mtime = manager->indexMTime();
+ if (mtime.tv_sec != otime.tv_sec || mtime.tv_usec != otime.tv_usec) {
+ if (enforceCurrent) {
+ otime = mtime;
closeReader();
+ } else {
+ struct timeval now;
+ gettimeofday(&now, 0);
+ if (now.tv_sec - otime.tv_sec > 60) {
+ otime = mtime;
+ closeReader();
+ }
}
}
if (reader == 0) {
@@ -520,9 +528,9 @@
}
int32_t
CLuceneIndexReader::countDocuments() {
- if (!checkReader()) return -1;
+ if (!checkReader(true)) return -1;
if (doccount == -1) {
- doccount = manager->docCount();
+ doccount = reader->numDocs();
}
return doccount;
}
--- trunk/kdesupport/strigi/src/luceneindexer/cluceneindexreader.h #794185:794186
@@ -38,7 +38,7 @@
int32_t wordcount;
int32_t doccount;
const std::string dbdir;
- time_t otime;
+ struct timeval otime;
CLuceneIndexReader(CLuceneIndexManager* m, const std::string& dbdir);
~CLuceneIndexReader();
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic