XRootD
Loading...
Searching...
No Matches
XrdOssMirageFile Class Reference

#include <XrdOssMirageFile.hh>

+ Inheritance diagram for XrdOssMirageFile:
+ Collaboration diagram for XrdOssMirageFile:

Public Member Functions

 XrdOssMirageFile (XrdOssMirage &oss)
 
virtual ~XrdOssMirageFile ()=default
 
virtual int Close (long long *retsz=0) override
 
virtual int Fchmod (mode_t mode) override
 
virtual int Fstat (struct stat *buf) override
 
virtual int Fsync () override
 
virtual int Fsync (XrdSfsAio *aiop) override
 
virtual int Ftruncate (unsigned long long flen) override
 
virtual int Open (const char *path, int Oflag, mode_t Mode, XrdOucEnv &env) override
 
virtual ssize_t pgRead (void *buffer, off_t offset, size_t rdlen, uint32_t *csvec, uint64_t opts) override
 
virtual int pgRead (XrdSfsAio *aioparm, uint64_t opts) override
 
virtual ssize_t pgWrite (void *buffer, off_t offset, size_t wrlen, uint32_t *csvec, uint64_t opts) override
 
virtual int pgWrite (XrdSfsAio *aioparm, uint64_t opts) override
 
virtual ssize_t Read (off_t offset, size_t size) override
 
virtual ssize_t Read (void *buffer, off_t offset, size_t size) override
 
virtual int Read (XrdSfsAio *aiop) override
 
virtual ssize_t ReadRaw (void *buffer, off_t offset, size_t size) override
 
virtual int StatRet (struct stat *buff) override
 
virtual ssize_t Write (const void *buffer, off_t offset, size_t size) override
 
virtual int Write (XrdSfsAio *aiop) override
 
- Public Member Functions inherited from XrdOssDF
 XrdOssDF (const char *tid="", uint16_t dftype=0, int fdnum=-1)
 
virtual ~XrdOssDF ()
 
virtual int Clone (const std::vector< XrdOucCloneSeg > &cVec)
 
virtual int Clone (XrdOssDF &srcFile)
 
uint16_t DFType ()
 
virtual int Fctl (int cmd, int alen, const char *args, char **resp=0)
 
virtual void Flush ()
 Flush filesystem cached pages for this file (used for checksums).
 
virtual bool getErrMsg (std::string &eText)
 
virtual int getFD ()
 
virtual off_t getMmap (void **addr)
 
virtual const char * getTID ()
 
virtual int isCompressed (char *cxidp=0)
 
virtual int Opendir (const char *path, XrdOucEnv &env)
 
virtual ssize_t Read (XrdOucRangeList &rlist)
 
virtual int Readdir (char *buff, int blen)
 
virtual ssize_t ReadV (XrdOucIOVec *readV, int rdvcnt)
 
virtual ssize_t WriteV (XrdOucIOVec *writeV, int wrvcnt)
 

Additional Inherited Members

- Static Public Attributes inherited from XrdOssDF
static const uint16_t DF_isDir = 0x0001
 Object is for a directory.
 
static const uint16_t DF_isFile = 0x0002
 Object is for a file.
 
static const uint16_t DF_isProxy = 0x0010
 Object is a proxy object.
 
static const uint64_t doCalc = 0x4000000000000000ULL
 pgw: Calculate checksums
 
static const int Fctl_ckpObj = 0
 
static const int Fctl_QFinfo = 3
 
static const int Fctl_setFD = 2
 
static const int Fctl_utimes = 1
 
static const uint64_t Verify = 0x8000000000000000ULL
 all: Verify checksums
 
- Protected Attributes inherited from XrdOssDF
uint16_t dfType
 
int fd
 
off_t pgwEOF
 
short rsvd
 
const char * tident
 

Detailed Description

Definition at line 12 of file XrdOssMirageFile.hh.

Constructor & Destructor Documentation

◆ XrdOssMirageFile()

XrdOssMirageFile::XrdOssMirageFile ( XrdOssMirage & oss)

Definition at line 11 of file XrdOssMirageFile.cc.

11 :
12 oss(oss),
13 entry(&std::get<XrdOssMirageEntry>(entry_storage))
14{
15}

◆ ~XrdOssMirageFile()

virtual XrdOssMirageFile::~XrdOssMirageFile ( )
virtualdefault

References Mode, opts, and stat.

