Skip to content

Commit ed6d659

Browse files
committed
hash write changes
1 parent 1e2f01d commit ed6d659

File tree

3 files changed

+58
-9
lines changed

3 files changed

+58
-9
lines changed

code/go/0chain.net/blobbercore/filestore/storage.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,11 @@ func (fs *FileStore) CommitWrite(allocID, conID string, fileData *FileInputData)
246246
fileSize := rStat.Size()
247247
start := time.Now()
248248
hasher := GetNewCommitHasher(fileSize)
249-
buffer := make([]byte, BufferSize)
249+
bufSize := BufferSize
250+
if fileSize < BufferSize {
251+
bufSize = int(fileSize)
252+
}
253+
buffer := make([]byte, bufSize)
250254
_, err = io.CopyBuffer(hasher, r, buffer)
251255
if err != nil {
252256
return false, common.NewError("read_write_error", err.Error())

code/go/0chain.net/blobbercore/filestore/tree_validation.go

Lines changed: 52 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"fmt"
1010
"io"
1111
"math"
12+
"sync"
1213

1314
"github.com/0chain/gosdk/core/util"
1415
"golang.org/x/crypto/sha3"
@@ -402,30 +403,74 @@ func getNewValidationTree(dataSize int64) *validationTree {
402403
type commitHasher struct {
403404
fmt *fixedMerkleTree
404405
vt *validationTree
405-
writer io.Writer
406406
isInitialized bool
407407
}
408408

409409
func GetNewCommitHasher(dataSize int64) *commitHasher {
410410
c := new(commitHasher)
411411
c.fmt = getNewFixedMerkleTree()
412412
c.vt = getNewValidationTree(dataSize)
413-
c.writer = io.MultiWriter(c.fmt, c.vt)
414413
c.isInitialized = true
415414
return c
416415
}
417416

418417
func (c *commitHasher) Write(b []byte) (int, error) {
419-
return c.writer.Write(b)
418+
var (
419+
wg sync.WaitGroup
420+
errChan = make(chan error, 2)
421+
n int
422+
)
423+
wg.Add(2)
424+
go func() {
425+
_, err := c.fmt.Write(b)
426+
if err != nil {
427+
errChan <- err
428+
}
429+
430+
wg.Done()
431+
}()
432+
go func() {
433+
written, err := c.vt.Write(b)
434+
if err != nil {
435+
errChan <- err
436+
}
437+
n = written
438+
wg.Done()
439+
}()
440+
wg.Wait()
441+
close(errChan)
442+
for err := range errChan {
443+
return n, err
444+
}
445+
return n, nil
420446
}
421447

422448
func (c *commitHasher) Finalize() error {
423-
err := c.fmt.Finalize()
424-
if err != nil {
449+
var (
450+
wg sync.WaitGroup
451+
errChan = make(chan error, 2)
452+
)
453+
wg.Add(2)
454+
go func() {
455+
err := c.fmt.Finalize()
456+
if err != nil {
457+
errChan <- err
458+
}
459+
wg.Done()
460+
}()
461+
go func() {
462+
err := c.vt.Finalize()
463+
if err != nil {
464+
errChan <- err
465+
}
466+
wg.Done()
467+
}()
468+
wg.Wait()
469+
close(errChan)
470+
for err := range errChan {
425471
return err
426472
}
427-
428-
return c.vt.Finalize()
473+
return nil
429474
}
430475

431476
func (c *commitHasher) GetFixedMerkleRoot() string {

code/go/0chain.net/blobbercore/handler/file_command_upload.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ func (cmd *UploadFileCommand) IsValidated(ctx context.Context, req *http.Request
7676
logging.Logger.Error(err.Error())
7777
return common.NewError("database_error", "Got db error while getting ref")
7878
}
79-
elapsedRefExist := time.Since(start) - elapsedUnmarshal
79+
elapsedRefExist := time.Since(start) - elapsedUnmarshal - elapsedReadForm
8080
if isExist {
8181
msg := fmt.Sprintf("File at path :%s: already exists", fileChanger.Path)
8282
return common.NewError("duplicate_file", msg)

0 commit comments

Comments
 (0)