bttest: Skip deleted rows in ReadRows
Fixes #1240
Change-Id: I34b91c1440d81fcd7cb35c5eb438085213b8600a
Reviewed-on: https://code-review.googlesource.com/c/36111
Reviewed-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Jean de Klerk <deklerk@google.com>
diff --git a/bigtable/bigtable_test.go b/bigtable/bigtable_test.go
index 55bf17a..4aec698 100644
--- a/bigtable/bigtable_test.go
+++ b/bigtable/bigtable_test.go
@@ -806,7 +806,7 @@
},
}
if !testutil.Equal(r, wantRow) {
- t.Errorf("Column family was deleted unexpectly.\n got %v\n want %v", r, wantRow)
+ t.Errorf("Column family was deleted unexpectedly.\n got %v\n want %v", r, wantRow)
}
checkpoint("tested family delete")
diff --git a/bigtable/bttest/inmem.go b/bigtable/bttest/inmem.go
index 81bcf4e..72ad1c1 100644
--- a/bigtable/bttest/inmem.go
+++ b/bigtable/bttest/inmem.go
@@ -380,7 +380,13 @@
rows := make([]*row, 0, len(rowSet))
for _, r := range rowSet {
- rows = append(rows, r)
+ r.mu.Lock()
+ fams := len(r.families)
+ r.mu.Unlock()
+
+ if fams != 0 {
+ rows = append(rows, r)
+ }
}
sort.Sort(byRowKey(rows))
diff --git a/bigtable/bttest/inmem_test.go b/bigtable/bttest/inmem_test.go
index df36c3c..e487f0d 100644
--- a/bigtable/bttest/inmem_test.go
+++ b/bigtable/bttest/inmem_test.go
@@ -460,6 +460,46 @@
}
}
+func TestReadRowsAfterDeletion(t *testing.T) {
+ ctx := context.Background()
+ s := &server{
+ tables: make(map[string]*table),
+ }
+ newTbl := btapb.Table{
+ ColumnFamilies: map[string]*btapb.ColumnFamily{
+ "cf0": {},
+ },
+ }
+ tblInfo, err := s.CreateTable(ctx, &btapb.CreateTableRequest{
+ Parent: "cluster", TableId: "t", Table: &newTbl,
+ })
+ if err != nil {
+ t.Fatalf("Creating table: %v", err)
+ }
+ populateTable(ctx, s)
+ dreq := &btpb.MutateRowRequest{
+ TableName: tblInfo.Name,
+ RowKey: []byte("row"),
+ Mutations: []*btpb.Mutation{{
+ Mutation: &btpb.Mutation_DeleteFromRow_{
+ DeleteFromRow: &btpb.Mutation_DeleteFromRow{},
+ },
+ }},
+ }
+ if _, err := s.MutateRow(ctx, dreq); err != nil {
+ t.Fatalf("Deleting from table: %v", err)
+ }
+
+ mock := &MockReadRowsServer{}
+ req := &btpb.ReadRowsRequest{TableName: tblInfo.Name}
+ if err = s.ReadRows(req, mock); err != nil {
+ t.Fatalf("ReadRows error: %v", err)
+ }
+ if got, want := len(mock.responses), 0; got != want {
+ t.Errorf("response count: got %d, want %d", got, want)
+ }
+}
+
func TestReadRowsOrder(t *testing.T) {
s := &server{
tables: make(map[string]*table),