Member Function Documentation

◆ Close()

int XrdOssMirageFile::Close ( long long * retsz = 0)
overridevirtual

Close a directory or file.

Parameters
retszIf not nil, where the size of the file is to be returned.
Returns
0 upon success or -errno or -osserr (see XrdOssError.hh).

Implements XrdOssDF.

Definition at line 171 of file XrdOssMirageFile.cc.

172{
173 const int return_code = entry->close.return_code;
174
175 if (std::holds_alternative<XrdOssMirageEntryPtr>(entry_storage))
176 std::get<XrdOssMirageEntryPtr>(entry_storage).reset();
177
178 if (return_code != XrdOssOK)
179 return -return_code;
180
181 return XrdOssOK;
182}
#define XrdOssOK
Definition XrdOss.hh:54

References XrdOssOK.

◆ Fchmod()

int XrdOssMirageFile::Fchmod ( mode_t mode)
overridevirtual

Change file mode settings.

Parameters
mode- The new file mode setting.
Returns
0 upon success or -errno or -osserr (see XrdOssError.hh).

Reimplemented from XrdOssDF.

Definition at line 22 of file XrdOssMirageFile.cc.

23{
24 return -ENOTSUP;
25}

◆ Fstat()

int XrdOssMirageFile::Fstat ( struct stat * buf)
overridevirtual

Return state information for this file.

Parameters
buf- Pointer to the structure where info it to be returned.
Returns
0 upon success or -errno or -osserr (see XrdOssError.hh).

Reimplemented from XrdOssDF.

Definition at line 27 of file XrdOssMirageFile.cc.

28{
29 *buf = {};
30 buf->st_size = entry->size;
31 return XrdOssOK;
32}

References stat, and XrdOssOK.

◆ Fsync() [1/2]

int XrdOssMirageFile::Fsync ( void )
overridevirtual

Synchronize associated file with media (synchronous).

Returns
0 upon success or -errno or -osserr (see XrdOssError.hh).

Reimplemented from XrdOssDF.

Definition at line 34 of file XrdOssMirageFile.cc.

35{
36 return XrdOssOK;
37}

References XrdOssOK.

◆ Fsync() [2/2]

int XrdOssMirageFile::Fsync ( XrdSfsAio * aiop)
overridevirtual

Synchronize associated file with media (asynchronous).

Parameters
aiop- Pointer to async I/O request object.
Returns
0 upon success or -errno or -osserr (see XrdOssError.hh).

Reimplemented from XrdOssDF.

Definition at line 39 of file XrdOssMirageFile.cc.

40{
41 return -ENOTSUP;
42}

◆ Ftruncate()

int XrdOssMirageFile::Ftruncate ( unsigned long long flen)
overridevirtual

Set the size of the associated file.

Parameters
flen- The new size of the file.
Returns
0 upon success or -errno or -osserr (see XrdOssError.hh).

Reimplemented from XrdOssDF.

Definition at line 44 of file XrdOssMirageFile.cc.

45{
47 return -EFBIG;
48
49 entry->size = flen;
50 return XrdOssOK;
51}
static constexpr std::uint64_t max_file_size

References XrdOssMirageEntry::max_file_size, and XrdOssOK.

◆ Open()

int XrdOssMirageFile::Open ( const char * path,
int Oflag,
mode_t Mode,
XrdOucEnv & env )
overridevirtual

Open a file.

Parameters
path- Pointer to the path of the file to be opened.
Oflag- Standard open flags.
Mode- File open mode (ignored unless creating a file).
env- Reference to environmental information.
Returns
0 upon success or -errno or -osserr (see XrdOssError.hh).

Reimplemented from XrdOssDF.

Definition at line 53 of file XrdOssMirageFile.cc.

54{
55 if ((Oflag & O_ACCMODE) == O_RDONLY)
56 {
57 const auto opt = oss.get_entry_read(path);
58 if (!opt.has_value())
59 return -ENOENT;
60
61 entry_storage = opt.value();
62 entry = &std::get<XrdOssMirageEntry>(entry_storage);
63 }
64 else
65 {
66 const auto opt = oss.get_entry_write(path);
67 if (!opt.has_value())
68 return -ENOENT;
69
70 entry_storage = opt.value();
71 entry = &*std::get<XrdOssMirageEntryPtr>(entry_storage);
72 }
73
74 if (entry->open.return_code != XrdOssOK)
75 return -entry->open.return_code;
76
77 return XrdOssOK;
78}

