Store internal state periodicaly
parent
1a953ea2a4
commit
96f25ce11a
41
blockbook.go
41
blockbook.go
|
@ -35,6 +35,9 @@ const resyncMempoolPeriodMs = 60017
|
||||||
// debounce too close requests for resync mempool (ZeroMQ sends message for each tx, when new block there are many transactions)
|
// debounce too close requests for resync mempool (ZeroMQ sends message for each tx, when new block there are many transactions)
|
||||||
const debounceResyncMempoolMs = 1009
|
const debounceResyncMempoolMs = 1009
|
||||||
|
|
||||||
|
// store internal state about once every minute
|
||||||
|
const storeInternalStatePeriodMs = 59699
|
||||||
|
|
||||||
var (
|
var (
|
||||||
blockchain = flag.String("blockchaincfg", "", "path to blockchain RPC service configuration json file")
|
blockchain = flag.String("blockchaincfg", "", "path to blockchain RPC service configuration json file")
|
||||||
|
|
||||||
|
@ -68,17 +71,19 @@ var (
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
chanSyncIndex = make(chan struct{})
|
chanSyncIndex = make(chan struct{})
|
||||||
chanSyncMempool = make(chan struct{})
|
chanSyncMempool = make(chan struct{})
|
||||||
chanSyncIndexDone = make(chan struct{})
|
chanStoreInternalState = make(chan struct{})
|
||||||
chanSyncMempoolDone = make(chan struct{})
|
chanSyncIndexDone = make(chan struct{})
|
||||||
chain bchain.BlockChain
|
chanSyncMempoolDone = make(chan struct{})
|
||||||
index *db.RocksDB
|
chanStoreInternalStateDone = make(chan struct{})
|
||||||
txCache *db.TxCache
|
chain bchain.BlockChain
|
||||||
syncWorker *db.SyncWorker
|
index *db.RocksDB
|
||||||
callbacksOnNewBlockHash []func(hash string)
|
txCache *db.TxCache
|
||||||
callbacksOnNewTxAddr []func(txid string, addr string)
|
syncWorker *db.SyncWorker
|
||||||
chanOsSignal chan os.Signal
|
callbacksOnNewBlockHash []func(hash string)
|
||||||
|
callbacksOnNewTxAddr []func(txid string, addr string)
|
||||||
|
chanOsSignal chan os.Signal
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
@ -261,6 +266,7 @@ func main() {
|
||||||
// start the synchronization loops after the server interfaces are started
|
// start the synchronization loops after the server interfaces are started
|
||||||
go syncIndexLoop()
|
go syncIndexLoop()
|
||||||
go syncMempoolLoop()
|
go syncMempoolLoop()
|
||||||
|
go storeInternalStateLoop()
|
||||||
}
|
}
|
||||||
|
|
||||||
if *blockFrom >= 0 {
|
if *blockFrom >= 0 {
|
||||||
|
@ -291,8 +297,10 @@ func main() {
|
||||||
if *synchronize {
|
if *synchronize {
|
||||||
close(chanSyncIndex)
|
close(chanSyncIndex)
|
||||||
close(chanSyncMempool)
|
close(chanSyncMempool)
|
||||||
|
close(chanStoreInternalState)
|
||||||
<-chanSyncIndexDone
|
<-chanSyncIndexDone
|
||||||
<-chanSyncMempoolDone
|
<-chanSyncMempoolDone
|
||||||
|
<-chanStoreInternalState
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -362,6 +370,17 @@ func syncMempoolLoop() {
|
||||||
glog.Info("syncMempoolLoop stopped")
|
glog.Info("syncMempoolLoop stopped")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func storeInternalStateLoop() {
|
||||||
|
defer close(chanStoreInternalStateDone)
|
||||||
|
glog.Info("storeInternalStateLoop starting")
|
||||||
|
tickAndDebounce(storeInternalStatePeriodMs*time.Millisecond, (storeInternalStatePeriodMs-1)*time.Millisecond, chanStoreInternalState, func() {
|
||||||
|
if err := index.StoreInternalState(common.IS); err != nil {
|
||||||
|
glog.Error("storeInternalStateLoop ", errors.ErrorStack(err))
|
||||||
|
}
|
||||||
|
})
|
||||||
|
glog.Info("storeInternalStateLoop stopped")
|
||||||
|
}
|
||||||
|
|
||||||
func onNewTxAddr(txid string, addr string) {
|
func onNewTxAddr(txid string, addr string) {
|
||||||
for _, c := range callbacksOnNewTxAddr {
|
for _, c := range callbacksOnNewTxAddr {
|
||||||
c(txid, addr)
|
c(txid, addr)
|
||||||
|
|
Loading…
Reference in New Issue