Skip to content

Commit 961dd38

Browse files
authored
feat(bigtable): Support last_scanned_row in the bigtable client (#8345)
This adds support for last_scanned_row_key to the bigtable client, as well as sending feature flags to the server. note: this depends on #8343
1 parent d53ef45 commit 961dd38

File tree

2 files changed

+18
-2
lines changed

2 files changed

+18
-2
lines changed

bigtable/bigtable.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,10 @@ func (c *Client) Open(table string) *Table {
161161
return &Table{
162162
c: c,
163163
table: table,
164-
md: metadata.Pairs(resourcePrefixHeader, c.fullTableName(table), requestParamsHeader, c.requestParamsHeaderValue(table)),
164+
md: metadata.Join(metadata.Pairs(
165+
resourcePrefixHeader, c.fullTableName(table),
166+
requestParamsHeader, c.requestParamsHeaderValue(table),
167+
), btopt.WithFeatureFlags()),
165168
}
166169
}
167170

@@ -246,6 +249,10 @@ func (t *Table) ReadRows(ctx context.Context, arg RowSet, f func(Row) bool, opts
246249
}
247250
}
248251

252+
if res.LastScannedRowKey != nil {
253+
prevRowKey = string(res.LastScannedRowKey)
254+
}
255+
249256
// Handle any incoming RequestStats. This should happen at most once.
250257
if res.RequestStats != nil && settings.fullReadStatsFunc != nil {
251258
stats := makeFullReadStats(res.RequestStats)

bigtable/retry_test.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -413,6 +413,15 @@ func TestRetryReadRows(t *testing.T) {
413413
case 3:
414414
// Write two more rows
415415
must(writeReadRowsResponse(ss, "c", "d"))
416+
err = status.Errorf(codes.Unavailable, "")
417+
case 4:
418+
must(ss.SendMsg(&btpb.ReadRowsResponse{LastScannedRowKey: []byte("e")}))
419+
err = status.Errorf(codes.Unavailable, "")
420+
case 5:
421+
if want, got := "e\x00", string(req.Rows.RowRanges[0].GetStartKeyClosed()); want != got {
422+
t.Errorf("3 range retries: got %q, want %q", got, want)
423+
}
424+
must(writeReadRowsResponse(ss, "f", "g"))
416425
err = nil
417426
}
418427
errCount++
@@ -424,7 +433,7 @@ func TestRetryReadRows(t *testing.T) {
424433
got = append(got, r.Key())
425434
return true
426435
}))
427-
want := []string{"a", "b", "c", "d"}
436+
want := []string{"a", "b", "c", "d", "f", "g"}
428437
if !testutil.Equal(got, want) {
429438
t.Errorf("retry range integration: got %v, want %v", got, want)
430439
}

0 commit comments

Comments
 (0)