References Mode, and XrdOssOK.

◆ pgRead() [1/2]

ssize_t XrdOssMirageFile::pgRead ( void * buffer,
off_t offset,
size_t rdlen,
uint32_t * csvec,
uint64_t opts )
overridevirtual

Reimplemented from XrdOssDF.

Definition at line 80 of file XrdOssMirageFile.cc.

81{
82 return -ENOTSUP;
83}

References opts.

◆ pgRead() [2/2]

int XrdOssMirageFile::pgRead ( XrdSfsAio * aioparm,
uint64_t opts )
overridevirtual

Read file pages and checksums using asynchronous I/O.

Parameters
aioparm- Pointer to async I/O object controlling the I/O.
opts- Processing options (see above).
Returns
0 upon if request started success or -errno or -osserr (see XrdOssError.hh).

Reimplemented from XrdOssDF.

Definition at line 85 of file XrdOssMirageFile.cc.

86{
87 return -ENOTSUP;
88}

References opts.

◆ pgWrite() [1/2]

ssize_t XrdOssMirageFile::pgWrite ( void * buffer,
off_t offset,
size_t wrlen,
uint32_t * csvec,
uint64_t opts )
overridevirtual

Write file pages into a file with corresponding checksums.

Parameters
buffer- pointer to buffer containing the bytes to write.
offset- The offset where the write is to start.
wrlen- The number of bytes to write.
csvec- A vector which contains the corresponding CRC32 checksum for each page. See XrdOucPgrwUtils::csNum() for sizing.
opts- Processing options (see above).
Returns
>= 0 The number of bytes written upon success. or -errno or -osserr upon failure. (see XrdOssError.hh).
< 0 -errno or -osserr upon failure. (see XrdOssError.hh).

Reimplemented from XrdOssDF.

Definition at line 90 of file XrdOssMirageFile.cc.

91{
92 return -ENOTSUP;
93}

References opts.

◆ pgWrite() [2/2]

int XrdOssMirageFile::pgWrite ( XrdSfsAio * aioparm,
uint64_t opts )
overridevirtual

Write file pages and checksums using asynchronous I/O.

Parameters
aioparm- Pointer to async I/O object controlling the I/O.
opts- Processing options (see above).
Returns
0 upon if request started success or -errno or -osserr (see XrdOssError.hh).

Reimplemented from XrdOssDF.

Definition at line 95 of file XrdOssMirageFile.cc.

96{
97 return -ENOTSUP;
98}

References opts.

◆ Read() [1/3]

ssize_t XrdOssMirageFile::Read ( off_t offset,
size_t size )
overridevirtual

Preread file blocks into the file system cache.

Parameters
offset- The offset where the read is to start.
size- The number of bytes to pre-read.
Returns
>= 0 When 0, the request was ignored; otherwise, it has been accepted.
< 0 Failed with -errno or -osserr (see XrdOssError.hh).

Reimplemented from XrdOssDF.

Definition at line 100 of file XrdOssMirageFile.cc.

101{
102 return XrdOssOK;
103}

References XrdOssOK.

Referenced by ReadRaw().

+ Here is the caller graph for this function:

◆ Read() [2/3]

ssize_t XrdOssMirageFile::Read ( void * buffer,
off_t offset,
size_t size )
overridevirtual

Read file bytes into a buffer.

Parameters
buffer- pointer to buffer where the bytes are to be placed.
offset- The offset where the read is to start.
size- The number of bytes to read.
Returns
>= 0 The number of bytes that placed in buffer.
< 0 -errno or -osserr upon failure (see XrdOssError.hh).

Reimplemented from XrdOssDF.

Definition at line 105 of file XrdOssMirageFile.cc.

