1#ifndef _XRDOSSCSIPAGES_H
2#define _XRDOSSCSIPAGES_H
51 XrdOssCsiPages(
const std::string &fn, std::unique_ptr<XrdOssCsiTagstore> ts,
bool wh,
bool am,
bool dpe,
bool dlw,
const char *);
75 static void pgDoCalc(
const void *, off_t,
size_t, uint32_t *);
80 std::unique_ptr<XrdOssCsiTagstore>
ts_;
96 const std::string
fn_;
125 ssize_t rret =
maxread(fd, buff, off, sz);
126 if (rret<0)
return rret;
127 if (
static_cast<size_t>(rret) != sz)
return -EDOM;
132 static ssize_t
maxread(
XrdOssDF *fd,
void *buff,
const off_t off ,
const size_t sz,
size_t tg=0)
134 size_t toread = sz, nread = 0;
135 uint8_t *p = (uint8_t*)buff;
137 while(toread>0 && nread<tg)
139 const ssize_t rret = fd->
Read(&p[nread], off+nread, toread);
140 if (rret<0)
return rret;
150 char buf[256],buf2[256];
151 snprintf(buf,
sizeof(buf),
152 "bad crc32c/0x%04" PRIx32
" checksum in file ",
154 snprintf(buf2,
sizeof(buf2),
155 " at offset 0x%" PRIx64
", got 0x%08" PRIx32
", expected 0x%08" PRIx32,
158 return buf +
fn_ + buf2;
163 char buf[256],buf2[256];
164 snprintf(buf,
sizeof(buf),
165 "unexpected byte mismatch between user-buffer and page/0x%04" PRIx32
" in file ",
167 snprintf(buf2,
sizeof(buf2),
168 " at offset 0x%" PRIx64
", user-byte 0x%02" PRIx8
", page-byte 0x%02" PRIx8,
171 return buf +
fn_ + buf2;
176 char buf[256],buf2[256];
177 snprintf(buf,
sizeof(buf),
178 "error %d while reading page/0x%04" PRIx32
" in file ",
179 ret, (uint32_t)blen);
180 snprintf(buf2,
sizeof(buf2),
181 " at offset 0x%" PRIx64,
183 return buf +
fn_ + buf2;
189 snprintf(buf,
sizeof(buf),
190 "error %d while reading crc32c values for pages [0x%" PRIx64
":0x%" PRIx64
"] for file ",
191 ret, (uint64_t)start, (uint64_t)(start + n - 1));
198 snprintf(buf,
sizeof(buf),
199 "error %d while writing crc32c values for pages [0x%" PRIx64
":0x%" PRIx64
"] for file ",
200 ret, (uint64_t)start, (uint64_t)(start + n - 1));
Definition XrdOssCsiPages.hh:47
XrdSysCondVar tscond_
Definition XrdOssCsiPages.hh:91
int UpdateRangeAligned(const void *, off_t, size_t, const Sizes_t &)
int StoreRangeUnaligned(XrdOssDF *, const void *, off_t, size_t, const Sizes_t &, const uint32_t *)
ssize_t apply_sequential_aligned_modify(const void *, off_t, size_t, const uint32_t *, bool, bool, uint32_t, uint32_t)
XrdOssCsiRanges ranges_
Definition XrdOssCsiPages.hh:82
std::string ByteMismatchError(size_t blen, off_t off, uint8_t user, uint8_t page)
Definition XrdOssCsiPages.hh:161
static ssize_t maxread(XrdOssDF *fd, void *buff, const off_t off, const size_t sz, size_t tg=0)
Definition XrdOssCsiPages.hh:132
std::string TagsReadError(off_t start, size_t n, int ret)
Definition XrdOssCsiPages.hh:186
std::unique_ptr< XrdOssCsiTagstore > ts_
Definition XrdOssCsiPages.hh:80
int FetchRangeAligned(const void *, off_t, size_t, const Sizes_t &, uint32_t *, uint64_t)
int LockTruncateSize(off_t, bool)
XrdOssCsiPages(const std::string &fn, std::unique_ptr< XrdOssCsiTagstore > ts, bool wh, bool am, bool dpe, bool dlw, const char *)
int UpdateRangeUnaligned(XrdOssDF *, const void *, off_t, size_t, const Sizes_t &)
const char * tident
Definition XrdOssCsiPages.hh:98
std::string TagsWriteError(off_t start, size_t n, int ret)
Definition XrdOssCsiPages.hh:195
int StoreRangeAligned(const void *, off_t, size_t, const Sizes_t &, uint32_t *)
void TrackedSizeRelease()
bool writeHoles_
Definition XrdOssCsiPages.hh:83
int FetchRangeUnaligned_preblock(XrdOssDF *, const void *, off_t, size_t, off_t, uint32_t *, uint32_t *, uint64_t)
int UpdateRangeHoleUntilPage(XrdOssDF *, off_t, const Sizes_t &)
off_t lastpgforloose_
Definition XrdOssCsiPages.hh:101
const std::string tident_
Definition XrdOssCsiPages.hh:97
bool tsforupdate_
Definition XrdOssCsiPages.hh:92
static void pgDoCalc(const void *, off_t, size_t, uint32_t *)
static ssize_t fullread(XrdOssDF *fd, void *buff, const off_t off, const size_t sz)
Definition XrdOssCsiPages.hh:123
std::pair< off_t, off_t > Sizes_t
Definition XrdOssCsiPages.hh:49
int FetchRangeUnaligned(XrdOssDF *, const void *, off_t, size_t, const Sizes_t &, uint32_t *, uint64_t)
int truncate(XrdOssDF *, off_t, XrdOssCsiRangeGuard &)
XrdSysMutex rangeaddmtx_
Definition XrdOssCsiPages.hh:81
int FetchRangeUnaligned_postblock(XrdOssDF *, const void *, off_t, size_t, off_t, uint32_t *, uint32_t *, size_t, uint64_t)
~XrdOssCsiPages()
Definition XrdOssCsiPages.hh:52
int LockResetSizes(XrdOssDF *, off_t)
bool disablePgExtend_
Definition XrdOssCsiPages.hh:85
bool checklastpg_
Definition XrdOssCsiPages.hh:102
int VerifyRangeAligned(const void *, off_t, size_t, const Sizes_t &)
int VerifyRangeUnaligned(XrdOssDF *, const void *, off_t, size_t, const Sizes_t &)
int LockSetTrackedSize(off_t)
int FetchRange(XrdOssDF *, const void *, off_t, size_t, uint32_t *, uint64_t, XrdOssCsiRangeGuard &)
std::string CRCMismatchError(size_t blen, off_t pgnum, uint32_t got, uint32_t expected)
Definition XrdOssCsiPages.hh:148
bool hasMissingTags_
Definition XrdOssCsiPages.hh:86
bool loosewrite_
Definition XrdOssCsiPages.hh:89
void BasicConsistencyCheck(XrdOssDF *)
void LockTrackinglen(XrdOssCsiRangeGuard &, off_t, off_t, bool)
int StoreRangeUnaligned_preblock(XrdOssDF *, const void *, size_t, off_t, off_t, const uint32_t *, uint32_t &)
std::string PageReadError(size_t blen, off_t pgnum, int ret)
Definition XrdOssCsiPages.hh:174
int Open(const char *path, off_t dsize, int flags, XrdOucEnv &envP)
int TrackedSizesGet(Sizes_t &, bool)
bool rdonly_
Definition XrdOssCsiPages.hh:87
int StoreRangeUnaligned_postblock(XrdOssDF *, const void *, size_t, off_t, off_t, const uint32_t *, uint32_t &)
const bool loosewriteConfigured_
Definition XrdOssCsiPages.hh:88
bool allowMissingTags_
Definition XrdOssCsiPages.hh:84
static int pgWritePrelockCheck(const void *, off_t, size_t, const uint32_t *, uint64_t)
const std::string fn_
Definition XrdOssCsiPages.hh:96
int StoreRange(XrdOssDF *, const void *, off_t, size_t, uint32_t *, uint64_t, XrdOssCsiRangeGuard &)
static const size_t stsize_
Definition XrdOssCsiPages.hh:204
int UpdateRange(XrdOssDF *, const void *, off_t, size_t, XrdOssCsiRangeGuard &)
bool IsReadOnly() const
Definition XrdOssCsiPages.hh:68
int VerifyRange(XrdOssDF *, const void *, off_t, size_t, XrdOssCsiRangeGuard &)
Definition XrdOssCsiRanges.hh:58
Definition XrdOssCsiRanges.hh:101
virtual ssize_t Read(off_t offset, size_t size)
Definition XrdOss.hh:281
Definition XrdOucEnv.hh:42
Definition XrdSysPthread.hh:79
Definition XrdSysPthread.hh:165
static const int PageSize
Definition XrdSysPageSize.hh:36