Skip to content

Commit dedead2

Browse files
authored
fix!(shwap/rangeNamespaceDataID): fix RangeNamespaceDataID fields type (#4696)
1 parent 1f5e534 commit dedead2

File tree

4 files changed

+120
-11
lines changed

4 files changed

+120
-11
lines changed

share/shwap/p2p/bitswap/range_namespace_data_block.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ func init() {
2929
rangeNamespaceDataMultihashCode,
3030
rangeNamespaceDataCodec,
3131
maxRangeSize,
32-
shwap.RangeNamespaceDataIDSize,
32+
shwap.RangeNamespaceDataIDV0Size,
3333
func(cid cid.Cid) (Block, error) {
3434
return EmptyRangeNamespaceDataBlockFromCID(cid)
3535
},
@@ -38,7 +38,7 @@ func init() {
3838

3939
// RangeNamespaceDataBlock is a Bitswap compatible block for Shwap's RangeNamespaceData container.
4040
type RangeNamespaceDataBlock struct {
41-
ID shwap.RangeNamespaceDataID
41+
ID shwap.RangeNamespaceDataIDV0
4242

4343
Container shwap.RangeNamespaceData
4444
}
@@ -52,7 +52,7 @@ func NewEmptyRangeNamespaceDataBlock(
5252
if err != nil {
5353
return nil, err
5454
}
55-
id, err := shwap.NewRangeNamespaceDataID(edsID, from, to, odsSize)
55+
id, err := shwap.NewRangeNamespaceDataIDV0(edsID, from, to, odsSize)
5656
if err != nil {
5757
return nil, err
5858
}
@@ -67,7 +67,7 @@ func EmptyRangeNamespaceDataBlockFromCID(cid cid.Cid) (*RangeNamespaceDataBlock,
6767
return nil, err
6868
}
6969

70-
rndid, err := shwap.RangeNamespaceDataIDFromBinary(rngidData)
70+
rndid, err := shwap.RangeNamespaceDataIDV0FromBinary(rngidData)
7171
if err != nil {
7272
return nil, fmt.Errorf("unmarhalling RangeNamespaceDataBlock: %w", err)
7373
}
@@ -112,9 +112,9 @@ func (rndb *RangeNamespaceDataBlock) UnmarshalFn(root *share.AxisRoots) Unmarsha
112112
if !rndb.Container.IsEmpty() {
113113
return nil
114114
}
115-
rndid, err := shwap.RangeNamespaceDataIDFromBinary(idData)
115+
rndid, err := shwap.RangeNamespaceDataIDV0FromBinary(idData)
116116
if err != nil {
117-
return fmt.Errorf("unmarhaling RangeNamespaceDataID: %w", err)
117+
return fmt.Errorf("unmarhaling RangeNamespaceDataIDV0: %w", err)
118118
}
119119

120120
odsSize := len(root.RowRoots) / 2
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
package shwap
2+
3+
import (
4+
"encoding/binary"
5+
"fmt"
6+
"io"
7+
)
8+
9+
// RangeNamespaceDataIDV0Size defines the size of the RangeNamespaceDataIDV0Size in bytes,
10+
// combining EdsIDSize size and 4 additional bytes
11+
// for the start and end ODS indexes of share of the range.
12+
const RangeNamespaceDataIDV0Size = EdsIDSize + 4
13+
14+
type RangeNamespaceDataIDV0 struct {
15+
RangeNamespaceDataID
16+
}
17+
18+
func NewRangeNamespaceDataIDV0(
19+
edsID EdsID,
20+
from, to, odsSize int,
21+
) (RangeNamespaceDataIDV0, error) {
22+
rngData, err := NewRangeNamespaceDataID(edsID, from, to, odsSize)
23+
if err != nil {
24+
return RangeNamespaceDataIDV0{}, err
25+
}
26+
return RangeNamespaceDataIDV0{RangeNamespaceDataID: rngData}, nil
27+
}
28+
29+
// RangeNamespaceDataIDV0FromBinary deserializes a RangeNamespaceDataIDV0 from its binary form.
30+
func RangeNamespaceDataIDV0FromBinary(data []byte) (RangeNamespaceDataIDV0, error) {
31+
if len(data) != RangeNamespaceDataIDV0Size {
32+
return RangeNamespaceDataIDV0{}, fmt.Errorf(
33+
"invalid RangeNamespaceDataID data length: expected %d, got %d", RangeNamespaceDataIDV0Size, len(data),
34+
)
35+
}
36+
37+
edsID, err := EdsIDFromBinary(data[:EdsIDSize])
38+
if err != nil {
39+
return RangeNamespaceDataIDV0{}, err
40+
}
41+
42+
rngID := RangeNamespaceDataID{
43+
EdsID: edsID,
44+
From: int(binary.BigEndian.Uint16(data[EdsIDSize : EdsIDSize+2])),
45+
To: int(binary.BigEndian.Uint16(data[EdsIDSize+2 : EdsIDSize+4])),
46+
}
47+
return RangeNamespaceDataIDV0{RangeNamespaceDataID: rngID}, rngID.Validate()
48+
}
49+
50+
// MarshalBinary encodes RangeNamespaceDataIDV0 into binary form.
51+
func (rngid RangeNamespaceDataIDV0) MarshalBinary() ([]byte, error) {
52+
data := make([]byte, 0, RangeNamespaceDataIDV0Size)
53+
return rngid.appendTo(data)
54+
}
55+
56+
// ReadFrom reads the binary form of RangeNamespaceDataIDV0 from the provided reader.
57+
func (rngid *RangeNamespaceDataIDV0) ReadFrom(r io.Reader) (int64, error) {
58+
data := make([]byte, RangeNamespaceDataIDV0Size)
59+
n, err := io.ReadFull(r, data)
60+
if err != nil {
61+
return int64(n), err
62+
}
63+
64+
id, err := RangeNamespaceDataIDV0FromBinary(data)
65+
if err != nil {
66+
return int64(n), fmt.Errorf("RangeNamespaceDataIDV0FromBinary: %w", err)
67+
}
68+
*rngid = id
69+
return int64(n), nil
70+
}
71+
72+
// WriteTo writes the binary form of RangeNamespaceDataIDV0 to the provided writer.
73+
func (rngid RangeNamespaceDataIDV0) WriteTo(w io.Writer) (int64, error) {
74+
data, err := rngid.MarshalBinary()
75+
if err != nil {
76+
return 0, err
77+
}
78+
n, err := w.Write(data)
79+
return int64(n), err
80+
}
81+
82+
// appendTo helps in constructing the binary representation of RangeNamespaceDataIDV0
83+
// by appending all encoded fields.
84+
func (rngid RangeNamespaceDataIDV0) appendTo(data []byte) ([]byte, error) {
85+
data, err := rngid.AppendBinary(data)
86+
if err != nil {
87+
return nil, fmt.Errorf("appending EdsID: %w", err)
88+
}
89+
data = binary.BigEndian.AppendUint16(data, uint16(rngid.From))
90+
data = binary.BigEndian.AppendUint16(data, uint16(rngid.To))
91+
return data, nil
92+
}
93+
94+
// Equals checks equality of RangeNamespaceDataIDV0.
95+
func (rngid *RangeNamespaceDataIDV0) Equals(other RangeNamespaceDataIDV0) bool {
96+
return rngid.RangeNamespaceDataID.Equals(other.RangeNamespaceDataID)
97+
}

share/shwap/range_namespace_data_id.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import (
99
// RangeNamespaceDataIDSize defines the size of the RangeNamespaceDataIDSize in bytes,
1010
// combining EdsIDSize size and 4 additional bytes
1111
// for the start and end ODS indexes of share of the range.
12-
const RangeNamespaceDataIDSize = EdsIDSize + 4
12+
const RangeNamespaceDataIDSize = EdsIDSize + 8
1313

1414
// RangeNamespaceDataID uniquely identifies a continuous range of shares within an Original DataSquare (ODS)
1515
// The range is defined by the indexes of the first (`From`)
@@ -132,8 +132,8 @@ func RangeNamespaceDataIDFromBinary(data []byte) (RangeNamespaceDataID, error) {
132132

133133
rngID := RangeNamespaceDataID{
134134
EdsID: edsID,
135-
From: int(binary.BigEndian.Uint16(data[EdsIDSize : EdsIDSize+2])),
136-
To: int(binary.BigEndian.Uint16(data[EdsIDSize+2 : EdsIDSize+4])),
135+
From: int(binary.BigEndian.Uint32(data[EdsIDSize : EdsIDSize+4])),
136+
To: int(binary.BigEndian.Uint32(data[EdsIDSize+4 : EdsIDSize+8])),
137137
}
138138
return rngID, rngID.Validate()
139139
}
@@ -151,7 +151,7 @@ func (rngid RangeNamespaceDataID) appendTo(data []byte) ([]byte, error) {
151151
if err != nil {
152152
return nil, fmt.Errorf("appending EdsID: %w", err)
153153
}
154-
data = binary.BigEndian.AppendUint16(data, uint16(rngid.From))
155-
data = binary.BigEndian.AppendUint16(data, uint16(rngid.To))
154+
data = binary.BigEndian.AppendUint32(data, uint32(rngid.From))
155+
data = binary.BigEndian.AppendUint32(data, uint32(rngid.To))
156156
return data, nil
157157
}

share/shwap/range_namespace_data_id_test.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,4 +63,16 @@ func TestRangeNamespaceDataIDReaderWriter(t *testing.T) {
6363

6464
err = rngidOut.Validate()
6565
require.NoError(t, err)
66+
67+
rngidV0in := RangeNamespaceDataIDV0{rngidOut}
68+
buf = bytes.NewBuffer(nil)
69+
n, err = rngidV0in.WriteTo(buf)
70+
require.NoError(t, err)
71+
require.Equal(t, int64(RangeNamespaceDataIDV0Size), n)
72+
73+
var rngidV0out RangeNamespaceDataIDV0
74+
n, err = rngidV0out.ReadFrom(buf)
75+
require.NoError(t, err)
76+
require.Equal(t, int64(RangeNamespaceDataIDV0Size), n)
77+
require.EqualValues(t, rngidV0in, rngidV0out)
6678
}

0 commit comments

Comments
 (0)