forked from TrueCloudLab/neoneo-go
Merge pull request #481 from nspcc-dev/core-fix-init-corner-cases
Fix init corner cases
This commit is contained in:
commit
f686069f37
1 changed files with 20 additions and 13 deletions
|
@ -101,6 +101,10 @@ func (bc *Blockchain) init() error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
bc.headerList = NewHeaderHashList(genesisBlock.Hash())
|
bc.headerList = NewHeaderHashList(genesisBlock.Hash())
|
||||||
|
err = bc.store.Put(storage.SYSCurrentHeader.Bytes(), hashAndIndexToBytes(genesisBlock.Hash(), genesisBlock.Index))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
return bc.storeBlock(genesisBlock)
|
return bc.storeBlock(genesisBlock)
|
||||||
}
|
}
|
||||||
if ver != version {
|
if ver != version {
|
||||||
|
@ -131,6 +135,9 @@ func (bc *Blockchain) init() error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if bc.storedHeaderCount == 0 && currHeaderHeight == 0 {
|
||||||
|
bc.headerList.Add(currHeaderHash)
|
||||||
|
}
|
||||||
|
|
||||||
// There is a high chance that the Node is stopped before the next
|
// There is a high chance that the Node is stopped before the next
|
||||||
// batch of 2000 headers was stored. Via the currentHeaders stored we can sync
|
// batch of 2000 headers was stored. Via the currentHeaders stored we can sync
|
||||||
|
@ -146,6 +153,7 @@ func (bc *Blockchain) init() error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
targetHash = genesisBlock.Hash()
|
targetHash = genesisBlock.Hash()
|
||||||
|
bc.headerList.Add(targetHash)
|
||||||
}
|
}
|
||||||
headers := make([]*Header, 0)
|
headers := make([]*Header, 0)
|
||||||
|
|
||||||
|
@ -157,7 +165,6 @@ func (bc *Blockchain) init() error {
|
||||||
headers = append(headers, header)
|
headers = append(headers, header)
|
||||||
hash = header.PrevHash
|
hash = header.PrevHash
|
||||||
}
|
}
|
||||||
|
|
||||||
headerSliceReverse(headers)
|
headerSliceReverse(headers)
|
||||||
for _, h := range headers {
|
for _, h := range headers {
|
||||||
if !h.Verify() {
|
if !h.Verify() {
|
||||||
|
@ -266,7 +273,7 @@ func (bc *Blockchain) AddHeaders(headers ...*Header) (err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if oldlen != headerList.Len() {
|
if oldlen != headerList.Len() {
|
||||||
updateHeaderHeightMetric(headerList.Len()-1)
|
updateHeaderHeightMetric(headerList.Len() - 1)
|
||||||
if err = bc.store.PutBatch(batch); err != nil {
|
if err = bc.store.PutBatch(batch); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -492,18 +499,18 @@ func (bc *Blockchain) persist() error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
bHeight, err := storage.CurrentBlockHeight(bc.store)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
oldHeight := atomic.SwapUint32(&bc.persistedHeight, bHeight)
|
|
||||||
diff := bHeight - oldHeight
|
|
||||||
|
|
||||||
storedHeaderHeight, _, err := storage.CurrentHeaderHeight(bc.store)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if persisted > 0 {
|
if persisted > 0 {
|
||||||
|
bHeight, err := storage.CurrentBlockHeight(bc.store)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
oldHeight := atomic.SwapUint32(&bc.persistedHeight, bHeight)
|
||||||
|
diff := bHeight - oldHeight
|
||||||
|
|
||||||
|
storedHeaderHeight, _, err := storage.CurrentHeaderHeight(bc.store)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
log.WithFields(log.Fields{
|
log.WithFields(log.Fields{
|
||||||
"persistedBlocks": diff,
|
"persistedBlocks": diff,
|
||||||
"persistedKeys": persisted,
|
"persistedKeys": persisted,
|
||||||
|
|
Loading…
Reference in a new issue