public void EphemeralTransactionIncludesPriorityOnDmlCommandAndCommit() { var priority = Priority.Medium; Mock <SpannerClient> spannerClientMock = SpannerClientHelpers .CreateMockClient(Logger.DefaultLogger, MockBehavior.Strict); spannerClientMock .SetupBatchCreateSessionsAsync() .SetupBeginTransactionAsync() .SetupExecuteStreamingSqlForDml(ResultSetStats.RowCountOneofCase.RowCountExact) .SetupCommitAsync(); SpannerConnection connection = BuildSpannerConnection(spannerClientMock); var command = connection.CreateDmlCommand("UPDATE FOO SET BAR=1 WHERE ID=1"); command.Priority = priority; command.ExecuteNonQuery(); spannerClientMock.Verify(client => client.ExecuteStreamingSql( It.Is <ExecuteSqlRequest>(request => request.RequestOptions.Priority == PriorityConverter.ToProto(priority)), It.IsAny <CallSettings>()), Times.Once()); spannerClientMock.Verify(client => client.CommitAsync( It.Is <CommitRequest>(request => request.RequestOptions.Priority == PriorityConverter.ToProto(priority)), It.IsAny <CallSettings>()), Times.Once()); }
public void RunWithRetryableTransactionWithCommitPriority() { var priority = Priority.Low; Mock <SpannerClient> spannerClientMock = SpannerClientHelpers .CreateMockClient(Logger.DefaultLogger, MockBehavior.Strict); spannerClientMock .SetupBatchCreateSessionsAsync() .SetupBeginTransactionAsync() .SetupExecuteStreamingSql() .SetupCommitAsync_Fails(1, StatusCode.Aborted, exceptionRetryDelay: TimeSpan.FromMilliseconds(0)) .SetupRollbackAsync(); SpannerConnection connection = BuildSpannerConnection(spannerClientMock); connection.Builder.SessionPoolManager.SpannerSettings.Scheduler = new NoOpScheduler(); connection.RunWithRetriableTransaction(tx => { tx.CommitPriority = priority; var command = connection.CreateSelectCommand("SELECT * FROM FOO"); command.Transaction = tx; using (var reader = command.ExecuteReader()) { Assert.True(reader.HasRows); } }); spannerClientMock.Verify(client => client.ExecuteStreamingSql( It.Is <ExecuteSqlRequest>(request => request.RequestOptions.Priority == RequestOptions.Types.Priority.Unspecified), It.IsAny <CallSettings>()), Times.Exactly(2)); spannerClientMock.Verify(client => client.CommitAsync( It.Is <CommitRequest>(request => request.RequestOptions.Priority == PriorityConverter.ToProto(priority)), It.IsAny <CallSettings>()), Times.Exactly(2)); }
public void CommitIncludesPriority() { var commitPriority = Priority.Medium; var commandPriority = Priority.High; Mock <SpannerClient> spannerClientMock = SpannerClientHelpers .CreateMockClient(Logger.DefaultLogger, MockBehavior.Strict); spannerClientMock .SetupBatchCreateSessionsAsync() .SetupBeginTransactionAsync() .SetupExecuteStreamingSql() .SetupCommitAsync(); SpannerConnection connection = BuildSpannerConnection(spannerClientMock); SpannerTransaction transaction = connection.BeginTransaction(); transaction.CommitPriority = commitPriority; var command = connection.CreateSelectCommand("SELECT * FROM FOO"); command.Transaction = transaction; command.Priority = commandPriority; using (var reader = command.ExecuteReader()) { Assert.True(reader.HasRows); } transaction.Commit(); spannerClientMock.Verify(client => client.ExecuteStreamingSql( It.Is <ExecuteSqlRequest>(request => request.RequestOptions.Priority == PriorityConverter.ToProto(commandPriority)), It.IsAny <CallSettings>()), Times.Once()); spannerClientMock.Verify(client => client.CommitAsync( It.Is <CommitRequest>(request => request.RequestOptions.Priority == PriorityConverter.ToProto(commitPriority)), It.IsAny <CallSettings>()), Times.Once()); }
public void CommitPriorityCanBeSetAfterCommandExecution() { var priority = Priority.Medium; Mock <SpannerClient> spannerClientMock = SpannerClientHelpers .CreateMockClient(Logger.DefaultLogger, MockBehavior.Strict); spannerClientMock .SetupBatchCreateSessionsAsync() .SetupBeginTransactionAsync() .SetupExecuteStreamingSql() .SetupCommitAsync(); SpannerConnection connection = BuildSpannerConnection(spannerClientMock); SpannerTransaction transaction = connection.BeginTransaction(); // Execute a command on the transaction. var command = connection.CreateSelectCommand("SELECT * FROM FOO"); command.Transaction = transaction; using (var reader = command.ExecuteReader()) { Assert.True(reader.HasRows); } // Verify that we can set the commit priority after a command has been executed. transaction.CommitPriority = priority; transaction.Commit(); spannerClientMock.Verify(client => client.CommitAsync( It.Is <CommitRequest>(request => request.RequestOptions.Priority == PriorityConverter.ToProto(priority)), It.IsAny <CallSettings>()), Times.Once()); }
public void CommandIncludesPriority() { var priority = Priority.High; Mock <SpannerClient> spannerClientMock = SpannerClientHelpers .CreateMockClient(Logger.DefaultLogger, MockBehavior.Strict); spannerClientMock .SetupBatchCreateSessionsAsync() .SetupBeginTransactionAsync() .SetupExecuteBatchDmlAsync() .SetupCommitAsync(); SpannerConnection connection = SpannerCommandTests.BuildSpannerConnection(spannerClientMock); SpannerTransaction transaction = connection.BeginTransaction(); var command = transaction.CreateBatchDmlCommand(); command.Add("UPDATE FOO SET BAR=1 WHERE TRUE"); command.Priority = priority; command.ExecuteNonQuery(); transaction.Commit(); spannerClientMock.Verify(client => client.ExecuteBatchDmlAsync( It.Is <ExecuteBatchDmlRequest>(request => request.RequestOptions.Priority == PriorityConverter.ToProto(priority)), It.IsAny <CallSettings>()), Times.Once()); }