[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