tweaks
This commit is contained in:
parent
80033e3f33
commit
df7f53e7d6
17
db.go
17
db.go
|
@ -6,7 +6,8 @@ import log "github.com/sirupsen/logrus"
|
|||
import "fmt"
|
||||
import "strconv"
|
||||
|
||||
const appPrefix = "steem-block-fetcher"
|
||||
//steem block fetcher
|
||||
const appPrefix = "sbf"
|
||||
|
||||
type SteemDataStorer interface {
|
||||
SetCurrentBlockHeight() error
|
||||
|
@ -28,7 +29,7 @@ func NewSteemDataStore(dir string) *SteemDataStore {
|
|||
}
|
||||
|
||||
func (self *SteemDataStore) ForceSetCurrentBlockHeight(blockNum BlockNumber) error {
|
||||
keyname := fmt.Sprintf("%s:global:CurrentBlockHeight", appPrefix)
|
||||
keyname := fmt.Sprintf("%s.global.CurrentBlockHeight", appPrefix)
|
||||
value := fmt.Sprintf("%d", blockNum)
|
||||
return self.kv.Put(&keyname, &value)
|
||||
}
|
||||
|
@ -37,7 +38,7 @@ func (self *SteemDataStore) ForceSetCurrentBlockHeight(blockNum BlockNumber) err
|
|||
// and updates the memo in the db
|
||||
func (self *SteemDataStore) SetCurrentBlockHeight() error {
|
||||
nextVal := self.FindHighestContiguousBlockInDb(self.CurrentBlockHeight())
|
||||
keyname := fmt.Sprintf("%s:global:CurrentBlockHeight", appPrefix)
|
||||
keyname := fmt.Sprintf("%s.global.CurrentBlockHeight", appPrefix)
|
||||
value := fmt.Sprintf("%d", nextVal)
|
||||
log.Infof("updating our current highest block in db to %d", nextVal)
|
||||
return self.kv.Put(&keyname, &value)
|
||||
|
@ -51,7 +52,7 @@ func (self *SteemDataStore) FindHighestContiguousBlockInDb(from BlockNumber) Blo
|
|||
|
||||
for {
|
||||
try = BlockNumber(uint64(last) + 1)
|
||||
keyname = fmt.Sprintf("%s:BlockOps:%d", appPrefix, try)
|
||||
keyname = fmt.Sprintf("%s.ops_in_block.%d", appPrefix, try)
|
||||
exists, _ := self.kv.Exists(&keyname)
|
||||
if exists == false {
|
||||
log.Debugf("cannot find block %d in db, highest found is %d", try, last)
|
||||
|
@ -63,17 +64,19 @@ func (self *SteemDataStore) FindHighestContiguousBlockInDb(from BlockNumber) Blo
|
|||
}
|
||||
|
||||
func (self *SteemDataStore) StoreBlockOps(blockNum BlockNumber, blockOps *[]byte) error {
|
||||
keyname := fmt.Sprintf("%s:BlockOps:%d", appPrefix, blockNum)
|
||||
keyname := fmt.Sprintf("%s.ops_in_block.%d", appPrefix, blockNum)
|
||||
value := string(*blockOps)
|
||||
return self.kv.Put(&keyname, &value)
|
||||
}
|
||||
|
||||
func (self *SteemDataStore) HaveOpsForBlock(blockNum BlockNumber) bool {
|
||||
panic("unimplemented")
|
||||
keyname := fmt.Sprintf("%s.ops_in_block.%d", appPrefix, blockNum)
|
||||
exists, _ := self.kv.Exists(&keyname)
|
||||
return exists
|
||||
}
|
||||
|
||||
func (self *SteemDataStore) CurrentBlockHeight() BlockNumber {
|
||||
keyname := fmt.Sprintf("%s:global:CurrentBlockHeight", appPrefix)
|
||||
keyname := fmt.Sprintf("%s.global.CurrentBlockHeight", appPrefix)
|
||||
val, err := self.kv.Get(&keyname)
|
||||
if err != nil {
|
||||
// assume this is key not found, initialize key to default
|
||||
|
|
23
main.go
23
main.go
|
@ -45,7 +45,7 @@ func NewApp(config *appconfig) *App {
|
|||
func (self *App) init(config *appconfig) {
|
||||
self.api = NewSteemAPI(steemAPIURL)
|
||||
self.datastore = NewSteemDataStore("./d")
|
||||
self.desiredFetchingThreads = 20
|
||||
self.desiredFetchingThreads = 40
|
||||
self.currentFetchingThreads = 0
|
||||
self.lock = &sync.Mutex{}
|
||||
}
|
||||
|
@ -84,12 +84,16 @@ func (self *App) decrFetchers() {
|
|||
}
|
||||
|
||||
func (self *App) spawnNewFetcher(blockNum BlockNumber) {
|
||||
log.Infof("spawning fetcher for block %d", blockNum)
|
||||
log.Debugf("spawning fetcher for block %d", blockNum)
|
||||
go func() {
|
||||
// this is so hacky, make a queue like a grownup would you
|
||||
time.Sleep(100 * time.Millisecond)
|
||||
if self.datastore.HaveOpsForBlock(blockNum) {
|
||||
log.Infof("already have ops for block %d, not re-fetching", blockNum)
|
||||
return
|
||||
}
|
||||
self.incrFetchers()
|
||||
self.storeBlockOps(blockNum, self.fetchBlockOps(blockNum))
|
||||
self.datastore.SetCurrentBlockHeight()
|
||||
time.Sleep(250 * time.Millisecond)
|
||||
self.decrFetchers()
|
||||
|
||||
}()
|
||||
|
@ -113,10 +117,11 @@ func (self *App) mainloop() {
|
|||
log.Infof("using %d fetching threads", self.desiredFetchingThreads)
|
||||
for {
|
||||
self.updateCurrentBlockHeight()
|
||||
log.Infof("current number of active fetchers: %d", self.numFetchers())
|
||||
time.Sleep(1500 * time.Millisecond)
|
||||
self.datastore.SetCurrentBlockHeight()
|
||||
localHeight := self.datastore.CurrentBlockHeight()
|
||||
log.Infof("our highest fetched block height is %d", localHeight)
|
||||
log.Infof("current number of active fetchers: %d", self.numFetchers())
|
||||
time.Sleep(1 * time.Second)
|
||||
if localHeight < self.currentNetworkBlockHeight {
|
||||
// we need to fetch some blocks from the network
|
||||
avail := self.desiredFetchingThreads - self.numFetchers()
|
||||
|
@ -148,12 +153,16 @@ func (self *App) fetchCurrentBlockHeight() BlockNumber {
|
|||
func (self *App) fetchBlockOps(blockNum BlockNumber) *[]byte {
|
||||
r, err := self.api.GetOpsInBlock(blockNum)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
// just retry on error
|
||||
// sloppy, but works
|
||||
return self.fetchBlockOps(blockNum)
|
||||
}
|
||||
bytes, err := json.Marshal(r)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
count := len(*r)
|
||||
log.Infof("got %d operations for block %d", count, blockNum)
|
||||
return &bytes
|
||||
//self.datastore.writeBlockOps(blockNum, bytes)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue