diff options
| author | Chris Lu <chrislusf@users.noreply.github.com> | 2020-05-04 15:51:03 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-05-04 15:51:03 -0700 |
| commit | 9016fa19ba4507bdf9ac0addc6d79f147c00302a (patch) | |
| tree | 067dbcbcad0f0f1f6b3f1d5a1a4e16cb79e8a0b7 /weed/storage/needle/async_request.go | |
| parent | 47234760f40e4d2cea87b4a83d2178b8181598f5 (diff) | |
| parent | f9e8702bb4146045e34643086eaeeae63ce6127c (diff) | |
| download | seaweedfs-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.go | 55 |
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 +} |
