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.

55 lines
1.2 KiB

  1. package needle
  2. type AsyncRequest struct {
  3. N *Needle
  4. IsWriteRequest bool
  5. ActualSize int64
  6. Fsync bool
  7. offset uint64
  8. size uint64
  9. doneChan chan interface{}
  10. isUnchanged bool
  11. err error
  12. }
  13. func NewAsyncRequest(n *Needle, isWriteRequest bool, fsync bool) *AsyncRequest {
  14. return &AsyncRequest{
  15. offset: 0,
  16. size: 0,
  17. ActualSize: 0,
  18. doneChan: make(chan interface{}),
  19. N: n,
  20. isUnchanged: false,
  21. IsWriteRequest: isWriteRequest,
  22. Fsync: fsync,
  23. err: nil,
  24. }
  25. }
  26. func (r *AsyncRequest) WaitComplete() (uint64, uint64, bool, error) {
  27. <-r.doneChan
  28. return r.offset, r.size, r.isUnchanged, r.err
  29. }
  30. func (r *AsyncRequest) Complete(offset uint64, size uint64, isUnchanged bool, err error) {
  31. r.offset = offset
  32. r.size = size
  33. r.isUnchanged = isUnchanged
  34. r.err = err
  35. close(r.doneChan)
  36. }
  37. func (r *AsyncRequest) UpdateResult(offset uint64, size uint64, isUnchanged bool, err error) {
  38. r.offset = offset
  39. r.size = size
  40. r.isUnchanged = isUnchanged
  41. r.err = err
  42. }
  43. func (r *AsyncRequest) Submit() {
  44. close(r.doneChan)
  45. }
  46. func (r *AsyncRequest) IsSucceed() bool {
  47. return r.err == nil
  48. }