code: func (l *kvLedger) recommitLostBlocks(firstBlockNum uint64, lastBlockNum uint64, recoverables ...recoverable) error {
  	logger.Infof("Recommitting lost blocks - firstBlockNum=%d, lastBlockNum=%d, recoverables=%#v", firstBlockNum, lastBlockNum, recoverables)
  	var err error
  	var blockAndPvtdata *ledger.BlockAndPvtData
  	for blockNumber := firstBlockNum; blockNumber <= lastBlockNum; blockNumber++ {
  		if blockAndPvtdata, err = l.GetPvtDataAndBlockByNum(blockNumber, nil); err != nil {
  			return err
  		}
  		for _, r := range recoverables {
  			if err := r.CommitLostBlock(blockAndPvtdata); err != nil {
  				return err
  			}
  		}
  	}
  	logger.Infof("Recommitted lost blocks - firstBlockNum=%d, lastBlockNum=%d, recoverables=%#v", firstBlockNum, lastBlockNum, recoverables)
  	return nil
  }
docs: //recommitLostBlocks retrieves blocks in specified range and commit the write set to either
  //state DB or history DB or both