public sealed class PooledSession : IDisposable
Reference documentation and code samples for the Google Cloud Spanner v1 API class PooledSession.
A session from a SessionPool, with an associated transaction if requested. Instances must be released back to the pool via ReleaseToPool(bool).
Implements
IDisposableNamespace
Google.Cloud.Spanner.V1Assembly
Google.Cloud.Spanner.V1.dll
Remarks
Each method in this class modifies requests passed as arguments to RPC methods, to populate the session and transaction properties.
This class keeps track of successful RPCs to update its internal refresh timer. This can't be applied for streaming SQL calls, as ReliableStreamReader performs the actual RPCs in that case.
Properties
IsDetached
public bool IsDetached { get; }
Whether this session is detached from the session pool or not.
Property Value | |
---|---|
Type | Description |
bool |
Detached sessions are used for transactional operations performed across several processes, for instance, partitioned reads. See the ReleaseToPool(bool) documentation for information on how to release resources of a detached session gracefully.
ReadTimestamp
public Timestamp ReadTimestamp { get; }
The read timestamp of the transaction. May be null.
Property Value | |
---|---|
Type | Description |
Timestamp |
Will be set iif a transaction has been started and TransactionOptions represents read-only options with ReturnReadTimestamp set to true or if this session was created using CreateDetachedSession(SessionName, ByteString, ModeOneofCase, Timestamp) and a value was provided for the Timestamp parameter.
SessionName
public SessionName SessionName { get; }
The name of the session. This is never null.
Property Value | |
---|---|
Type | Description |
SessionName |
TransactionId
public ByteString TransactionId { get; }
The ID of the transaction. May be null.
Property Value | |
---|---|
Type | Description |
ByteString |
Transactions are acquired when they are needed so this will be null in the following cases:
- TransactionOptions is None, including when the session is idle in the pool.
- SingleUseTransaction is true. No transactions will exist client side.
- The session has been acquired from the pool with some transaction options but no command execution has been attempted since.
- The first command execution is underway and the transaction is being created either by inlining or explicitly.
Methods
CommitAsync(CommitRequest, CallSettings)
public Task<CommitResponse> CommitAsync(CommitRequest request, CallSettings callSettings)
Executes a Commit RPC asynchronously.
Parameters | |
---|---|
Name | Description |
request |
CommitRequest The commit request. Must not be null. The request will be modified with session and transaction details from this object. |
callSettings |
CallSettings If not null, applies overrides to this RPC call. |
Returns | |
---|---|
Type | Description |
TaskCommitResponse |
A task representing the asynchronous operation. When the task completes, the result is the response from the RPC. |
Dispose()
public void Dispose()
Releases this session back to the session pool. This method should only be called once per instance; subsequent calls are ignored. No other methods can be called after this.
This method is equivalent to calling ReleaseToPool(bool) with an argument of false
.
ExecuteBatchDmlAsync(ExecuteBatchDmlRequest, CallSettings)
public Task<ExecuteBatchDmlResponse> ExecuteBatchDmlAsync(ExecuteBatchDmlRequest request, CallSettings callSettings)
Executes an ExecuteBatchDml RPC asynchronously.
Parameters | |
---|---|
Name | Description |
request |
ExecuteBatchDmlRequest The query request. Must not be null. The request will be modified with session and transaction details from this object. If this object's TransactionId is null, the request's transaction is not modified. |
callSettings |
CallSettings If not null, applies overrides to this RPC call. |
Returns | |
---|---|
Type | Description |
TaskExecuteBatchDmlResponse |
A task representing the asynchronous operation. When the task completes, the result is the response from the RPC. |
ExecuteSqlAsync(ExecuteSqlRequest, CallSettings)
public Task<ResultSet> ExecuteSqlAsync(ExecuteSqlRequest request, CallSettings callSettings)
Executes an ExecuteSql RPC asynchronously.
Parameters | |
---|---|
Name | Description |
request |
ExecuteSqlRequest The query request. Must not be null. Will be modified to include session information from this pooled session. May be modified to include transaction and directed read options information from this pooled session and its underlying SpannerClient. |
callSettings |
CallSettings If not null, applies overrides to this RPC call. |
Returns | |
---|---|
Type | Description |
TaskResultSet |
A task representing the asynchronous operation. When the task completes, the result is the response from the RPC. |
ExecuteSqlStreamReader(ExecuteSqlRequest, CallSettings)
public ReliableStreamReader ExecuteSqlStreamReader(ExecuteSqlRequest request, CallSettings callSettings)
Creates a ReliableStreamReader for the given request.
Parameters | |
---|---|
Name | Description |
request |
ExecuteSqlRequest The query request. Must not be null. Will be modified to include session information from this pooled session. May be modified to include transaction and directed read options information from this pooled session and its underlying SpannerClient. |
callSettings |
CallSettings If not null, applies overrides to this RPC call. |
Returns | |
---|---|
Type | Description |
ReliableStreamReader |
A ReliableStreamReader for the streaming SQL request. |
PartitionQueryAsync(PartitionQueryRequest, CallSettings)
public Task<PartitionResponse> PartitionQueryAsync(PartitionQueryRequest request, CallSettings callSettings)
Executes a PartitionQuery RPC asynchronously.
Parameters | |
---|---|
Name | Description |
request |
PartitionQueryRequest The partitioning request. Must not be null. The request will be modified with session details from this object. |
callSettings |
CallSettings If not null, applies overrides to this RPC call. |
Returns | |
---|---|
Type | Description |
TaskPartitionResponse |
A task representing the asynchronous operation. When the task completes, the result is the response from the RPC. |
PartitionReadAsync(PartitionReadRequest, CallSettings)
public Task<PartitionResponse> PartitionReadAsync(PartitionReadRequest request, CallSettings callSettings)
Executes a PartitionRead RPC asynchronously.
Parameters | |
---|---|
Name | Description |
request |
PartitionReadRequest The partitioning request. Must not be null. The request will be modified with session details from this object. |
callSettings |
CallSettings If not null, applies overrides to this RPC call. |
Returns | |
---|---|
Type | Description |
TaskPartitionResponse |
A task representing the asynchronous operation. When the task completes, the result is the response from the RPC. |
ReadStreamReader(ReadRequest, CallSettings)
public ReliableStreamReader ReadStreamReader(ReadRequest request, CallSettings callSettings)
Creates a ReliableStreamReader for the given request.
Parameters | |
---|---|
Name | Description |
request |
ReadRequest The read request. Must not be null. Will be modified to include session information from this pooled session. May be modified to include transaction and directed read options information from this pooled session and its underlying SpannerClient. |
callSettings |
CallSettings If not null, applies overrides to this RPC call. |
Returns | |
---|---|
Type | Description |
ReliableStreamReader |
A ReliableStreamReader for the streaming SQL request. |
RefreshedOrNewAsync(CancellationToken)
public Task<PooledSession> RefreshedOrNewAsync(CancellationToken cancellationToken)
Always returns a new instance of PooledSession. The new instance can:
- represent the same session as this one, with the same transaction options, but it won't have a transaction associated to it
- represent an entirely different session with the same transaction options as this PooledSession did and no transaction associated to it If this session has expired then this method will acquire a new session in the normal way. This PooledSession instance will be disposed of to ensure that all operations with the underlying session are done through the new instance.
Parameter | |
---|---|
Name | Description |
cancellationToken |
CancellationToken |
Returns | |
---|---|
Type | Description |
TaskPooledSession |
Use this method when executing operations that are best done using the same session. For instance, when retrying aborted commits it is better if the transaction work and commit are retried with the same session, because after each abort the sessions' lock priority increments.
ReleaseToPool(bool)
public void ReleaseToPool(bool forceDelete)
Returns this session to the session pool from which it was acquired, unless this is a detached session or it has become invalid. This method should only be called once per instance; subsequent calls are ignored. No other methods can be called after this.
Parameter | |
---|---|
Name | Description |
forceDelete |
bool true to force the session to be deleted; false to allow the session to be reused. |
If IsDetached is true, the session won't be returned to the pool because its underlying
resources may be being used by other processes. The last process to use this session's underlying resources should
call ReleaseToPool(bool) with forceDelete
set to true, so that the session resources
are gracefully freed.
RollbackAsync(RollbackRequest, CallSettings)
public Task RollbackAsync(RollbackRequest request, CallSettings callSettings)
Executes a Rollback RPC asynchronously.
Parameters | |
---|---|
Name | Description |
request |
RollbackRequest The rollback request. Must not be null. The request will be modified with session and transaction details from this object. |
callSettings |
CallSettings If not null, applies overrides to this RPC call. |
Returns | |
---|---|
Type | Description |
Task |
A task representing the asynchronous operation. |