From f9e8702bb4146045e34643086eaeeae63ce6127c Mon Sep 17 00:00:00 2001 From: zhangsong Date: Sun, 3 May 2020 19:22:45 +0800 Subject: use async write to persistent file to disk - part1 --- weed/storage/needle/async_request.go | 55 ++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 weed/storage/needle/async_request.go (limited to 'weed/storage/needle/async_request.go') diff --git a/weed/storage/needle/async_request.go b/weed/storage/needle/async_request.go new file mode 100644 index 000000000..259419115 --- /dev/null +++ b/weed/storage/needle/async_request.go @@ -0,0 +1,55 @@ +package needle + +type AsyncRequest struct { + N *Needle + IsWriteRequest bool + ActualSize int64 + Fsync bool + offset uint64 + size uint64 + doneChan chan interface{} + isUnchanged bool + err error +} + +func NewAsyncRequest(n *Needle, isWriteRequest bool, fsync bool) *AsyncRequest { + return &AsyncRequest{ + offset: 0, + size: 0, + ActualSize: 0, + doneChan: make(chan interface{}), + N: n, + isUnchanged: false, + IsWriteRequest: isWriteRequest, + Fsync: fsync, + err: nil, + } +} + +func (r *AsyncRequest) WaitComplete() (uint64, uint64, bool, error) { + <-r.doneChan + return r.offset, r.size, r.isUnchanged, r.err +} + +func (r *AsyncRequest) Complete(offset uint64, size uint64, isUnchanged bool, err error) { + r.offset = offset + r.size = size + r.isUnchanged = isUnchanged + r.err = err + close(r.doneChan) +} + +func (r *AsyncRequest) UpdateResult(offset uint64, size uint64, isUnchanged bool, err error) { + r.offset = offset + r.size = size + r.isUnchanged = isUnchanged + r.err = err +} + +func (r *AsyncRequest) Submit() { + close(r.doneChan) +} + +func (r *AsyncRequest) IsSucceed() bool { + return r.err == nil +} -- cgit v1.2.3 From 3703c7e1765cff23a11a53e7ba99f3faaa24b878 Mon Sep 17 00:00:00 2001 From: zhangsong Date: Wed, 6 May 2020 21:10:39 +0800 Subject: write request keep compatible with before --- weed/storage/needle/async_request.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'weed/storage/needle/async_request.go') diff --git a/weed/storage/needle/async_request.go b/weed/storage/needle/async_request.go index 259419115..ea02c55c5 100644 --- a/weed/storage/needle/async_request.go +++ b/weed/storage/needle/async_request.go @@ -4,7 +4,6 @@ type AsyncRequest struct { N *Needle IsWriteRequest bool ActualSize int64 - Fsync bool offset uint64 size uint64 doneChan chan interface{} @@ -12,7 +11,7 @@ type AsyncRequest struct { err error } -func NewAsyncRequest(n *Needle, isWriteRequest bool, fsync bool) *AsyncRequest { +func NewAsyncRequest(n *Needle, isWriteRequest bool) *AsyncRequest { return &AsyncRequest{ offset: 0, size: 0, @@ -21,7 +20,6 @@ func NewAsyncRequest(n *Needle, isWriteRequest bool, fsync bool) *AsyncRequest { N: n, isUnchanged: false, IsWriteRequest: isWriteRequest, - Fsync: fsync, err: nil, } } -- cgit v1.2.3