diff options
author | Janoš Guljaš <janos@users.noreply.github.com> | 2019-03-02 15:44:22 +0800 |
---|---|---|
committer | Viktor Trón <viktor.tron@gmail.com> | 2019-03-02 15:44:22 +0800 |
commit | b797dd07d2f2cf0868d4fe79e120d5cf0b8fdc0b (patch) | |
tree | ce2cb19a39b9973a730713139dfdfad3bf1a7832 /swarm/storage/localstore/subscription_pull.go | |
parent | 729bf365b5f17325be9107b63b233da54100eec6 (diff) | |
download | go-tangerine-b797dd07d2f2cf0868d4fe79e120d5cf0b8fdc0b.tar go-tangerine-b797dd07d2f2cf0868d4fe79e120d5cf0b8fdc0b.tar.gz go-tangerine-b797dd07d2f2cf0868d4fe79e120d5cf0b8fdc0b.tar.bz2 go-tangerine-b797dd07d2f2cf0868d4fe79e120d5cf0b8fdc0b.tar.lz go-tangerine-b797dd07d2f2cf0868d4fe79e120d5cf0b8fdc0b.tar.xz go-tangerine-b797dd07d2f2cf0868d4fe79e120d5cf0b8fdc0b.tar.zst go-tangerine-b797dd07d2f2cf0868d4fe79e120d5cf0b8fdc0b.zip |
swarm/shed, swarm/storage/localstore: add LastPullSubscriptionChunk (#19190)
* swarm/shed, swarm/storage/localstore: add LastPullSubscriptionChunk
* swarm/shed: fix comments
* swarm/shed: fix TestIncByteSlice test
* swarm/storage/localstore: fix TestDB_LastPullSubscriptionChunk
Diffstat (limited to 'swarm/storage/localstore/subscription_pull.go')
-rw-r--r-- | swarm/storage/localstore/subscription_pull.go | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/swarm/storage/localstore/subscription_pull.go b/swarm/storage/localstore/subscription_pull.go index 0830eee70..0b96102e3 100644 --- a/swarm/storage/localstore/subscription_pull.go +++ b/swarm/storage/localstore/subscription_pull.go @@ -26,6 +26,7 @@ import ( "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/swarm/chunk" "github.com/ethereum/go-ethereum/swarm/shed" + "github.com/syndtr/goleveldb/leveldb" ) // SubscribePull returns a channel that provides chunk addresses and stored times from pull syncing index. @@ -158,6 +159,23 @@ func (db *DB) SubscribePull(ctx context.Context, bin uint8, since, until *ChunkD return chunkDescriptors, stop } +// LastPullSubscriptionChunk returns ChunkDescriptor of the latest Chunk +// in pull syncing index for a provided bin. If there are no chunks in +// that bin, chunk.ErrChunkNotFound is returned. +func (db *DB) LastPullSubscriptionChunk(bin uint8) (c *ChunkDescriptor, err error) { + item, err := db.pullIndex.Last([]byte{bin}) + if err != nil { + if err == leveldb.ErrNotFound { + return nil, chunk.ErrChunkNotFound + } + return nil, err + } + return &ChunkDescriptor{ + Address: item.Address, + StoreTimestamp: item.StoreTimestamp, + }, nil +} + // ChunkDescriptor holds information required for Pull syncing. This struct // is provided by subscribing to pull index. type ChunkDescriptor struct { |