Changeset 19806


Ignore:
Timestamp:
2009-06-11T14:35:45+12:00 (15 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).

File:
1 edited

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
Note: See TracChangeset for help on using the changeset viewer.