Skip to content

Commit 641a1f1

Browse files
authored
Merge pull request #4153 from Algo-devops-service/relbeta3.8.0
2 parents ccb2ec3 + 6fb086e commit 641a1f1

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

70 files changed

+2088
-927
lines changed

.circleci/config.yml

+11-11
Original file line numberDiff line numberDiff line change
@@ -217,10 +217,12 @@ commands:
217217
- restore_libsodium
218218
- restore_cache:
219219
keys:
220-
- 'go-mod-1-14-7-v2-{{ arch }}-{{ checksum "go.mod" }}-{{ checksum "go.sum" }}'
220+
- 'go-mod-1.17.9-v3-{{ arch }}-{{ checksum "go.mod" }}-{{ checksum "go.sum" }}'
221221
- restore_cache:
222222
keys:
223-
- 'go-cache-v2-{{ .Environment.CIRCLE_STAGE }}-'
223+
- 'go-cache-v3-{{ arch }}-{{ .Branch }}-{{ .Revision }}'
224+
- 'go-cache-v3-{{ arch }}-{{ .Branch }}-'
225+
- 'go-cache-v3-{{ arch }}-'
224226
- run:
225227
name: scripts/travis/build.sh --make_debug
226228
command: |
@@ -233,11 +235,11 @@ commands:
233235
scripts/travis/build.sh --make_debug
234236
- cache_libsodium
235237
- save_cache:
236-
key: 'go-mod-1-14-7-v2-{{ arch }}-{{ checksum "go.mod" }}-{{ checksum "go.sum" }}'
238+
key: 'go-mod-1.17.9-v3-{{ arch }}-{{ checksum "go.mod" }}-{{ checksum "go.sum" }}'
237239
paths:
238240
- << parameters.build_dir >>/go/pkg/mod
239241
- save_cache:
240-
key: 'go-cache-v2-{{ .Environment.CIRCLE_STAGE }}-{{ .Environment.CIRCLE_BUILD_NUM }}'
242+
key: 'go-cache-v3-{{ arch }}-{{ .Branch }}-{{ .Revision }}'
241243
paths:
242244
- tmp/go-cache
243245
- persist_to_workspace:
@@ -257,7 +259,7 @@ commands:
257259
mkdir -p tmp
258260
find crypto/libsodium-fork -type f -exec openssl md5 "{}" + > tmp/libsodium.md5
259261
- save_cache:
260-
key: 'libsodium-fork-v2-{{ .Environment.CIRCLE_STAGE }}-{{ checksum "tmp/libsodium.md5" }}'
262+
key: 'libsodium-fork-v2-{{ arch }}-{{ checksum "tmp/libsodium.md5" }}'
261263
paths:
262264
- crypto/libs
263265

@@ -271,7 +273,7 @@ commands:
271273
find crypto/libsodium-fork -type f -exec openssl md5 "{}" + > tmp/libsodium.md5
272274
- restore_cache:
273275
keys:
274-
- 'libsodium-fork-v2-{{ .Environment.CIRCLE_STAGE }}-{{ checksum "tmp/libsodium.md5" }}'
276+
- 'libsodium-fork-v2-{{ arch }}-{{ checksum "tmp/libsodium.md5" }}'
275277

276278
generic_test:
277279
description: Run build tests from build workspace, for re-use by diferent architectures
@@ -301,7 +303,9 @@ commands:
301303
touch << parameters.result_path >>/<< parameters.result_subdir >>/${CIRCLE_NODE_INDEX}/testresults.json
302304
- restore_cache:
303305
keys:
304-
- 'go-cache-v2-{{ .Environment.CIRCLE_STAGE }}-'
306+
- 'go-cache-v3-{{ arch }}-{{ .Branch }}-{{ .Revision }}'
307+
- 'go-cache-v3-{{ arch }}-{{ .Branch }}-'
308+
- 'go-cache-v3-{{ arch }}-'
305309
- run:
306310
name: Run build tests
307311
no_output_timeout: << parameters.no_output_timeout >>
@@ -333,10 +337,6 @@ commands:
333337
root: << parameters.result_path >>
334338
paths:
335339
- << parameters.result_subdir >>
336-
- save_cache:
337-
key: 'go-cache-v2-{{ .Environment.CIRCLE_STAGE }}-{{ .Environment.CIRCLE_BUILD_NUM }}'
338-
paths:
339-
- tmp/go-cache
340340

341341
upload_coverage:
342342
description: Collect coverage reports and upload them

buildnumber.dat

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2
1+
0

cmd/buildtools/genesis.go

+16-5
Original file line numberDiff line numberDiff line change
@@ -152,8 +152,7 @@ var dumpGenesisHashCmd = &cobra.Command{
152152
os.Exit(1)
153153
}
154154

