Esempio n. 1
0
    void setUp() {
        if (!_initialized) {
            _initialized = 1;
            _pmgr.load(_plugin);
        }

        // Storage is tied to the main event loop, which requires quite a bit of setup
        ObjectHostID oh_id(1);
        _trace = new Trace::Trace("dummy.trace");
        _ios = new Network::IOService("StorageTest");
        _mainStrand = _ios->createStrand("StorageTest");
        _work = new Network::IOWork(*_ios, "StorageTest");
        Time start_time = Timer::now(); // Just for stats in ObjectHostContext.
        Duration duration = Duration::zero(); // Indicates to run forever.
        _sstConnMgr = new ODPSST::ConnectionManager();
        _ohSSTConnMgr = new OHDPSST::ConnectionManager();

        _ctx = new ObjectHostContext("test", oh_id, _sstConnMgr, _ohSSTConnMgr, _ios, _mainStrand, _trace, start_time, duration);

        _storage = OH::StorageFactory::getSingleton().getConstructor(_type)(_ctx, _args);

        for(int i = 0; i < 2; i++)
            _storage->leaseBucket(_buckets[i]);

        _ctx->add(_ctx);
        _ctx->add(_storage);

        // Run the context, but we need to make sure it only lives in other
        // threads, otherwise we'd block up this one.  We include 4 threads to
        // exercise support for multiple threads.
        _ctx->run(4, Context::AllNew);
    }
Esempio n. 2
0
    void tearDown() {
        for(int i = 0; i < 2; i++)
            _storage->releaseBucket(_buckets[i]);

        delete _work;
        _work = NULL;

        _ctx->shutdown();

        _trace->prepareShutdown();

        delete _storage;
        _storage = NULL;

        delete _ctx;
        _ctx = NULL;

        _trace->shutdown();
        delete _trace;
        _trace = NULL;

        delete _sstConnMgr;
        _sstConnMgr = NULL;

        delete _ohSSTConnMgr;
        _ohSSTConnMgr = NULL;

        delete _mainStrand;
        _mainStrand = NULL;
        delete _ios;
        _ios = NULL;
    }
