Skip to content

Commit b8f164f

Browse files
dbolducmutianf
andauthored
feat(bigtable/bttest): support reverse scans (#8198)
* feat(bigtable/bttest): support reverse scans * whatever this is. * gofmt --------- Co-authored-by: Mattie Fu <[email protected]>
1 parent adb982e commit b8f164f

File tree

4 files changed

+92
-10
lines changed

4 files changed

+92
-10
lines changed

bigtable/bttest/inmem.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -499,7 +499,11 @@ func (s *server) ReadRows(req *btpb.ReadRowsRequest, stream btpb.Bigtable_ReadRo
499499
rows = append(rows, r)
500500
}
501501
}
502-
sort.Sort(byRowKey(rows))
502+
if req.Reversed {
503+
sort.Sort(sort.Reverse(byRowKey(rows)))
504+
} else {
505+
sort.Sort(byRowKey(rows))
506+
}
503507

504508
limit := int(req.RowsLimit)
505509
if limit == 0 {

bigtable/bttest/inmem_test.go

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1053,6 +1053,84 @@ func TestReadRowsWithlabelTransformer(t *testing.T) {
10531053
}
10541054
}
10551055

1056+
func TestReadRowsReversed(t *testing.T) {
1057+
ctx := context.Background()
1058+
srv := &server{
1059+
tables: make(map[string]*table),
1060+
}
1061+
newTbl := btapb.Table{
1062+
ColumnFamilies: map[string]*btapb.ColumnFamily{
1063+
"cf": {GcRule: &btapb.GcRule{Rule: &btapb.GcRule_MaxNumVersions{MaxNumVersions: 1}}},
1064+
},
1065+
}
1066+
tbl, err := srv.CreateTable(ctx, &btapb.CreateTableRequest{Parent: "cluster", TableId: "t", Table: &newTbl})
1067+
if err != nil {
1068+
t.Fatalf("Creating table: %v", err)
1069+
}
1070+
entries := []struct {
1071+
row string
1072+
value []byte
1073+
}{
1074+
{"row1", []byte("a")},
1075+
{"row2", []byte("b")},
1076+
}
1077+
1078+
for _, entry := range entries {
1079+
req := &btpb.MutateRowRequest{
1080+
TableName: tbl.Name,
1081+
RowKey: []byte(entry.row),
1082+
Mutations: []*btpb.Mutation{{
1083+
Mutation: &btpb.Mutation_SetCell_{SetCell: &btpb.Mutation_SetCell{
1084+
FamilyName: "cf",
1085+
ColumnQualifier: []byte("cq"),
1086+
TimestampMicros: 1000,
1087+
Value: entry.value,
1088+
}},
1089+
}},
1090+
}
1091+
if _, err := srv.MutateRow(ctx, req); err != nil {
1092+
t.Fatalf("Failed to insert entry %v into server: %v", entry, err)
1093+
}
1094+
}
1095+
1096+
rrss := new(MockReadRowsServer)
1097+
rreq := &btpb.ReadRowsRequest{TableName: tbl.Name, Reversed: true}
1098+
if err := srv.ReadRows(rreq, rrss); err != nil {
1099+
t.Fatalf("Failed to read rows: %v", err)
1100+
}
1101+
1102+
var gotChunks []*btpb.ReadRowsResponse_CellChunk
1103+
for _, res := range rrss.responses {
1104+
gotChunks = append(gotChunks, res.Chunks...)
1105+
}
1106+
1107+
wantChunks := []*btpb.ReadRowsResponse_CellChunk{
1108+
{
1109+
RowKey: []byte("row2"),
1110+
FamilyName: &wrappers.StringValue{Value: "cf"},
1111+
Qualifier: &wrappers.BytesValue{Value: []byte("cq")},
1112+
TimestampMicros: 1000,
1113+
Value: []byte("b"),
1114+
RowStatus: &btpb.ReadRowsResponse_CellChunk_CommitRow{
1115+
CommitRow: true,
1116+
},
1117+
},
1118+
{
1119+
RowKey: []byte("row1"),
1120+
FamilyName: &wrappers.StringValue{Value: "cf"},
1121+
Qualifier: &wrappers.BytesValue{Value: []byte("cq")},
1122+
TimestampMicros: 1000,
1123+
Value: []byte("a"),
1124+
RowStatus: &btpb.ReadRowsResponse_CellChunk_CommitRow{
1125+
CommitRow: true,
1126+
},
1127+
},
1128+
}
1129+
if diff := cmp.Diff(gotChunks, wantChunks, cmp.Comparer(proto.Equal)); diff != "" {
1130+
t.Fatalf("Response chunks mismatch: got: + want -\n%s", diff)
1131+
}
1132+
}
1133+
10561134
func TestCheckAndMutateRowWithoutPredicate(t *testing.T) {
10571135
s := &server{
10581136
tables: make(map[string]*table),

bigtable/go.mod

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ require (
1212
github.com/googleapis/cloud-bigtable-clients-test v0.0.0-20230505150253-16eeee810d3a
1313
github.com/googleapis/gax-go/v2 v2.11.0
1414
google.golang.org/api v0.126.0
15-
google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc
16-
google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc
15+
google.golang.org/genproto v0.0.0-20230629202037-9506855d4529
16+
google.golang.org/genproto/googleapis/rpc v0.0.0-20230629202037-9506855d4529
1717
google.golang.org/grpc v1.55.0
1818
google.golang.org/protobuf v1.30.0
1919
rsc.io/binaryregexp v0.2.0
@@ -40,5 +40,5 @@ require (
4040
golang.org/x/text v0.9.0 // indirect
4141
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect
4242
google.golang.org/appengine v1.6.7 // indirect
43-
google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc // indirect
43+
google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529 // indirect
4444
)

bigtable/go.sum

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -181,12 +181,12 @@ google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoA
181181
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
182182
google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
183183
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
184-
google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc h1:8DyZCyvI8mE1IdLy/60bS+52xfymkE72wv1asokgtao=
185-
google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64=
186-
google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc h1:kVKPf/IiYSBWEWtkIn6wZXwWGCnLKcC8oWfZvXjsGnM=
187-
google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig=
188-
google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc h1:XSJ8Vk1SWuNr8S18z1NZSziL0CPIXLCCMDOEFtHBOFc=
189-
google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA=
184+
google.golang.org/genproto v0.0.0-20230629202037-9506855d4529 h1:9JucMWR7sPvCxUFd6UsOUNmA5kCcWOfORaT3tpAsKQs=
185+
google.golang.org/genproto v0.0.0-20230629202037-9506855d4529/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64=
186+
google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529 h1:s5YSX+ZH5b5vS9rnpGymvIyMpLRJizowqDlOuyjXnTk=
187+
google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig=
188+
google.golang.org/genproto/googleapis/rpc v0.0.0-20230629202037-9506855d4529 h1:DEH99RbiLZhMxrpEJCZ0A+wdTe0EOgou/poSLx9vWf4=
189+
google.golang.org/genproto/googleapis/rpc v0.0.0-20230629202037-9506855d4529/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA=
190190
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
191191
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
192192
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=

0 commit comments

Comments
 (0)