Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
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
2 changes: 2 additions & 0 deletions src/Ydb.Sdk/src/Ado/Session/ISession.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ namespace Ydb.Sdk.Ado.Session;

internal interface ISession
{
bool IsBroken { get; }

ValueTask<IServerStream<ExecuteQueryResponsePart>> ExecuteQuery(
string query,
Dictionary<string, YdbValue> parameters,
Expand Down
2 changes: 1 addition & 1 deletion src/Ydb.Sdk/src/Ado/Session/ISessionSource.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ namespace Ydb.Sdk.Ado.Session;

internal interface ISessionSource<TSession> where TSession : ISession
{
ValueTask<TSession> OpenSession();
ValueTask<TSession> OpenSession(CancellationToken cancellationToken = default);

void Return(TSession session);
}
2 changes: 2 additions & 0 deletions src/Ydb.Sdk/src/Ado/Session/ImplicitSession.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ public ImplicitSession(IDriver driver)
_driver = driver;
}

public bool IsBroken => false;

public ValueTask<IServerStream<ExecuteQueryResponsePart>> ExecuteQuery(
string query,
Dictionary<string, YdbValue> parameters,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

namespace Ydb.Sdk.Ado.Session;

internal class Session : IPoolingSession
internal class PoolingSession : IPoolingSession
{
private const string SessionBalancer = "session-balancer";

Expand All @@ -18,20 +18,20 @@ internal class Session : IPoolingSession
private readonly IDriver _driver;
private readonly PoolingSessionSource _poolingSessionSource;
private readonly YdbConnectionStringBuilder _settings;
private readonly ILogger<Session> _logger;
private readonly ILogger<PoolingSession> _logger;

private volatile bool _isActive;
private volatile bool _isBroken;

private string SessionId { get; set; } = string.Empty;
private long NodeId { get; set; }

public bool IsActive => _isActive;
public bool IsBroken => _isBroken;

internal Session(
internal PoolingSession(
IDriver driver,
PoolingSessionSource poolingSessionSource,
YdbConnectionStringBuilder settings,
ILogger<Session> logger
ILogger<PoolingSession> logger
)
{
_driver = driver;
Expand Down Expand Up @@ -109,7 +109,7 @@ StatusCode.Unavailable or
{
_logger.LogWarning("Session[{SessionId}] is deactivated. Reason StatusCode: {Code}", SessionId, code);

_isActive = false;
_isBroken = true;
}
}

Expand Down Expand Up @@ -176,7 +176,7 @@ public async Task Open(CancellationToken cancellationToken)

OnNotSuccessStatusCode(statusCode);

if (!IsActive)
if (IsBroken)
{
return;
}
Expand Down Expand Up @@ -204,7 +204,7 @@ public async Task Open(CancellationToken cancellationToken)
}
finally
{
_isActive = false;
_isBroken = true;
}
}, cancellationToken);

Expand All @@ -215,7 +215,12 @@ public async Task DeleteSession()
{
try
{
_isActive = false;
if (_isBroken)
{
return;
}

_isBroken = true;

var deleteSessionResponse = await _driver.UnaryCall(
QueryService.DeleteSessionMethod,
Expand Down
20 changes: 20 additions & 0 deletions src/Ydb.Sdk/src/Ado/Session/PoolingSessionFactory.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
using Microsoft.Extensions.Logging;

namespace Ydb.Sdk.Ado.Session;

internal class PoolingSessionFactory : IPoolingSessionFactory
{
private readonly IDriver _driver;
private readonly YdbConnectionStringBuilder _settings;
private readonly ILogger<PoolingSession> _logger;

public PoolingSessionFactory(IDriver driver, YdbConnectionStringBuilder settings, ILogger<PoolingSession> logger)
{
_driver = driver;
_settings = settings;
_logger = logger;
}

public IPoolingSession NewSession(PoolingSessionSource source) =>
new PoolingSession(_driver, source, _settings, _logger);
}
Loading
Loading