You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.1 KiB
53 lines
1.1 KiB
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
|
|
}
|