aboutsummaryrefslogtreecommitdiff
path: root/weed/storage/needle/async_request.go
diff options
context:
space:
mode:
authorChris Lu <chris.lu@gmail.com>2020-05-07 01:43:34 -0700
committerChris Lu <chris.lu@gmail.com>2020-05-07 01:43:34 -0700
commitbe1d9f324fc6160dae1c848913b586b9b6657029 (patch)
tree182be939c56b8769de7edd325e123c4d9da9b651 /weed/storage/needle/async_request.go
parent1e3e4b3072071341b4bb4b0bb7c611457e927f97 (diff)
parent0952eb28543d249fc63a1747db5d82e8a52bab38 (diff)
downloadseaweedfs-be1d9f324fc6160dae1c848913b586b9b6657029.tar.xz
seaweedfs-be1d9f324fc6160dae1c848913b586b9b6657029.zip
Merge branch 'master' into msg_channel
Diffstat (limited to 'weed/storage/needle/async_request.go')
-rw-r--r--weed/storage/needle/async_request.go53
1 files changed, 53 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..ea02c55c5
--- /dev/null
+++ b/weed/storage/needle/async_request.go
@@ -0,0 +1,53 @@
+package needle
+
+type AsyncRequest struct {
+ N *Needle
+ IsWriteRequest bool
+ ActualSize int64
+ offset uint64
+ size uint64
+ doneChan chan interface{}
+ isUnchanged bool
+ err error
+}
+
+func NewAsyncRequest(n *Needle, isWriteRequest bool) *AsyncRequest {
+ return &AsyncRequest{
+ offset: 0,
+ size: 0,
+ ActualSize: 0,
+ doneChan: make(chan interface{}),
+ N: n,
+ isUnchanged: false,
+ IsWriteRequest: isWriteRequest,
+ 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
+}