155-
hash := crypto.HashObj(genesis)
156-
fmt.Print(hash.String())
155+
fmt.Print(genesis.Hash().String())
157156
},
158157
}
159158

@@ -237,7 +236,7 @@ func ensureReleaseGenesis(src bookkeeping.Genesis, releaseFile string) (err erro
237236
return fmt.Errorf("error saving file: %v", err)
238237
}
239238

240-
hash := crypto.HashObj(releaseGenesis)
239+
hash := releaseGenesis.Hash()
241240
err = ioutil.WriteFile(releaseFileHash, []byte(hash.String()), 0666)
242241
if err != nil {
243242
return fmt.Errorf("error saving hash file '%s': %v", releaseFileHash, err)
@@ -261,8 +260,20 @@ func verifyReleaseGenesis(src bookkeeping.Genesis, releaseFile string) (updateGe
261260
func verifyGenesisHashes(src, release bookkeeping.Genesis, hashFile string) (err error) {
262261
src.Timestamp = release.Timestamp
263262

264-
srcHash := crypto.HashObj(src)
265-
releaseHash := crypto.HashObj(release)
263+
srcHash := src.Hash()
264+
releaseHash := release.Hash()
265+
266+
srcHashCrypo := crypto.HashObj(src)
267+
releaseHashCrypto := crypto.HashObj(release)
268+
269+
if srcHash != srcHashCrypo {
270+
return fmt.Errorf("source hashes differ - genesis.json our hashing function isn't consistent")
271+
}
272+
273+
if releaseHash != releaseHashCrypto {
274+
return fmt.Errorf("release hashes differ - genesis.json our hashing function isn't consistent")
275+
}
276+
266277
if srcHash != releaseHash {
267278
return fmt.Errorf("source and release hashes differ - genesis.json may have diverge from released version")
268279
}

cmd/catchpointdump/net.go

+93-49
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package main
1818

1919
import (
2020
"context"
21+
"errors"
2122
"fmt"
2223
"io"
2324
"net/http"
@@ -191,85 +192,126 @@ func getRemoteDataStream(url string, hint string) (result io.ReadCloser, ctxCanc
191192
return
192193
}
193194

194-
func downloadCatchpoint(addr string, round int) (tarName string, err error) {
195+
func doDownloadCatchpoint(url string, wdReader util.WatchdogStreamReader, out io.Writer) error {
196+
writeChunkSize := 64 * 1024
197+
198+
var totalBytes int
199+
tempBytes := make([]byte, writeChunkSize)
200+
lastProgressUpdate := time.Now()
201+
progress := -25
202+
printDownloadProgressLine(progress, 50, url, 0)
203+
204+
for {
205+
n, err := wdReader.Read(tempBytes)
206+
if err == io.EOF {
207+
return nil
208+
}
209+
if err != nil {
210+
return err
211+
}
212+
totalBytes += n
213+
_, err = out.Write(tempBytes[:n])
214+
if err != nil {
215+
return err
216+
}
217+
218+
err = wdReader.Reset()
219+
if err == io.EOF {
220+
return nil
221+
}
222+
if err != nil {
223+
return err
224+
}
225+
if time.Since(lastProgressUpdate) > 50*time.Millisecond {
226+
lastProgressUpdate = time.Now()
227+
printDownloadProgressLine(progress, 50, url, int64(totalBytes))
228+
progress++
229+
}
230+
}
231+
}
232+
233+
// Downloads a catchpoint tar file and returns the path to the tar file.
234+
func downloadCatchpoint(addr string, round int) (string, error) {
195235
genesisID := strings.Split(networkName, ".")[0] + "-v1.0"
196236
urlTemplate := "http://" + addr + "/v1/" + genesisID + "/%s/" + strconv.FormatUint(uint64(round), 36)
197237
catchpointURL := fmt.Sprintf(urlTemplate, "ledger")
198238

199239
catchpointStream, catchpointCtxCancel, err := getRemoteDataStream(catchpointURL, "catchpoint")
200240
defer catchpointCtxCancel()
201241
if err != nil {
202-
return
242+
return "", err
203243
}
204244
defer catchpointStream.Close()
205245

206246
dirName := "./" + strings.Split(networkName, ".")[0] + "/" + strings.Split(addr, ".")[0]
207247
os.RemoveAll(dirName)
208248
err = os.MkdirAll(dirName, 0777)
209249
if err != nil && !os.IsExist(err) {
210-
return
250+
return "", err
211251
}
212-
tarName = dirName + "/" + strconv.FormatUint(uint64(round), 10) + ".tar"
213-
file, err2 := os.Create(tarName) // will create a file with 0666 permission.
214-
if err2 != nil {
215-
return tarName, err2
252+
tarName := dirName + "/" + strconv.FormatUint(uint64(round), 10) + ".tar"
253+
file, err := os.Create(tarName) // will create a file with 0666 permission.
254+
if err != nil {
255+
return "", err
216256
}
217-
defer func() {
218-
err = file.Close()
219-
}()
220-
writeChunkSize := 64 * 1024
257+
defer file.Close()
221258

222-
wdReader := util.MakeWatchdogStreamReader(catchpointStream, 4096, 4096, 2*time.Second)
223-
var totalBytes int
224-
tempBytes := make([]byte, writeChunkSize)
225-
lastProgressUpdate := time.Now()
226-
progress := -25
227-
printDownloadProgressLine(progress, 50, catchpointURL, 0)
228-
defer printDownloadProgressLine(0, 0, catchpointURL, 0)
229-
var n int
230-
for {
231-
n, err = wdReader.Read(tempBytes)
232-
if err != nil && err != io.EOF {
233-
return
234-
}
235-
totalBytes += n
236-
writtenBytes, err2 := file.Write(tempBytes[:n])
237-
if err2 != nil || n != writtenBytes {
238-
return tarName, err2
239-
}
259+
wdReader := util.MakeWatchdogStreamReader(catchpointStream, 4096, 4096, 5*time.Second)
260+
defer wdReader.Close()
240261

241-
err = wdReader.Reset()
242-
if err != nil {
243-
if err == io.EOF {
244-
return tarName, nil
245-
}
246-
return
262+
err = doDownloadCatchpoint(catchpointURL, wdReader, file)
263+
if err != nil {
264+
return "", err
265+
}
266+
267+
printDownloadProgressLine(0, 0, catchpointURL, 0)
268+
269+
err = file.Close()
270+
if err != nil {
271+
return "", err
272+
}
273+
274+
err = catchpointStream.Close()
275+
if err != nil {
276+
return "", err
277+
}
278+
279+
return tarName, nil
280+
}
281+
282+
func deleteLedgerFiles(deleteTracker bool) error {
283+
paths := []string{
284+
"./ledger.block.sqlite",
285+
"./ledger.block.sqlite-shm",
286+
"./ledger.block.sqlite-wal",
287+
}
288+
if deleteTracker {
289+
trackerPaths := []string{
290+
"./ledger.tracker.sqlite",
291+
"./ledger.tracker.sqlite-shm",
292+
"./ledger.tracker.sqlite-wal",
247293
}
248-
if time.Since(lastProgressUpdate) > 50*time.Millisecond {
249-
lastProgressUpdate = time.Now()
250-
printDownloadProgressLine(progress, 50, catchpointURL, int64(totalBytes))
251-
progress++
294+
paths = append(paths, trackerPaths...)
295+
}
296+
297+
for _, path := range paths {
298+
err := os.Remove(path)
299+
if (err != nil) && !errors.Is(err, os.ErrNotExist) {
300+
return err
252301
}
253302
}
303+
304+
return nil
254305
}
255306

256307
func loadAndDump(addr string, tarFile string, genesisInitState ledgercore.InitState) error {
257-
deleteLedgerFiles := func(deleteTracker bool) {
258-
os.Remove("./ledger.block.sqlite")
259-
os.Remove("./ledger.block.sqlite-shm")
260-
os.Remove("./ledger.block.sqlite-wal")
261-
if deleteTracker {
262-
os.Remove("./ledger.tracker.sqlite")
263-
os.Remove("./ledger.tracker.sqlite-shm")
264-
os.Remove("./ledger.tracker.sqlite-wal")
265-
}
266-
}
267308
// delete current ledger files.
268309
deleteLedgerFiles(true)
269310
cfg := config.GetDefaultLocal()
270311
l, err := ledger.OpenLedger(logging.Base(), "./ledger", false, genesisInitState, cfg)
271312
if err != nil {
272313
reportErrorf("Unable to open ledger : %v", err)
314+
return err
273315
}
274316

275317
defer deleteLedgerFiles(!loadOnly)
@@ -279,6 +321,7 @@ func loadAndDump(addr string, tarFile string, genesisInitState ledgercore.InitSt
279321
err = catchupAccessor.ResetStagingBalances(context.Background(), true)
280322
if err != nil {
281323
reportErrorf("Unable to initialize catchup database : %v", err)
324+
return err
282325
}
283326

284327
stats, err := os.Stat(tarFile)
@@ -297,6 +340,7 @@ func loadAndDump(addr string, tarFile string, genesisInitState ledgercore.InitSt
297340
fileHeader, err = loadCatchpointIntoDatabase(context.Background(), catchupAccessor, reader, tarSize)
298341
if err != nil {
299342
reportErrorf("Unable to load catchpoint file into in-memory database : %v", err)
343+
return err
300344
}
301345

302346
if !loadOnly {

0 commit comments

Comments
 (0)