Esempio n. 3
0
int main(int argc, char** argv) {
    using namespace Sirikata;

    DynamicLibrary::Initialize();

    InitOptions();
    Trace::Trace::InitOptions();
    OHTrace::InitOptions();
    InitSimOHOptions();
    ParseOptions(argc, argv);

    PluginManager plugins;
    plugins.loadList( GetOptionValue<String>(OPT_PLUGINS) );
    plugins.loadList( GetOptionValue<String>(OPT_OH_PLUGINS) );

    // Fill defaults after plugin loading to ensure plugin-added
    // options get their defaults.
    FillMissingOptionDefaults();
    // Rerun original parse to make sure any newly added options are
    // properly parsed.
    ParseOptions(argc, argv);

    ReportVersion(); // After options so log goes to the right place

    std::string time_server=GetOptionValue<String>("time-server");
    NTPTimeSync sync;
    if (time_server.size() > 0)
        sync.start(time_server);


    ObjectHostID oh_id = GetOptionValue<ObjectHostID>("ohid");
    String trace_file = GetPerServerFile(STATS_OH_TRACE_FILE, oh_id);
    Trace::Trace* gTrace = new Trace::Trace(trace_file);

    MaxDistUpdatePredicate::maxDist = GetOptionValue<float64>(MAX_EXTRAPOLATOR_DIST);

    BoundingBox3f region = GetOptionValue<BoundingBox3f>("region");
    Vector3ui32 layout = GetOptionValue<Vector3ui32>("layout");


    Duration duration = GetOptionValue<Duration>("duration");
    // Get the starting time
    String start_time_str = GetOptionValue<String>("wait-until");
    Time start_time = start_time_str.empty() ? Timer::now() : Timer::getSpecifiedDate( start_time_str );
    start_time += GetOptionValue<Duration>("wait-additional");


    srand( GetOptionValue<uint32>("rand-seed") );

    Network::IOService* ios = Network::IOServiceFactory::makeIOService();
    Network::IOStrand* mainStrand = ios->createStrand();

    ODPSST::ConnectionManager* sstConnMgr = new ODPSST::ConnectionManager();
    OHDPSST::ConnectionManager* ohSSTConnMgr = new OHDPSST::ConnectionManager();

    ObjectHostContext* ctx = new ObjectHostContext("simoh", oh_id, sstConnMgr, ohSSTConnMgr, ios, mainStrand, gTrace, start_time, duration);

    String servermap_type = GetOptionValue<String>("servermap");
    String servermap_options = GetOptionValue<String>("servermap-options");
    ServerIDMap * server_id_map =
        ServerIDMapFactory::getSingleton().getConstructor(servermap_type)(ctx, servermap_options);

    String timeseries_type = GetOptionValue<String>(OPT_TRACE_TIMESERIES);
    String timeseries_options = GetOptionValue<String>(OPT_TRACE_TIMESERIES_OPTIONS);
    Trace::TimeSeries* time_series = Trace::TimeSeriesFactory::getSingleton().getConstructor(timeseries_type)(ctx, timeseries_options);

    ObjectFactory* obj_factory = new ObjectFactory(ctx, region, duration);

    ObjectHost* obj_host = new ObjectHost(ctx, gTrace, server_id_map);
    Scenario* scenario = ScenarioFactory::getSingleton().getConstructor(GetOptionValue<String>("scenario"))(GetOptionValue<String>("scenario-options"));



    // If we're one of the initial nodes, we'll have to wait until we hit the start time
    {
        Time now_time = Timer::now();
        if (start_time > now_time) {
            Duration sleep_time = start_time - now_time;
            printf("Waiting %f seconds\n", sleep_time.toSeconds() ); fflush(stdout);
#if SIRIKATA_PLATFORM == SIRIKATA_WINDOWS
            Sleep( sleep_time.toMilliseconds() );
#else
            usleep( sleep_time.toMicroseconds() );
#endif
        }
    }

    ///////////Go go go!! start of simulation/////////////////////
    ctx->add(ctx);
    ctx->add(obj_factory);
    scenario->initialize(ctx);
    ctx->add(scenario);
    ctx->add(sstConnMgr);
    ctx->add(ohSSTConnMgr);
    ctx->run(2);

    ctx->cleanup();

    if (GetOptionValue<bool>(PROFILE)) {
        ctx->profiler->report();
    }

    gTrace->prepareShutdown();


    delete server_id_map;
    delete obj_factory;
    delete scenario;
    delete obj_host;
    delete ctx;
    delete sstConnMgr;
    delete ohSSTConnMgr;

    delete time_series;

    gTrace->shutdown();
    delete gTrace;
    gTrace = NULL;

    delete mainStrand;
    Network::IOServiceFactory::destroyIOService(ios);

    sync.stop();

    Sirikata::Logging::finishLog();

    return 0;
}
Esempio n. 4
0
int main (int argc, char** argv) {
    using namespace Sirikata;

    DynamicLibrary::Initialize();

    InitOptions();
    Trace::Trace::InitOptions();
    OHTrace::InitOptions();
    InitCPPOHOptions();

    ParseOptions(argc, argv, OPT_CONFIG_FILE, AllowUnregisteredOptions);

    PluginManager plugins;
    String search_path=GetOptionValue<String>(OPT_OH_PLUGIN_SEARCH_PATHS);
    if (search_path.length()) {
        while (true) {
            String::size_type where=search_path.find(":");
            if (where==String::npos) {
                DynamicLibrary::AddLoadPath(search_path);
                break;
            }else {
                DynamicLibrary::AddLoadPath(search_path.substr(0,where));
                search_path=search_path.substr(where+1);
            }
        }
    }
    plugins.loadList( GetOptionValue<String>(OPT_PLUGINS) );
    plugins.loadList( GetOptionValue<String>(OPT_EXTRA_PLUGINS) );
    plugins.loadList( GetOptionValue<String>(OPT_OH_PLUGINS) );
    plugins.loadList( GetOptionValue<String>(OPT_OH_EXTRA_PLUGINS) );

    // Fill defaults after plugin loading to ensure plugin-added
    // options get their defaults.
    FillMissingOptionDefaults();
    // Rerun original parse to make sure any newly added options are
    // properly parsed.
    ParseOptions(argc, argv, OPT_CONFIG_FILE);

    DaemonizeAndSetOutputs();
    ReportVersion(); // After options so log goes to the right place

    String time_server = GetOptionValue<String>("time-server");
    NTPTimeSync sync;
    if (time_server.size() > 0)
        sync.start(time_server);

#ifdef __GNUC__
#ifndef __APPLE__
    if (GetOptionValue<bool>(OPT_SIGFPE)) {
        feenableexcept(FE_DIVBYZERO|FE_INVALID|FE_OVERFLOW|FE_UNDERFLOW);
    }
#endif
#endif


    ObjectHostID oh_id = GetOptionValue<ObjectHostID>("ohid");
    String trace_file = GetPerServerFile(STATS_OH_TRACE_FILE, oh_id);
    Trace::Trace* trace = new Trace::Trace(trace_file);

    srand( GetOptionValue<uint32>("rand-seed") );

    Network::IOService* ios = new Network::IOService("Object Host");
    Network::IOStrand* mainStrand = ios->createStrand("Object Host Main");

    ODPSST::ConnectionManager* sstConnMgr = new ODPSST::ConnectionManager();
    OHDPSST::ConnectionManager* ohSstConnMgr = new OHDPSST::ConnectionManager();

    Time start_time = Timer::now(); // Just for stats in ObjectHostContext.
    Duration duration = Duration::zero(); // Indicates to run forever.
    ObjectHostContext* ctx = new ObjectHostContext("cppoh", oh_id, sstConnMgr, ohSstConnMgr, ios, mainStrand, trace, start_time, duration);

    String servermap_type = GetOptionValue<String>("servermap");
    String servermap_options = GetOptionValue<String>("servermap-options");
    ServerIDMap * server_id_map =
        ServerIDMapFactory::getSingleton().getConstructor(servermap_type)(ctx, servermap_options);

    String timeseries_type = GetOptionValue<String>(OPT_TRACE_TIMESERIES);
    String timeseries_options = GetOptionValue<String>(OPT_TRACE_TIMESERIES_OPTIONS);
    Trace::TimeSeries* time_series = Trace::TimeSeriesFactory::getSingleton().getConstructor(timeseries_type)(ctx, timeseries_options);

    String commander_type = GetOptionValue<String>(OPT_COMMAND_COMMANDER);
    String commander_options = GetOptionValue<String>(OPT_COMMAND_COMMANDER_OPTIONS);
    Command::Commander* commander = NULL;
    if (!commander_type.empty())
        commander = Command::CommanderFactory::getSingleton().getConstructor(commander_type)(ctx, commander_options);

    Transfer::TransferMediator::getSingleton().registerContext(ctx);


    SpaceID mainSpace(GetOptionValue<UUID>(OPT_MAIN_SPACE));

    String oh_options = GetOptionValue<String>(OPT_OH_OPTIONS);
    ObjectHost *oh = new CppohObjectHost(ctx, ios, oh_options);

    // Add all the spaces to the ObjectHost.  We used to have SpaceIDMap and
    // fill in the same ServerIDMap for all these. Now we just add the
    // ServerIDMap for the main space. We need a better way of handling multiple
    // spaces.
    oh->addServerIDMap(mainSpace, server_id_map);

    String objstorage_type = GetOptionValue<String>(OPT_OBJECT_STORAGE);
    String objstorage_options = GetOptionValue<String>(OPT_OBJECT_STORAGE_OPTS);
    OH::Storage* obj_storage =
        OH::StorageFactory::getSingleton().getConstructor(objstorage_type)(ctx, objstorage_options);
    oh->setStorage(obj_storage);

    String objpersistentset_type = GetOptionValue<String>(OPT_OH_PERSISTENT_SET);
    String objpersistentset_options = GetOptionValue<String>(OPT_OH_PERSISTENT_SET_OPTS);
    OH::PersistedObjectSet* obj_persistent_set =
        OH::PersistedObjectSetFactory::getSingleton().getConstructor(objpersistentset_type)(ctx, objpersistentset_options);
        oh->setPersistentSet(obj_persistent_set);

    String objfactory_type = GetOptionValue<String>(OPT_OBJECT_FACTORY);
    String objfactory_options = GetOptionValue<String>(OPT_OBJECT_FACTORY_OPTS);
    ObjectFactory* obj_factory = NULL;

    String obj_query_type = GetOptionValue<String>(OPT_OBJECT_QUERY_PROCESSOR);
    String obj_query_options = GetOptionValue<String>(OPT_OBJECT_QUERY_PROCESSOR_OPTS);
    OH::ObjectQueryProcessor* obj_query_processor =
        OH::ObjectQueryProcessorFactory::getSingleton().getConstructor(obj_query_type)(ctx, obj_query_options);
    oh->setQueryProcessor(obj_query_processor);

    String query_data_type = GetOptionValue<String>(OPT_OBJECT_QUERY_DATA);
    String query_data_type_opts = GetOptionValue<String>(OPT_OBJECT_QUERY_DATA_OPTS);
    if (query_data_type != "") {
        assert(QueryDataLookupFactory::getSingleton().hasConstructor(query_data_type));
        oh->setQueryDataLookupConstructor(QueryDataLookupFactory::getSingleton().getConstructor(query_data_type), query_data_type_opts);
    }

    ///////////Go go go!! start of simulation/////////////////////
    ctx->add(ctx);
    ctx->add(obj_storage);
    ctx->add(obj_persistent_set);
    ctx->add(obj_query_processor);

    ctx->add(oh);
    ctx->add(sstConnMgr);
    ctx->add(ohSstConnMgr);

    if (!objfactory_type.empty())
    {
        obj_factory = ObjectFactoryFactory::getSingleton().getConstructor(objfactory_type)(ctx, oh, mainSpace, objfactory_options);
        obj_factory->generate();
    }


    ctx->run(1);

    ctx->cleanup();

    if (GetOptionValue<bool>(PROFILE)) {
        ctx->profiler->report();
    }

    trace->prepareShutdown();
    Mesh::FilterFactory::destroy();
    ModelsSystemFactory::destroy();
    ObjectScriptManagerFactory::destroy();
    delete oh;


    delete obj_storage;
    delete obj_persistent_set;


    SimulationFactory::destroy();



    delete commander;
    delete ctx;
    delete time_series;

    trace->shutdown();
    delete trace;
    trace = NULL;

    delete mainStrand;
    delete ios;

    delete sstConnMgr;
    delete ohSstConnMgr;

    Transfer::TransferMediator::destroy();

    plugins.gc();
    sync.stop();

    Sirikata::Logging::finishLog();

    DaemonCleanup();
    return 0;
}
Esempio n. 5
0
int main (int argc, char** argv) {
    using namespace Sirikata;

    DynamicLibrary::Initialize();

    InitOptions();
    Trace::Trace::InitOptions();
    OHTrace::InitOptions();
    InitCPPOHOptions();

    ParseOptions(argc, argv, OPT_CONFIG_FILE);

    PluginManager plugins;
    String search_path=GetOptionValue<String>(OPT_OH_PLUGIN_SEARCH_PATHS);
    if (search_path.length()) {
        while (true) {
            String::size_type where=search_path.find(":");
            if (where==String::npos) {
                DynamicLibrary::AddLoadPath(search_path);
                break;
            }else {
                DynamicLibrary::AddLoadPath(search_path.substr(0,where));
                search_path=search_path.substr(where+1);
            }
        }
    }
    plugins.loadList( GetOptionValue<String>(OPT_PLUGINS) );
    plugins.loadList( GetOptionValue<String>(OPT_OH_PLUGINS) );


    String time_server = GetOptionValue<String>("time-server");
    NTPTimeSync sync;
    if (time_server.size() > 0)
        sync.start(time_server);

#ifdef __GNUC__
#ifndef __APPLE__
    if (GetOptionValue<bool>(OPT_SIGFPE)) {
        feenableexcept(FE_DIVBYZERO|FE_INVALID|FE_OVERFLOW|FE_UNDERFLOW);
    }
#endif
#endif


    ObjectHostID oh_id = GetOptionValue<ObjectHostID>("ohid");
    String trace_file = GetPerServerFile(STATS_OH_TRACE_FILE, oh_id);
    Trace::Trace* trace = new Trace::Trace(trace_file);

    String servermap_type = GetOptionValue<String>("servermap");
    String servermap_options = GetOptionValue<String>("servermap-options");
    ServerIDMap * server_id_map =
        ServerIDMapFactory::getSingleton().getConstructor(servermap_type)(servermap_options);

    srand( GetOptionValue<uint32>("rand-seed") );

    Network::IOService* ios = Network::IOServiceFactory::makeIOService();
    Network::IOStrand* mainStrand = ios->createStrand();

    Time start_time = Timer::now(); // Just for stats in ObjectHostContext.
    Duration duration = Duration::zero(); // Indicates to run forever.
    ObjectHostContext* ctx = new ObjectHostContext(oh_id, ios, mainStrand, trace, start_time, duration);
    Context::mainContextPtr = ctx;

    String timeseries_type = GetOptionValue<String>(OPT_TRACE_TIMESERIES);
    String timeseries_options = GetOptionValue<String>(OPT_TRACE_TIMESERIES_OPTIONS);
    Trace::TimeSeries* time_series = Trace::TimeSeriesFactory::getSingleton().getConstructor(timeseries_type)(ctx, timeseries_options);


    SSTConnectionManager* sstConnMgr = new SSTConnectionManager();

    SpaceID mainSpace(GetOptionValue<UUID>(OPT_MAIN_SPACE));

    String oh_options = GetOptionValue<String>(OPT_OH_OPTIONS);
    ObjectHost *oh = new CppohObjectHost(ctx, ios, oh_options);

    // Add all the spaces to the ObjectHost.  We used to have SpaceIDMap and
    // fill in the same ServerIDMap for all these. Now we just add the
    // ServerIDMap for the main space. We need a better way of handling multiple
    // spaces.
    oh->addServerIDMap(mainSpace, server_id_map);

    String objstorage_type = GetOptionValue<String>(OPT_OBJECT_STORAGE);
    String objstorage_options = GetOptionValue<String>(OPT_OBJECT_STORAGE_OPTS);
    OH::Storage* obj_storage =
        OH::StorageFactory::getSingleton().getConstructor(objstorage_type)(ctx, objstorage_options);
    oh->setStorage(obj_storage);

    String objpersistentset_type = GetOptionValue<String>(OPT_OH_PERSISTENT_SET);
    String objpersistentset_options = GetOptionValue<String>(OPT_OH_PERSISTENT_SET_OPTS);
    OH::PersistedObjectSet* obj_persistent_set =
        OH::PersistedObjectSetFactory::getSingleton().getConstructor(objpersistentset_type)(ctx, objpersistentset_options);
    oh->setPersistentSet(obj_persistent_set);

    String objfactory_type = GetOptionValue<String>(OPT_OBJECT_FACTORY);
    String objfactory_options = GetOptionValue<String>(OPT_OBJECT_FACTORY_OPTS);
    ObjectFactory* obj_factory = NULL;


    ///////////Go go go!! start of simulation/////////////////////
    ctx->add(ctx);
    ctx->add(obj_storage);
    ctx->add(obj_persistent_set);
    ctx->add(oh);
    ctx->add(sstConnMgr);

    if (!objfactory_type.empty())
    {
        obj_factory = ObjectFactoryFactory::getSingleton().getConstructor(objfactory_type)(ctx, oh, mainSpace, objfactory_options);
        obj_factory->generate();
    }

    
    ctx->run(1);

    ctx->cleanup();
    trace->prepareShutdown();


    delete oh;
    //delete pd;

    delete obj_storage;
    delete obj_persistent_set;

    SimulationFactory::destroy();

    delete sstConnMgr;

    delete ctx;
    delete time_series;

    trace->shutdown();
    delete trace;
    trace = NULL;

    delete mainStrand;
    Network::IOServiceFactory::destroyIOService(ios);

    plugins.gc();
    sync.stop();

    return 0;
}