xrootd
Main Page
Namespaces
Classes
Files
File List
File Members
src
XrdOuc
XrdOucCacheData.hh
Go to the documentation of this file.
1
#ifndef __XRDOUCCACHEDATA_HH__
2
#define __XRDOUCCACHEDATA_HH__
3
/******************************************************************************/
4
/* */
5
/* X r d O u c C a c h e D a t a . h h */
6
/* */
7
/* (c) 2011 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 XrdOucCacheData object defines a remanufactured XrdOucCacheIO object and
34
is used to front a XrdOucCacheIO object with an XrdOucCacheReal object.
35
*/
36
37
#include "
XrdOuc/XrdOucCache.hh
"
38
#include "
XrdOuc/XrdOucCacheReal.hh
"
39
#include "
XrdSys/XrdSysPthread.hh
"
40
#include "
XrdSys/XrdSysXSLock.hh
"
41
42
/******************************************************************************/
43
/* C l a s s X r d O u c C a c h e D a t a */
44
/******************************************************************************/
45
46
class
XrdOucCacheData
:
public
XrdOucCacheIO
47
{
48
public
:
49
50
XrdOucCacheIO
*
Base
() {
return
ioObj
;}
51
52
XrdOucCacheIO
*
Detach
();
53
54
long
long
FSize
() {
return
(
ioObj
?
ioObj
->
FSize
() : 0);}
55
56
const
char
*
Path
() {
return
ioObj
->
Path
();}
57
58
void
Preread
();
59
60
void
Preread
(aprParms &Parms);
61
62
void
Preread
(
long
long
Offs,
int
rLen,
int
Opts
=0);
63
64
int
Read
(
char
*Buffer,
long
long
Offset,
int
Length);
65
66
static
int
setAPR
(aprParms &Dest, aprParms &Src,
int
pSize);
67
68
int
Sync
() {
return
0;}
// We only support write-through for now
69
70
int
Trunc
(
long
long
Offset);
71
72
int
Write
(
char
*Buffer,
long
long
Offset,
int
Length);
73
74
XrdOucCacheData
(
XrdOucCacheReal
*cP,
XrdOucCacheIO
*ioP,
75
long
long
vn,
int
opts
);
76
77
private
:
78
~XrdOucCacheData
() {}
79
void
QueuePR
(
long
long
SegOffs,
int
rLen,
int
prHow,
int
isAuto=0);
80
int
Read
(
XrdOucCacheStats
&Now,
81
char
*Buffer,
long
long
Offs,
int
Length);
82
83
// The following is for read/write support
84
//
85
class
MrSw
86
{
87
public
:
88
inline
void
UnLock
() {
if
(
myLock
) {
myLock
->
UnLock
(
myUsage
);
myLock
= 0;}}
89
90
MrSw
(
XrdSysXSLock
*lP,
XrdSysXS_Type
usage) :
myUsage
(usage)
91
{
if
((
myLock
= lP)) lP->
Lock
(usage);}
92
~MrSw
() {
if
(
myLock
)
myLock
->
UnLock
(
myUsage
);}
93
94
private
:
95
XrdSysXSLock
*
myLock
;
96
XrdSysXS_Type
myUsage
;
97
};
98
99
// The following supports MRSW serialization
100
//
101
XrdSysXSLock
rwLock
;
102
XrdSysXSLock
*
pPLock
;
// 0 if no preread lock required
103
XrdSysXSLock
*
rPLock
;
// 0 if no read lock required
104
XrdSysXSLock
*
wPLock
;
// 0 if no write lock required
105
XrdSysXS_Type
pPLopt
;
106
XrdSysXS_Type
rPLopt
;
107
108
XrdSysMutex
DMutex
;
109
XrdOucCacheReal
*
Cache
;
110
XrdOucCacheIO
*
ioObj
;
111
long
long
VNum
;
112
long
long
SegSize
;
113
long
long
OffMask
;
114
long
long
SegShft
;
115
int
maxCache
;
116
char
isFIS
;
117
char
isRW
;
118
char
isADB
;
119
char
Debug
;
120
121
static
const
int
okRW
= 1;
122
static
const
int
xqRW
= 2;
123
124
// Preread Control Area
125
//
126
XrdOucCacheReal::prTask
prReq
;
127
XrdSysSemaphore
*
prStop
;
128
129
long
long
prNSS
;
// Next Sequential Segment for maxi prereads
130
131
static
const
int
prRRMax
= 5;
132
long
long
prRR
[
prRRMax
];
// Recent reads
133
int
prRRNow
;
// Pointer to next entry to use
134
135
static
const
int
prMax
= 8;
136
static
const
int
prRun
= 1;
// Status in prActive (running)
137
static
const
int
prWait
= 2;
// Status in prActive (waiting)
138
139
static
const
int
prLRU
= 1;
// Status in prOpt (set LRU)
140
static
const
int
prSUSE
= 2;
// Status in prOpt (set Single Use)
141
static
const
int
prSKIP
= 3;
// Status in prOpt (skip entry)
142
143
aprParms
Apr
;
144
long
long
prCalc
;
145
long
long
prBeg
[
prMax
];
146
long
long
prEnd
[
prMax
];
147
int
prNext
;
148
int
prFree
;
149
int
prPerf
;
150
char
prOpt
[
prMax
];
151
char
prOK
;
152
char
prActive
;
153
char
prAuto
;
154
};
155
#endif
Generated by
1.8.3.1