106{
107 if (offset < 0 || static_cast<uint64_t>(offset) > entry->size)
108 return -EINVAL;
109
110 if (entry->read.return_code != XrdOssOK &&
111 entry->read.return_position >= static_cast<std::uint64_t>(offset) &&
112 entry->read.return_position - static_cast<std::uint64_t>(offset) <= size)
113 return -entry->read.return_code;
114
115 const std::size_t num_bytes = static_cast<std::size_t>(std::min<std::uint64_t>(size, entry->size - offset));
116
117 if (entry->pattern.size() == 1)
118 std::fill_n(static_cast<char *>(buffer), num_bytes, entry->pattern.front());
119
120 if (entry->pattern.size() > 1)
121 {
122 std::call_once(pattern_buffer_once, [this, size] () {
123 while (pattern_buffer.size() < size)
124 pattern_buffer.insert(pattern_buffer.end(), entry->pattern.begin(), entry->pattern.end());
125 });
126
127 const std::size_t start = offset % entry->pattern.size();
128 const std::size_t first_chunk = std::min(num_bytes, pattern_buffer.size() - start);
129
130 char *out = static_cast<char *>(buffer);
131 std::copy(pattern_buffer.begin() + start, pattern_buffer.begin() + start + first_chunk, out);
132 if (first_chunk < num_bytes)
133 std::copy(pattern_buffer.begin(), pattern_buffer.begin() + (num_bytes - first_chunk), out + first_chunk);
134 }
135
136 return num_bytes;
137}

References XrdOssOK.

◆ Read() [3/3]

int XrdOssMirageFile::Read ( XrdSfsAio * aiop)
overridevirtual

Read file bytes using asynchronous I/O.

Parameters
aiop- Pointer to async I/O object controlling the I/O.
Returns
0 upon if request started success or -errno or -osserr (see XrdOssError.hh).

Reimplemented from XrdOssDF.

Definition at line 139 of file XrdOssMirageFile.cc.

140{
141 return -ENOTSUP;
142}

◆ ReadRaw()

ssize_t XrdOssMirageFile::ReadRaw ( void * buffer,
off_t offset,
size_t size )
overridevirtual

Read uncompressed file bytes into a buffer.

Parameters
buffer- pointer to buffer where the bytes are to be placed.
offset- The offset where the read is to start.
size- The number of bytes to read.
Returns
>= 0 The number of bytes that placed in buffer.
< 0 -errno or -osserr upon failure (see XrdOssError.hh).

Reimplemented from XrdOssDF.

Definition at line 144 of file XrdOssMirageFile.cc.

145{
146 return Read(buffer, offset, size);
147}
virtual ssize_t Read(off_t offset, size_t size) override

References Read().

+ Here is the call graph for this function:

◆ StatRet()

int XrdOssMirageFile::StatRet ( struct stat * buff)
overridevirtual

Set the stat() buffer where stat information is to be placed corresponding to the directory entry returned by Readdir().

Parameters
buff- Pointer to stat structure to be used.
Returns
0 upon success or -ENOTSUP if not supported.
Note
This is a one-time call as stat structure is reused for each Readdir.
When StatRet() is in effect, directory entries that have been deleted from the target directory are quietly skipped.

Reimplemented from XrdOssDF.

Definition at line 17 of file XrdOssMirageFile.cc.

18{
19 return -ENOTDIR;
20}

References stat.

◆ Write() [1/2]

ssize_t XrdOssMirageFile::Write ( const void * buffer,
off_t offset,
size_t size )
overridevirtual

Write file bytes from a buffer.

Parameters
buffer- pointer to buffer where the bytes reside.
offset- The offset where the write is to start.
size- The number of bytes to write.
Returns
>= 0 The number of bytes that were written.
< 0 -errno or -osserr upon failure (see XrdOssError.hh).

Reimplemented from XrdOssDF.

Definition at line 149 of file XrdOssMirageFile.cc.

150{
151 if (offset < 0)
152 return -EINVAL;
153
154 if (entry->write.return_code != XrdOssOK &&
155 entry->write.return_position >= static_cast<std::uint64_t>(offset) &&
156 entry->write.return_position - static_cast<std::uint64_t>(offset) <= size)
157 return -entry->write.return_code;
158
159 if (size > XrdOssMirageEntry::max_file_size - entry->size)
160 return -EFBIG;
161
162 entry->size += size;
163 return size;
164}

References XrdOssMirageEntry::max_file_size, and XrdOssOK.

◆ Write() [2/2]

int XrdOssMirageFile::Write ( XrdSfsAio * aiop)
overridevirtual

Write file bytes using asynchronous I/O.

Parameters
aiop- Pointer to async I/O object controlling the I/O.
Returns
0 upon if request started success or -errno or -osserr (see XrdOssError.hh).

Reimplemented from XrdOssDF.

Definition at line 166 of file XrdOssMirageFile.cc.

167{
168 return -ENOTSUP;
169}

The documentation for this class was generated from the following files: