Skip to content

Commit

Permalink
Revert "fix: Prevent newExporter crash if tree.ndb is nil (backport c…
Browse files Browse the repository at this point in the history
…osmos#622) (cosmos#631)"

This reverts commit 2af006a.
  • Loading branch information
yihuang committed Jan 26, 2023
1 parent 756ef9a commit 1bafbad
Show file tree
Hide file tree
Showing 7 changed files with 15 additions and 37 deletions.
4 changes: 0 additions & 4 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
# Changelog

### Breaking Changes

- [#622](https://github.com/cosmos/iavl/pull/622) `export/newExporter()` and `ImmutableTree.Export()` returns error for nil arguements

## Unreleased

- [#640](https://github.com/cosmos/iavl/pull/640) commit `NodeDB` batch in `LoadVersionForOverwriting`.
Expand Down
2 changes: 2 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,10 @@ all: lint test install
install:
ifeq ($(COLORS_ON),)
go install ./cmd/iaviewer
go install ./cmd/iavlserver
else
go install $(CMDFLAGS) ./cmd/iaviewer
go install $(CMDFLAGS) ./cmd/iavlserver
endif
.PHONY: install

Expand Down
5 changes: 1 addition & 4 deletions benchmarks/cosmos-exim/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -128,10 +128,7 @@ func runExport(dbPath string) (int64, map[string][]*iavl.ExportNode, error) {
return 0, nil, err
}
start := time.Now().UTC()
exporter, err := itree.Export()
if err != nil {
return 0, nil, err
}
exporter := itree.Export()
defer exporter.Close()
for {
node, err := exporter.Next()
Expand Down
19 changes: 4 additions & 15 deletions export.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ package iavl

import (
"context"
"errors"
"fmt"

"github.com/pkg/errors"
)

// exportBufferSize is the number of nodes to buffer in the exporter. It improves throughput by
Expand All @@ -15,9 +15,6 @@ const exportBufferSize = 32
// nolint:revive
var ExportDone = errors.New("export is complete") // nolint:golint

// ErrNotInitalizedTree when chains introduce a store without initializing data
var ErrNotInitalizedTree = errors.New("iavl/export newExporter failed to create")

// ExportNode contains exported node data.
type ExportNode struct {
Key []byte
Expand All @@ -38,15 +35,7 @@ type Exporter struct {
}

// NewExporter creates a new Exporter. Callers must call Close() when done.
func newExporter(tree *ImmutableTree) (*Exporter, error) {
if tree == nil {
return nil, fmt.Errorf("tree is nil: %w", ErrNotInitalizedTree)
}
// CV Prevent crash on incrVersionReaders if tree.ndb == nil
if tree.ndb == nil {
return nil, fmt.Errorf("tree.ndb is nil: %w", ErrNotInitalizedTree)
}

func newExporter(tree *ImmutableTree) *Exporter {
ctx, cancel := context.WithCancel(context.Background())
exporter := &Exporter{
tree: tree,
Expand All @@ -57,7 +46,7 @@ func newExporter(tree *ImmutableTree) (*Exporter, error) {
tree.ndb.incrVersionReaders(tree.version)
go exporter.export(ctx)

return exporter, nil
return exporter
}

// export exports nodes
Expand Down
15 changes: 5 additions & 10 deletions export_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -160,8 +160,7 @@ func TestExporter(t *testing.T) {
}

actual := make([]*ExportNode, 0, len(expect))
exporter, err := tree.Export()
require.NoError(t, err)
exporter := tree.Export()
defer exporter.Close()
for {
node, err := exporter.Next()
Expand Down Expand Up @@ -190,8 +189,7 @@ func TestExporter_Import(t *testing.T) {
t.Run(desc, func(t *testing.T) {
t.Parallel()

exporter, err := tree.Export()
require.NoError(t, err)
exporter := tree.Export()
defer exporter.Close()

newTree, err := NewMutableTree(db.NewMemDB(), 0, false)
Expand Down Expand Up @@ -236,8 +234,7 @@ func TestExporter_Import(t *testing.T) {

func TestExporter_Close(t *testing.T) {
tree := setupExportTreeSized(t, 4096)
exporter, err := tree.Export()
require.NoError(t, err)
exporter := tree.Export()

node, err := exporter.Next()
require.NoError(t, err)
Expand Down Expand Up @@ -276,8 +273,7 @@ func TestExporter_DeleteVersionErrors(t *testing.T) {

itree, err := tree.GetImmutable(2)
require.NoError(t, err)
exporter, err := itree.Export()
require.NoError(t, err)
exporter := itree.Export()
defer exporter.Close()

err = tree.DeleteVersion(2)
Expand All @@ -295,8 +291,7 @@ func BenchmarkExport(b *testing.B) {
tree := setupExportTreeSized(b, 4096)
b.StartTimer()
for n := 0; n < b.N; n++ {
exporter, err := tree.Export()
require.NoError(b, err)
exporter := tree.Export()
for {
_, err := exporter.Next()
if err == ExportDone {
Expand Down
2 changes: 1 addition & 1 deletion immutable_tree.go
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ func (t *ImmutableTree) Hash() ([]byte, error) {

// Export returns an iterator that exports tree nodes as ExportNodes. These nodes can be
// imported with MutableTree.Import() to recreate an identical tree.
func (t *ImmutableTree) Export() (*Exporter, error) {
func (t *ImmutableTree) Export() *Exporter {
return newExporter(t)
}

Expand Down
5 changes: 2 additions & 3 deletions import_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ func ExampleImporter() {
if err != nil {
// handle err
}
exporter, err := itree.Export()
exporter := itree.Export()
defer exporter.Close()
exported := []*ExportNode{}
for {
Expand Down Expand Up @@ -218,8 +218,7 @@ func BenchmarkImport(b *testing.B) {
b.StopTimer()
tree := setupExportTreeSized(b, 4096)
exported := make([]*ExportNode, 0, 4096)
exporter, err := tree.Export()
require.NoError(b, err)
exporter := tree.Export()
for {
item, err := exporter.Next()
if err == ExportDone {
Expand Down

0 comments on commit 1bafbad

Please sign in to comment.