Commit dbaf1db9 authored by Kirill Smelkov's avatar Kirill Smelkov

.

parent 04b5d87b
...@@ -311,11 +311,11 @@ pair<FileH, error> _Conn::open(zodb::Oid foid) { ...@@ -311,11 +311,11 @@ pair<FileH, error> _Conn::open(zodb::Oid foid) {
// Left fileh mappings become invalid to use. // Left fileh mappings become invalid to use.
error _FileH::close() { error _FileH::close() {
_FileH& fileh = *this; _FileH& fileh = *this;
// XXX err ctx xerr::Contextf E("conn @%s: close f<%s>", v(fileh.wconn->at), v(fileh.foid)); // XXX + wcfs path?
// XXX remove fileh from .wconn._filehtab ? // XXX remove fileh from .wconn._filehtab ?
return fileh._headf->close(); return E(fileh._headf->close());
} }
// mmap creates file mapping representing file[blk_start +blk_len) data as of wconn.at database state. // mmap creates file mapping representing file[blk_start +blk_len) data as of wconn.at database state.
...@@ -323,7 +323,9 @@ error _FileH::close() { ...@@ -323,7 +323,9 @@ error _FileH::close() {
// If vma != nil, created mapping is associated with that vma of user-space virtual memory manager. // If vma != nil, created mapping is associated with that vma of user-space virtual memory manager.
pair<Mapping, error> _FileH::mmap(int64_t blk_start, int64_t blk_len, VMA *vma) { pair<Mapping, error> _FileH::mmap(int64_t blk_start, int64_t blk_len, VMA *vma) {
_FileH& f = *this; _FileH& f = *this;
// XXX err ctx xerr::Contextf E("conn @%s: mmap f<%s> [blk%ld +blk%ld)",
v(f.wconn->at), v(f.foid), blk_start, blk_len); // XXX +wcfs path?
// XXX (blk_start + blk_len) * blk_size overflow // XXX (blk_start + blk_len) * blk_size overflow
error err; error err;
...@@ -342,7 +344,7 @@ pair<Mapping, error> _FileH::mmap(int64_t blk_start, int64_t blk_len, VMA *vma) ...@@ -342,7 +344,7 @@ pair<Mapping, error> _FileH::mmap(int64_t blk_start, int64_t blk_len, VMA *vma)
uint8_t *mem_start, *mem_stop; uint8_t *mem_start, *mem_stop;
tie(mem_start, err) = mmap_ro(f._headf, start, blk_len*f.blksize); tie(mem_start, err) = mmap_ro(f._headf, start, blk_len*f.blksize);
if (err != nil) if (err != nil)
return make_pair(nil, err); return make_pair(nil, E(err));
mem_stop = mem_start + blk_len*f.blksize; mem_stop = mem_start + blk_len*f.blksize;
int64_t stop = blk_stop*f.blksize; int64_t stop = blk_stop*f.blksize;
...@@ -350,7 +352,7 @@ pair<Mapping, error> _FileH::mmap(int64_t blk_start, int64_t blk_len, VMA *vma) ...@@ -350,7 +352,7 @@ pair<Mapping, error> _FileH::mmap(int64_t blk_start, int64_t blk_len, VMA *vma)
uint8_t *zmem_start = mem_start + (max(f._headfsize/*XXX -1 ?*/, start) - start); uint8_t *zmem_start = mem_start + (max(f._headfsize/*XXX -1 ?*/, start) - start);
err = mmap_zero_into_ro(zmem_start, mem_stop - zmem_start); err = mmap_zero_into_ro(zmem_start, mem_stop - zmem_start);
if (err != nil) if (err != nil)
return make_pair(nil, err); return make_pair(nil, E(err));
} }
Mapping mmap = adoptref(new _Mapping()); Mapping mmap = adoptref(new _Mapping());
...@@ -380,7 +382,7 @@ pair<Mapping, error> _FileH::mmap(int64_t blk_start, int64_t blk_len, VMA *vma) ...@@ -380,7 +382,7 @@ pair<Mapping, error> _FileH::mmap(int64_t blk_start, int64_t blk_len, VMA *vma)
// resync resyncs connection and its mappings onto different database view. // resync resyncs connection and its mappings onto different database view.
error _Conn::resync(zodb::Tid at) { error _Conn::resync(zodb::Tid at) {
_Conn& wconn = *this; _Conn& wconn = *this;
// XXX err ctx xerr::Contextf E("conn @%s: resync -> @%s", v(wconn.at), v(at)); // XXX +wcfs path?
// XXX locking // XXX locking
...@@ -395,15 +397,15 @@ error _Conn::resync(zodb::Tid at) { ...@@ -395,15 +397,15 @@ error _Conn::resync(zodb::Tid at) {
struct stat st; struct stat st;
error err = f->_headf->stat(&st); error err = f->_headf->stat(&st);
if (err != nil) if (err != nil)
return err; return E(err);
if ((size_t)st.st_blksize != f->blksize) // blksize must not change if ((size_t)st.st_blksize != f->blksize) // blksize must not change
return fmt::errorf("wcfs bug: blksize changed: %zd -> %ld", f->blksize, st.st_blksize); return E(fmt::errorf("wcfs bug: blksize changed: %zd -> %ld", f->blksize, st.st_blksize));
auto headfsize = st.st_size; auto headfsize = st.st_size;
if (!(f->_headfsize <= headfsize)) // head/file size ↑= if (!(f->_headfsize <= headfsize)) // head/file size ↑=
return fmt::errorf("wcfs bug: head/file size not ↑="); return E(fmt::errorf("wcfs bug: head/file size not ↑="));
if (!(headfsize % f->blksize == 0)) if (!(headfsize % f->blksize == 0))
return fmt::errorf("wcfs bug: head/file size %% blksize != 0"); return E(fmt::errorf("wcfs bug: head/file size %% blksize != 0"));
for (auto mmap : f->_mmaps) { for (auto mmap : f->_mmaps) {
printf(" resync -> %s: unzero [%lu:%lu)", v(at), f->_headfsize/f->blksize, headfsize/f->blksize); printf(" resync -> %s: unzero [%lu:%lu)", v(at), f->_headfsize/f->blksize, headfsize/f->blksize);
...@@ -415,7 +417,7 @@ error _Conn::resync(zodb::Tid at) { ...@@ -415,7 +417,7 @@ error _Conn::resync(zodb::Tid at) {
if (mem_unzero_stop - mem_unzero_start > 0) { if (mem_unzero_stop - mem_unzero_start > 0) {
err = mmap_into_ro(mem_unzero_start, mem_unzero_stop-mem_unzero_start, f->_headf, f->_headfsize); err = mmap_into_ro(mem_unzero_start, mem_unzero_stop-mem_unzero_start, f->_headf, f->_headfsize);
if (err != nil) if (err != nil)
return err; return E(err);
} }
} }
...@@ -425,11 +427,10 @@ error _Conn::resync(zodb::Tid at) { ...@@ -425,11 +427,10 @@ error _Conn::resync(zodb::Tid at) {
string ack; string ack;
tie(ack, err) = wconn._wlink->sendReq(context::background(), fmt::sprintf("watch %s @%s", v(foid), v(at))); tie(ack, err) = wconn._wlink->sendReq(context::background(), fmt::sprintf("watch %s @%s", v(foid), v(at)));
if (err != nil) if (err != nil)
return err; return E(err);
if (ack != "ok") { if (ack != "ok") {
// XXX unregister f from _filehtab // XXX unregister f from _filehtab
// XXX vvv -> errctx? return E(fmt::errorf("%s", v(ack)));
return fmt::errorf("resync @%s -> @%s: f<%s>: %s", v(wconn.at), v(at), v(foid), v(ack));
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment