Skip to content

Commit 30e9837

Browse files
committed
integrate shwap into shrex
1 parent 062f499 commit 30e9837

59 files changed

Lines changed: 708 additions & 1008 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

libs/utils/close.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package utils
2+
3+
import (
4+
"io"
5+
6+
logging "github.com/ipfs/go-log/v2"
7+
)
8+
9+
func CloseAndLog(log logging.StandardLogger, name string, closer io.Closer) {
10+
if err := closer.Close(); err != nil {
11+
log.Warnf("closing %s: %s", name, err)
12+
}
13+
}
Lines changed: 10 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,22 @@
1-
package getters
1+
package utils
22

33
import (
44
"context"
5-
"errors"
65
"time"
7-
8-
logging "github.com/ipfs/go-log/v2"
9-
"go.opentelemetry.io/otel"
106
)
117

12-
var (
13-
tracer = otel.Tracer("share/getters")
14-
log = logging.Logger("share/getters")
8+
// ResetContextOnError returns a fresh context if the given context has an error.
9+
func ResetContextOnError(ctx context.Context) context.Context {
10+
if ctx.Err() != nil {
11+
ctx = context.Background()
12+
}
1513

16-
errOperationNotSupported = errors.New("operation is not supported")
17-
)
14+
return ctx
15+
}
1816

