feat: Make extension snapshotter interface safer to use (#11825)
* Make extension snapshotter interface safer to use Closes: #11824 Solution: - Use new methods `SnapshotExtension`/`RestoreExtension` to handle payload stream specifically. - Improve unit tests. * update changelog * Update snapshots/types/util.go * changelog * go linter * Update CHANGELOG.md Co-authored-by: Aleksandr Bezobchuk <alexanderbez@users.noreply.github.com>
This commit is contained in:
co-authored by
Aleksandr Bezobchuk
parent
0ed7360921
commit
e397434d9e
@@ -3,10 +3,11 @@
|
||||
## Changelog
|
||||
|
||||
- Jan 19, 2022: Initial Draft
|
||||
- Apr 29, 2022: Safer extension snapshotter interface
|
||||
|
||||
## Status
|
||||
|
||||
Draft, Under Implementation
|
||||
Implemented
|
||||
|
||||
## Abstract
|
||||
|
||||
@@ -107,11 +108,16 @@ func (m *Manager) RegisterExtensions(extensions ...types.ExtensionSnapshotter) e
|
||||
On top of the existing `Snapshotter` interface for the `multistore`, we add `ExtensionSnapshotter` interface for the extension snapshotters. Three more function signatures: `SnapshotFormat()`, `SupportedFormats()` and `SnapshotName()` are added to `ExtensionSnapshotter`.
|
||||
|
||||
```go
|
||||
// ExtensionPayloadReader read extension payloads,
|
||||
// it returns io.EOF when reached either end of stream or the extension boundaries.
|
||||
type ExtensionPayloadReader = func() ([]byte, error)
|
||||
|
||||
// ExtensionPayloadWriter is a helper to write extension payloads to underlying stream.
|
||||
type ExtensionPayloadWriter = func([]byte) error
|
||||
|
||||
// ExtensionSnapshotter is an extension Snapshotter that is appended to the snapshot stream.
|
||||
// ExtensionSnapshotter has an unique name and manages it's own internal formats.
|
||||
type ExtensionSnapshotter interface {
|
||||
Snapshotter
|
||||
|
||||
// SnapshotName returns the name of snapshotter, it should be unique in the manager.
|
||||
SnapshotName() string
|
||||
|
||||
@@ -120,6 +126,14 @@ type ExtensionSnapshotter interface {
|
||||
|
||||
// SupportedFormats returns a list of formats it can restore from.
|
||||
SupportedFormats() []uint32
|
||||
|
||||
// SnapshotExtension writes extension payloads into the underlying protobuf stream.
|
||||
SnapshotExtension(height uint64, payloadWriter ExtensionPayloadWriter) error
|
||||
|
||||
// RestoreExtension restores an extension state snapshot,
|
||||
// the payload reader returns `io.EOF` when reached the extension boundaries.
|
||||
RestoreExtension(height uint64, format uint32, payloadReader ExtensionPayloadReader) error
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
Reference in New Issue
Block a user