@ -364,14 +364,12 @@ func (bc *ChainManager) insert(block *types.Block) {
func ( bc * ChainManager ) write ( block * types . Block ) {
tstart := time . Now ( )
go func ( ) {
enc , _ := rlp . EncodeToBytes ( ( * types . StorageBlock ) ( block ) )
key := append ( blockHashPre , block . Hash ( ) . Bytes ( ) ... )
err := bc . blockDb . Put ( key , enc )
if err != nil {
glog . Fatal ( "db write fail:" , err )
}
} ( )
enc , _ := rlp . EncodeToBytes ( ( * types . StorageBlock ) ( block ) )
key := append ( blockHashPre , block . Hash ( ) . Bytes ( ) ... )
err := bc . blockDb . Put ( key , enc )
if err != nil {
glog . Fatal ( "db write fail:" , err )
}
if glog . V ( logger . Debug ) {
glog . Infof ( "wrote block #%v %s. Took %v\n" , block . Number ( ) , common . PP ( block . Hash ( ) . Bytes ( ) ) , time . Since ( tstart ) )
@ -555,7 +553,8 @@ const (
sideStatTy
)
func ( self * ChainManager ) WriteBlock ( block * types . Block ) ( status writeStatus , err error ) {
// WriteBlock writes the block to the chain (or pending queue)
func ( self * ChainManager ) WriteBlock ( block * types . Block , queued bool ) ( status writeStatus , err error ) {
self . wg . Add ( 1 )
defer self . wg . Done ( )
@ -587,11 +586,15 @@ func (self *ChainManager) WriteBlock(block *types.Block) (status writeStatus, er
status = sideStatTy
}
// Write block to database. Eventually we'll have to improve on this and throw away blocks that are
// not in the canonical chain.
self . mu . Lock ( )
self . enqueueForWrite ( block )
self . mu . Unlock ( )
if queued {
// Write block to database. Eventually we'll have to improve on this and throw away blocks that are
// not in the canonical chain.
self . mu . Lock ( )
self . enqueueForWrite ( block )
self . mu . Unlock ( )
} else {
self . write ( block )
}
// Delete from future blocks
self . futureBlocks . Remove ( block . Hash ( ) )
@ -693,7 +696,7 @@ func (self *ChainManager) InsertChain(chain types.Blocks) (int, error) {
txcount += len ( block . Transactions ( ) )
// write the block to the chain and get the status
status , err := self . WriteBlock ( block )
status , err := self . WriteBlock ( block , true )
if err != nil {
return i , err
}