In FetchHeightRange, preallocate the hash array.
Change FetchBlockByHeight to do the database lookup itself instead of calling getBlkByHeight. This saves an allocation of the entire block, which it wasn't using. In OpenDB, use fetchBlockShaByHeight instead of getBlkByHeight since it only needs the sha. This saves memory on startup. ok drahn@
This commit is contained in:
parent
c570830104
commit
1b51d58e55
2 changed files with 12 additions and 7 deletions
15
ldb/block.go
15
ldb/block.go
|
@ -247,13 +247,18 @@ func (db *LevelDb) FetchBlockShaByHeight(height int64) (sha *btcwire.ShaHash, er
|
|||
// fetchBlockShaByHeight returns a block hash based on its height in the
|
||||
// block chain.
|
||||
func (db *LevelDb) fetchBlockShaByHeight(height int64) (rsha *btcwire.ShaHash, err error) {
|
||||
var sha *btcwire.ShaHash
|
||||
sha, _, err = db.getBlkByHeight(height)
|
||||
key := int64ToKey(height)
|
||||
|
||||
blkVal, err := db.lDb.Get(key, db.ro)
|
||||
if err != nil {
|
||||
return
|
||||
log.Tracef("failed to find height %v", height)
|
||||
return // exists ???
|
||||
}
|
||||
|
||||
return sha, nil
|
||||
var sha btcwire.ShaHash
|
||||
sha.SetBytes(blkVal[0:32])
|
||||
|
||||
return &sha, nil
|
||||
}
|
||||
|
||||
// FetchHeightRange looks up a range of blocks by the start and ending
|
||||
|
@ -271,7 +276,7 @@ func (db *LevelDb) FetchHeightRange(startHeight, endHeight int64) (rshalist []bt
|
|||
endidx = endHeight
|
||||
}
|
||||
|
||||
var shalist []btcwire.ShaHash
|
||||
shalist := make([]btcwire.ShaHash, 0, endidx-startHeight)
|
||||
for height := startHeight; height < endidx; height++ {
|
||||
// TODO(drahn) fix blkFile from height
|
||||
|
||||
|
|
|
@ -101,7 +101,7 @@ func OpenDB(args ...interface{}) (btcdb.Db, error) {
|
|||
blockforward:
|
||||
for {
|
||||
|
||||
sha, _, err := ldb.getBlkByHeight(testblock)
|
||||
sha, err := ldb.fetchBlockShaByHeight(testblock)
|
||||
if err == nil {
|
||||
// block is found
|
||||
lastSha = sha
|
||||
|
@ -125,7 +125,7 @@ blockforward:
|
|||
blocknarrow:
|
||||
for lastknownblock != -1 {
|
||||
testblock = (lastknownblock + nextunknownblock) / 2
|
||||
sha, _, err := ldb.getBlkByHeight(testblock)
|
||||
sha, err := ldb.fetchBlockShaByHeight(testblock)
|
||||
if err == nil {
|
||||
lastknownblock = testblock
|
||||
lastSha = sha
|
||||
|
|
Loading…
Reference in a new issue