@@ -115,27 +115,7 @@ type storeDataResult struct {
115115 err error
116116}
117117
118- func storeData (ctx context.Context , f func (ctx context.Context , reader io.Reader ) (* cid.Cid , error ), reader io.Reader , ch chan storeDataResult ) {
119- defer close (ch )
120- cid , err := f (ctx , reader )
121- if err != nil {
122- ch <- storeDataResult {err : err }
123- return
124- }
125- ch <- storeDataResult {cid : cid }
126- }
127-
128- func (s * Service ) StoreData (srv pb.API_StoreDataServer ) error {
129- i , err := s .getInstanceByToken (srv .Context ())
130- if err != nil {
131- return err
132- }
133-
134- reader , writer := io .Pipe ()
135-
136- storeDataChannel := make (chan storeDataResult )
137- go storeData (srv .Context (), i .PutData , reader , storeDataChannel )
138-
118+ func receiveData (srv pb.API_StoreDataServer , writer * io.PipeWriter ) {
139119 for {
140120 req , err := srv .Recv ()
141121 if err == io .EOF {
@@ -147,16 +127,28 @@ func (s *Service) StoreData(srv pb.API_StoreDataServer) error {
147127 }
148128 _ , writeErr := writer .Write (req .GetChunk ())
149129 if writeErr != nil {
150- return writeErr
130+ writer . CloseWithError ( writeErr )
151131 }
152132 }
133+ }
134+
135+ func (s * Service ) StoreData (srv pb.API_StoreDataServer ) error {
136+ i , err := s .getInstanceByToken (srv .Context ())
137+ if err != nil {
138+ return err
139+ }
140+
141+ reader , writer := io .Pipe ()
142+ defer reader .Close ()
153143
154- storeDataResult := <- storeDataChannel
155- if storeDataResult .err != nil {
156- return storeDataResult .err
144+ go receiveData (srv , writer )
145+
146+ cid , err := i .PutData (srv .Context (), reader )
147+ if err != nil {
148+ return err
157149 }
158150
159- return srv .SendAndClose (& pb.StoreDataReply {Cid : storeDataResult . cid .String ()})
151+ return srv .SendAndClose (& pb.StoreDataReply {Cid : cid .String ()})
160152}
161153
162154func (s * Service ) Get (req * pb.GetRequest , srv pb.API_GetServer ) error {
0 commit comments