6 #include "TFileCacheRead.h"
16 #include "TTreeCache.h"
19 class TTreeCacheDebug :
public TTreeCache {
21 void dump(
const char *
label,
const char *trailer)
23 Long64_t
entry = fOwner->GetReadEntry();
25 << label <<
": " << entry <<
" "
26 <<
"{ fEntryMin=" << fEntryMin
27 <<
", fEntryMax=" << fEntryMax
28 <<
", fEntryNext=" << fEntryNext
29 <<
", fZipBytes=" << fZipBytes
30 <<
", fNbranches=" << fNbranches
31 <<
", fNReadOk=" << fNReadOk
32 <<
", fNReadMiss=" << fNReadMiss
33 <<
", fNReadPref=" << fNReadPref
34 <<
", fBranches=" << fBranches
35 <<
", fBrNames=" << fBrNames
36 <<
", fOwner=" << fOwner
37 <<
", fTree=" << fTree
38 <<
", fIsLearning=" << fIsLearning
39 <<
", fIsManual=" << fIsManual
40 <<
"; fBufferSizeMin=" << fBufferSizeMin
41 <<
", fBufferSize=" << fBufferSize
42 <<
", fBufferLen=" << fBufferLen
43 <<
", fBytesToPrefetch=" << fBytesToPrefetch
44 <<
", fFirstIndexToPrefetch=" << fFirstIndexToPrefetch
45 <<
", fAsyncReading=" << fAsyncReading
46 <<
", fNseek=" << fNseek
47 <<
", fNtot=" << fNtot
49 <<
", fSeekSize=" << fSeekSize
50 <<
", fSeek=" << fSeek
51 <<
", fSeekIndex=" << fSeekIndex
52 <<
", fSeekSort=" << fSeekSort
54 <<
", fSeekLen=" << fSeekLen
55 <<
", fSeekSortLen=" << fSeekSortLen
56 <<
", fSeekPos=" << fSeekPos
58 <<
", fFile=" << fFile
59 <<
", fBuffer=" << (
void *) fBuffer
60 <<
", fIsSorted=" << fIsSorted
101 : TFile(path,
"NET", ftitle, compress),
110 if (fOption ==
"NEW")
113 Bool_t
create = (fOption ==
"CREATE");
114 Bool_t recreate = (fOption ==
"RECREATE");
115 Bool_t
update = (fOption ==
"UPDATE");
116 Bool_t
read = (fOption ==
"READ");
118 if (!create && !recreate && !update && !read)
126 if (!gSystem->AccessPathName(path, kFileExists))
127 gSystem->Unlink(path);
134 if (update && gSystem->AccessPathName(path, kFileExists))
150 throw cms::Exception(
"TStorageFactoryFile::TStorageFactoryFile()")
151 <<
"Cannot open file '" << path <<
"'";
156 fWritable = read ? kFALSE : kTRUE;
188 Error(
"ReadBuffer",
"Cannot read from a zombie file");
194 Error(
"ReadBuffer",
"Cannot read from a file that is not open");
211 if (TFileCacheRead *
c = GetCacheRead())
213 Long64_t here = GetRelOffset();
214 Bool_t async =
c->IsAsyncReading();
220 Int_t st = ReadBufferViaCache(async ? 0 : buf, len);
246 return n ? kFALSE : kTRUE;
255 Error(
"ReadBufferAsync",
"Cannot read from a zombie file");
261 Error(
"ReadBufferAsync",
"Cannot read from a file that is not open");
309 Error(
"ReadBuffers",
"Cannot read from a zombie file");
315 Error(
"ReadBuffers",
"Cannot read from a file that is not open");
330 TFileCacheRead *old = fCacheRead;
334 std::vector<char> buf2(0);
351 Bool_t bigRead = kTRUE;
364 if (bigRead || (i>=nbuf))
393 assert(len[i-1] >= 0);
394 assert(pos[i-1] >= curbegin);
399 result = ( nahead ==
storage_->
xread(&buf2[0], nahead)) ? kFALSE : kTRUE;
407 for (Int_t
j=0;
j<
n;
j++) {
408 memcpy(&buf[k],&buf2[pos[i-n+
j]-curbegin],len[i-n+
j]);
422 std::vector<IOPosBuffer>
iov;
424 for (Int_t
i = 0;
i < nbuf; ++
i)
426 iov.push_back(
IOPosBuffer(pos[
i], buf ? buf + total : 0, len[i]));
439 return success ? kFALSE : TFile::ReadBuffers(buf, pos, len, nbuf);
448 Error(
"WriteBuffer",
"Cannot write to a zombie file");
454 Error(
"WriteBuffer",
"Cannot write to a file that is not open");
460 Error(
"WriteBuffer",
"File is not writable");
469 switch ((st = WriteBufferViaCache(buf, len)))
480 return n > 0 ? kFALSE : kTRUE;
490 Error(
"WriteBuffer",
"Error writing to cache");
531 <<
"Cannot open file '" << pathname <<
"'";
578 Long_t *
flags, Long_t *modtime)
582 *
id = ::Hash(fRealName);
593 TSystem::ResetErrno();
TStorageFactoryFile(void)
IOSize xwrite(const void *from, IOSize n)
CacheHint cacheHint(void) const
static StorageAccount::Counter * s_statsWrite
static StorageAccount::Counter * s_statsStat
virtual Long64_t SysSeek(Int_t fd, Long64_t offset, Int_t whence)
virtual Int_t SysOpen(const char *pathname, Int_t flags, UInt_t mode)
static StorageAccount::Counter * s_statsXWrite
static StorageAccount::Counter * s_statsClose
std::vector< Variable::Flags > flags
virtual Bool_t ReadBuffers(char *buf, Long64_t *pos, Int_t *len, Int_t nbuf)
static StorageFactory * get(void)
static StorageAccount::Counter & storageCounter(StorageAccount::Counter *&c, const char *label)
static StorageAccount::Counter * s_statsARead
virtual Bool_t ReadBufferAsync(Long64_t off, Int_t len)
unsigned int(* Counter)(align::ID)
std::pair< std::string, MonitorElement * > entry
virtual IOOffset position(void) const
static StorageAccount::Counter * s_statsCtor
virtual Bool_t ReadBuffer(char *buf, Int_t len)
virtual Bool_t WriteBuffer(const char *buf, Int_t len)
unsigned int offset(bool)
static StorageAccount::Counter * s_statsRead
static StorageAccount::Counter * s_statsXRead
static StorageAccount::Counter * s_statsFlush
void tick(double amount=0.) const
virtual bool prefetch(const IOPosBuffer *what, IOSize n)
static StorageAccount::Counter * s_statsCWrite
static Counter & counter(const std::string &storageClass, const std::string &operation)
virtual IOOffset size(void) const
~TStorageFactoryFile(void)
void ResetErrno(void) const
IOSize IOSized(IOOffset n)
virtual Int_t SysStat(Int_t fd, Long_t *id, Long64_t *size, Long_t *flags, Long_t *modtime)
virtual Int_t SysClose(Int_t fd)
static StorageAccount::Counter * s_statsSeek
static StorageAccount::Counter * s_statsOpen
virtual Int_t SysSync(Int_t fd)
tuple size
Write out results.
static StorageAccount::Counter * s_statsCPrefetch
#define READ_COALESCE_SIZE
static StorageAccount::Counter * s_statsCRead