Skip to content

Commit 2a16e68

Browse files
committed
feat: Support log commit stats through SpannerTransactionOptions.
Log commit stats may now be set for all transaction types.
1 parent bdf964a commit 2a16e68

File tree

4 files changed

+42
-5
lines changed

4 files changed

+42
-5
lines changed

apis/Google.Cloud.Spanner.Data/Google.Cloud.Spanner.Data.Tests/SpannerTransactionOptionsTests.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,24 @@ public void EffectiveTag_ChangesIgnoredAfterStatements(string tag, TransactionMo
160160
Assert.Equal(expectedEffectiveTag, effectiveTag);
161161
}
162162

163+
[Theory]
164+
[InlineData(null, true, true)]
165+
[InlineData(true, false, true)]
166+
public void LogCommitStats_Effective(bool? optionsLogCommitStats, bool connectionLogCommitStats, bool effectiveLogCommitStats)
167+
{
168+
var options = new SpannerTransactionOptions
169+
{
170+
LogCommitStats = optionsLogCommitStats
171+
};
172+
173+
SpannerConnectionStringBuilder builder = new SpannerConnectionStringBuilder
174+
{
175+
LogCommitStats = connectionLogCommitStats
176+
};
177+
178+
Assert.Equal(effectiveLogCommitStats, options.EffectiveLogCommitStats(new SpannerConnection(builder)));
179+
}
180+
163181
[Fact]
164182
public void EffectiveTag_FailsOnStatementExecutionContradiction()
165183
{
@@ -182,12 +200,14 @@ public void CopyConstructor()
182200
CommitTimeout = 10,
183201
CommitPriority = Priority.High,
184202
Tag = "tag",
203+
LogCommitStats = true,
185204
};
186205
var optionsCopy = new SpannerTransactionOptions(options);
187206

188207
Assert.Equal(options.MaxCommitDelay, optionsCopy.MaxCommitDelay);
189208
Assert.Equal(options.CommitTimeout, optionsCopy.CommitTimeout);
190209
Assert.Equal(options.CommitPriority, optionsCopy.CommitPriority);
191210
Assert.Equal(options.Tag, optionsCopy.Tag);
211+
Assert.True(optionsCopy.LogCommitStats);
192212
}
193213
}

apis/Google.Cloud.Spanner.Data/Google.Cloud.Spanner.Data.Tests/SpannerTransactionTests.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,13 +88,15 @@ public void SpannerTransactionOptions_FromBeginTransaction()
8888
CommitTimeout = commitTimeout,
8989
CommitPriority = commitPriority,
9090
Tag = tag,
91-
DisposeBehavior = DisposeBehavior.CloseResources
91+
DisposeBehavior = DisposeBehavior.CloseResources,
92+
LogCommitStats = true
9293
});
9394

9495
Assert.Equal(commitDelay, transaction.TransactionOptions.MaxCommitDelay);
9596
Assert.Equal(commitTimeout, transaction.TransactionOptions.CommitTimeout);
9697
Assert.Equal(commitPriority, transaction.TransactionOptions.CommitPriority);
9798
Assert.Equal(tag, transaction.TransactionOptions.Tag);
9899
Assert.Equal(disposeBehavior, transaction.TransactionOptions.DisposeBehavior);
100+
Assert.True(transaction.TransactionOptions.LogCommitStats);
99101
}
100102
}

apis/Google.Cloud.Spanner.Data/Google.Cloud.Spanner.Data/SpannerTransaction.cs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,6 @@ internal SpannerTransaction(
211211
bool isRetriable)
212212
{
213213
SpannerConnection = GaxPreconditions.CheckNotNull(connection, nameof(connection));
214-
LogCommitStats = SpannerConnection.LogCommitStats;
215214
_session = GaxPreconditions.CheckNotNull(session, nameof(session));
216215
_creationOptions = GaxPreconditions.CheckNotNull(creationOptions, nameof(creationOptions));
217216
TransactionOptions = transactionOptions is null ? new SpannerTransactionOptions() : new SpannerTransactionOptions(transactionOptions);
@@ -247,7 +246,12 @@ public DisposeBehavior DisposeBehavior
247246
/// and log these. This property is by default equal to the value set on the SpannerConnection
248247
/// of this transaction, but can be overridden for a specific transaction.
249248
/// </summary>
250-
public bool LogCommitStats { get; set; }
249+
[Obsolete("Use SpannerTransactionOptions.DisposeBehavior instead.")]
250+
public bool LogCommitStats
251+
{
252+
get => TransactionOptions.EffectiveLogCommitStats(SpannerConnection);
253+
set => TransactionOptions.LogCommitStats = value;
254+
}
251255

252256
/// <summary>
253257
/// Creates a new <see cref="SpannerBatchCommand"/> to execute batched DML statements within this transaction.
@@ -433,7 +437,7 @@ Task<IEnumerable<long>> ISpannerTransaction.ExecuteBatchDmlAsync(ExecuteBatchDml
433437
var request = new CommitRequest
434438
{
435439
Mutations = { _mutations },
436-
ReturnCommitStats = LogCommitStats,
440+
ReturnCommitStats = TransactionOptions.EffectiveLogCommitStats(SpannerConnection),
437441
RequestOptions = BuildCommitRequestOptions(),
438442
MaxCommitDelay = TransactionOptions.MaxCommitDelayDuration,
439443
};
@@ -450,7 +454,7 @@ Task<IEnumerable<long>> ISpannerTransaction.ExecuteBatchDmlAsync(ExecuteBatchDml
450454
{
451455
throw new SpannerException(ErrorCode.Internal, "Commit succeeded, but returned a response with no commit timestamp");
452456
}
453-
if (LogCommitStats)
457+
if (TransactionOptions.EffectiveLogCommitStats(SpannerConnection))
454458
{
455459
SpannerConnection.Logger.LogCommitStats(request, response);
456460
}

apis/Google.Cloud.Spanner.Data/Google.Cloud.Spanner.Data/SpannerTransactionOptions.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ public SpannerTransactionOptions(SpannerTransactionOptions other)
5353
CommitPriority = other.CommitPriority;
5454
Tag = other.Tag;
5555
DisposeBehavior = other.DisposeBehavior;
56+
LogCommitStats = other.LogCommitStats;
5657
}
5758

5859
/// <summary>
@@ -162,4 +163,14 @@ public DisposeBehavior DisposeBehavior
162163
_disposeBehavior = GaxPreconditions.CheckEnumValue(value, nameof(DisposeBehavior));
163164
}
164165
}
166+
167+
/// <summary>
168+
/// Specifies whether this transaction should request commit statistics from the backend
169+
/// and log these. If unset, the value set on the SpannerConnection
170+
/// of this transaction will be used.
171+
/// </summary>
172+
public bool? LogCommitStats { get; set; }
173+
174+
internal bool EffectiveLogCommitStats(SpannerConnection spannerConnection) =>
175+
LogCommitStats ?? GaxPreconditions.CheckNotNull(spannerConnection, nameof(spannerConnection)).Builder.LogCommitStats;
165176
}

0 commit comments

Comments
 (0)