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; } }
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; }