aboutsummaryrefslogtreecommitdiff
path: root/weed/storage/needle/async_request.go
diff options
context:
space:
mode:
authorChris Lu <chrislusf@users.noreply.github.com>2020-05-04 15:51:03 -0700
committerGitHub <noreply@github.com>2020-05-04 15:51:03 -0700
commit9016fa19ba4507bdf9ac0addc6d79f147c00302a (patch)
tree067dbcbcad0f0f1f6b3f1d5a1a4e16cb79e8a0b7 /weed/storage/needle/async_request.go
parent47234760f40e4d2cea87b4a83d2178b8181598f5 (diff)
parentf9e8702bb4146045e34643086eaeeae63ce6127c (diff)
downloadseaweedfs-9016fa19ba4507bdf9ac0addc6d79f147c00302a.tar.xz
seaweedfs-9016fa19ba4507bdf9ac0addc6d79f147c00302a.zip
Merge pull request #1299 from song-zhang/master
use async write to persistent file to disk - part1
Diffstat (limited to 'weed/storage/needle/async_request.go')
-rw-r--r--weed/storage/needle/async_request.go55
1 files changed, 55 insertions, 0 deletions
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
+}