Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
e7d34b0
perf(spanner): inline BeginTransaction with first query (step 1)
olavloite Apr 1, 2026
ef4be74
perf(spanner): inline begin transaction error handling
olavloite Apr 2, 2026
255a007
test(spanner): add integration test for inline-begin error handling
olavloite Apr 2, 2026
c7512d1
perf(spanner): support concurrent queries with inline-begin-transaction
olavloite Apr 3, 2026
1250553
fix(spanner): prevent deadlock if ResultSet#next() is never called
olavloite Apr 4, 2026
43d906b
perf(spanner): inline-begin for read/write transactions
olavloite Apr 5, 2026
92a352b
perf(spanner): support inline-begin for TransactionRunner
olavloite Apr 5, 2026
30f3c83
chore(spanner): change begin transaction option to enum
olavloite Apr 7, 2026
145caea
Merge branch 'main' into spanner-inline-begin-tx-step-1
olavloite Apr 8, 2026
57eb403
fix(spanner): modify constructor call in BatchReadOnlyTransaction
olavloite Apr 8, 2026
d8af76e
test(spanner): add missing test for Read
olavloite Apr 8, 2026
c3e8b33
perf(spanner): inline begin transaction error handling
olavloite Apr 2, 2026
a0cfa91
perf(spanner): inline begin transaction error handling
olavloite Apr 2, 2026
0efcab8
test(spanner): add integration test for inline-begin error handling
olavloite Apr 2, 2026
97cb2cd
test(spanner): add integration test for inline-begin error handling
olavloite Apr 2, 2026
6b7cffc
perf(spanner): support concurrent queries with inline-begin-transaction
olavloite Apr 3, 2026
2161268
perf(spanner): inline begin transaction error handling
olavloite Apr 2, 2026
09c1c9c
test(spanner): add integration test for inline-begin error handling
olavloite Apr 2, 2026
5cad64d
perf(spanner): support concurrent queries with inline-begin-transaction
olavloite Apr 3, 2026
0b12ac0
fix(spanner): prevent deadlock if ResultSet#next() is never called
olavloite Apr 4, 2026
8c54952
Merge branch 'spanner-inline-begin-tx-step-5' into spanner-inline-beg…
olavloite Apr 8, 2026
003612c
Merge branch 'spanner-inline-begin-tx-step-6' into spanner-inline-beg…
olavloite Apr 8, 2026
042ad96
Merge branch 'spanner-inline-begin-tx-step-7' into spanner-inline-beg…
olavloite Apr 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions deny.toml
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,7 @@ wrappers = [
# Use in tests is fine.
"grpc-server",
"integration-tests-o11y",
"integration-tests-spanner",
"pubsub-grpc-mock",
"spanner-grpc-mock",
"storage-grpc-mock",
Expand Down
1 change: 1 addition & 0 deletions src/spanner/grpc-mock/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ pub mod google {
include!("generated/protos/google.rpc.rs");
}
pub mod spanner {
#[allow(rustdoc::broken_intra_doc_links, rustdoc::bare_urls)]
pub mod v1 {
include!("generated/protos/google.spanner.v1.rs");
}
Expand Down
24 changes: 18 additions & 6 deletions src/spanner/src/batch_read_only_transaction.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@ use crate::database_client::DatabaseClient;
use crate::model::PartitionOptions;
use crate::precommit::PrecommitTokenTracker;
use crate::read_only_transaction::{
MultiUseReadOnlyTransaction, MultiUseReadOnlyTransactionBuilder,
BeginTransactionOption, MultiUseReadOnlyTransaction, MultiUseReadOnlyTransactionBuilder,
ReadContextTransactionSelector,
};
use crate::result_set::{ResultSet, StreamOperation};
use crate::statement::Statement;
Expand Down Expand Up @@ -44,7 +45,8 @@ pub struct BatchReadOnlyTransactionBuilder {
impl BatchReadOnlyTransactionBuilder {
pub(crate) fn new(client: DatabaseClient) -> Self {
Self {
inner: MultiUseReadOnlyTransactionBuilder::new(client),
inner: MultiUseReadOnlyTransactionBuilder::new(client)
.with_begin_transaction_option(BeginTransactionOption::ExplicitBegin),
}
}

Expand Down Expand Up @@ -143,12 +145,13 @@ impl BatchReadOnlyTransaction {
statement: T,
options: PartitionOptions,
) -> crate::Result<Vec<Partition>> {
let selector = self.inner.context.transaction_selector.selector().await?;
let statement = statement.into();
let request = statement
.clone()
.into_partition_query_request()
.set_session(self.inner.context.client.session.name.clone())
.set_transaction(self.inner.context.transaction_selector.clone())
.set_transaction(selector.clone())
.set_partition_options(options);

let response = self
Expand All @@ -165,7 +168,7 @@ impl BatchReadOnlyTransaction {
.map(|p| Partition {
inner: PartitionedOperation::Query {
partition_token: p.partition_token,
transaction_selector: self.inner.context.transaction_selector.clone(),
transaction_selector: selector.clone(),
session_name: self.inner.context.client.session.name.clone(),
statement: statement.clone(),
},
Expand Down Expand Up @@ -198,12 +201,13 @@ impl BatchReadOnlyTransaction {
read: T,
options: PartitionOptions,
) -> crate::Result<Vec<Partition>> {
let selector = self.inner.context.transaction_selector.selector().await?;
let read = read.into();
let request = read
.clone()
.into_partition_read_request()
.set_session(self.inner.context.client.session.name.clone())
.set_transaction(self.inner.context.transaction_selector.clone())
.set_transaction(selector.clone())
.set_partition_options(options);

let response = self
Expand All @@ -220,7 +224,7 @@ impl BatchReadOnlyTransaction {
.map(|p| Partition {
inner: PartitionedOperation::Read {
partition_token: p.partition_token,
transaction_selector: self.inner.context.transaction_selector.clone(),
transaction_selector: selector.clone(),
session_name: self.inner.context.client.session.name.clone(),
read_request: read.clone(),
},
Expand Down Expand Up @@ -344,6 +348,10 @@ impl Partition {

Ok(ResultSet::new(
stream,
Some(ReadContextTransactionSelector::Fixed(
transaction_selector.clone(),
None,
)),
PrecommitTokenTracker::new_noop(),
client.clone(),
StreamOperation::Query(request),
Expand Down Expand Up @@ -373,6 +381,10 @@ impl Partition {

Ok(ResultSet::new(
stream,
Some(ReadContextTransactionSelector::Fixed(
transaction_selector.clone(),
None,
)),
PrecommitTokenTracker::new_noop(),
client.clone(),
StreamOperation::Read(request),
Expand Down
1 change: 1 addition & 0 deletions src/spanner/src/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ pub use crate::mutation::{Mutation, ValueBinder, WriteBuilder};
pub use crate::read::ConfiguredReadRequestBuilder;
pub use crate::read::ReadRequest;
pub use crate::read::ReadRequestBuilder;
pub use crate::read_only_transaction::BeginTransactionOption;
pub use crate::read_only_transaction::MultiUseReadOnlyTransaction;
pub use crate::read_only_transaction::MultiUseReadOnlyTransactionBuilder;
pub use crate::read_only_transaction::SingleUseReadOnlyTransaction;
Expand Down
Loading
Loading