Exemple #1
0
void SNetStorageRPC::x_InitNetCacheAPI()
{
    if (!m_NetCacheAPI) {
        CNetCacheAPI nc_api(m_Config.nc_service, m_Config.client_name);
        nc_api.SetCompoundIDPool(m_CompoundIDPool);
        nc_api.SetDefaultParameters(nc_use_compound_id = true);

#ifdef NCBI_GRID_XSITE_CONN_SUPPORT
        if (m_AllowXSiteConnections) {
            nc_api.GetService().AllowXSiteConnections();
        }
#endif

        m_NetCacheAPI = nc_api;
    }
}
Exemple #2
0
int CTestNSStorage::Run(void)
{
    const CArgs& args = GetArgs();
    const string& service  = args["service"].AsString();

    CNcbiRegistry reg;
    reg.Set(kDriverName, "service", service);
    reg.Set(kDriverName, "client_name", "test_blobstorage_netcache");
    if (args["protocol"])
	reg.Set(kDriverName, "protocol", args["protocol"].AsString());

    CNetCacheAPI nc_api(reg);
    auto_ptr<IBlobStorage> storage1(new CBlobStorage_NetCache(nc_api));
    auto_ptr<IBlobStorage> storage2(new CBlobStorage_NetCache(nc_api));

    string blobid;
    CNcbiOstream& os = storage1->CreateOStream(blobid);
    os << "Test_date";
    size_t blobsize;

    try {
        /*CNcbiIstream& is = */storage2->GetIStream(blobid, &blobsize,
                               IBlobStorage::eLockNoWait );
	throw runtime_error("The blob \"" + blobid + "\" must be locked. Server error.");
    } catch( CBlobStorageException& ex ) {
        if( ex.GetErrCode() == CBlobStorageException::eBlocked ) {
            cout << "Blob : " << blobid << " is blocked" << endl;
        } else {
            throw;
        }
    }


    storage1.reset(0);

    cout << "Second attempt." << endl;

    CNcbiIstream& is = storage2->GetIStream(blobid, &blobsize);
    string res;
    is >> res;
    cout << res << endl;

    return 0;
}
int CNSRemoteJobControlApp::Run(void)
{

    const CArgs& args = GetArgs();
    IRWRegistry& reg = GetConfig();

    if (args["q"]) {
        string queue = args["q"].AsString();
        reg.Set(kNetScheduleAPIDriverName, "queue_name", queue);
    }

    if ( args["ns"]) {
        reg.Set(kNetScheduleAPIDriverName, "client_name", "ns_remote_job_control");
        reg.Set(kNetScheduleAPIDriverName, "service", args["ns"].AsString());
        reg.Set(kNetScheduleAPIDriverName, "use_permanent_connection", "true");
        reg.Set(kNetScheduleAPIDriverName, "use_embedded_storage", "true");
    }

    if ( args["nc"]) {
        reg.Set(kNetCacheAPIDriverName, "client_name", "ns_remote_job_control");
        reg.Set(kNetCacheAPIDriverName, "service", args["nc"].AsString());
    }


    auto_ptr<CNSInfoCollector> info_collector;
    CNcbiOstream* out = &NcbiCout;
    if (args["of"]) {
        out = &args["of"].AsOutputFile();
    }

    CNetCacheAPI nc_api(reg);

    auto_ptr<CConfig::TParamTree> ptree(CConfig::ConvertRegToTree(reg));
    const CConfig::TParamTree* ns_tree = ptree->FindSubNode(kNetScheduleAPIDriverName);
    if (!ns_tree)
        NCBI_THROW(CArgException, eInvalidArg,
                   "Could not find \"" + string(kNetScheduleAPIDriverName) + "\" section");

    CConfig ns_conf(ns_tree);
    string queue = ns_conf.GetString(kNetScheduleAPIDriverName, "queue_name", CConfig::eErr_NoThrow, "");
    NStr::TruncateSpacesInPlace(queue);
    if (queue.empty())
        queue = "noname";

    string service = ns_conf.GetString(kNetScheduleAPIDriverName, "service", CConfig::eErr_NoThrow, "");
    NStr::TruncateSpacesInPlace(service);
    if (service.empty())
        NCBI_THROW(CArgException, eInvalidArg,
                   "\"service\" parameter is not set "
                   "neither in config file nor in cmd line");

    info_collector.reset(new CNSInfoCollector(queue, service, nc_api));

    if (args["stdout"]) {
        DumpStdStreams(args["stdout"], info_collector.get(), out, false);

        return 0;
    }

    if (args["stderr"]) {
        DumpStdStreams(args["stderr"], info_collector.get(), out, true);

        return 0;
    }

    auto_ptr<ITagWriter> writer;
    if (args["render"]) {
        string type = args["render"].AsString();
        if(NStr::CompareNocase(type, "xml") == 0)
            writer.reset(new CXmlTagWriter(*out));
    }
    if (!writer.get())
        writer.reset(new CTextTagWriter(*out));

    try {

    if (args["bid"]) {
        auto_ptr<CNSInfoRenderer> renderer(new CNSInfoRenderer(*writer, *info_collector));
        string id = args["bid"].AsString();
        renderer->RenderBlob(id);
        return 0;
    }

    CNSInfoRenderer::TFlags flags = 0;
    if (args["attr"]) {
        const CArgValue::TStringArray& strings = args["attr"].GetStringList();
        CArgValue::TStringArray::const_iterator it;
        for( it = strings.begin(); it != strings.end(); ++it) {
            if (NStr::CompareNocase(*it, "minmal") == 0)
                flags = CNSInfoRenderer::eMinimal;
            if (NStr::CompareNocase(*it, "standard") == 0)
                flags = CNSInfoRenderer::eStandard;
            if (NStr::CompareNocase(*it, "full") == 0)
                flags = CNSInfoRenderer::eFull;
            if (NStr::CompareNocase(*it, "status") == 0)
                flags |= CNSInfoRenderer::eStatus;
            if (NStr::CompareNocase(*it, "progress") == 0)
                flags |= CNSInfoRenderer::eProgress;
            if (NStr::CompareNocase(*it, "retcode") == 0)
                flags |= CNSInfoRenderer::eRetCode;
            if (NStr::CompareNocase(*it, "cmdline") == 0)
                flags |= CNSInfoRenderer::eCmdLine;
            if (NStr::CompareNocase(*it, "stdin") == 0)
                flags |= CNSInfoRenderer::eStdIn;
            if (NStr::CompareNocase(*it, "stdout") == 0)
                flags |= CNSInfoRenderer::eStdOut;
            if (NStr::CompareNocase(*it, "stderr") == 0)
                flags |= CNSInfoRenderer::eStdErr;
            if (NStr::CompareNocase(*it, "raw_input") == 0)
                flags |= CNSInfoRenderer::eRawInput;
            if (NStr::CompareNocase(*it, "raw_output") == 0)
                flags |= CNSInfoRenderer::eRawOutput;
        }
    }

    auto_ptr<CNSInfoRenderer> renderer(new CNSInfoRenderer(*writer, *info_collector));

    if (args["jid"]) {
        string jid = args["jid"].AsString();
        renderer->RenderJob(jid, flags);
    } else if (args["wnlist"]) {
        renderer->RenderWNodes(flags);
    } else if (args["qlist"]) {
        renderer->RenderQueueList();
    } else if (args["cancel"]) {
        string jid = args["cancel"].AsString();
        info_collector->CancelJob(jid);
    } else if (args["cmd"]) {
        string cmd = args["cmd"].AsString();
        if (NStr::CompareNocase(cmd, "shutdown_nodes") == 0) {
            CWNodeShutdownAction action(CNetScheduleAdmin::eShutdownImmediate);
            info_collector->TraverseNodes(action);
        } else if (NStr::CompareNocase(cmd, "kill_nodes") == 0) {
            CWNodeShutdownAction action(CNetScheduleAdmin::eDie);
            info_collector->TraverseNodes(action);
        }
    }

    } catch (exception& ex) {
        writer->WriteBeginTag("Error");
        writer->WriteText(ex.what());
        writer->WriteCloseTag("Error");
        return 1;
    } catch (...) {
        writer->WriteTag("Error", "Unknown error");
        return 2;
    }

    return 0;
}