github.com/prysmaticlabs/prysm@v1.4.4/beacon-chain/db/kv/migration_block_slot_index.go (about) 1 package kv 2 3 import ( 4 "bytes" 5 "strconv" 6 7 "github.com/prysmaticlabs/prysm/shared/bytesutil" 8 bolt "go.etcd.io/bbolt" 9 ) 10 11 var migrationBlockSlotIndex0Key = []byte("block_slot_index_0") 12 13 func migrateBlockSlotIndex(tx *bolt.Tx) error { 14 mb := tx.Bucket(migrationsBucket) 15 if b := mb.Get(migrationBlockSlotIndex0Key); bytes.Equal(b, migrationCompleted) { 16 return nil // Migration already completed. 17 } 18 19 bkt := tx.Bucket(blockSlotIndicesBucket) 20 21 // Convert indices from strings to big endian integers. 22 if err := bkt.ForEach(func(k, v []byte) error { 23 key, err := strconv.ParseUint(string(k), 10, 64) 24 if err != nil { 25 return err 26 } 27 if err := bkt.Delete(k); err != nil { 28 return err 29 } 30 return bkt.Put(bytesutil.Uint64ToBytesBigEndian(key), v) 31 }); err != nil { 32 return err 33 } 34 35 return mb.Put(migrationBlockSlotIndex0Key, migrationCompleted) 36 }