searchengine/cpix/cpix/src/multiIdxDb.cpp
changeset 23 d4d56f5e7c55
parent 0 671dee74050a
equal deleted inserted replaced
20:556534771396 23:d4d56f5e7c55
   308                 OriginatorMap::iterator
   308                 OriginatorMap::iterator
   309                     i = originators_.begin(),
   309                     i = originators_.begin(),
   310                     end = originators_.end();
   310                     end = originators_.end();
   311                 for (; i != end; ++i)
   311                 for (; i != end; ++i)
   312                     {
   312                     {
       
   313                     bool readerValid = true;
   313                         IReaderOwner
   314                         IReaderOwner
   314                             & ro(i->second.readerOwner());
   315                             & ro(i->second.readerOwner());
   315 
   316 
   316                         Version
   317                         Version
   317                             version;
   318                             version;
   318 
   319 
   319                         // idx is locked now (lock information is in
   320                         // idx is locked now (lock information is in
   320                         // msr)
   321                         // msr)
   321 
   322                         lucene::index::IndexReader* idxReader = NULL;
   322                         readers.push_back(ro.getReader(&msr,
   323                         try
   323                                                        &version));
   324                         {                                        
   324 
   325                         idxReader = ro.getReader(&msr, &version);
       
   326                         readerValid = idxReader->indexExists();
       
   327                         }
       
   328                         catch(...)
       
   329                             {
       
   330                             readerValid = false;
       
   331                             }                     
       
   332 
       
   333                         if(true == readerValid)
       
   334                         {
       
   335                         readers.push_back(idxReader);
   325                         if (version != i->second.version())
   336                         if (version != i->second.version())
   326                             {
   337                             {
   327                                 i->second.setVersion(version);
   338                             i->second.setVersion(version);
   328                                 hasAnyOriginatorChanged = true;
   339                             hasAnyOriginatorChanged = true;
   329                             }
   340                             }
       
   341                         }
   330                     }
   342                     }
   331 
   343 
   332                 if (hasAnyOriginatorChanged)
   344                 if (hasAnyOriginatorChanged)
   333                     {
   345                     {
   334                         version_ = IdxDbMgr::instance()->getNextVersion();
   346                         version_ = IdxDbMgr::instance()->getNextVersion();
   609     lucene::search::Hits *
   621     lucene::search::Hits *
   610     MultiIdxDb::doSearch(lucene::search::Query * query,
   622     MultiIdxDb::doSearch(lucene::search::Query * query,
   611                          Version               * version,
   623                          Version               * version,
   612                          Cpt::MultiSyncRegion  * msr)
   624                          Cpt::MultiSyncRegion  * msr)
   613     {
   625     {
       
   626        
   614         cleanup();
   627         cleanup();
   615 
   628 
   616         // TODO
   629         // TODO
   617         //
   630         //
   618         // This current implementation builds up a multisearcher from
   631         // This current implementation builds up a multisearcher from
   630             i = originators_.begin(),
   643             i = originators_.begin(),
   631             end = originators_.end();
   644             end = originators_.end();
   632 
   645 
   633         for (; i != end; ++i)
   646         for (; i != end; ++i)
   634             {
   647             {
       
   648 // Connection in MassStorage mode and formating MMC may invalidate the Reader.
       
   649 // Added Check for validation of the reader.			
       
   650             bool readerValid = true;
   635                 IReaderOwner
   651                 IReaderOwner
   636                     & ro(i->second.readerOwner());
   652                     & ro(i->second.readerOwner());
   637 
   653 
   638                 Version
   654                 Version
   639                     idxDbVersion;
   655                     idxDbVersion;
   640 
   656                 lucene::index::IndexReader* idxReader = NULL;
       
   657                 try
       
   658                 {                                
       
   659                     idxReader = ro.getReader(msr,&idxDbVersion);
       
   660                     readerValid = idxReader->indexExists();
   641                 // idx is locked now (lock information is in msr)
   661                 // idx is locked now (lock information is in msr)
   642                 searchers_.push_back(new IndexSearcher(ro.getReader(msr,
   662                 }
   643                                                                     &idxDbVersion)));
   663                 catch(...)
   644 
   664                 {
   645                 if (idxDbVersion != i->second.version())
   665                     readerValid = false;                  
       
   666                 }
       
   667                 
       
   668                 if(readerValid == true)
   646                     {
   669                     {
   647                         i->second.setVersion(idxDbVersion);
   670                         searchers_.push_back(new IndexSearcher(idxReader));
   648                         hasAnyOriginatorChanged = true;
   671                        
   649                     }
   672                         if (idxDbVersion != i->second.version())
       
   673                         {
       
   674                             i->second.setVersion(idxDbVersion);
       
   675                             hasAnyOriginatorChanged = true;
       
   676                         }                      
       
   677                    
       
   678                     }               
   650             }
   679             }
   651 
   680 
   652         if (hasAnyOriginatorChanged)
   681         if (hasAnyOriginatorChanged)
   653             {
   682             {
   654                 version_ = IdxDbMgr::instance()->getNextVersion();
   683                 version_ = IdxDbMgr::instance()->getNextVersion();