Bdb packages | Design docs | Source docs | Guidelines | Recent releases

Search | Site Map .

Main Page   Modules   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

/BdbClusteringServer/BdbClustHintConsole.cc

Go to the documentation of this file.
00001 //------------------------------------------------------------------------------
00002 // File and Version Information:
00003 //      $Id: BdbClustHintConsole.cc,v 1.12 2002/08/30 01:13:31 ryd Exp $
00004 //
00005 // Description:
00006 //      "Console" to the clustering server.
00007 //  
00008 // Environment:
00009 //      Software developed for the BaBar Detector at the SLAC B-Factory.
00010 //
00011 // Author List:
00012 //      Jacek Becla
00013 //
00014 // Copyright Information:
00015 //      Copyright (C) 2000      Stanford Linear Accelerator Center
00016 //
00017 //------------------------------------------------------------------------------
00018 #include "BaBar/BaBar.hh"
00019 
00020 // Workaround for CXX6.3
00021 #include <string.h>
00022 
00023 #include "BdbUtil/Bdb.hh"
00024 #include "BdbUtil/BdbTestPersObj_16K.hh"
00025 #include "BdbApplication/BdbApplication.hh"
00026 #include "BdbApplication/BdbDebug.hh"
00027 #include "BdbApplication/BdbDomain.hh"
00028 #include "BdbClusteringServer/BdbClusteringServerC.h"
00029 #include "BdbClusteringServer/BdbClSrvCRef.hh"
00030 #include "BdbEventStore/BdbEventStore.hh"
00031 
00032 #include <set>
00033 using std::set;
00034 
00035 class Console
00036 {
00037     BdbClustSrvModule::ClientDescr              _client;
00038     BdbClustSrvModule::BdbClusteringServer_var  _theRef;
00039     d_Boolean                                   _orbIsInit;
00040 
00041 public:
00042 
00043     Console();
00044     BdbStatus initORB(int argc, char** argv);
00045     void waitUntilItIsReady(CORBA::Boolean wait4Precr);
00046     BdbStatus ping();
00047     BdbStatus shutdown(CORBA::Boolean try2ReleaseConts,
00048                        CORBA::Boolean force);
00049     BdbStatus recoverNow();
00050     BdbStatus resynchronize();
00051     void automaticPrecr(CORBA::Boolean enable);
00052     BdbStatus dumpAllGroups(CORBA::Boolean allGroups);
00053     BdbStatus listGroups(CORBA::Boolean all, CORBA::Boolean withDbs);
00054     BdbStatus listDbs(CORBA::Boolean all);
00055     BdbStatus printConts(CORBA::Boolean allGroups, 
00056                          CORBA::Short whichConts);
00057     BdbStatus initGroup(const BdbClustSrvModule::GroupDescr& descr,
00058                         CORBA::Short no2Precr);
00059     BdbStatus shutdownGroup(const BdbClustSrvModule::GroupDescr& descr,
00060                             CORBA::Boolean try2Recover);
00061     BdbStatus deleteGroup(const BdbClustSrvModule::GroupDescr& descr);
00062     BdbStatus precreateDbs(const BdbClustSrvModule::GroupDescr& descr,
00063                            int nr2Precreate);
00064     BdbStatus closeActiveDbs(const BdbClustSrvModule::GroupDescr& descr, 
00065                              CORBA::Boolean force, 
00066                              CORBA::ULong onlyThisDbId);
00067     BdbStatus closeAllActiveDbs();
00068     BdbStatus getOneContainer(const BdbClustSrvModule::GroupDescr& descr,
00069                               BdbClustSrvModule::OID& oid);
00070     BdbStatus returnContainers(set<BdbClSrvCRef*,babar::Collection::PtrLess>& s, int setNPage);
00071     BdbStatus returnAllContainers(const char* hostName=0, int pid=0);
00072     BdbStatus loadSrv(const BdbClustSrvModule::GroupDescr& descr, 
00073                       CORBA::Boolean randomize);
00074     BdbStatus storeObjects(int nrObjects, BdbClustSrvModule::OID oid, int& nPage);
00075     BdbStatus storeObjects(int nrObjects, BdbClustSrvModule::OID oid);
00076     void test1(int nr);
00077     void test2(int nr);
00078 };
00079 
00080 
00081 
00082 Console::Console()
00083 {
00084     char hN[64];
00085     memset(hN, 0, 64);
00086     gethostname(hN, 64); // this does not contain domain name
00087     struct hostent* hent1 = gethostbyname(hN);
00088     if ( 0 != hent1 ) {
00089         strcpy(hN, "console: ");
00090         strcat(hN, hent1->h_name);
00091     }
00092 
00093     _client.hostName = CORBA::string_dup(hN);
00094     _client.pid      = getpid();
00095     _orbIsInit       = d_False;
00096 }
00097 
00098 
00099 
00100 
00101 BdbStatus 
00102 Console::initORB(int argc, char** argv)
00103 {
00104     CORBA::Environment theEnv;
00105     CORBA::ORB_ptr     theOrb;
00106 
00107     theOrb = CORBA::ORB_init(argc, argv, "hello", theEnv);
00108     if( theEnv.exception() != 0 ) {
00109         cerr << "CLIENT: theEnv = " << theEnv.exception() << endl;
00110         return BdbcError;
00111     }
00112 
00113     char theStr[1024];
00114     ifstream theIORFile(argv[1]);
00115     theIORFile >> theStr;
00116     theIORFile.close();
00117 
00118     CORBA::Object_var theObject;
00119     theObject = theOrb->string_to_object(theStr);
00120     if( CORBA::is_nil(theObject) ) {
00121         cerr << "CLIENT: Failed to translate specified IOR into object reference." << endl;
00122         return BdbcError;
00123     }
00124 
00125     // Narrow obtained object reference into an object reference
00126     // of a specific class.
00127     _theRef = BdbClustSrvModule::BdbClusteringServer::_narrow(theObject);
00128     if( CORBA::is_nil(_theRef.in()) ) {
00129         cerr << "CLIENT: Failed to narrow the object reference into BdbClusteringServer." << endl;
00130         return BdbcError;
00131     }
00132 
00133     _orbIsInit = d_True;
00134     return BdbcSuccess;
00135 }
00136 
00137 
00138 void 
00139 Console::waitUntilItIsReady(CORBA::Boolean checkPrecr)
00140 {
00141     while ( ! _theRef->isReady(checkPrecr, _client) ) {
00142         sleep(5);
00143         COUT1 << "not ready" << endl;
00144     }
00145 }
00146 
00147 
00148 BdbStatus
00149 Console::ping()
00150 {
00151     BdbApplicationOrDomain* app = BdbApplicationOrDomain::activeInstance();
00152     d_Boolean inTrans = ( BdbcNoOpen != app->mode() );
00153     if ( ! inTrans ) {
00154         if ( BdbcSuccess != app->startRead("getfdid") ) {
00155             return BdbcError;
00156         }
00157     }
00158     int my_fdid = app->fd().number();
00159     if ( ! inTrans ) {
00160         app->commit("getfdid");
00161     }
00162     int server_fdid = 0;
00163     
00164     if ( ! _theRef->ping(server_fdid, _client)) {
00165         cerr << "Server not responding" << endl;
00166         return BdbcError;
00167     }
00168     if ( server_fdid == my_fdid ) {
00169         cout << "Server is running" << endl;
00170     } else {
00171         cout << "Server is running. \n"
00172              << "Warning: OO_FD_BOOT does not correspond to fd "
00173              << "served by the server: OO_FD_BOOT's fdid = " << my_fdid 
00174              << ", server's fdid = " << server_fdid << endl;
00175         return BdbcError;
00176     }
00177     
00178     return BdbcSuccess;
00179 }
00180 
00181 
00182 
00183 BdbStatus 
00184 Console::shutdown(CORBA::Boolean try2ReleaseConts,
00185                   CORBA::Boolean force)
00186 {
00187     BdbClustSrvModule::RetStatus* ret;
00188     ret  = _theRef->shutdown(try2ReleaseConts, force, _client);
00189     if ( 0 == ret ) {
00190         cerr << "Returned RetStatus object = 0" << endl;
00191         return BdbcError;
00192     }
00193     if ( ret->level != BdbClustSrvModule::Success ) {
00194         if ( ret->level == BdbClustSrvModule::Warning ) {
00195             cout << "Warning: " << ret->msg << endl;
00196         } else {
00197             cout << "Error: " << ret->msg << endl;
00198             return BdbcError;
00199         }
00200     }
00201     delete ret;
00202 
00203     return BdbcSuccess;   
00204 }
00205 
00206 
00207 BdbStatus 
00208 Console::recoverNow()
00209 {
00210     BdbClustSrvModule::RetStatus* ret;
00211     ret  = _theRef->recoverNow(_client);
00212     if ( 0 == ret ) {
00213         cerr << "Returned RetStatus object = 0" << endl;
00214         return BdbcError;
00215     }
00216     if ( ret->level != BdbClustSrvModule::Success ) {
00217         if ( ret->level == BdbClustSrvModule::Warning ) {
00218             cout << "Warning: " << ret->msg << endl;
00219         } else {
00220             cout << "Error: " << ret->msg << endl;
00221             return BdbcError;
00222         }
00223     }
00224     delete ret;
00225 
00226     return BdbcSuccess;   
00227 }
00228 
00229 
00230 
00231 BdbStatus 
00232 Console::resynchronize()
00233 {
00234     BdbClustSrvModule::RetStatus* ret;
00235     ret  = _theRef->resynchronize(_client);
00236     if ( 0 == ret ) {
00237         cerr << "Returned RetStatus object = 0" << endl;
00238         return BdbcError;
00239     }
00240     if ( ret->level != BdbClustSrvModule::Success ) {
00241         if ( ret->level == BdbClustSrvModule::Warning ) {
00242             cout << "Warning: " << ret->msg << endl;
00243         } else {
00244             cout << "Error: " << ret->msg << endl;
00245             return BdbcError;
00246         }
00247     }
00248     delete ret;
00249 
00250     return BdbcSuccess;   
00251 }
00252 
00253 
00254 void
00255 Console::automaticPrecr(CORBA::Boolean enable)
00256 {
00257     if ( enable ) {
00258         _theRef->enableAutomaticPrecr(_client);
00259     } else {
00260         _theRef->disableAutomaticPrecr(_client);
00261     }    
00262 }
00263 
00264 
00265 BdbStatus
00266 Console::dumpAllGroups(CORBA::Boolean allGroups)
00267 {
00268     if ( ! _orbIsInit ) {
00269         return BdbcError;
00270     }
00271     
00272     char* output = 0;
00273     _theRef->print("send", allGroups, _client, output);
00274     if ( 0 != output ) {
00275         cout << output << endl;
00276         delete [] output;
00277     }
00278     return BdbcSuccess;
00279 }
00280 
00281 
00282 BdbStatus
00283 Console::listGroups(CORBA::Boolean all, 
00284                     CORBA::Boolean withDbs)
00285 {
00286     if ( ! _orbIsInit ) {
00287         return BdbcError;
00288     }
00289     
00290     char* output = 0;
00291     BdbClustSrvModule::RetStatus* ret;
00292     ret  = _theRef->listGroups("send", all, withDbs, _client, output);
00293     if ( 0 == ret ) {
00294         cerr << "Returned RetStatus object = 0" << endl;
00295         return BdbcError;
00296     }
00297     if ( ret->level != BdbClustSrvModule::Success ) {
00298         if ( ret->level == BdbClustSrvModule::Warning ) {
00299             cout << "Warning: " << ret->msg << endl;
00300         } else {
00301             cout << "Error: " << ret->msg << endl;
00302             return BdbcError;
00303         }
00304     }
00305     delete ret;
00306 
00307     if ( 0 != output ) {
00308         cout << output << endl;
00309         delete [] output;
00310     }
00311     return BdbcSuccess;
00312 }
00313 
00314 
00315 
00316 BdbStatus
00317 Console::listDbs(CORBA::Boolean all)
00318 {
00319     if ( ! _orbIsInit ) {
00320         return BdbcError;
00321     }
00322     
00323     char* output = 0;
00324     BdbClustSrvModule::RetStatus* ret;
00325     ret = _theRef->listDbs("send", all, _client, output);
00326     if ( 0 == ret ) {
00327         cerr << "Returned RetStatus object = 0" << endl;
00328         return BdbcError;
00329     }
00330     if ( ret->level != BdbClustSrvModule::Success ) {
00331         if ( ret->level == BdbClustSrvModule::Warning ) {
00332             cout << "Warning: " << ret->msg << endl;
00333         } else {
00334             cout << "Error: " << ret->msg << endl;
00335             return BdbcError;
00336         }
00337     }
00338     delete ret;
00339     if ( 0 != output ) {
00340         cout << output << endl;
00341         delete [] output;
00342     }
00343     return BdbcSuccess;
00344 }
00345 
00346 
00347 void
00348 Console::test1(int nr)
00349 {
00350     if ( _orbIsInit ) {
00351         for ( int i=0 ; i<nr ; i++ ) {
00352             _theRef->test1(123);
00353         }
00354     }
00355 }
00356 
00357 
00358 void
00359 Console::test2(int nr)
00360 {
00361     if ( _orbIsInit ) {
00362         for ( int i=0 ; i<nr ; i++ ) {
00363             _theRef->test2(_client);
00364         }
00365     }
00366 }
00367 
00368 
00369 
00370 
00371 
00372 
00373 BdbStatus 
00374 Console::printConts(CORBA::Boolean allGroups, 
00375                     CORBA::Short whichConts)
00376 {
00377     if ( ! _orbIsInit ) {
00378         return BdbcError;
00379     }
00380     
00381     char* output = 0;
00382     BdbClustSrvModule::RetStatus* ret;
00383     ret = _theRef->printConts("send", allGroups, whichConts, _client, output);
00384     if ( 0 == ret ) {
00385         cerr << "Returned RetStatus object = 0" << endl;
00386         return BdbcError;
00387     }
00388     if ( ret->level != BdbClustSrvModule::Success ) {
00389         if ( ret->level == BdbClustSrvModule::Warning ) {
00390             cout << "Warning: " << ret->msg << endl;
00391         } else {
00392             cout << "Error: " << ret->msg << endl;
00393             return BdbcError;
00394         }
00395     }
00396     delete ret;
00397     if ( 0 != output ) {
00398         cout << output << endl;
00399         delete [] output;
00400     }
00401     return BdbcSuccess;
00402 }
00403 
00404 
00405 
00406 BdbStatus
00407 Console::initGroup(const BdbClustSrvModule::GroupDescr& descr,
00408                    CORBA::Short no2Precr)
00409 {
00410     if ( ! _orbIsInit ) {
00411         return BdbcError;
00412     }
00413 
00414     BdbClustSrvModule::RetStatus* ret;
00415     ret  = _theRef->initializeGroup(descr, no2Precr, _client);
00416     if ( 0 == ret ) {
00417         cerr << "Returned RetStatus object = 0" << endl;
00418         return BdbcError;
00419     }
00420     if ( ret->level != BdbClustSrvModule::Success ) {
00421         if ( ret->level == BdbClustSrvModule::Warning ) {
00422             cout << "Warning: " << ret->msg << endl;
00423         } else {
00424             cout << "Error: " << ret->msg << endl;
00425             return BdbcError;
00426         }
00427     }
00428     delete ret;
00429 
00430     return BdbcSuccess;
00431 }
00432 
00433 
00434 
00435 BdbStatus
00436 Console::shutdownGroup(const BdbClustSrvModule::GroupDescr& descr,
00437                        CORBA::Boolean try2Recover)
00438 {
00439     if ( ! _orbIsInit ) {
00440         return BdbcError;
00441     }
00442 
00443     BdbClustSrvModule::RetStatus* ret;
00444     ret  = _theRef->shutdownGroup(descr, try2Recover, _client);
00445     if ( 0 == ret ) {
00446         cerr << "Returned RetStatus object = 0" << endl;
00447         return BdbcError;
00448     }
00449     if ( ret->level != BdbClustSrvModule::Success ) {
00450         if ( ret->level == BdbClustSrvModule::Warning ) {
00451             cout << "Warning: " << ret->msg << endl;
00452         } else {
00453             cout << "Error: " << ret->msg << endl;
00454             return BdbcError;
00455         }
00456     }
00457     delete ret;
00458 
00459     return BdbcSuccess;
00460 }
00461 
00462 
00463 
00464 BdbStatus
00465 Console::deleteGroup(const BdbClustSrvModule::GroupDescr& descr)
00466 {
00467     if ( ! _orbIsInit ) {
00468         return BdbcError;
00469     }
00470 
00471     BdbClustSrvModule::RetStatus* ret;
00472     ret  = _theRef->deleteGroup(descr, _client);
00473     if ( 0 == ret ) {
00474         cerr << "Returned RetStatus object = 0" << endl;
00475         return BdbcError;
00476     }
00477     if ( ret->level != BdbClustSrvModule::Success ) {
00478         if ( ret->level == BdbClustSrvModule::Warning ) {
00479             cout << "Warning: " << ret->msg << endl;
00480         } else {
00481             cout << "Error: " << ret->msg << endl;
00482             return BdbcError;
00483         }
00484     }
00485     delete ret;
00486 
00487     return BdbcSuccess;
00488 }
00489 
00490 
00491 
00492 
00493 BdbStatus 
00494 Console::precreateDbs(const BdbClustSrvModule::GroupDescr& descr,
00495                       int nr2Precreate)
00496 {
00497     if ( ! _orbIsInit ) {
00498         return BdbcError;
00499     }
00500         
00501     BdbClustSrvModule::RetStatus* ret;            
00502     ret = _theRef->precreateDbs(descr, nr2Precreate, _client);
00503     if ( 0 == ret ) {
00504         cerr << "Returned RetStatus object = 0" << endl;
00505         return BdbcError;
00506     }
00507     if ( ret->level != BdbClustSrvModule::Success ) {
00508         if ( ret->level == BdbClustSrvModule::Warning ) {
00509             cout << "Warning: " << ret->msg << endl;
00510         } else {
00511             cout << "Error: " << ret->msg << endl;
00512             return BdbcError;
00513         }
00514     }
00515     delete ret;
00516     ret = 0;
00517     return BdbcSuccess;
00518 }
00519 
00520 
00521 
00522 BdbStatus
00523 Console::closeActiveDbs(const BdbClustSrvModule::GroupDescr& descr, 
00524                         CORBA::Boolean force, 
00525                         CORBA::ULong onlyThisDbId)
00526 {
00527     if ( ! _orbIsInit ) {
00528         return BdbcError;
00529     }
00530         
00531     BdbClustSrvModule::RetStatus* ret;            
00532     ret = _theRef->closeActiveDbs(descr, force, onlyThisDbId, _client);
00533     if ( 0 == ret ) {
00534         cerr << "Returned RetStatus object = 0" << endl;
00535         return BdbcError;
00536     }
00537     if ( ret->level != BdbClustSrvModule::Success ) {
00538         if ( ret->level == BdbClustSrvModule::Warning ) {
00539             cout << "Warning: " << ret->msg << endl;
00540         } else {
00541             cout << "Error: " << ret->msg << endl;
00542             return BdbcError;
00543         }
00544     }
00545     delete ret;
00546     ret = 0;
00547     return BdbcSuccess;
00548 }
00549 
00550 
00551     
00552 BdbStatus 
00553 Console::closeAllActiveDbs()
00554 {
00555     if ( ! _orbIsInit ) {
00556         return BdbcError;
00557     }
00558         
00559     BdbClustSrvModule::RetStatus* ret;            
00560     ret = _theRef->closeAllActiveDbs(_client);
00561     if ( 0 == ret ) {
00562         cerr << "Returned RetStatus object = 0" << endl;
00563         return BdbcError;
00564     }
00565     if ( ret->level != BdbClustSrvModule::Success ) {
00566         if ( ret->level == BdbClustSrvModule::Warning ) {
00567             cout << "Warning: " << ret->msg << endl;
00568         } else {
00569             cout << "Error: " << ret->msg << endl;
00570             return BdbcError;
00571         }
00572     }
00573     delete ret;
00574     ret = 0;
00575     return BdbcSuccess;
00576 }
00577 
00578 
00579 
00580 BdbStatus 
00581 Console::getOneContainer(const BdbClustSrvModule::GroupDescr& descr,
00582                          BdbClustSrvModule::OID& oid)
00583 {
00584     if ( ! _orbIsInit ) {
00585         return BdbcError;
00586     }
00587 
00588     BdbClustSrvModule::RetStatus* ret;            
00589     ret = _theRef->getOneContainer(descr, _client, oid);
00590     if ( 0 == ret ) {
00591         cerr << "Returned RetStatus object = 0" << endl;
00592         return BdbcError;
00593     }
00594     if ( ret->level != BdbClustSrvModule::Success ) {
00595         if ( ret->level == BdbClustSrvModule::Warning ) {
00596             cout << "Warning: " << ret->msg << endl;
00597             if ( ! strcmp(ret->msg, "wait") ) {
00598                 cout << "Waiting " << oid.sl << " sec for precreation to finish" 
00599                      << ", precreation started " << oid.pg << " sec ago" << endl;
00600                 sleep(oid.sl);
00601                 
00602                 cout << "Attempting to get container again" << endl;
00603                 delete ret;
00604                 return getOneContainer(descr, oid);
00605             }
00606         } else {
00607             cout << "Error: " << ret->msg << endl;
00608             return BdbcError;
00609         }
00610     }
00611     delete ret;
00612     ret = 0;
00613     COUT1 << "Got: [" << oid.db << "-" << oid.oc << "-" << oid.pg << "-" << oid.sl << "]" << endl;
00614     return BdbcSuccess;
00615 }
00616 
00617 
00618 BdbStatus
00619 Console::returnAllContainers(const char* host, int pid)
00620 {
00621     if ( ! _orbIsInit ) {
00622         return BdbcError;
00623     }
00624 
00625     BdbClustSrvModule::RetStatus* ret = 0;
00626 
00627     if ( 0 == host ) {
00628         ret = _theRef->returnAllContainers(_client);
00629     } else {
00630         BdbClustSrvModule::ClientDescr client;
00631         client.hostName = CORBA::string_dup(host);
00632         client.pid      = pid;
00633         ret = _theRef->returnAllContainers(client);
00634     }
00635     
00636     if ( 0 == ret ) {
00637         cerr << "Returned RetStatus object = 0" << endl;
00638         return BdbcError;
00639     }
00640     if ( ret->level != BdbClustSrvModule::Success ) {
00641         if ( ret->level == BdbClustSrvModule::Warning ) {
00642             cout << "Warning: " << ret->msg << endl;
00643         } else {
00644             cout << "Error: " << ret->msg << endl;
00645             return BdbcError;
00646         }
00647     }
00648     delete ret;
00649     ret = 0;
00650     return BdbcSuccess;
00651 }
00652  
00653 
00654 
00655 
00656 BdbStatus
00657 Console::returnContainers(set<BdbClSrvCRef*,babar::Collection::PtrLess>& s, int setNPage)
00658 {
00659     if ( ! _orbIsInit ) {
00660         return BdbcError;
00661     }
00662 
00663     BdbClSrvCRef* cr;
00664     int i = 0, len = s.size();
00665     BdbClustSrvModule::OIDArray array(len);
00666     array.length(len);
00667     set<BdbClSrvCRef*,babar::Collection::PtrLess>::iterator iter=s.begin();
00668 
00669     if ( setNPage ) {
00670         BdbApplicationOrDomain::activeInstance()->startRead("a");
00671     }
00672     
00673     while ( iter!=s.end() ) {
00674       cr=*iter;
00675         ooRef(ooContObj) r = cr->getContRef();
00676         BdbClustSrvModule::OID oid;
00677         oid.db    = r.get_DB();
00678         oid.oc    = r.get_OC();
00679         oid.pg    = r.get_page();
00680         oid.sl    = r.get_slot();
00681         if ( setNPage ) {
00682             oid.noPg = r.nPage();
00683             r.unlock();
00684         } else {
00685             oid.noPg = 0;
00686         }
00687         array[i++] = oid;
00688         iter++;
00689     }
00690 
00691     if ( setNPage ) {
00692         BdbApplicationOrDomain::activeInstance()->commit("a");    
00693     }
00694     
00695     BdbClustSrvModule::RetStatus* ret = _theRef->returnContainers(array, _client);
00696     
00697     if ( 0 == ret ) {
00698         cerr << "Returned RetStatus object = 0" << endl;
00699         return BdbcError;
00700     }
00701     if ( ret->level != BdbClustSrvModule::Success ) {
00702         if ( ret->level == BdbClustSrvModule::Warning ) {
00703             cout << "Warning: " << ret->msg << endl;
00704         } else {
00705             cout << "Error: " << ret->msg << endl;
00706             return BdbcError;
00707         }
00708     }
00709     delete ret;
00710     ret = 0;
00711     return BdbcSuccess;
00712 }
00713  
00714 
00715 
00716 
00717 
00718 BdbStatus 
00719 Console::loadSrv(const BdbClustSrvModule::GroupDescr& descr, d_Boolean randomize)
00720 {
00721     if ( ! _orbIsInit ) {
00722         return BdbcError;
00723     }
00724 
00725     long startTime = time(0);
00726     long number = 0;
00727     
00728     while ( 1 ) {
00729         number++;
00730         // get container
00731         BdbClustSrvModule::OID oid;
00732         COUT1 << "--> Asking for container" << endl;
00733         if ( BdbcSuccess != getOneContainer(descr, oid) ) {
00734             cerr << "getOneContainer failed" << endl;
00735             return BdbcError;
00736         }
00737 
00738         int nr = 0;
00739         if ( randomize ) {
00740             // write some objects (0-8)
00741             srand(time(0));
00742             nr = rand() % 9;
00743         }
00744         COUT1 << "--> Writing " << nr << " objects" << endl;    
00745         storeObjects(nr, oid);
00746         
00747         // return containers
00748         COUT1 << "--> Returning containers" << endl;
00749         if ( BdbcSuccess != returnAllContainers() ) {
00750             cout << "returning containers failed" << endl;
00751             return BdbcError;
00752         }
00753 
00754         if ( randomize ) {
00755             // sleep some time (0-10 sec)
00756             nr = rand() % 10; COUT1 << "Sleeping " << nr << " sec" << endl;  sleep(nr);
00757         }
00758         
00759         // maybe stop all the process
00760         if ( 0 == access("/u/sf/becla/temp/stopCSLoad", F_OK) ) {
00761             break;
00762         }
00763     }
00764 
00765     long diff = time(0) - startTime;
00766     if ( diff > 0 ) {
00767         double speed = ((double) number) / ((double) diff);
00768         cout << "total time = " << diff << ", number = " << number << " [" << speed << " Hz]" << endl;
00769     }
00770     
00771     return BdbcSuccess;
00772 }
00773 
00774 
00775 
00776 BdbStatus
00777 Console::storeObjects(int nrObjects, BdbClustSrvModule::OID oid)
00778 {
00779     int nPage = 0;
00780     return storeObjects(nrObjects, oid, nPage);
00781 }
00782 
00783 
00784 
00785 BdbStatus
00786 Console::storeObjects(int nrObjects, BdbClustSrvModule::OID oid, int& nPage)
00787 {
00788     if ( nrObjects <= 0 ) {
00789         return BdbcSuccess;
00790     }    
00791 
00792     const char* fdName = getenv("OO_FD_BOOT");
00793     if ( 0 == fdName ) {
00794         cerr << "OO_FD_BOOT not set" << endl;
00795         return BdbcError;
00796     }
00797     
00798     ooTrans trans;
00799     trans.start();
00800     ooHandle(ooFDObj) fdH;
00801     if ( oocSuccess != fdH.open(fdName, oocUpdate) ) {
00802         cerr << "Unable to open fd" << endl;
00803         return BdbcError;
00804     }
00805     ooRef(ooContObj) r;
00806     r.set_DB(oid.db);
00807     r.set_OC(oid.oc);
00808     r.set_page(oid.pg);
00809     r.set_slot(oid.sl);
00810     ooHandle(ooContObj) h = r;
00811     if ( oocSuccess != h.open(oocUpdate) ) {
00812         cerr << "Unable to open container" << endl;
00813         return BdbcError;
00814     }
00815     
00816     //cout << "nPage before creating " << nrObjects << " objects = " << h.nPage() << endl;
00817     
00818     ooHandle(BdbTestPersObj_16K) obj;
00819     for ( int i=0 ; i<nrObjects ; i++) {
00820         obj = new (h) BdbTestPersObj_16K();
00821         if ( h.nPage() > oid.noPg ) {
00822             cout << "container full, " << i << " objects stored" << endl;
00823             break;
00824             
00825         }
00826     }
00827     
00828     //cout << "nPage after creating objects = " << h.nPage() << endl;
00829 
00830     nPage = h.nPage();
00831 
00832     trans.commit();
00833     return BdbcSuccess;
00834 }
00835 
00836 
00837 // ========================================================
00838 // ========================================================
00839 // ========================================================
00840 
00841 int  runCommand(int argc, char** argv);
00842 void help();
00843 
00844 Console cc;
00845 
00846 int main(int argc, char** argv)
00847 {
00848     if ( argc < 3 ) {
00849         help();
00850         return 1;
00851     }
00852    
00853     // Start a domain (any domain)
00854     BdbEventStore::instance()->activate();
00855 
00856     if ( BdbcSuccess != cc.initORB(argc, argv) ) {
00857         return 1;
00858     }
00859 
00860     return runCommand(argc, argv);
00861 }
00862 
00863 
00864 
00865 // ========================================================
00866 // ========================================================
00867 // ========================================================
00868 
00869 
00870 int runCommand(int argc, char** argv)
00871 {
00872     if ( 3 > argc ) {
00873         cout << "incorrect number of arguments" << endl;
00874         return 1;
00875     }
00876     if ( 0 == strcmp(argv[2], "-ping") ) {
00877         if ( BdbcSuccess == cc.ping() ) {
00878             return 0;
00879         }
00880         return 1;
00881     }
00882     if ( 0 == strcmp(argv[2], "-print") ) {
00883         if ( 4 != argc ) {
00884             cout << "-print: expected more arguments" << endl;
00885             return 2;
00886         }
00887         CORBA::Boolean allGroups = 0;
00888         if ( argv[3][0] == '1' ) {
00889             allGroups = 1;
00890         }
00891         return BdbcSuccess != cc.dumpAllGroups(allGroups);
00892     } else if ( 0 == strcmp(argv[2], "-listGroups") ) {
00893         if ( 5 != argc ) {
00894             cout << "-listGroups: expected more arguments" << endl;
00895             return 2;
00896         }
00897         CORBA::Boolean all = 0;
00898         if ( argv[3][0] == '1' ) {
00899             all = 1;
00900         }
00901         CORBA::Boolean withDbs = 0;
00902         if ( argv[4][0] == '1' ) {
00903             withDbs = 1;
00904         }
00905         return BdbcSuccess != cc.listGroups(all, withDbs);
00906     } else if ( 0 == strcmp(argv[2], "-listDbs") ) {
00907         if ( 4 != argc ) {
00908             cout << "-listDbs: expected more arguments" << endl;
00909             return 2;
00910         }
00911         CORBA::Boolean all = 0;
00912         if ( argv[3][0] == '1' ) {
00913             all = 1;
00914         }
00915         return BdbcSuccess != cc.listDbs(all);
00916     } else if ( 0 == strcmp(argv[2], "-printConts") ) {
00917         if ( 5 != argc ) {
00918             cout << "-printConts: expected more arguments" << endl;
00919             return 2;
00920         }
00921         CORBA::Boolean all = 0;
00922         if ( argv[3][0] == '1' ) {
00923             all = 1;
00924         }
00925         CORBA::Short whichConts = (CORBA::Short) atoi(argv[4]);
00926         return BdbcSuccess != cc.printConts(all, whichConts);
00927     } else if ( 0 == strcmp(argv[2], "-shutdown") ) {
00928         if ( 5 != argc ) {
00929             cout << "-shutdown: expected more arguments" << endl;
00930             return 2;
00931         }
00932         CORBA::Boolean try2ReleaseConts = 0;
00933         if ( argv[3][0] == '1' ) {
00934             try2ReleaseConts = 1;
00935         }
00936         CORBA::Boolean force = 0;
00937         if ( argv[4][0] == '1' ) {
00938             force = 1;
00939         }
00940         return BdbcSuccess != cc.shutdown(try2ReleaseConts, force);
00941     } else if ( 0 == strcmp(argv[2], "-recoverNow") ) {
00942         return BdbcSuccess != cc.recoverNow();
00943     } else if ( 0 == strcmp(argv[2], "-resynchronize") ) {
00944         return BdbcSuccess != cc.resynchronize();
00945     } else if ( 0 == strcmp(argv[2], "-automaticPrecr") ) {
00946         if ( 4 != argc ) {
00947             cout << "-automaticPrecr: expected more arguments" << endl;
00948             return 2;
00949         }
00950         CORBA::Boolean enable = 0;
00951         if ( argv[3][0] == '1' ) {
00952             enable = 1;
00953         }
00954         cc.automaticPrecr(enable);
00955         return 0;
00956     } else if ( 0 == strcmp(argv[2], "-initGroup") ) {
00957         if ( 9 != argc ) {
00958             cout << "-initGroup: incorrect number of arguments" << endl;
00959             help();
00960             return 2;
00961         }
00962         BdbClustSrvModule::GroupDescr descr;
00963         descr.clusterName = CORBA::string_dup(argv[3]);
00964         descr.sdName      = CORBA::string_dup("evs");
00965         descr.authLevel   = argv[4][0];
00966         descr.authName    = CORBA::string_dup(argv[5]);
00967         descr.compName    = CORBA::string_dup(argv[6]);
00968         descr.streamName  = CORBA::string_dup(argv[7]);
00969         CORBA::Short no2Precr = atoi(argv[8]);
00970         if ( no2Precr == -1 ) {
00971             cout << "Incorrent arg: no dbs to precreate" << endl;
00972             return BdbcError;
00973         }
00974         return BdbcSuccess != cc.initGroup(descr, no2Precr);
00975     } else if ( 0 == strcmp(argv[2], "-shutdownGroup") ) {
00976         if ( 9 != argc ) {
00977             cout << "-shutdownGroup: incorrect number of arguments" << endl;
00978             help();
00979             return 2;
00980         }
00981         BdbClustSrvModule::GroupDescr descr;
00982         descr.clusterName = CORBA::string_dup(argv[3]);
00983         descr.sdName      = CORBA::string_dup("evs");
00984         descr.authLevel   = argv[4][0];
00985         descr.authName    = CORBA::string_dup(argv[5]);
00986         descr.compName    = CORBA::string_dup(argv[6]);
00987         descr.streamName  = CORBA::string_dup(argv[7]);
00988         CORBA::Boolean try2Recover = 0;
00989         if ( argv[8][0] == '1' ) {
00990             try2Recover = 1;
00991         }
00992         return BdbcSuccess != cc.shutdownGroup(descr, try2Recover);
00993     } else if ( 0 == strcmp(argv[2], "-deleteGroup") ) {
00994         if ( 8 != argc ) {
00995             cout << "-deleteGroup: incorrect number of arguments" << endl;
00996             return 2;
00997         }
00998         BdbClustSrvModule::GroupDescr descr;
00999         descr.clusterName = CORBA::string_dup(argv[3]);
01000         descr.sdName      = CORBA::string_dup("evs");
01001         descr.authLevel   = argv[4][0];
01002         descr.authName    = CORBA::string_dup(argv[5]);
01003         descr.compName    = CORBA::string_dup(argv[6]);
01004         descr.streamName  = CORBA::string_dup(argv[7]);
01005         return BdbcSuccess != cc.deleteGroup(descr);
01006     } else if ( 0 == strcmp(argv[2], "-precrDbs") ) {
01007         if ( 9 != argc ) {
01008             cout << "-precrDbs: incorrect number of arguments" << endl;
01009             return 2;
01010         }
01011         BdbClustSrvModule::GroupDescr descr;
01012         descr.clusterName = CORBA::string_dup(argv[3]);
01013         descr.sdName      = CORBA::string_dup("evs");
01014         descr.authLevel   = argv[4][0];
01015         descr.authName    = CORBA::string_dup(argv[5]);
01016         descr.compName    = CORBA::string_dup(argv[6]);
01017         descr.streamName  = CORBA::string_dup(argv[7]);
01018         int nr2Precr = atoi(argv[8]);
01019         if ( nr2Precr < 1 ) {
01020             cerr << "nr2Precr = " << nr2Precr << endl;
01021             return 1;
01022         }
01023         return BdbcSuccess != cc.precreateDbs(descr, nr2Precr);
01024     } else if ( 0 == strcmp(argv[2], "-closeActiveDbs") ) {
01025         if ( 10 != argc ) {
01026             cout << "-closeActiveDbs: incorrect number of arguments" << endl;
01027             return 2;
01028         }
01029         BdbClustSrvModule::GroupDescr descr;
01030         descr.clusterName = CORBA::string_dup(argv[3]);
01031         descr.sdName      = CORBA::string_dup("evs");
01032         descr.authLevel   = argv[4][0];
01033         descr.authName    = CORBA::string_dup(argv[5]);
01034         descr.compName    = CORBA::string_dup(argv[6]);
01035         descr.streamName  = CORBA::string_dup(argv[7]);
01036         CORBA::Boolean force = 0;
01037         if ( '1' == argv[8][0] ) {
01038             force = 1;
01039         }
01040         CORBA::ULong onlyThisDbId = atoi(argv[9]);
01041         return BdbcSuccess != cc.closeActiveDbs(descr, force, onlyThisDbId);
01042     } else if ( 0 == strcmp(argv[2], "-closeAllActiveDbs") ) {
01043         return BdbcSuccess != cc.closeAllActiveDbs();
01044     } else if ( 0 == strcmp(argv[2], "-getConts") ) { 
01045         if ( 13 != argc ) {
01046             cout << "-getConts: incorrect number of arguments" << endl;
01047             return 2;
01048         }
01049         BdbClustSrvModule::GroupDescr descr;
01050         descr.clusterName = CORBA::string_dup(argv[3]);
01051         descr.sdName      = CORBA::string_dup("evs");
01052         descr.authLevel   = argv[4][0];
01053         descr.authName    = CORBA::string_dup(argv[5]);
01054         descr.compName    = CORBA::string_dup(argv[6]);
01055         descr.streamName  = CORBA::string_dup(argv[7]);
01056         int nrConts = atoi(argv[8]);
01057         if ( 0 >= nrConts ) {
01058             cerr << "error: nrConts = " << nrConts << endl;
01059             return 1;
01060         }
01061         int sleepBetween = atoi(argv[9]);
01062         if ( sleepBetween < 0 || sleepBetween > 1000 ) {
01063             cerr << "error: sleepBetween = " << sleepBetween << endl;
01064             return 1;
01065         }
01066         int nrObjects = atoi(argv[10]);
01067         
01068         CORBA::Boolean returnConts = 0;
01069         if ( argv[11][0] == '1' ) {
01070             returnConts = 1;
01071         }
01072         CORBA::Boolean setNPage = 0;
01073         if ( argv[12][0] == '1' ) {
01074             setNPage = 1;
01075         }
01076 
01077         set<BdbClSrvCRef*,babar::Collection::PtrLess> s; // of BdbClSrvCRef
01078         for(int i=0 ; i<nrConts ; i++) {
01079             BdbClustSrvModule::OID oid;
01080             if ( BdbcSuccess != cc.getOneContainer(descr, oid) ) {
01081                 cerr << "getOneContainer failed, i=" << i << endl;
01082                 return 2;
01083             }
01084             cout << "Got: [" << oid.db << "-" << oid.oc << "-"
01085                  << oid.pg << "-" << oid.sl << "], noPg=" << oid.noPg << endl;
01086 
01087             BdbRef(ooObj) r;
01088             r.set_DB(oid.db);
01089             r.set_OC(oid.oc);
01090             r.set_page(oid.pg);
01091             r.set_slot(oid.sl);
01092             s.insert(new BdbClSrvCRef(r));
01093 
01094             if ( nrObjects > 0 ) {
01095                 if ( BdbcSuccess != cc.storeObjects(nrObjects, oid) ) {
01096                     cerr << "storeObjects failed" << endl;
01097                 }
01098             }
01099             if ( sleepBetween > 0 ) {
01100                 sleep(sleepBetween);
01101             }
01102         }
01103         if ( returnConts ) {
01104             if ( BdbcSuccess != cc.returnContainers(s, setNPage) ) {
01105                 cerr << "returnAllContainers failed" << endl;
01106                 return 3;
01107             }
01108         }
01109         BdbClSrvCRef* cr;
01110         set<BdbClSrvCRef*,babar::Collection::PtrLess>::iterator iter=s.begin();
01111         while ( iter!=s.end() ) {
01112             delete *iter;
01113             iter++;
01114         }        
01115         return 0;
01116     } else if ( 0 == strcmp(argv[2], "-write") ) { 
01117         if ( 10 != argc ) {
01118             cout << "-write: incorrect number of arguments" << endl;
01119             help();
01120             return 2;
01121         }
01122         BdbClustSrvModule::GroupDescr descr;
01123         descr.clusterName = CORBA::string_dup(argv[3]);
01124         descr.sdName      = CORBA::string_dup("evs");
01125         descr.authLevel   = argv[4][0];
01126         descr.authName    = CORBA::string_dup(argv[5]);
01127         descr.compName    = CORBA::string_dup(argv[6]);
01128         descr.streamName  = CORBA::string_dup(argv[7]);
01129         int nrObjects = atoi(argv[8]);
01130         if ( 0 >= nrObjects ) {
01131             cerr << "error: nrObjects = " << nrObjects << endl;
01132             return 1;
01133         }
01134         int checkEvery = atoi(argv[9]);
01135         if ( 0 >= checkEvery ) {
01136             cerr << "checkEvery invalid" << endl;
01137             return 2;
01138         }
01139         int sleepBetween = atoi(argv[9]);
01140         if ( sleepBetween < 0 || sleepBetween > 1000 ) {
01141             cerr << "error: sleepBetween = " << sleepBetween << endl;
01142             return 1;
01143         }
01144 
01145         BdbClustSrvModule::OID oid;
01146         if ( BdbcSuccess != cc.getOneContainer(descr, oid) ) {
01147             cerr << "getOneContainer failed" << endl;
01148             return 2;
01149         }
01150         cout << "Got: [" << oid.db << "-" << oid.oc << "-"
01151              << oid.pg << "-" << oid.sl << "], noPg=" << oid.noPg << endl;
01152 
01153 
01154         int doNow = 1, done = 0;
01155         while ( 0 < (doNow=(checkEvery<nrObjects?checkEvery:nrObjects)) ) {
01156             int nPage = 0;
01157             if ( BdbcSuccess != cc.storeObjects(doNow, oid, nPage) ) {
01158                 cerr << "storeObjects failed" << endl;
01159             }
01160             nrObjects -= doNow;
01161             done += doNow;
01162             cout << "Wrote " << doNow << " objects, total done = " << done 
01163                  << ", nPage = " << nPage << endl;
01164             if ( nPage >= oid.noPg ) {
01165                 cout << "Container is full, asking for a new container" << endl;
01166                 if ( BdbcSuccess != cc.getOneContainer(descr, oid) ) {
01167                     cerr << "getOneContainer failed" << endl;
01168                     return 2;
01169                 }
01170                 cout << "Got: [" << oid.db << "-" << oid.oc << "-"
01171                      << oid.pg << "-" << oid.sl << "], noPg=" << oid.noPg << endl;
01172             }
01173         }
01174 
01175         if ( BdbcSuccess != cc.returnAllContainers() ) {
01176             cerr << "returnAllContainers failed" << endl;
01177             return 3;
01178         }
01179         return 0;
01180     } else if ( 0 == strcmp(argv[2], "-returnConts") ) {
01181         if ( 8 != argc && 10 != argc ) {
01182             cout << "-returnConts: incorrect number of arguments" << endl;
01183             help();
01184             return 2;
01185         }
01186         BdbClustSrvModule::GroupDescr descr;
01187         descr.clusterName = CORBA::string_dup(argv[3]);
01188         descr.sdName      = CORBA::string_dup("evs");
01189         descr.authLevel   = argv[4][0];
01190         descr.authName    = CORBA::string_dup(argv[5]);
01191         descr.compName    = CORBA::string_dup(argv[6]);
01192         descr.streamName  = CORBA::string_dup(argv[7]);
01193         char* hostName = 0;
01194         int pid        = 0;
01195         if ( 10 == argc ) {
01196             hostName = new char[strlen(argv[8])+1];
01197             strcpy(hostName, argv[8]);
01198             pid = atoi(argv[9]);
01199             if ( 0 > pid ) {
01200                 cerr << "Pid negative" << endl;
01201                 return 3;
01202             }
01203         }
01204         if ( BdbcSuccess != cc.returnAllContainers(hostName, pid) ) {
01205             cerr << "return containers failed" << endl;
01206             return 4;
01207         }
01208         return 0;
01209     } else if ( 0 == strcmp(argv[2], "-loadSrv") ) {
01210         if ( 9 != argc ) {
01211             help();
01212             return 2;
01213         }
01214         BdbClustSrvModule::GroupDescr descr;
01215         descr.clusterName = CORBA::string_dup(argv[3]);
01216         descr.sdName      = CORBA::string_dup("evs");
01217         descr.authLevel   = argv[4][0];
01218         descr.authName    = CORBA::string_dup(argv[5]);
01219         descr.compName    = CORBA::string_dup(argv[6]);
01220         descr.streamName  = CORBA::string_dup(argv[7]);
01221         CORBA::Boolean randomize = 1;
01222         if ( argv[8][0] == '1' ) {
01223             randomize = 1;
01224         }
01225         
01226         return BdbcSuccess != cc.loadSrv(descr, randomize);
01227     } else if ( 0 == strcmp(argv[2], "-test1") ) {
01228         if ( 4 != argc ) {
01229             cerr << "Expected more args" << endl;
01230             return 2;
01231         }
01232         int nr = atoi(argv[3]);
01233         if ( nr < 1 ) {
01234             cerr << "nr < 1 " << endl;
01235             return 3;
01236         }
01237         cc.test1(nr);
01238         return 0;
01239     } else if ( 0 == strcmp(argv[2], "-test2") ) {
01240         int nr = atoi(argv[3]);
01241         if ( nr < 1 ) {
01242             cerr << "nr < 1 " << endl;
01243             return 3;
01244         }
01245         cc.test2(nr);
01246         return 0;
01247     } else if ( 0 == strcmp(argv[2], "-waitUntilItIsReady") ) {
01248         CORBA::Boolean w = 0;
01249         if ( 4 != argc ) {
01250             cerr << "Expected more args" << endl;
01251             return 2;
01252         }
01253         if ( argv[3][0] == '1' ) {
01254             w = 1;
01255         }
01256         cc.waitUntilItIsReady(w);
01257         return 0;
01258     }
01259     
01260     cout << "Unsupported: \"" << argv[2] << "\"" << endl;
01261     help();
01262     return 2;
01263 }
01264 
01265 
01266 
01267 void help()
01268 {
01269     cout << "Expected arguments:\n"
01270          << "   <IOR> -automaticPrecr          1/0 [enable/disable]\n"
01271          << "   <IOR> -closeActiveDbs    <GRD> 1/0 [force] <dbid or 0 (all dbs)>\n"
01272          << "   <IOR> -closeAllActiveDbs \n"
01273          << "   <IOR> -deleteGroup       <GRD>\n"
01274          << "   <IOR> -getConts          <GRD> nrConts sleepBetween[in sec] nrObjs [storedInCont]\n" 
01275             "                                  1/0 [returnConts/no] 1/0 [set nPage/no]\n"
01276          << "   <IOR> -initGroup         <GRD> nr [dbs2Precr]\n"
01277          << "   <IOR> -listDbs                 1/0 [all/inUseNow]\n"
01278          << "   <IOR> -listGroups              1/0 [all/inUseNow] 1/0 [withDbs/without]\n"
01279          << "   <IOR> -ping\n"
01280          << "   <IOR> -print                   1/0 [allGroups/inUseNow]\n"
01281          << "   <IOR> -printConts              1/0 [allGroups/inUseNow] whichConts\n"
01282          << "   <IOR> -precrDbs          <GRD> nr\n"
01283          << "   <IOR> -recoverNow\n"
01284          << "   <IOR> -resynchronize\n"
01285          << "   <IOR> -returnConts       <GRD> [hostName pid]\n"
01286          << "   <IOR> -shutdown                1/0 [try2ReleaseConts/no] 1/0 [force/no]\n"
01287          << "   <IOR> -shutdownGroup     <GRD> 1/0 [try2Recover/no] 1/0 [force/no]\n"
01288          << "   <IOR> -waitUntilItIsReady      1/0 [checkPrecr]\n"
01289          // << "   <IOR> -loadSrv           <GRD> 1/0 [=randomize/no]\n"
01290          // << "   <IOR> -test1 #repetitions\n"
01291          // << "   <IOR> -test2 #repetitions\n"
01292          // << "   <IOR> -write             <GRD> nrObjs checkeSizeEvery\n"
01293          << "\n"
01294          << "      where: <IOR> - location of the IOR file\n"
01295          << "             <GRD> - clusterName s/g/u authName compName streamName\n"
01296          << "             force in closeActiveDbs - ignore fact that dbs are in use\n"
01297          << "             whichCont:\n"
01298          << "                0x01 bit - turns on printing 'in use'        containers\n"
01299          << "                0x02 bit - turns on printing 'locked'        containers\n"
01300          << "                0x04 bit - turns on printing 'full'          containers\n"
01301          << "                0x08 bit - turns on printing 'empty'         containers\n"
01302          << "                0x10 bit - turns on printing 'partly filled' containers\n"
01303          << "                example: 11 - will print in use, locked and empty, will not show full\n"
01304          << "                          5 - will show in use and full\n"
01305          // << "             loadSrv - in the loop:\n"
01306          // << "                    randomize: \n"
01307          // << "                          1) ask for one cont\n"
01308          // << "                          2) writes objects (between 0 and 8)\n"
01309          // << "                          3) returns container\n"
01310          // << "                          4) sleeps (between 0 and 3 sec)\n"
01311          // << "                          5) stops when file /u/sf/becla/temp/stopCSLoad is touched\n"
01312          // << "                    do not randomize: \n"
01313          // << "                          1) ask for one cont\n"
01314          // << "                          2) writes one object\n"
01315          // << "                          3) return container\n"
01316          // << "                          4) stops when file /u/sf/becla/temp/stopCSLoad is touched\n"
01317          << endl;
01318 }
01319 
01320 
01321 
01322 

 


BaBar Public Site | SLAC | News | Links | Who's Who | Contact Us

Page Owner: Jacek Becla
Last Update: October 04, 2002