diff --git a/Database/AthenaPOOL/AthenaPoolCnvSvc/src/AthenaPoolCnvSvc.cxx b/Database/AthenaPOOL/AthenaPoolCnvSvc/src/AthenaPoolCnvSvc.cxx index 1613a0ac98426f0004f09d764236cb7082f8e95d..1f34429dc8725faea6b0717d8593ae5128995a4a 100644 --- a/Database/AthenaPOOL/AthenaPoolCnvSvc/src/AthenaPoolCnvSvc.cxx +++ b/Database/AthenaPOOL/AthenaPoolCnvSvc/src/AthenaPoolCnvSvc.cxx @@ -309,6 +309,10 @@ StatusCode AthenaPoolCnvSvc::connectOutput(const std::string& outputConnectionSp if (!m_outputStreamingTool.empty() && m_outputStreamingTool[0]->isClient()) { return(StatusCode::SUCCESS); } + if (!m_outputStreamingTool.empty() && m_streamServer == m_outputStreamingTool.size()) { + ATH_MSG_DEBUG("connectOutput SKIPPED for expired server."); + return(StatusCode::SUCCESS); + } try { if (!m_poolSvc->connect(pool::ITransaction::UPDATE).isSuccess()) { ATH_MSG_ERROR("connectOutput FAILED to open an UPDATE transaction."); @@ -353,8 +357,13 @@ StatusCode AthenaPoolCnvSvc::commitOutput(const std::string& outputConnectionSpe } return(StatusCode::SUCCESS); } + if (!m_outputStreamingTool.empty() && m_streamServer == m_outputStreamingTool.size()) { + ATH_MSG_DEBUG("commitOutput SKIPPED for expired server."); + return(StatusCode::SUCCESS); + } std::map<void*, RootType> commitCache; - if (!m_outputStreamingTool.empty() && m_outputStreamingTool[m_streamServer]->isServer()) { + if (!m_outputStreamingTool.empty() && m_streamServer < m_outputStreamingTool.size() + && m_outputStreamingTool[m_streamServer]->isServer()) { // Clear object to get Placements for all objects in a Stream char* placementStr = nullptr; int num = -1; @@ -530,6 +539,13 @@ StatusCode AthenaPoolCnvSvc::disconnectOutput() { if (!m_outputStreamingTool.empty() && m_outputStreamingTool[0]->isClient()) { return(StatusCode::SUCCESS); } + if (!m_outputStreamingTool.empty() && m_streamServer == m_outputStreamingTool.size()) { + ATH_MSG_DEBUG("disconnectOutput SKIPPED for expired server."); + return(StatusCode::SUCCESS); + } + if (!m_outputStreamingTool.empty()) { + m_streamServer = m_outputStreamingTool.size(); + } // Setting default 'TREE_MAX_SIZE' for ROOT to 1024 GB to avoid file chains. std::vector<std::string> maxFileSize; maxFileSize.push_back("TREE_MAX_SIZE"); @@ -686,6 +702,12 @@ const Token* AthenaPoolCnvSvc::registerForWrite(const Placement* placement, tempToken->fromString(tokenStr); tokenStr = nullptr; token = tempToken; tempToken = nullptr; } else { + if (!m_outputStreamingTool.empty() && m_streamServer == m_outputStreamingTool.size()) { + ATH_MSG_DEBUG("registerForWrite SKIPPED for expired server."); + Token* tempToken = new Token(); + tempToken->setClassID(pool::DbReflex::guid(classDesc)); + return(tempToken); + } token = m_poolSvc->registerForWrite(placement, obj, classDesc); } if (m_doChronoStat) {