Skip to content

Commit 845a97e

Browse files
authored
Fix/challenge for bbr (#686)
1 parent da3feeb commit 845a97e

File tree

8 files changed

+58
-38
lines changed

8 files changed

+58
-38
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
/data
12
coverage.txt
23
.DS_Store
34
.idea/

code/go/0chain.net/blobbercore/allocation/protocol.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ func GetAllocationByID(ctx context.Context, allocID string) (a *Allocation, err
2323

2424
a = new(Allocation)
2525
err = tx.Model(&Allocation{}).
26-
Where(&Allocation{ID: allocID}).
26+
Where("id=?", allocID).
2727
First(a).Error
2828
return
2929
}

code/go/0chain.net/blobbercore/automigration/automigration.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ func grantPrivileges(db *gorm.DB) error {
129129
}
130130

131131
func migrateSchema(db *gorm.DB) error {
132+
// !FIXME : tables can't be dropped as default on blobber startup. Because blobber will lose all data if it restarts. It might be a critical bug on production.
132133
tablesToKeep := make(map[string]struct{})
133134

134135
for _, tb := range config.Configuration.DBTablesToKeep {

code/go/0chain.net/blobbercore/challenge/entity.go

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -112,12 +112,15 @@ func marshalField(obj interface{}, dest *datatypes.JSON) error {
112112
}
113113

114114
func unMarshalField(stringObj datatypes.JSON, dest interface{}) error {
115-
retBytes, err := stringObj.Value()
115+
if len(stringObj) == 0 {
116+
return nil
117+
}
118+
retBytes, err := stringObj.MarshalJSON()
116119
if err != nil {
117120
return err
118121
}
119122
if retBytes != nil {
120-
return json.Unmarshal(retBytes.([]byte), dest)
123+
return json.Unmarshal(retBytes, dest)
121124
}
122125
return nil
123126
}
@@ -151,20 +154,16 @@ func (cr *ChallengeEntity) SaveWith(db *gorm.DB) error {
151154

152155
func (cr *ChallengeEntity) UnmarshalFields() error {
153156
var err error
154-
155-
cr.Validators = make([]ValidationNode, 0)
156157
err = unMarshalField(cr.ValidatorsString, &cr.Validators)
157158
if err != nil {
158159
return err
159160
}
160161

161-
cr.LastCommitTxnIDs = make([]string, 0)
162162
err = unMarshalField(cr.LastCommitTxnList, &cr.LastCommitTxnIDs)
163163
if err != nil {
164164
return err
165165
}
166166

167-
cr.ValidationTickets = make([]*ValidationTicket, 0)
168167
err = unMarshalField(cr.ValidationTicketsString, &cr.ValidationTickets)
169168
if err != nil {
170169
return err

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

Lines changed: 34 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -385,32 +385,49 @@ func (fs *FileStore) GetBlocksMerkleTreeForChallenge(allocID string,
385385
return nil, nil, common.NewError("stat_error", err.Error())
386386
}
387387

388-
totalChunks := int(math.Ceil(float64(fi.Size()) / float64(fileData.ChunkSize)))
388+
numChunks := int(math.Ceil(float64(fi.Size()) / float64(fileData.ChunkSize)))
389389

390390
fixedMT := util.NewFixedMerkleTree(int(fileData.ChunkSize))
391+
merkleChunkSize := int(fileData.ChunkSize) / 1024
392+
if merkleChunkSize == 0 {
393+
merkleChunkSize = 1
394+
}
391395

392396
bytesBuf := bytes.NewBuffer(make([]byte, 0))
393-
for i := 0; i < totalChunks; i++ {
394-
n, err := io.CopyN(bytesBuf, file, fileData.ChunkSize)
395-
if err != nil {
396-
if n == 0 && errors.Is(err, io.EOF) {
397-
break
397+
for chunkIndex := 0; chunkIndex < numChunks; chunkIndex++ {
398+
written, err := io.CopyN(bytesBuf, file, fileData.ChunkSize)
399+
400+
if written > 0 {
401+
dataBytes := bytesBuf.Bytes()
402+
403+
errWrite := fixedMT.Write(dataBytes, chunkIndex)
404+
if errWrite != nil {
405+
return nil, nil, common.NewError("hash_error", errWrite.Error())
398406
}
399-
return nil, nil, err
400-
}
401407

402-
dataBytes := bytesBuf.Bytes()
403-
err = fixedMT.Write(dataBytes, i)
404-
if err != nil {
405-
return nil, nil, common.NewError("buffer_write_error", err.Error())
406-
}
408+
offset := 0
409+
410+
for i := 0; i < len(dataBytes); i += merkleChunkSize {
411+
end := i + merkleChunkSize
412+
if end > len(dataBytes) {
413+
end = len(dataBytes)
414+
}
407415

408-
startInd := blockoffset * MerkleChunkSize
409-
endInd := startInd + MerkleChunkSize
410-
returnBytes = append(returnBytes, dataBytes[startInd:endInd]...)
416+
if offset == blockoffset {
417+
returnBytes = append(returnBytes, dataBytes[i:end]...)
418+
}
411419

412-
bytesBuf.Reset()
420+
offset++
421+
if offset >= 1024 {
422+
offset = 1
423+
}
424+
}
425+
bytesBuf.Reset()
426+
}
413427

428+
if err != nil && err == io.EOF {
429+
break
430+
}
414431
}
415432

416433
return returnBytes, fixedMT.GetMerkleTree(), nil

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

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import (
1717
"github.com/0chain/blobber/code/go/0chain.net/core/transaction"
1818
"github.com/0chain/blobber/code/go/0chain.net/core/util"
1919

20-
"github.com/0chain/gosdk/zboxcore/sdk"
2120
"github.com/0chain/gosdk/zcncore"
2221
"go.uber.org/zap"
2322
)
@@ -97,14 +96,14 @@ func RegisterBlobber(ctx context.Context) error {
9796
return err
9897
}
9998

100-
if t, err := TransactionVerify(txnHash); err != nil {
99+
t, err := TransactionVerify(txnHash)
100+
if err != nil {
101101
logging.Logger.Error("Failed to verify blobber add/update transaction", zap.Any("err", err), zap.String("txn.Hash", txnHash))
102-
} else {
103-
logging.Logger.Info("Verified blobber add/update transaction", zap.String("txn_hash", t.Hash), zap.Any("txn_output", t.TransactionOutput))
102+
return err
104103
}
105104

106-
return err
107-
105+
logging.Logger.Info("Verified blobber add/update transaction", zap.String("txn_hash", t.Hash), zap.Any("txn_output", t.TransactionOutput))
106+
return nil
108107
}
109108

110109
return SendHealthCheck()
@@ -160,7 +159,7 @@ func sendSmartContractBlobberAdd(ctx context.Context) (string, error) {
160159
// UpdateBlobberOnChain updates latest changes in blobber's settings, capacity,etc.
161160
func UpdateBlobberOnChain(ctx context.Context) error {
162161

163-
_, err := sdk.GetBlobber(node.Self.ID)
162+
_, err := zcn.GetBlobber(node.Self.ID)
164163
if err != nil { // blobber is not registered yet
165164
logging.Logger.Warn("failed to get blobber from blockchain", zap.Error(err))
166165
return err

dev.local/cli.sh

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,11 @@ change_zcn() {
8383

8484
install_debuggger() {
8585
[ -d ../.vscode ] || mkdir -p ../.vscode
86-
sed "s/Hostname/$hostname/g" launch.json > ../.vscode/launch.json
87-
echo "debugbbers are installed"
86+
sed "s/Hostname/$hostname/g" launch.json > ./launch.1.json
87+
base=$(echo "$root" | sed 's/\//\\\//g')
88+
sed "s/root/$base/g" ./launch.1.json > ../.vscode/launch.json
89+
rm -rf ./launch.1.json
90+
echo "debugbbers are installed"
8891
}
8992

9093
cleanAll() {
@@ -200,7 +203,7 @@ start_blobber () {
200203
keys_file="../docker.local/keys_config/b0bnode${i}_keys.txt"
201204
minio_file="../docker.local/keys_config/minio_config.txt"
202205
config_dir="./data/blobber$i/config"
203-
files_dir="./data/blobber$i/files"
206+
files_dir="${root}/data/blobber$i/files"
204207
log_dir="./data/blobber$i/log"
205208
db_dir="./data/blobber$i/data"
206209

dev.local/launch.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
"--keys_file", "../../../../docker.local/keys_config/b0bnode1_keys.txt",
1818
"--minio_file" ,"../../../../docker.local/keys_config/minio_config.txt",
1919

20-
"--files_dir","../../../../dev.local/data/blobber/files",
20+
"--files_dir","root/data/blobber/files",
2121
"--log_dir" ,"../../../../dev.local/data/blobber/log",
2222
"--db_dir", "../../../../dev.local/data/blobber/data",
2323
"--config_dir", "../../../../dev.local/data/blobber/config"
@@ -36,7 +36,7 @@
3636
"--keys_file", "../../../../docker.local/keys_config/b0bnode1_keys.txt",
3737
"--minio_file" ,"../../../../docker.local/keys_config/minio_config.txt",
3838

39-
"--files_dir","../../../../dev.local/data/blobber1/files",
39+
"--files_dir","root/data/blobber1/files",
4040
"--log_dir" ,"../../../../dev.local/data/blobber1/log",
4141
"--db_dir", "../../../../dev.local/data/blobber1/data",
4242
"--config_dir", "../../../../dev.local/data/blobber1/config"
@@ -55,7 +55,7 @@
5555
"--keys_file", "../../../../docker.local/keys_config/b0bnode2_keys.txt",
5656
"--minio_file" ,"../../../../docker.local/keys_config/minio_config.txt",
5757

58-
"--files_dir","../../../../dev.local/data/blobber2/files",
58+
"--files_dir","root/data/blobber2/files",
5959
"--log_dir" ,"../../../../dev.local/data/blobber2/log",
6060
"--db_dir", "../../../../dev.local/data/blobber2/data",
6161
"--config_dir", "../../../../dev.local/data/blobber2/config"
@@ -74,7 +74,7 @@
7474
"--keys_file", "../../../../docker.local/keys_config/b0bnode3_keys.txt",
7575
"--minio_file" ,"../../../../docker.local/keys_config/minio_config.txt",
7676

77-
"--files_dir","../../../../dev.local/data/blobber3/files",
77+
"--files_dir","root/data/blobber3/files",
7878
"--log_dir" ,"../../../../dev.local/data/blobber3/log",
7979
"--db_dir", "../../../../dev.local/data/blobber3/data",
8080
"--config_dir", "../../../../dev.local/data/blobber3/config"

0 commit comments

Comments
 (0)