diff --git a/Database/AthenaPOOL/AthenaPoolCnvSvc/src/AthenaPoolCnvSvc.cxx b/Database/AthenaPOOL/AthenaPoolCnvSvc/src/AthenaPoolCnvSvc.cxx index e4a19aa45a87c362f22e2b2885b0965acfd4cb53..6ee02a6d051705c79a097931c87ffe7437ac773c 100644 --- a/Database/AthenaPOOL/AthenaPoolCnvSvc/src/AthenaPoolCnvSvc.cxx +++ b/Database/AthenaPOOL/AthenaPoolCnvSvc/src/AthenaPoolCnvSvc.cxx @@ -314,7 +314,7 @@ StatusCode AthenaPoolCnvSvc::connectOutput(const std::string& outputConnectionSp } if (!m_outputStreamingTool.empty() && m_outputStreamingTool[0]->isClient() && m_streamMetaDataOnly) { - outputConnection = outputConnection + "?pmerge=localhost:1095"; + outputConnection = outputConnection + m_streamPortString.value(); } unsigned int contextId = outputContextId(outputConnection); try { @@ -607,7 +607,7 @@ StatusCode AthenaPoolCnvSvc::commitOutput(const std::string& outputConnectionSpe doCommit = true; ATH_MSG_DEBUG("commitOutput sending data."); } - outputConnection = outputConnection + "?pmerge=localhost:1095"; + outputConnection = outputConnection + m_streamPortString.value(); } unsigned int contextId = outputContextId(outputConnection); if (!processPoolAttributes(m_domainAttr, outputConnection, contextId).isSuccess()) { @@ -683,7 +683,7 @@ StatusCode AthenaPoolCnvSvc::disconnectOutput(const std::string& outputConnectio ATH_MSG_DEBUG("disconnectOutput not SKIPPED for server: " << m_streamServer); } if (!m_outputStreamingTool.empty() && m_outputStreamingTool[0]->isClient() && m_streamMetaDataOnly) { - outputConnection = outputConnection + "?pmerge=localhost:1095"; + outputConnection = outputConnection + m_streamPortString.value(); } unsigned int contextId = outputContextId(outputConnection); StatusCode sc = m_poolSvc->disconnect(contextId); @@ -830,7 +830,7 @@ Token* AthenaPoolCnvSvc::registerForWrite(Placement* placement, const void* obj, } } else { if (!m_outputStreamingTool.empty() && m_outputStreamingTool[0]->isClient() && m_streamMetaDataOnly) { - placement->setFileName(placement->fileName() + "?pmerge=localhost:1095"); + placement->setFileName(placement->fileName() + m_streamPortString.value()); } if (m_persSvcPerOutput) { char text[32]; diff --git a/Database/AthenaPOOL/AthenaPoolCnvSvc/src/AthenaPoolCnvSvc.h b/Database/AthenaPOOL/AthenaPoolCnvSvc/src/AthenaPoolCnvSvc.h index 0f1420668e6e27af0d182b31ae22990cc9c5603f..630766b5b972b8be53234925947df356cb49e18a 100644 --- a/Database/AthenaPOOL/AthenaPoolCnvSvc/src/AthenaPoolCnvSvc.h +++ b/Database/AthenaPOOL/AthenaPoolCnvSvc/src/AthenaPoolCnvSvc.h @@ -251,6 +251,8 @@ private: // properties IntegerProperty m_makeStreamingToolClient{this,"MakeStreamingToolClient",0}; /// Use Athena Object sharing for metadata only, event data is collected and send via ROOT TMemFile BooleanProperty m_streamMetaDataOnly{this,"StreamMetaDataOnly",false}; + /// Extension to use ROOT TMemFile for event data, "?pmerge=<host>:<port>" + StringProperty m_streamPortString{this,"StreamPortString","?pmerge=localhost:1095"}; /// When using TMemFile call Write on number of Events, respecting CollectionTree auto_flush IntegerProperty m_numberEventsPerWrite{this,"NumberEventsPerWrite",10}; }; diff --git a/Database/AthenaPOOL/AthenaPoolCnvSvc/src/AthenaRootSharedWriterSvc.cxx b/Database/AthenaPOOL/AthenaPoolCnvSvc/src/AthenaRootSharedWriterSvc.cxx index ae52fa8e12ea57e5486361ee8a2fa855cc7dd9ca..0ecf216f801b4c8064e0a8c4d001215215f3d320 100644 --- a/Database/AthenaPOOL/AthenaPoolCnvSvc/src/AthenaRootSharedWriterSvc.cxx +++ b/Database/AthenaPOOL/AthenaPoolCnvSvc/src/AthenaRootSharedWriterSvc.cxx @@ -162,15 +162,24 @@ StatusCode AthenaRootSharedWriterSvc::initialize() { BooleanProperty streamMetaDataOnlyProp(propertyName, streamMetaDataOnly); if (propertyServer->getProperty(&streamMetaDataOnlyProp).isFailure()) { ATH_MSG_INFO("Conversion service does not have StreamMetaDataOnly property"); - } else if(streamMetaDataOnlyProp.value()) { - m_rootServerSocket = new TServerSocket(1095, true, 100); + } else if (streamMetaDataOnlyProp.value()) { + int streamPort = 1095; + propertyName = "StreamPortString"; + std::string streamPortString(""); + StringProperty streamPortStringProp(propertyName, streamPortString); + if (propertyServer->getProperty(&streamPortStringProp).isFailure()) { + ATH_MSG_INFO("Conversion service does not have StreamPortString property, using default: " << streamPort); + } else { + streamPort = atoi(streamPortStringProp.value().substr(streamPortStringProp.value().find(":") + 1).c_str()); + } + m_rootServerSocket = new TServerSocket(streamPort, true, 100); if (m_rootServerSocket == nullptr || !m_rootServerSocket->IsValid()) { - ATH_MSG_FATAL("Could not create ROOT TServerSocket"); + ATH_MSG_FATAL("Could not create ROOT TServerSocket: " << streamPort); return StatusCode::FAILURE; } m_rootMonitor = new TMonitor; m_rootMonitor->Add(m_rootServerSocket); - ATH_MSG_DEBUG("Successfully created ROOT TServerSocket and added it to TMonitor: ready to accept connections!"); + ATH_MSG_DEBUG("Successfully created ROOT TServerSocket and added it to TMonitor: ready to accept connections, " << streamPort); } }