Changeset 19806

Show
Ignore:
Timestamp:
11.06.2009 14:35:45 (10 years ago)
Author:
davidb
Message:

Dr Bainbridge's fix to getting collectgroup to work again, which follows on Katherine's fix to get collectgroup working on Windows again. It now adds in only built collections by checking for the build.cfg in the index folder of a collection, and if that does not exist, by looking for a collect.cfg file in the etc folder to see if its collectiongroup field is set to true. This additional change continues to ensure that the mgsearch object is not created when there is actually no collection built with mg (which used to previously cause a server crash on Windows).

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • gsdl/trunk/runtime-src/src/colservr/collectset.cpp

    r19788 r19806  
    237237  text_t infodbtype = "gdbm"; // gdbm is default 
    238238 
     239  collectserver *cserver = NULL; 
     240 
    239241  text_tarray cfgline; 
    240242  text_t key; 
    241243 
    242244  text_t build_cfg = filename_cat(collecthome, collection, "index", "build.cfg"); 
    243   if (!file_exists (build_cfg)) { 
    244     // don't add in unbuilt collections 
    245     return; 
    246   } 
    247   char *build_cfgc = build_cfg.getcstr(); 
    248   ifstream confin(build_cfgc); 
    249  
    250   if (confin) { 
    251     while (read_cfg_line(confin, cfgline) >= 0) { 
    252       if (cfgline.size() == 2) { 
    253     key = cfgline[0]; 
    254     cfgline.erase(cfgline.begin()); 
    255     if (key == "buildtype") { 
    256       buildtype = cfgline[0]; 
     245  if (file_exists (build_cfg)) { 
     246    char *build_cfgc = build_cfg.getcstr(); 
     247    ifstream confin(build_cfgc); 
     248     
     249    if (confin) { 
     250      while (read_cfg_line(confin, cfgline) >= 0) { 
     251    if (cfgline.size() == 2) { 
     252      key = cfgline[0]; 
     253      cfgline.erase(cfgline.begin()); 
     254      if (key == "buildtype") { 
     255        buildtype = cfgline[0]; 
     256      } 
     257      if (key == "infodbtype") { 
     258        infodbtype = cfgline[0]; 
     259      } 
    257260    } 
    258     if (key == "infodbtype") { 
    259       infodbtype = cfgline[0]; 
    260     } 
    261       } 
    262     } 
    263     confin.close(); 
    264   } 
    265   delete []build_cfgc; 
    266  
    267   collectserver *cserver = new collectserver(); 
    268  
    269   // Create a dbclass of the correct type 
    270   dbclass *db_ptr = NULL; 
     261      } 
     262      confin.close(); 
     263    } 
     264    delete []build_cfgc; 
     265 
     266    cserver = new collectserver(); 
     267 
     268    // Create a dbclass of the correct type 
     269    dbclass *db_ptr = NULL; 
    271270 
    272271#ifdef USE_SQLITE 
    273   if (infodbtype == "sqlite") 
    274   { 
    275     sqlitedbclass *sql_db_ptr = new sqlitedbclass(); 
    276     db_ptr = sql_db_ptr; 
    277  
    278     // add a sql browse filter 
    279     sqlbrowsefilterclass *sqlbrowsefilter = new sqlbrowsefilterclass(); 
    280     sqlbrowsefilter->set_sql_db_ptr(sql_db_ptr); 
    281     cserver->add_filter (sqlbrowsefilter);   
    282   } 
     272    if (infodbtype == "sqlite") 
     273      { 
     274    sqlitedbclass *sql_db_ptr = new sqlitedbclass(); 
     275    db_ptr = sql_db_ptr; 
     276 
     277    // add a sql browse filter 
     278    sqlbrowsefilterclass *sqlbrowsefilter = new sqlbrowsefilterclass(); 
     279    sqlbrowsefilter->set_sql_db_ptr(sql_db_ptr); 
     280    cserver->add_filter (sqlbrowsefilter);   
     281      } 
    283282#endif 
    284283   
    285284#ifdef USE_MSSQL 
    286   if (infodbtype == "mssql") 
    287   { 
    288     mssqldbclass *mssql_db_ptr = new mssqldbclass(); 
    289     db_ptr = mssql_db_ptr; 
    290  
    291     // add a sql browse filter 
    292     sqlbrowsefilterclass *sqlbrowsefilter = new sqlbrowsefilterclass(); 
    293     sqlbrowsefilter->set_sql_db_ptr(mssql_db_ptr); 
    294     cserver->add_filter (sqlbrowsefilter);   
    295   } 
     285    if (infodbtype == "mssql") 
     286      { 
     287    mssqldbclass *mssql_db_ptr = new mssqldbclass(); 
     288    db_ptr = mssql_db_ptr; 
     289 
     290    // add a sql browse filter 
     291    sqlbrowsefilterclass *sqlbrowsefilter = new sqlbrowsefilterclass(); 
     292    sqlbrowsefilter->set_sql_db_ptr(mssql_db_ptr); 
     293    cserver->add_filter (sqlbrowsefilter);   
     294      } 
    296295#endif 
    297296   
    298   // Use GDBM if the infodb type is empty or not one of the values above 
    299   if (db_ptr == NULL) 
    300   { 
    301     db_ptr = new gdbmclass(); 
    302   } 
    303  
    304   // add a null filter 
    305   filterclass *filter = new filterclass (); 
    306   cserver->add_filter (filter); 
     297    // Use GDBM if the infodb type is empty or not one of the values above 
     298    if (db_ptr == NULL) { 
     299      db_ptr = new gdbmclass(); 
     300    } 
     301 
     302    // add a null filter 
     303    filterclass *filter = new filterclass (); 
     304    cserver->add_filter (filter); 
     305   
     306    // add a browse filter 
     307    browsefilterclass *browsefilter = new browsefilterclass(); 
     308    browsefilter->set_db_ptr(db_ptr); 
     309    cserver->add_filter (browsefilter);   
     310 
     311    if (buildtype == "mg") { 
     312      mgsearch = new mgsearchclass(); 
     313  
     314      // add a query filter 
     315      mgqueryfilterclass *queryfilter = new mgqueryfilterclass(); 
     316      queryfilter->set_db_ptr(db_ptr); 
     317      queryfilter->set_textsearchptr (mgsearch); 
     318      cserver->add_filter (queryfilter); 
     319     
     320      // add a mg source 
     321      mgsourceclass *mgsource = new mgsourceclass (); 
     322      mgsource->set_db_ptr(db_ptr); 
     323      mgsource->set_textsearchptr (mgsearch); 
     324      cserver->add_source (mgsource); 
     325    } 
     326    else if (buildtype == "mgpp") { 
     327      mgppsearch = new mgppsearchclass(); 
     328 
     329      // add a query filter 
     330      mgppqueryfilterclass *queryfilter = new mgppqueryfilterclass(); 
     331      queryfilter->set_db_ptr(db_ptr); 
     332      queryfilter->set_textsearchptr (mgppsearch); 
     333      cserver->add_filter (queryfilter); 
    307334       
    308   // add a browse filter 
    309   browsefilterclass *browsefilter = new browsefilterclass(); 
    310   browsefilter->set_db_ptr(db_ptr); 
    311   cserver->add_filter (browsefilter);   
    312   
    313   if (buildtype == "mg") { 
    314     mgsearch = new mgsearchclass(); 
    315   
    316     // add a query filter 
    317     mgqueryfilterclass *queryfilter = new mgqueryfilterclass(); 
    318     queryfilter->set_db_ptr(db_ptr); 
    319     queryfilter->set_textsearchptr (mgsearch); 
    320     cserver->add_filter (queryfilter); 
    321      
    322     // add a mg source 
    323     mgsourceclass *mgsource = new mgsourceclass (); 
    324     mgsource->set_db_ptr(db_ptr); 
    325     mgsource->set_textsearchptr (mgsearch); 
    326     cserver->add_source (mgsource); 
    327   } 
    328   else if (buildtype == "mgpp") { 
    329     mgppsearch = new mgppsearchclass(); 
    330  
    331     // add a query filter 
    332     mgppqueryfilterclass *queryfilter = new mgppqueryfilterclass(); 
    333     queryfilter->set_db_ptr(db_ptr); 
    334     queryfilter->set_textsearchptr (mgppsearch); 
    335     cserver->add_filter (queryfilter); 
     335      // add a mg source 
     336      mgsourceclass *mgsource = new mgsourceclass (); 
     337      mgsource->set_db_ptr(db_ptr); 
     338      mgsource->set_textsearchptr (mgppsearch); 
     339      cserver->add_source (mgsource); 
     340    } 
     341    else if (buildtype == "lucene") { 
     342      lucenesearch = new lucenesearchclass(); 
     343      lucenesearch->set_gsdlhome(gsdlhome);  
     344 
     345      // add a query filter 
     346      lucenequeryfilterclass *queryfilter = new lucenequeryfilterclass(); 
     347      queryfilter->set_db_ptr(db_ptr); 
     348      queryfilter->set_textsearchptr (lucenesearch); 
     349      cserver->add_filter (queryfilter); 
    336350       
    337     // add a mg source 
    338     mgsourceclass *mgsource = new mgsourceclass (); 
    339     mgsource->set_db_ptr(db_ptr); 
    340     mgsource->set_textsearchptr (mgppsearch); 
    341     cserver->add_source (mgsource); 
    342   } 
    343   else if (buildtype == "lucene") { 
    344     lucenesearch = new lucenesearchclass(); 
    345     lucenesearch->set_gsdlhome(gsdlhome);  
    346  
    347     // add a query filter 
    348     lucenequeryfilterclass *queryfilter = new lucenequeryfilterclass(); 
    349     queryfilter->set_db_ptr(db_ptr); 
    350     queryfilter->set_textsearchptr (lucenesearch); 
    351     cserver->add_filter (queryfilter); 
     351      // add a lucene source 
     352      lucenesourceclass *lucenesource = new lucenesourceclass (); 
     353      lucenesource->set_db_ptr(db_ptr); 
     354      lucenesource->set_textsearchptr (lucenesearch); 
     355      cserver->add_source (lucenesource); 
     356    } 
     357    else { 
     358      cerr << "Warning: unrecognized buildtype" << buildtype << endl; 
     359    } 
     360 
     361  } 
     362  else { 
     363    // see if it is a collectgroup col 
     364 
     365 
     366    // This routine essentially exists twice in the code now (see add_collection_group) 
     367    // factor out as support routine 
     368 
     369    text_t collect_cfg = filename_cat(collecthome, collection, "etc", "collect.cfg"); 
     370    if (file_exists (collect_cfg)) { 
     371      char *collect_cfgc = collect_cfg.getcstr(); 
     372      ifstream confin(collect_cfgc);      
     373 
     374      text_t is_collect_group = "false"; 
     375 
     376      if (confin) { 
     377    while (read_cfg_line(confin, cfgline) >= 0) { 
     378      if (cfgline.size() == 2) { 
     379        key = cfgline[0]; 
     380         
     381        cfgline.erase(cfgline.begin()); 
     382        if (key == "collectgroup") { 
     383          is_collect_group = cfgline[0]; 
     384        } 
     385      } 
     386    } 
     387    confin.close(); 
     388      } 
     389      delete []collect_cfgc; 
    352390       
    353     // add a lucene source 
    354     lucenesourceclass *lucenesource = new lucenesourceclass (); 
    355     lucenesource->set_db_ptr(db_ptr); 
    356     lucenesource->set_textsearchptr (lucenesearch); 
    357     cserver->add_source (lucenesource); 
     391      if (is_collect_group != "true") { 
     392    // an unbuilt leaf collection 
     393    return; 
     394      } 
     395 
     396      // by this point we know we will need a cserver 
     397      cserver = new collectserver(); 
     398 
     399    } 
     400    else { 
     401      // no collect.cfg => filter it out from list of collections added 
     402      return; 
     403    } 
    358404  } 
    359405