Skip to content

Commit 92d502f

Browse files
committed
feat(getters/shrex): enable endpoints in shrex
1 parent 7fca1d9 commit 92d502f

File tree

12 files changed

+642
-156
lines changed

12 files changed

+642
-156
lines changed

nodebuilder/tests/share_test.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
//go:build share || integration
2-
31
package tests
42

53
import (

share/shwap/accessor.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"io"
66

77
libshare "github.com/celestiaorg/go-square/v2/share"
8+
"github.com/celestiaorg/rsmt2d"
89

910
"github.com/celestiaorg/celestia-node/share"
1011
)
@@ -13,5 +14,11 @@ import (
1314
type Accessor interface {
1415
AxisRoots(context.Context) (*share.AxisRoots, error)
1516
RowNamespaceData(context.Context, libshare.Namespace, int) (RowNamespaceData, error)
17+
Sample(ctx context.Context, idx SampleCoords) (Sample, error)
18+
AxisHalf(ctx context.Context, axisType rsmt2d.Axis, axisIdx int) (AxisHalf, error)
1619
Reader() (io.Reader, error)
20+
RangeNamespaceData(
21+
ctx context.Context,
22+
from, to int,
23+
) (RangeNamespaceData, error)
1724
}

share/shwap/p2p/shrex/request.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,15 @@ var registry = []newRequestID{
2121
func() request {
2222
return &shwap.EdsID{}
2323
},
24+
func() request {
25+
return &shwap.SampleID{}
26+
},
27+
func() request {
28+
return &shwap.RowID{}
29+
},
30+
func() request {
31+
return &shwap.RangeNamespaceDataID{}
32+
},
2433
}
2534

2635
// request represents compatible generalised interface for requests.
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package shrex_getter
2+
3+
import (
4+
"context"
5+
"fmt"
6+
7+
"go.opentelemetry.io/otel/attribute"
8+
"go.opentelemetry.io/otel/metric"
9+
10+
"github.com/celestiaorg/celestia-node/libs/utils"
11+
)
12+
13+
type requestType int
14+
15+
var (
16+
edsRequest requestType = 1
17+
namespaceDataRequest requestType = 2
18+
rowRequest requestType = 3
19+
samplesRequest requestType = 4
20+
rangeRequest requestType = 5
21+
)
22+
23+
type metrics struct {
24+
requestAttempt metric.Int64Histogram
25+
}
26+
27+
func (r requestType) String() string {
28+
switch r {
29+
case edsRequest:
30+
return "edsRequest"
31+
case namespaceDataRequest:
32+
return "namespaceDataRequest"
33+
case rowRequest:
34+
return "rowRequest"
35+
case samplesRequest:
36+
return "samplesRequest"
37+
case rangeRequest:
38+
return "rangeRequest"
39+
default:
40+
panic(fmt.Sprintf("unknown shrex getter requestType: %v", int(r)))
41+
}
42+
}
43+
44+
func (sg *Getter) WithMetrics() error {
45+
requestAttempt, err := meter.Int64Histogram(
46+
"getters_shrex_attempts_per_request",
47+
metric.WithDescription("Number of attempts per shrex request"),
48+
)
49+
if err != nil {
50+
return err
51+
}
52+
53+
sg.metrics = &metrics{
54+
requestAttempt: requestAttempt,
55+
}
56+
return nil
57+
}
58+
59+
func (m *metrics) recordAttempts(ctx context.Context, requestType requestType, attempt int, success bool) {
60+
if m == nil {
61+
return
62+
}
63+
ctx = utils.ResetContextOnError(ctx)
64+
65+
m.requestAttempt.Record(ctx, int64(attempt),
66+
metric.WithAttributes(
67+
attribute.String("request_type", requestType.String()),
68+
attribute.Bool("success", success)),
69+
)
70+
}

0 commit comments

Comments
 (0)