Skip to content

Commit 4522807

Browse files
committed
fix client.cc and add testing for lock_hint in client_test
1 parent d29256d commit 4522807

2 files changed

Lines changed: 54 additions & 2 deletions

File tree

google/cloud/spanner/client.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,8 @@ RowStream Client::Read(std::string table, KeySet keys,
5353
std::vector<std::string> columns, Options opts) {
5454
opts = internal::MergeOptions(std::move(opts), opts_);
5555
auto directed_read_option = ExtractOpt<DirectedReadOption>(opts);
56-
internal::OptionsSpan span(std::move(opts));
5756
auto lock_hint = ExtractOpt<LockHintOption>(opts);
57+
internal::OptionsSpan span(std::move(opts));
5858
return conn_->Read({spanner_internal::MakeSingleUseTransaction(
5959
Transaction::ReadOnlyOptions()),
6060
std::move(table), std::move(keys), std::move(columns),
@@ -68,8 +68,8 @@ RowStream Client::Read(Transaction::SingleUseOptions transaction_options,
6868
std::vector<std::string> columns, Options opts) {
6969
opts = internal::MergeOptions(std::move(opts), opts_);
7070
auto directed_read_option = ExtractOpt<DirectedReadOption>(opts);
71-
internal::OptionsSpan span(std::move(opts));
7271
auto lock_hint = ExtractOpt<LockHintOption>(opts);
72+
internal::OptionsSpan span(std::move(opts));
7373
return conn_->Read({spanner_internal::MakeSingleUseTransaction(
7474
std::move(transaction_options)),
7575
std::move(table), std::move(keys), std::move(columns),

google/cloud/spanner/client_test.cc

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,58 @@ TEST(ClientTest, ReadSuccess) {
138138
IsOkAndHolds(RowType("Ann", 42))));
139139
}
140140

141+
TEST(ClientTest, ReadWithLockHint) {
142+
auto conn = std::make_shared<MockConnection>();
143+
Client client(conn);
144+
145+
auto constexpr kText = R"pb(
146+
row_type: {
147+
fields: {
148+
name: "Name",
149+
type: { code: INT64 }
150+
}
151+
fields: {
152+
name: "Id",
153+
type: { code: INT64 }
154+
}
155+
}
156+
)pb";
157+
google::spanner::v1::ResultSetMetadata metadata;
158+
ASSERT_TRUE(TextFormat::ParseFromString(kText, &metadata));
159+
160+
EXPECT_CALL(*conn, Read)
161+
.WillOnce([&metadata](Connection::ReadParams const& params) {
162+
EXPECT_THAT(
163+
params.directed_read_option,
164+
VariantWith<IncludeReplicas>(AllOf(
165+
Property(&IncludeReplicas::replica_selections,
166+
ElementsAre(ReplicaSelection(ReplicaType::kReadOnly))),
167+
Property(&IncludeReplicas::auto_failover_disabled, true))));
168+
EXPECT_THAT(params.lock_hint, Eq(LockHint::kLockHintShared));
169+
auto source = std::make_unique<MockResultSetSource>();
170+
EXPECT_CALL(*source, Metadata()).WillRepeatedly(Return(metadata));
171+
EXPECT_CALL(*source, NextRow())
172+
.WillOnce(Return(spanner_mocks::MakeRow("Steve", 12)))
173+
.WillOnce(Return(spanner_mocks::MakeRow("Ann", 42)))
174+
.WillOnce(Return(Row()));
175+
return RowStream(std::move(source));
176+
});
177+
178+
KeySet keys = KeySet::All();
179+
auto rows = client.Read("table", std::move(keys), {"column1", "column2"},
180+
Options{}
181+
.set<DirectedReadOption>(IncludeReplicas(
182+
{ReplicaSelection(ReplicaType::kReadOnly)},
183+
/*auto_failover_disabled=*/true))
184+
.set<LockHintOption>(LockHint::kLockHintShared));
185+
186+
using RowType = std::tuple<std::string, std::int64_t>;
187+
auto stream = StreamOf<RowType>(rows);
188+
auto actual = std::vector<StatusOr<RowType>>{stream.begin(), stream.end()};
189+
EXPECT_THAT(actual, ElementsAre(IsOkAndHolds(RowType("Steve", 12)),
190+
IsOkAndHolds(RowType("Ann", 42))));
191+
}
192+
141193
TEST(ClientTest, ReadFailure) {
142194
auto conn = std::make_shared<MockConnection>();
143195
Client client(conn);

0 commit comments

Comments
 (0)