From d9d5b59a0564dba960b06cb111f6614f0f1c9e67 Mon Sep 17 00:00:00 2001
From: Peter van Gemmeren <gemmeren@anl.gov>
Date: Tue, 16 Oct 2018 15:33:36 -0500
Subject: [PATCH] Manually switch on TTreeCache in case ROOT fails to do so by
 default.

Former-commit-id: 74f5adaa9764834181c913aea82bd54a76c0b6dc
---
 Database/APR/RootStorageSvc/src/RootDatabase.cpp      | 11 +++++++++--
 .../AthenaPoolCnvSvc/python/ReadAthenaPool.py         |  3 +++
 2 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/Database/APR/RootStorageSvc/src/RootDatabase.cpp b/Database/APR/RootStorageSvc/src/RootDatabase.cpp
index e1dc0f7ae30..62fbeedc0b4 100644
--- a/Database/APR/RootStorageSvc/src/RootDatabase.cpp
+++ b/Database/APR/RootStorageSvc/src/RootDatabase.cpp
@@ -45,7 +45,7 @@ RootDatabase::RootDatabase() :
         m_defBufferSize(16*1024),
         m_defWritePolicy(TObject::kOverwrite),   // On write create new versions
         m_branchOffsetTabLen(0),
-        m_defTreeCacheLearnEvents(100),
+        m_defTreeCacheLearnEvents(-1),
         m_fileMgr(nullptr)
 {
   m_version = "1.1";
@@ -670,7 +670,14 @@ DbStatus RootDatabase::setOption(const DbOption& opt)  {
            else log << DbPrintLvl::Debug << "Got tree " << tr->GetName() 
                     << " read entry " << tr->GetReadEntry() << DbPrint::endmsg;
            tr->SetCacheSize(cacheSize);
-           TTreeCache::SetLearnEntries(m_defTreeCacheLearnEvents);
+           if (m_defTreeCacheLearnEvents < 0) {
+              long long int autoFlush = tr->GetAutoFlush();
+              if (autoFlush > 0) { // Tree was written flushing on number of events
+                 TTreeCache::SetLearnEntries(-m_defTreeCacheLearnEvents * autoFlush);
+              }
+           } else {
+              TTreeCache::SetLearnEntries(m_defTreeCacheLearnEvents);
+           }
            TTreeCache* cache = (TTreeCache*)m_file->GetCacheRead();
            if (cache) {
                cache->SetEntryRange(0, tr->GetEntries());
diff --git a/Database/AthenaPOOL/AthenaPoolCnvSvc/python/ReadAthenaPool.py b/Database/AthenaPOOL/AthenaPoolCnvSvc/python/ReadAthenaPool.py
index 4d3640170db..c52cd8dd492 100644
--- a/Database/AthenaPOOL/AthenaPoolCnvSvc/python/ReadAthenaPool.py
+++ b/Database/AthenaPOOL/AthenaPoolCnvSvc/python/ReadAthenaPool.py
@@ -32,6 +32,9 @@ def _configureReadAthenaPool():
     # Load the basic services
     import AthenaPoolCnvSvc.AthenaPool
 
+    # Switch on TTreeCache for CollectionTree
+    svcMgr.AthenaPoolCnvSvc.InputPoolAttributes += [ "DatabaseName = '*'; ContainerName = 'CollectionTree'; TREE_CACHE = '-1'" ]
+
     # Load ProxyProviderSvc
     if not hasattr (svcMgr, 'ProxyProviderSvc'):
         svcMgr += CfgMgr.ProxyProviderSvc()
-- 
GitLab