1
1
package transfer
2
2
3
3
import (
4
- "crypto/sha256"
5
4
"errors"
6
5
"fmt"
7
6
"io"
@@ -161,29 +160,13 @@ func (p *Processor) PutObject(oid string) (Status, error) {
161
160
if err != nil {
162
161
return nil , err
163
162
}
164
- r := p .handler .Reader ()
165
- rdr := NewHashingReader (r , sha256 .New ())
166
- state , err := p .backend .StartUpload (oid , rdr , args )
163
+ rdr := io .Reader (p .handler .Reader ())
164
+ // we don't need to verify data here because the backend already does
165
+ //rdr = NewVerifyingReader(NewHashingReader(rdr, sha256.New()), oid, expectedSize)
166
+ err = p .backend .Upload (oid , expectedSize , rdr , args )
167
167
if err != nil {
168
168
return nil , err
169
169
}
170
- defer state .Close () // nolint: errcheck
171
- actualSize := rdr .Size ()
172
- if actualSize != expectedSize {
173
- err := fmt .Errorf ("invalid size, expected %d, got %d" , expectedSize , actualSize )
174
- if actualSize > expectedSize {
175
- err = fmt .Errorf ("%w: %s" , ErrExtraData , err )
176
- } else {
177
- err = fmt .Errorf ("%w: %s" , ErrMissingData , err )
178
- }
179
- return nil , err
180
- }
181
- if actualOid := rdr .Oid (); actualOid != oid {
182
- return nil , fmt .Errorf ("%w: %s" , ErrCorruptData , fmt .Sprintf ("invalid object ID, expected %s, got %s" , oid , actualOid ))
183
- }
184
- if err := p .backend .FinishUpload (state , args ); err != nil {
185
- return nil , err
186
- }
187
170
return SuccessStatus (), nil
188
171
}
189
172
@@ -197,7 +180,11 @@ func (p *Processor) VerifyObject(oid string) (Status, error) {
197
180
if err != nil {
198
181
return nil , fmt .Errorf ("%w: %s" , ErrParseError , err )
199
182
}
200
- return p .backend .Verify (oid , args )
183
+ size , err := SizeFromArgs (args )
184
+ if err != nil {
185
+ return nil , fmt .Errorf ("%w: %s" , ErrParseError , err )
186
+ }
187
+ return p .backend .Verify (oid , size , args )
201
188
}
202
189
203
190
// GetObject writes an object ID to the transfer protocol.
@@ -210,18 +197,14 @@ func (p *Processor) GetObject(oid string) (Status, error) {
210
197
if err != nil {
211
198
return nil , fmt .Errorf ("%w: %s" , ErrParseError , err )
212
199
}
213
- r , err := p .backend .Download (oid , args )
200
+ r , size , err := p .backend .Download (oid , args )
214
201
if errors .Is (err , fs .ErrNotExist ) {
215
202
return NewStatus (StatusNotFound , fmt .Sprintf ("object %s not found" , oid )), nil
216
203
}
217
204
if err != nil {
218
205
return nil , err
219
206
}
220
- info , err := r .Stat ()
221
- if err != nil {
222
- return nil , err
223
- }
224
- return NewSuccessStatusWithReader (r , fmt .Sprintf ("size=%d" , info .Size ())), nil
207
+ return NewSuccessStatusWithReader (r , fmt .Sprintf ("size=%d" , size )), nil
225
208
}
226
209
227
210
// Lock writes a lock to the transfer protocol.
0 commit comments