19-
// ctxWithSplitTimeout will split timeout stored in context by splitFactor and return the result if
17+
// CtxWithSplitTimeout will split timeout stored in context by splitFactor and return the result if
2018
// it is greater than minTimeout. minTimeout == 0 will be ignored, splitFactor <= 0 will be ignored
21-
func ctxWithSplitTimeout(
19+
func CtxWithSplitTimeout(
2220
ctx context.Context,
2321
splitFactor int,
2422
minTimeout time.Duration,
@@ -42,16 +40,3 @@ func ctxWithSplitTimeout(
4240
}
4341
return context.WithTimeout(ctx, splitTimeout)
4442
}
45-
46-
// ErrorContains reports whether any error in err's tree matches any error in targets tree.
47-
func ErrorContains(err, target error) bool {
48-
if errors.Is(err, target) || target == nil {
49-
return true
50-
}
51-
52-
target = errors.Unwrap(target)
53-
if target == nil {
54-
return false
55-
}
56-
return ErrorContains(err, target)
57-
}
Lines changed: 2 additions & 108 deletions
Original file line numberDiff line numberDiff line change
@@ -1,119 +1,13 @@
1-
package getters
1+
package utils
22

33
import (
44
"context"
5-
"errors"
6-
"fmt"
75
"testing"
86
"time"
97

10-
"github.com/stretchr/testify/assert"
118
"github.com/stretchr/testify/require"
129
)
1310

14-
func Test_ErrorContains(t *testing.T) {
15-
err1 := errors.New("1")
16-
err2 := errors.New("2")
17-
18-
w1 := func(err error) error {
19-
return fmt.Errorf("wrap1: %w", err)
20-
}
21-
w2 := func(err error) error {
22-
return fmt.Errorf("wrap1: %w", err)
23-
}
24-
25-
type args struct {
26-
err error
27-
target error
28-
}
29-
tests := []struct {
30-
name string
31-
args args
32-
want bool
33-
}{
34-
{
35-
"nil err",
36-
args{
37-
err: nil,
38-
target: err1,
39-
},
40-
false,
41-
},
42-
{
43-
"nil target",
44-
args{
45-
err: err1,
46-
target: nil,
47-
},
48-
true,
49-
},
50-
{
51-
"errors.Is true",
52-
args{
53-
err: w1(err1),
54-
target: err1,
55-
},
56-
true,
57-
},
58-
{
59-
"errors.Is false",
60-
args{
61-
err: w1(err1),
62-
target: err2,
63-
},
64-
false,
65-
},
66-
{
67-
"same wrap but different base error",
68-
args{
69-
err: w1(err1),
70-
target: w1(err2),
71-
},
72-
false,
73-
},
74-
{
75-
"both wrapped true",
76-
args{
77-
err: w1(err1),
78-
target: w2(err1),
79-
},
80-
true,
81-
},
82-
{
83-
"both wrapped false",
84-
args{
85-
err: w1(err1),
86-
target: w2(err2),
87-
},
88-
false,
89-
},
90-
{
91-
"multierr first in slice",
92-
args{
93-
err: errors.Join(w1(err1), w2(err2)),
94-
target: w2(err1),
95-
},
96-
true,
97-
},
98-
{
99-
"multierr second in slice",
100-
args{
101-
err: errors.Join(w1(err1), w2(err2)),
102-
target: w1(err2),
103-
},
104-
true,
105-
},
106-
}
107-
for _, tt := range tests {
108-
t.Run(tt.name, func(t *testing.T) {
109-
assert.Equalf(t,
110-
tt.want,
111-
ErrorContains(tt.args.err, tt.args.target),
112-
"ErrorContains(%v, %v)", tt.args.err, tt.args.target)
113-
})
114-
}
115-
}
116-
11711
func Test_ctxWithSplitTimeout(t *testing.T) {
11812
type args struct {
11913
ctxTimeout time.Duration
@@ -216,7 +110,7 @@ func Test_ctxWithSplitTimeout(t *testing.T) {
216110
ctx, cancel = context.WithTimeout(ctx, tt.args.ctxTimeout)
217111
}
218112
t.Cleanup(cancel)
219-
got, _ := ctxWithSplitTimeout(ctx, sf, tt.args.minTimeout)
113+
got, _ := CtxWithSplitTimeout(ctx, sf, tt.args.minTimeout)
220114
dl, ok := got.Deadline()
221115
// in case no deadline is found in ctx or not expected to be found, check both cases apply at the
222116
// same time

libs/utils/error.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package utils
2+
3+
import "errors"
4+
5+
// ErrorContains reports whether any error in err's tree matches any error in targets tree.
6+
func ErrorContains(err, target error) bool {
7+
if errors.Is(err, target) || target == nil {
8+
return true
9+
}
10+
11+
target = errors.Unwrap(target)
12+
if target == nil {
13+
return false
14+
}
15+
return ErrorContains(err, target)
16+
}

libs/utils/error_test.go

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
package utils
2+
3+
import (
4+
"errors"
5+
"fmt"
6+
"testing"
7+
8+
"github.com/stretchr/testify/assert"
9+
)
10+
11+
func Test_ErrorContains(t *testing.T) {
12+
err1 := errors.New("1")
13+
err2 := errors.New("2")
14+
15+
w1 := func(err error) error {
16+
return fmt.Errorf("wrap1: %w", err)
17+
}
18+
w2 := func(err error) error {
19+
return fmt.Errorf("wrap1: %w", err)
20+
}
21+
22+
type args struct {
23+
err error
24+
target error
25+
}
26+
tests := []struct {
27+
name string
28+
args args
29+
want bool
30+
}{
31+
{
32+
"nil err",
33+
args{
34+
err: nil,
35+
target: err1,
36+
},
37+
false,
38+
},
39+
{
40+
"nil target",
41+
args{
42+
err: err1,
43+
target: nil,
44+
},
45+
true,
46+
},
47+
{
48+
"errors.Is true",
49+
args{
50+
err: w1(err1),
51+
target: err1,
52+
},
53+
true,
54+
},
55+
{
56+
"errors.Is false",
57+
args{
58+
err: w1(err1),
59+
target: err2,
60+
},
61+
false,
62+
},
63+
{
64+
"same wrap but different base error",
65+
args{
66+
err: w1(err1),
67+
target: w1(err2),
68+
},
69+
false,
70+
},
71+
{
72+
"both wrapped true",
73+
args{
74+
err: w1(err1),
75+
target: w2(err1),
76+
},
77+
true,
78+
},
79+
{
80+
"both wrapped false",
81+
args{
82+
err: w1(err1),
83+
target: w2(err2),
84+
},
85+
false,
86+
},
87+
{
88+
"multierr first in slice",
89+
args{
90+
err: errors.Join(w1(err1), w2(err2)),
91+
target: w2(err1),
92+
},
93+
true,
94+
},
95+
{
96+
"multierr second in slice",
97+
args{
98+
err: errors.Join(w1(err1), w2(err2)),
99+
target: w1(err2),
100+
},
101+
true,
102+
},
103+
}
104+
for _, tt := range tests {
105+
t.Run(tt.name, func(t *testing.T) {
106+
assert.Equalf(t,
107+
tt.want,
108+
ErrorContains(tt.args.err, tt.args.target),
109+
"ErrorContains(%v, %v)", tt.args.err, tt.args.target)
110+
})
111+
}
112+
}

libs/utils/resetctx.go

Lines changed: 0 additions & 14 deletions
This file was deleted.

nodebuilder/share/constructors.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"github.com/celestiaorg/celestia-node/share/eds"
1212
"github.com/celestiaorg/celestia-node/share/getters"
1313
"github.com/celestiaorg/celestia-node/share/ipld"
14+
"github.com/celestiaorg/celestia-node/share/shwap/p2p/shrex/shrex_getter"
1415
)
1516

1617
func newShareModule(getter share.Getter, avail share.Availability) Module {
@@ -42,7 +43,7 @@ func ensureEmptyEDSInBS(ctx context.Context, bServ blockservice.BlockService) er
4243
}
4344

4445
func lightGetter(
45-
shrexGetter *getters.ShrexGetter,
46+
shrexGetter *shrex_getter.Getter,
4647
ipldGetter *getters.IPLDGetter,
4748
cfg Config,
4849
) share.Getter {
@@ -54,13 +55,13 @@ func lightGetter(
5455
return getters.NewCascadeGetter(cascade)
5556
}
5657

57-
// ShrexGetter is added to bridge nodes for the case that a shard is removed
58+
// Getter is added to bridge nodes for the case that a shard is removed
5859
// after detected shard corruption. This ensures the block is fetched and stored
5960
// by shrex the next time the data is retrieved (meaning shard recovery is
6061
// manual after corruption is detected).
6162
func bridgeGetter(
6263
storeGetter *getters.StoreGetter,
63-
shrexGetter *getters.ShrexGetter,
64+
shrexGetter *shrex_getter.Getter,
6465
cfg Config,
6566
) share.Getter {
6667
var cascade []share.Getter
@@ -73,7 +74,7 @@ func bridgeGetter(
7374

7475
func fullGetter(
7576
storeGetter *getters.StoreGetter,
76-
shrexGetter *getters.ShrexGetter,
77+
shrexGetter *shrex_getter.Getter,
7778
ipldGetter *getters.IPLDGetter,
7879
cfg Config,
7980
) share.Getter {

0 commit comments

Comments
 (0)