1 #ifndef _XRDOSSCSIPAGES_H
2 #define _XRDOSSCSIPAGES_H
50 XrdOssCsiPages(
const std::string &fn, std::unique_ptr<XrdOssCsiTagstore> ts,
bool wh,
bool am,
bool dpe,
bool dlw,
const char *);
53 int Open(
const char *path, off_t dsize,
int flags,
XrdOucEnv &envP);
74 static void pgDoCalc(
const void *, off_t,
size_t, uint32_t *);
79 std::unique_ptr<XrdOssCsiTagstore>
ts_;
95 const std::string
fn_;
124 ssize_t rret =
maxread(fd, buff, off, sz);
125 if (rret<0)
return rret;
126 if (static_cast<size_t>(rret) != sz)
return -EDOM;
131 static ssize_t
maxread(
XrdOssDF *fd,
void *buff,
const off_t off ,
const size_t sz,
size_t tg=0)
133 size_t toread = sz, nread = 0;
134 uint8_t *p = (uint8_t*)buff;
136 while(toread>0 && nread<tg)
138 const ssize_t rret = fd->
Read(&p[nread], off+nread, toread);
139 if (rret<0)
return rret;
149 char buf[256],buf2[256];
150 snprintf(buf,
sizeof(buf),
151 "bad crc32c/0x%04" PRIx32
" checksum in file ",
153 snprintf(buf2,
sizeof(buf2),
154 " at offset 0x%" PRIx64
", got 0x%08" PRIx32
", expected 0x%08" PRIx32,
157 return buf +
fn_ + buf2;
162 char buf[256],buf2[256];
163 snprintf(buf,
sizeof(buf),
164 "unexpected byte mismatch between user-buffer and page/0x%04" PRIx32
" in file ",
166 snprintf(buf2,
sizeof(buf2),
167 " at offset 0x%" PRIx64
", user-byte 0x%02" PRIx8
", page-byte 0x%02" PRIx8,
170 return buf +
fn_ + buf2;
175 char buf[256],buf2[256];
176 snprintf(buf,
sizeof(buf),
177 "error %d while reading page/0x%04" PRIx32
" in file ",
178 ret, (uint32_t)blen);
179 snprintf(buf2,
sizeof(buf2),
180 " at offset 0x%" PRIx64,
182 return buf +
fn_ + buf2;
188 snprintf(buf,
sizeof(buf),
189 "error %d while reading crc32c values for pages [0x%" PRIx64
":0x%" PRIx64
"] for file ",
190 ret, (uint64_t)start, (uint64_t)(start + n - 1));
197 snprintf(buf,
sizeof(buf),
198 "error %d while writing crc32c values for pages [0x%" PRIx64
":0x%" PRIx64
"] for file ",
199 ret, (uint64_t)start, (uint64_t)(start + n - 1));
std::string CRCMismatchError(size_t blen, off_t pgnum, uint32_t got, uint32_t expected)
Definition: XrdOssCsiPages.hh:147
bool checklastpg_
Definition: XrdOssCsiPages.hh:101
off_t lastpgforloose_
Definition: XrdOssCsiPages.hh:100
int StoreRangeAligned(const void *, off_t, size_t, const Sizes_t &, uint32_t *)
bool writeHoles_
Definition: XrdOssCsiPages.hh:82
std::string PageReadError(size_t blen, off_t pgnum, int ret)
Definition: XrdOssCsiPages.hh:173
const std::string tident_
Definition: XrdOssCsiPages.hh:96
XrdSysCondVar tscond_
Definition: XrdOssCsiPages.hh:90
int LockResetSizes(XrdOssDF *, off_t)
void TrackedSizeRelease()
int Open(const char *path, off_t dsize, int flags, XrdOucEnv &envP)
std::string TagsWriteError(off_t start, size_t n, int ret)
Definition: XrdOssCsiPages.hh:194
int UpdateRangeHoleUntilPage(XrdOssDF *, off_t, const Sizes_t &)
void LockTrackinglen(XrdOssCsiRangeGuard &, off_t, off_t, bool)
int StoreRangeUnaligned(XrdOssDF *, const void *, off_t, size_t, const Sizes_t &, const uint32_t *)
static const size_t stsize_
Definition: XrdOssCsiPages.hh:203
const std::string fn_
Definition: XrdOssCsiPages.hh:95
bool tsforupdate_
Definition: XrdOssCsiPages.hh:91
bool rdonly_
Definition: XrdOssCsiPages.hh:86
Definition: XrdOssCsiRanges.hh:100
Definition: XrdSysPthread.hh:164
int FetchRange(XrdOssDF *, const void *, off_t, size_t, uint32_t *, uint64_t, XrdOssCsiRangeGuard &)
bool hasMissingTags_
Definition: XrdOssCsiPages.hh:85
int FetchRangeUnaligned(XrdOssDF *, const void *, off_t, size_t, const Sizes_t &, uint32_t *, uint64_t)
const bool loosewriteConfigured_
Definition: XrdOssCsiPages.hh:87
int FetchRangeUnaligned_preblock(XrdOssDF *, const void *, off_t, size_t, off_t, uint32_t *, uint32_t *, uint64_t)
static int pgWritePrelockCheck(const void *, off_t, size_t, const uint32_t *, uint64_t)
Definition: XrdSysPthread.hh:78
int StoreRangeUnaligned_preblock(XrdOssDF *, const void *, size_t, off_t, off_t, const uint32_t *, uint32_t &)
static const int PageSize
Definition: XrdSysPageSize.hh:36
std::pair< off_t, off_t > Sizes_t
Definition: XrdOssCsiPages.hh:48
int FetchRangeAligned(const void *, off_t, size_t, const Sizes_t &, uint32_t *, uint64_t)
Definition: XrdOucEnv.hh:41
Definition: XrdOssCsiPages.hh:45
const char * tident
Definition: XrdOssCsiPages.hh:97
int UpdateRangeUnaligned(XrdOssDF *, const void *, off_t, size_t, const Sizes_t &)
int LockTruncateSize(off_t, bool)
j template void())
Definition: XrdOucJson.hh:4121
~XrdOssCsiPages()
Definition: XrdOssCsiPages.hh:51
void BasicConsistencyCheck(XrdOssDF *)
Definition: XrdOssCsiRanges.hh:57
XrdOssCsiRanges ranges_
Definition: XrdOssCsiPages.hh:81
std::unique_ptr< XrdOssCsiTagstore > ts_
Definition: XrdOssCsiPages.hh:79
int UpdateRangeAligned(const void *, off_t, size_t, const Sizes_t &)
virtual ssize_t Read(off_t offset, size_t size)
Definition: XrdOss.hh:281
bool allowMissingTags_
Definition: XrdOssCsiPages.hh:83
bool loosewrite_
Definition: XrdOssCsiPages.hh:88
int FetchRangeUnaligned_postblock(XrdOssDF *, const void *, off_t, size_t, off_t, uint32_t *, uint32_t *, size_t, uint64_t)
int StoreRange(XrdOssDF *, const void *, off_t, size_t, uint32_t *, uint64_t, XrdOssCsiRangeGuard &)
int UpdateRange(XrdOssDF *, const void *, off_t, size_t, XrdOssCsiRangeGuard &)
int TrackedSizesGet(Sizes_t &, bool)
std::string ByteMismatchError(size_t blen, off_t off, uint8_t user, uint8_t page)
Definition: XrdOssCsiPages.hh:160
int VerifyRangeAligned(const void *, off_t, size_t, const Sizes_t &)
int truncate(XrdOssDF *, off_t, XrdOssCsiRangeGuard &)
int StoreRangeUnaligned_postblock(XrdOssDF *, const void *, size_t, off_t, off_t, const uint32_t *, uint32_t &)
std::string TagsReadError(off_t start, size_t n, int ret)
Definition: XrdOssCsiPages.hh:185
int LockSetTrackedSize(off_t)
int VerifyRange(XrdOssDF *, const void *, off_t, size_t, XrdOssCsiRangeGuard &)
static void pgDoCalc(const void *, off_t, size_t, uint32_t *)
XrdSysMutex rangeaddmtx_
Definition: XrdOssCsiPages.hh:80
bool disablePgExtend_
Definition: XrdOssCsiPages.hh:84
bool IsReadOnly() const
Definition: XrdOssCsiPages.hh:67
int VerifyRangeUnaligned(XrdOssDF *, const void *, off_t, size_t, const Sizes_t &)
static ssize_t maxread(XrdOssDF *fd, void *buff, const off_t off, const size_t sz, size_t tg=0)
Definition: XrdOssCsiPages.hh:131
static ssize_t fullread(XrdOssDF *fd, void *buff, const off_t off, const size_t sz)
Definition: XrdOssCsiPages.hh:122
XrdOssCsiPages(const std::string &fn, std::unique_ptr< XrdOssCsiTagstore > ts, bool wh, bool am, bool dpe, bool dlw, const char *)
ssize_t apply_sequential_aligned_modify(const void *, off_t, size_t, const uint32_t *, bool, bool, uint32_t, uint32_t)