xrootd
Loading...
Searching...
No Matches
XrdRmcData.hh
Go to the documentation of this file.
1#ifndef __XRDRMCDATA_HH__
2#define __XRDRMCDATA_HH__
3/******************************************************************************/
4/* */
5/* X r d R m c D a t a . h h */
6/* */
7/* (c) 2019 by the Board of Trustees of the Leland Stanford, Jr., University */
8/* All Rights Reserved */
9/* Produced by Andrew Hanushevsky for Stanford University under contract */
10/* DE-AC02-76-SFO0515 with the Department of Energy */
11/* */
12/* This file is part of the XRootD software suite. */
13/* */
14/* XRootD is free software: you can redistribute it and/or modify it under */
15/* the terms of the GNU Lesser General Public License as published by the */
16/* Free Software Foundation, either version 3 of the License, or (at your */
17/* option) any later version. */
18/* */
19/* XRootD is distributed in the hope that it will be useful, but WITHOUT */
20/* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */
21/* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public */
22/* License for more details. */
23/* */
24/* You should have received a copy of the GNU Lesser General Public License */
25/* along with XRootD in a file called COPYING.LESSER (LGPL license) and file */
26/* COPYING (GPL license). If not, see <http://www.gnu.org/licenses/>. */
27/* */
28/* The copyright holder's institutional names and contributor's names may not */
29/* be used to endorse or promote products derived from this software without */
30/* specific prior written permission of the institution or contributor. */
31/******************************************************************************/
32
33/* The XrdRmcData object defines a remanufactured XrdOucCacheIO object and
34 is used to front a XrdOucCacheIO object with an XrdRmcReal object.
35*/
36
37#include "XrdOuc/XrdOucCache.hh"
38#include "XrdRmc/XrdRmcReal.hh"
41
43{
44public:
45
47
48long long FSize() {return (ioObj ? ioObj->FSize() : 0);}
49
50const char *Path() {return ioObj->Path();}
51
52void Preread();
53
54void Preread(aprParms &Parms);
55
56void Preread(long long Offs, int rLen, int Opts=0);
57
58int Read (char *Buffer, long long Offset, int Length);
59
60static int setAPR(aprParms &Dest, aprParms &Src, int pSize);
61
62int Sync() {return 0;} // We only support write-through for now
63
64int Trunc(long long Offset);
65
66int Write(char *Buffer, long long Offset, int Length);
67
69 long long vn, int opts);
70
71private:
73void QueuePR(long long SegOffs, int rLen, int prHow, int isAuto=0);
75 char *Buffer, long long Offs, int Length);
76
77// The following is for read/write support
78//
79class MrSw
80{
81public:
82inline void UnLock() {if (myLock) {myLock->UnLock(myUsage); myLock = 0;}}
83
85 {if ((myLock = lP)) lP->Lock(usage);}
87
88private:
91};
92
93// Statics per connection
94//
96
97// The following supports MRSW serialization
98//
100XrdSysXSLock *pPLock; // 0 if no preread lock required
101XrdSysXSLock *rPLock; // 0 if no read lock required
102XrdSysXSLock *wPLock; // 0 if no write lock required
105
109long long VNum;
110long long SegSize;
111long long OffMask;
112long long SegShft;
114char isFIS;
115char isRW;
116char Debug;
117
118static const int okRW = 1;
119static const int xqRW = 2;
120
121// Preread Control Area
122//
125
126long long prNSS; // Next Sequential Segment for maxi prereads
127
128static const int prRRMax= 5;
129long long prRR[prRRMax]; // Recent reads
130int prRRNow; // Pointer to next entry to use
131
132static const int prMax = 8;
133static const int prRun = 1; // Status in prActive (running)
134static const int prWait = 2; // Status in prActive (waiting)
135
136static const int prLRU = 1; // Status in prOpt (set LRU)
137static const int prSUSE = 2; // Status in prOpt (set Single Use)
138static const int prSKIP = 3; // Status in prOpt (skip entry)
139
141long long prCalc;
142long long prBeg[prMax];
143long long prEnd[prMax];
148char prOK;
151};
152#endif
XrdSysXS_Type
Definition XrdSysXSLock.hh:38
Definition XrdOucCache.hh:82
Definition XrdOucCache.hh:105
virtual long long FSize()=0
virtual const char * Path()=0
Definition XrdOucCacheStats.hh:44
Definition XrdRmcData.hh:80
~MrSw()
Definition XrdRmcData.hh:86
MrSw(XrdSysXSLock *lP, XrdSysXS_Type usage)
Definition XrdRmcData.hh:84
XrdSysXS_Type myUsage
Definition XrdRmcData.hh:90
void UnLock()
Definition XrdRmcData.hh:82
XrdSysXSLock * myLock
Definition XrdRmcData.hh:89
Definition XrdRmcData.hh:43
XrdSysMutex DMutex
Definition XrdRmcData.hh:106
XrdSysXSLock * pPLock
Definition XrdRmcData.hh:100
static const int prMax
Definition XrdRmcData.hh:132
~XrdRmcData()
Definition XrdRmcData.hh:72
static const int prLRU
Definition XrdRmcData.hh:136
int prFree
Definition XrdRmcData.hh:145
void Preread(aprParms &Parms)
aprParms Apr
Definition XrdRmcData.hh:140
XrdSysXSLock rwLock
Definition XrdRmcData.hh:99
XrdSysXS_Type rPLopt
Definition XrdRmcData.hh:104
XrdOucCacheStats Statistics
Definition XrdRmcData.hh:95
char prAuto
Definition XrdRmcData.hh:150
int Read(char *Buffer, long long Offset, int Length)
XrdSysSemaphore * prStop
Definition XrdRmcData.hh:124
char prOK
Definition XrdRmcData.hh:148
static const int prSUSE
Definition XrdRmcData.hh:137
void Preread()
long long OffMask
Definition XrdRmcData.hh:111
long long VNum
Definition XrdRmcData.hh:109
int prRRNow
Definition XrdRmcData.hh:130
int Trunc(long long Offset)
long long prCalc
Definition XrdRmcData.hh:141
static const int xqRW
Definition XrdRmcData.hh:119
long long prBeg[prMax]
Definition XrdRmcData.hh:142
static const int prWait
Definition XrdRmcData.hh:134
static const int prRRMax
Definition XrdRmcData.hh:128
void Preread(long long Offs, int rLen, int Opts=0)
long long prNSS
Definition XrdRmcData.hh:126
int prPerf
Definition XrdRmcData.hh:146
XrdSysXSLock * rPLock
Definition XrdRmcData.hh:101
void QueuePR(long long SegOffs, int rLen, int prHow, int isAuto=0)
XrdRmcReal * Cache
Definition XrdRmcData.hh:107
int Read(XrdOucCacheStats &Now, char *Buffer, long long Offs, int Length)
XrdRmcReal::prTask prReq
Definition XrdRmcData.hh:123
XrdSysXSLock * wPLock
Definition XrdRmcData.hh:102
long long prRR[prRRMax]
Definition XrdRmcData.hh:129
int maxCache
Definition XrdRmcData.hh:113
XrdRmcData(XrdRmcReal *cP, XrdOucCacheIO *ioP, long long vn, int opts)
char Debug
Definition XrdRmcData.hh:116
char isRW
Definition XrdRmcData.hh:115
char prActive
Definition XrdRmcData.hh:149
static const int prSKIP
Definition XrdRmcData.hh:138
long long FSize()
Definition XrdRmcData.hh:48
long long SegShft
Definition XrdRmcData.hh:112
int Write(char *Buffer, long long Offset, int Length)
char prOpt[prMax]
Definition XrdRmcData.hh:147
long long SegSize
Definition XrdRmcData.hh:110
long long prEnd[prMax]
Definition XrdRmcData.hh:143
XrdSysXS_Type pPLopt
Definition XrdRmcData.hh:103
int prNext
Definition XrdRmcData.hh:144
static const int okRW
Definition XrdRmcData.hh:118
static const int prRun
Definition XrdRmcData.hh:133
const char * Path()
Definition XrdRmcData.hh:50
bool Detach(XrdOucCacheIOCD &iocd)
int Sync()
Definition XrdRmcData.hh:62
static int setAPR(aprParms &Dest, aprParms &Src, int pSize)
char isFIS
Definition XrdRmcData.hh:114
XrdOucCacheIO * ioObj
Definition XrdRmcData.hh:108
Definition XrdRmcReal.hh:40
Definition XrdSysPthread.hh:165
Definition XrdSysPthread.hh:494
Definition XrdSysXSLock.hh:45
void Lock(const XrdSysXS_Type usage)
void UnLock(const XrdSysXS_Type usage=xs_None)
Definition XrdOucCache.hh:291
Definition XrdRmcReal.hh:123