Skip to content

Commit ff7f190

Browse files
fix: Ensure message fields are copied when building retry request (#533)
* fix: Ensure message fields are copied when building retry request Use the to_dict() function when building the ReadRowsRequest arguments. This way, all available fields in the message will get copied over. The `message.filter` field needed a special handling, since the to_dict() function doesn't seem to parse the value the way we want it to be. Fixes internal bug #214449800 * Use copy_from instead of to_dict. copy_from doesn't copy over "empty" fields, so had to adjust the test case expected values. * Use the copy_from function from proto.Message * Bump the min version of proto-plus * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md Co-authored-by: Owl Bot <gcf-owl-bot[bot]@users.noreply.github.com>
1 parent c1265ba commit ff7f190

File tree

4 files changed

+11
-15
lines changed

4 files changed

+11
-15
lines changed

google/cloud/bigtable/row_data.py

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -625,16 +625,12 @@ def __init__(self, message, last_scanned_key, rows_read_so_far):
625625
def build_updated_request(self):
626626
"""Updates the given message request as per last scanned key"""
627627

628-
# TODO: Generalize this to ensure fields don't get rewritten when retrying the request
629-
630-
r_kwargs = {
631-
"table_name": self.message.table_name,
632-
"filter": self.message.filter,
633-
"app_profile_id": self.message.app_profile_id,
634-
}
628+
resume_request = data_messages_v2_pb2.ReadRowsRequest()
629+
data_messages_v2_pb2.ReadRowsRequest.copy_from(resume_request, self.message)
635630

636631
if self.message.rows_limit != 0:
637-
r_kwargs["rows_limit"] = max(
632+
# TODO: Throw an error if rows_limit - read_so_far is 0 or negative.
633+
resume_request.rows_limit = max(
638634
1, self.message.rows_limit - self.rows_read_so_far
639635
)
640636

@@ -643,14 +639,14 @@ def build_updated_request(self):
643639
# to request only rows that have not been returned yet
644640
if "rows" not in self.message:
645641
row_range = data_v2_pb2.RowRange(start_key_open=self.last_scanned_key)
646-
r_kwargs["rows"] = data_v2_pb2.RowSet(row_ranges=[row_range])
642+
resume_request.rows = data_v2_pb2.RowSet(row_ranges=[row_range])
647643
else:
648644
row_keys = self._filter_rows_keys()
649645
row_ranges = self._filter_row_ranges()
650-
r_kwargs["rows"] = data_v2_pb2.RowSet(
646+
resume_request.rows = data_v2_pb2.RowSet(
651647
row_keys=row_keys, row_ranges=row_ranges
652648
)
653-
return data_messages_v2_pb2.ReadRowsRequest(**r_kwargs)
649+
return resume_request
654650

655651
def _filter_rows_keys(self):
656652
""" Helper for :meth:`build_updated_request`"""

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
# https://github.com/googleapis/google-cloud-python/issues/10566
3939
"google-cloud-core >= 1.4.1, <3.0.0dev",
4040
"grpc-google-iam-v1 >= 0.12.3, < 0.13dev",
41-
"proto-plus >= 1.15.0",
41+
"proto-plus >= 1.18.0",
4242
]
4343
extras = {"libcst": "libcst >= 0.2.5"}
4444

testing/constraints-3.6.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,5 @@
88
google-api-core==1.31.5
99
google-cloud-core==1.4.1
1010
grpc-google-iam-v1==0.12.3
11-
proto-plus==1.15.0
11+
proto-plus==1.18.0
1212
libcst==0.2.5

tests/unit/test_row_data.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -928,7 +928,7 @@ def test_RRRM_build_updated_request_full_table():
928928
request_manager = _make_read_rows_request_manager(request, last_scanned_key, 2)
929929

930930
result = request_manager.build_updated_request()
931-
expected_result = _ReadRowsRequestPB(table_name=TABLE_NAME, filter={})
931+
expected_result = _ReadRowsRequestPB(table_name=TABLE_NAME)
932932
row_range1 = types.RowRange(start_key_open=last_scanned_key)
933933
expected_result.rows.row_ranges.append(row_range1)
934934
assert expected_result == result
@@ -1021,7 +1021,7 @@ def test_RRRM_build_updated_request_rows_limit():
10211021
request_manager = _make_read_rows_request_manager(request, last_scanned_key, 2)
10221022

10231023
result = request_manager.build_updated_request()
1024-
expected_result = _ReadRowsRequestPB(table_name=TABLE_NAME, filter={}, rows_limit=8)
1024+
expected_result = _ReadRowsRequestPB(table_name=TABLE_NAME, rows_limit=8)
10251025
row_range1 = types.RowRange(start_key_open=last_scanned_key)
10261026
expected_result.rows.row_ranges.append(row_range1)
10271027
assert expected_result == result

0 commit comments

Comments
 (0)