Skip to content

Commit ea5c314

Browse files
committed
Set storage node right on session creation
1 parent b5d188a commit ea5c314

2 files changed

Lines changed: 16 additions & 12 deletions

File tree

Orm/Xtensive.Orm/Orm/Domain.cs

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -231,33 +231,34 @@ public Session OpenSession(SessionConfiguration configuration)
231231
{
232232
ArgumentValidator.EnsureArgumentNotNull(configuration, "configuration");
233233

234-
return OpenSession(configuration, configuration.Supports(SessionOptions.AutoActivation));
234+
return OpenSessionInternal(configuration,
235+
null,
236+
configuration.Supports(SessionOptions.AutoActivation));
235237
}
236238

237-
internal Session OpenSession(SessionConfiguration configuration, bool activate)
239+
internal Session OpenSessionInternal(SessionConfiguration configuration, StorageNode storageNode, bool activate)
238240
{
239-
ArgumentValidator.EnsureArgumentNotNull(configuration, "configuration");
241+
ArgumentValidator.EnsureArgumentNotNull(configuration, nameof(configuration));
240242
configuration.Lock(true);
241243

242244
if (isDebugEventLoggingEnabled) {
243245
OrmLog.Debug(Strings.LogOpeningSessionX, configuration);
244246
}
245247

246248
Session session;
247-
248249
if (SingleConnection!=null) {
249250
// Ensure that we check shared connection availability
250251
// and acquire connection atomically.
251252
lock (singleConnectionGuard) {
252253
if (singleConnectionOwner!=null)
253254
throw new InvalidOperationException(string.Format(
254255
Strings.ExSessionXStillUsesSingleAvailableConnection, singleConnectionOwner));
255-
session = new Session(this, configuration, activate);
256+
session = new Session(this, storageNode, configuration, activate);
256257
singleConnectionOwner = session;
257258
}
258259
}
259260
else
260-
session = new Session(this, configuration, activate);
261+
session = new Session(this, storageNode, configuration, activate);
261262

262263
NotifySessionOpen(session);
263264
return session;
@@ -372,12 +373,14 @@ public Task<Session> OpenSessionAsync(SessionConfiguration configuration)
372373
/// <seealso cref="Session"/>
373374
public Task<Session> OpenSessionAsync(SessionConfiguration configuration, CancellationToken cancellationToken)
374375
{
375-
return OpenSessionInternalAsync(configuration, configuration.Supports(SessionOptions.AutoActivation), cancellationToken);
376+
return OpenSessionInternalAsync(configuration, null,
377+
configuration.Supports(SessionOptions.AutoActivation), cancellationToken);
376378
}
377379

378-
internal async Task<Session> OpenSessionInternalAsync(SessionConfiguration configuration, bool activate, CancellationToken cancellationToken)
380+
internal async Task<Session> OpenSessionInternalAsync(SessionConfiguration configuration, StorageNode storageNode, bool activate, CancellationToken cancellationToken)
379381
{
380-
ArgumentValidator.EnsureArgumentNotNull(configuration, "configuration");
382+
ArgumentValidator.EnsureArgumentNotNull(configuration, nameof(configuration));
383+
381384
configuration.Lock(true);
382385

383386
if (isDebugEventLoggingEnabled) {
@@ -392,15 +395,15 @@ internal async Task<Session> OpenSessionInternalAsync(SessionConfiguration confi
392395
if (singleConnectionOwner!=null)
393396
throw new InvalidOperationException(string.Format(
394397
Strings.ExSessionXStillUsesSingleAvailableConnection, singleConnectionOwner));
395-
session = new Session(this, configuration, false);
398+
session = new Session(this, storageNode, configuration, false);
396399
singleConnectionOwner = session;
397400
}
398401
}
399402
else {
400403
// DO NOT make session active right from constructor.
401404
// That would make session accessible for user before
402405
// connection become opened.
403-
session = new Session(this, configuration, false);
406+
session = new Session(this, storageNode, configuration, false);
404407
try {
405408
await ((SqlSessionHandler)session.Handler).OpenConnectionAsync(cancellationToken).ContinueWith((t) => {
406409
if (activate)

Orm/Xtensive.Orm/Orm/Session.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -506,7 +506,7 @@ private SessionHandler CreateSessionHandler()
506506

507507
// Constructors
508508

509-
internal Session(Domain domain, SessionConfiguration configuration, bool activate)
509+
internal Session(Domain domain, StorageNode selectedStorageNode, SessionConfiguration configuration, bool activate)
510510
: base(domain)
511511
{
512512
Guid = Guid.NewGuid();
@@ -519,6 +519,7 @@ internal Session(Domain domain, SessionConfiguration configuration, bool activat
519519
identifier = Interlocked.Increment(ref lastUsedIdentifier);
520520
CommandTimeout = configuration.DefaultCommandTimeout;
521521
allowSwitching = configuration.Supports(SessionOptions.AllowSwitching);
522+
storageNode = selectedStorageNode;
522523

523524
// Handlers
524525
Handlers = domain.Handlers;

0 commit comments

Comments
 (0)