Cache more
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
This commit is contained in:
parent
5ab9636365
commit
eb501f7290
@ -104,7 +104,7 @@ func (db *DrandBeacon) handleStreamingUpdates() {
|
|||||||
|
|
||||||
for e := range ch {
|
for e := range ch {
|
||||||
fmt.Println("Entry: ", e.Round, e.Signature)
|
fmt.Println("Entry: ", e.Round, e.Signature)
|
||||||
db.cacheValue(e.Round, types.BeaconEntry{
|
db.cacheValue(types.BeaconEntry{
|
||||||
Round: e.Round,
|
Round: e.Round,
|
||||||
Data: e.Signature,
|
Data: e.Signature,
|
||||||
})
|
})
|
||||||
@ -116,28 +116,39 @@ func (db *DrandBeacon) handleStreamingUpdates() {
|
|||||||
|
|
||||||
func (db *DrandBeacon) Entry(ctx context.Context, round uint64) <-chan beacon.Response {
|
func (db *DrandBeacon) Entry(ctx context.Context, round uint64) <-chan beacon.Response {
|
||||||
fmt.Println("requesting drand entry: ", round)
|
fmt.Println("requesting drand entry: ", round)
|
||||||
// check cache, it it if there, otherwise query the endpoint
|
cres := db.getCachedValue(round)
|
||||||
resp, err := db.client.PublicRand(ctx, db.peers[0], &dproto.PublicRandRequest{Round: round})
|
if cres != nil {
|
||||||
|
out := make(chan beacon.Response, 1)
|
||||||
var br beacon.Response
|
out <- beacon.Response{Entry: *cres}
|
||||||
if err != nil {
|
close(out)
|
||||||
br.Err = err
|
return out
|
||||||
} else {
|
|
||||||
br.Entry.Round = resp.GetRound()
|
|
||||||
br.Entry.Data = resp.GetSignature()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
out := make(chan beacon.Response, 1)
|
out := make(chan beacon.Response, 1)
|
||||||
out <- br
|
|
||||||
close(out)
|
go func() {
|
||||||
|
// check cache, it it if there, otherwise query the endpoint
|
||||||
|
resp, err := db.client.PublicRand(ctx, db.peers[0], &dproto.PublicRandRequest{Round: round})
|
||||||
|
|
||||||
|
var br beacon.Response
|
||||||
|
if err != nil {
|
||||||
|
br.Err = err
|
||||||
|
} else {
|
||||||
|
br.Entry.Round = resp.GetRound()
|
||||||
|
br.Entry.Data = resp.GetSignature()
|
||||||
|
}
|
||||||
|
|
||||||
|
out <- br
|
||||||
|
close(out)
|
||||||
|
}()
|
||||||
|
|
||||||
return out
|
return out
|
||||||
}
|
}
|
||||||
|
|
||||||
func (db *DrandBeacon) cacheValue(round uint64, e types.BeaconEntry) {
|
func (db *DrandBeacon) cacheValue(e types.BeaconEntry) {
|
||||||
db.cacheLk.Lock()
|
db.cacheLk.Lock()
|
||||||
defer db.cacheLk.Unlock()
|
defer db.cacheLk.Unlock()
|
||||||
db.localCache[round] = e
|
db.localCache[e.Round] = e
|
||||||
}
|
}
|
||||||
|
|
||||||
func (db *DrandBeacon) getCachedValue(round uint64) *types.BeaconEntry {
|
func (db *DrandBeacon) getCachedValue(round uint64) *types.BeaconEntry {
|
||||||
@ -162,7 +173,11 @@ func (db *DrandBeacon) VerifyEntry(curr types.BeaconEntry, prev types.BeaconEntr
|
|||||||
Signature: curr.Data,
|
Signature: curr.Data,
|
||||||
}
|
}
|
||||||
//log.Warnw("VerifyEntry", "beacon", b)
|
//log.Warnw("VerifyEntry", "beacon", b)
|
||||||
return dbeacon.VerifyBeacon(db.pubkey.Key(), b)
|
err := dbeacon.VerifyBeacon(db.pubkey.Key(), b)
|
||||||
|
if err == nil {
|
||||||
|
db.cacheValue(curr)
|
||||||
|
}
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (db *DrandBeacon) MaxBeaconRoundForEpoch(filEpoch abi.ChainEpoch, prevEntry types.BeaconEntry) uint64 {
|
func (db *DrandBeacon) MaxBeaconRoundForEpoch(filEpoch abi.ChainEpoch, prevEntry types.BeaconEntry) uint64 {
|
||||||
|
@ -38,7 +38,6 @@ func (mb *mockBeacon) entryForIndex(index uint64) types.BeaconEntry {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (mb *mockBeacon) Entry(ctx context.Context, index uint64) <-chan Response {
|
func (mb *mockBeacon) Entry(ctx context.Context, index uint64) <-chan Response {
|
||||||
panic("dont do this to me")
|
|
||||||
e := mb.entryForIndex(index)
|
e := mb.entryForIndex(index)
|
||||||
out := make(chan Response, 1)
|
out := make(chan Response, 1)
|
||||||
out <- Response{Entry: e}
|
out <- Response{Entry: e}
|
||||||
|
Loading…
Reference in New Issue
Block a user