Skip to content

Commit 3eed4d9

Browse files
committed
Merge remote-tracking branch 'origin/6.0'
# Conflicts: # Orm/Xtensive.Orm.Tests/Storage/Multinode/DynamicTypeIdTest.cs # Orm/Xtensive.Orm.Tests/Storage/Multinode/QueryCachingTest.cs # Orm/Xtensive.Orm/Orm/Building/Builders/DomainBuilder.cs # Orm/Xtensive.Orm/Orm/Domain.cs # Orm/Xtensive.Orm/Orm/Providers/StorageDriver.Operations.cs # Orm/Xtensive.Orm/Orm/Session.cs # Orm/Xtensive.Orm/Orm/StorageNodeManager.cs # Orm/Xtensive.Orm/Strings.resx
2 parents 1ca7dfc + b804469 commit 3eed4d9

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+2861
-2176
lines changed

ChangeLog/6.0.4_Z_Final.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
[main] Session.SelectStorageNode() marked as obsolete
2+
[main] Removed obsolete static Session.Open() methods
3+
[main] Domain.OpenSessionAsync() methods can only open a session to default storage node now
4+
[main] Introduced StorageNode.OpenSession() and StorageNode.OpenSessionAsync() method sets to open sessions to the node
5+
[main] Fixed issue when DirectPersistentAccessor.SetReferenceKey() was unable to set reference for saved Entities

Extensions/Xtensive.Orm.Localization.Tests/MultipleNodesTest.cs

Lines changed: 136 additions & 152 deletions
Large diffs are not rendered by default.

Orm/Xtensive.Orm.Tests/Issues/IssueJira0614_TypeMappingCachingInMaterializationContext.cs

Lines changed: 37 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
using System;
1+
// Copyright (C) 2015-2020 Xtensive LLC.
2+
// This code is distributed under MIT license terms.
3+
// See the License.txt file in the project root for more information.
4+
5+
using System;
26
using System.Diagnostics;
37
using System.Collections.Generic;
48
using System.Linq;
@@ -189,20 +193,22 @@ public class IssueJira0614_MaterializationContextModel
189193
{
190194
private const string Node2Name = "Node2";
191195
private const string Node1Name = "Node1";
192-
private const string ErrorInTestFixtureSetup = "Error in Text fixture setup {0}";
196+
197+
[OneTimeSetUp]
198+
public void TestFixtureSetUp() => Require.ProviderIs(StorageProvider.SqlServer);
193199

194200
[Test]
195201
public void Test01()
196202
{
197-
var configuration1 = CreateConfiguration(typeof (Node1.TimesheetCode), DomainUpgradeMode.Recreate, "Model1");
198-
var configuration2 = CreateConfiguration(typeof (Node2.TimesheetCode), DomainUpgradeMode.Recreate, "Model2");
203+
var configuration1 = CreateConfiguration(typeof(Node1.TimesheetCode), DomainUpgradeMode.Recreate, "Model1");
204+
var configuration2 = CreateConfiguration(typeof(Node2.TimesheetCode), DomainUpgradeMode.Recreate, "Model2");
199205

200206
using (var domain = BuildDomain(configuration1)) {
201-
Assert.That(domain.Model.Types[typeof (Node1.TimesheetCode)].TypeId, Is.EqualTo(288));
207+
Assert.That(domain.Model.Types[typeof(Node1.TimesheetCode)].TypeId, Is.EqualTo(288));
202208
using (var session = domain.OpenSession())
203209
using (var transaction = session.OpenTransaction()) {
204210
for (var i = 0; i < 10; i++) {
205-
new Node1.TimesheetCode(session) {
211+
_ = new Node1.TimesheetCode(session) {
206212
Active = i % 2==0,
207213
Code = "jdfgdj" + i,
208214
Description = "dfjghjdhfgjhsjkhgjdfg",
@@ -232,7 +238,7 @@ public void Test01()
232238
using (var session = domain.OpenSession())
233239
using (var transaction = session.OpenTransaction()) {
234240
for (var i = 0; i < 10; i++) {
235-
new Node2.TimesheetCode(session) {
241+
_ = new Node2.TimesheetCode(session) {
236242
Active = i % 2 == 0,
237243
Code = "jdfgdj" + i,
238244
Description = "dfjghjdhfgjhsjkhgjdfg",
@@ -257,12 +263,11 @@ public void Test01()
257263
}
258264
}
259265

260-
var multinodeDomainConfiguration = CreateConfiguration(typeof (Target.TimesheetCode), DomainUpgradeMode.Skip, "Model1");
266+
var multinodeDomainConfiguration = CreateConfiguration(typeof(Target.TimesheetCode), DomainUpgradeMode.Skip, "Model1");
261267
var nodeConfiguration = CreateNodeConfiguration(Node2Name, "Model1", "Model2", DomainUpgradeMode.Skip);
262-
using (var domain = BuildDomain(multinodeDomainConfiguration)) {
263-
domain.StorageNodeManager.AddNode(nodeConfiguration);
268+
269+
using (var domain = BuildDomain(multinodeDomainConfiguration, nodeConfiguration)) {
264270
using (var session = domain.OpenSession()) {
265-
session.SelectStorageNode(WellKnown.DefaultNodeId);
266271
using (var transaction = session.OpenTransaction()) {
267272
var list = session.Query.All<Target.TimesheetCode>()
268273
.Where(c => c.Active)
@@ -288,19 +293,17 @@ public void Test01()
288293
}
289294
}
290295

291-
using (var session = domain.OpenSession()) {
292-
session.SelectStorageNode(Node2Name);
293-
using (var transaction = session.OpenTransaction()) {
294-
295-
var list = session.Query.All<Target.TimesheetCode>()
296-
.Where(c => c.Active)
297-
.OrderBy(c => c.Code)
298-
.AsEnumerable()
299-
.Select(c => new {
300-
Value = c.Code,
301-
Name = c.Code
302-
}).ToList();
303-
}
296+
var selectedNode = domain.StorageNodeManager.GetNode(Node2Name);
297+
using (var session = selectedNode.OpenSession())
298+
using (var transaction = session.OpenTransaction()) {
299+
var list = session.Query.All<Target.TimesheetCode>()
300+
.Where(c => c.Active)
301+
.OrderBy(c => c.Code)
302+
.AsEnumerable()
303+
.Select(c => new {
304+
Value = c.Code,
305+
Name = c.Code
306+
}).ToList();
304307
}
305308
}
306309
}
@@ -316,7 +319,7 @@ public void Test02()
316319
using (var session = domain.OpenSession())
317320
using (var transaction = session.OpenTransaction()) {
318321
for (var i = 0; i < 10; i++) {
319-
new Node1.TimesheetCode(session) {
322+
_ = new Node1.TimesheetCode(session) {
320323
Active = i % 2 == 0,
321324
Code = "jdfgdj" + i,
322325
Description = "dfjghjdhfgjhsjkhgjdfg",
@@ -347,7 +350,7 @@ public void Test02()
347350
using (var session = domain.OpenSession())
348351
using (var transaction = session.OpenTransaction()) {
349352
for (var i = 0; i < 10; i++) {
350-
new Node2.TimesheetCode(session) {
353+
_ = new Node2.TimesheetCode(session) {
351354
Active = i % 2 == 0,
352355
Code = "jdfgdj" + i,
353356
Description = "dfjghjdhfgjhsjkhgjdfg",
@@ -364,8 +367,7 @@ public void Test02()
364367
.Where(c => c.Active)
365368
.OrderBy(c => c.Code)
366369
.AsEnumerable()
367-
.Select(c => new
368-
{
370+
.Select(c => new {
369371
Value = c.Code,
370372
Name = c.Code
371373
}).ToList();
@@ -375,45 +377,42 @@ public void Test02()
375377

376378
var multinodeDomainConfiguration = CreateConfiguration(typeof(Target.TimesheetCode), DomainUpgradeMode.PerformSafely, "Model2");
377379
var nodeConfiguration = CreateNodeConfiguration(Node1Name, "Model2", "Model1", DomainUpgradeMode.PerformSafely);
380+
378381
using (var domain = BuildDomain(multinodeDomainConfiguration, nodeConfiguration)) {
379382
using (var session = domain.OpenSession()) {
380-
session.SelectStorageNode(WellKnown.DefaultNodeId);
381383
using (var transaction = session.OpenTransaction()) {
382384
var list = session.Query.All<Target.TimesheetCode>()
383385
.Where(c => c.Active)
384386
.OrderBy(c => c.Code)
385387
.AsEnumerable()
386-
.Select(c => new
387-
{
388+
.Select(c => new {
388389
Value = c.Code,
389390
Name = c.Code
390391
}).ToList();
391392
Assert.That(list.Count, Is.EqualTo(5));
392393
}
394+
393395
using (var transaction = session.OpenTransaction()) {
394396
var list = session.Query.All<Target.TimesheetCode>()
395397
.Where(c => c.Active)
396398
.OrderBy(c => c.Code)
397399
.AsEnumerable()
398-
.Select(c => new
399-
{
400+
.Select(c => new {
400401
Value = c.Code,
401402
Name = c.Code
402403
}).ToList();
403404
Assert.That(list.Count, Is.EqualTo(5));
404405
}
405406
}
406407

407-
using (var session = domain.OpenSession()) {
408-
session.SelectStorageNode(Node1Name);
408+
var selectedNode = domain.StorageNodeManager.GetNode(Node1Name);
409+
using (var session = selectedNode.OpenSession()) {
409410
using (var transaction = session.OpenTransaction()) {
410-
411411
var list = session.Query.All<Target.TimesheetCode>()
412412
.Where(c => c.Active)
413413
.OrderBy(c => c.Code)
414414
.AsEnumerable()
415-
.Select(c => new
416-
{
415+
.Select(c => new {
417416
Value = c.Code,
418417
Name = c.Code
419418
}).ToList();
@@ -432,12 +431,6 @@ public void Test02()
432431
}
433432
}
434433

435-
private void CheckRequirements()
436-
{
437-
Require.AllFeaturesSupported(ProviderFeatures.Multischema);
438-
Require.ProviderIs(StorageProvider.SqlServer);
439-
}
440-
441434
private Domain BuildDomain(DomainConfiguration configuration, NodeConfiguration nodeConfiguration = null)
442435
{
443436
try{
@@ -469,25 +462,5 @@ private NodeConfiguration CreateNodeConfiguration(string nodeId, string oldSchem
469462
configuration.UpgradeMode = upgradeMode;
470463
return configuration;
471464
}
472-
473-
[OneTimeSetUp]
474-
public void TestFixtureSetUp()
475-
{
476-
try {
477-
CheckRequirements();
478-
}
479-
catch (IgnoreException) {
480-
throw;
481-
}
482-
catch (Exception e) {
483-
Debug.WriteLine(ErrorInTestFixtureSetup, e);
484-
throw;
485-
}
486-
}
487-
488-
[OneTimeTearDown]
489-
public void TestFixtureTearDown()
490-
{
491-
}
492465
}
493466
}

Orm/Xtensive.Orm.Tests/Issues/IssueJira0647_StoredDomainModelMappingsUpdateBug.cs

Lines changed: 34 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
// Copyright (C) 2016 Xtensive LLC.
2-
// All rights reserved.
3-
// For conditions of distribution and use, see license.
1+
// Copyright (C) 2016-2020 Xtensive LLC.
2+
// This code is distributed under MIT license terms.
3+
// See the License.txt file in the project root for more information.
44
// Created by: Alexey Kulakov
55
// Created: 2016.04.16
66

@@ -400,8 +400,8 @@ public void MainTest()
400400
using (var domain = Domain.Build(configuration)) {
401401
Assert.That(domain.Configuration.IsMultischema, Is.EqualTo(true));
402402
Assert.That(domain.Configuration.IsMultidatabase, Is.EqualTo(false));
403-
domain.StorageNodeManager.AddNode(BuildNodeConfiguration(domain.Configuration, alpha, DomainUpgradeMode.Recreate));
404-
domain.StorageNodeManager.AddNode(BuildNodeConfiguration(domain.Configuration, beta, DomainUpgradeMode.Recreate));
403+
_ = domain.StorageNodeManager.AddNode(BuildNodeConfiguration(domain.Configuration, alpha, DomainUpgradeMode.Recreate));
404+
_ = domain.StorageNodeManager.AddNode(BuildNodeConfiguration(domain.Configuration, beta, DomainUpgradeMode.Recreate));
405405

406406
CheckNode(domain, alpha.Name, false);
407407
CheckNode(domain, beta.Name, true);
@@ -461,18 +461,17 @@ private void BuildBaseVersion()
461461
{
462462
var configuration = BuildConfiguration(main, DomainUpgradeMode.Recreate, typeof (ModelNamespace.HintTest.BaseVersion.Customer));
463463
using (var domain = Domain.Build(configuration)) {
464-
domain.StorageNodeManager.AddNode(BuildNodeConfiguration(domain.Configuration, alpha, DomainUpgradeMode.Recreate));
465-
domain.StorageNodeManager.AddNode(BuildNodeConfiguration(domain.Configuration, beta, DomainUpgradeMode.Recreate));
466-
467-
using (var session = domain.OpenSession()) {
468-
session.SelectStorageNode(alpha.Name);
469-
using (var tx = session.OpenTransaction()) {
470-
new ModelNamespace.HintTest.BaseVersion.Customer { Name = "CustomerName" };
471-
new ModelNamespace.HintTest.BaseVersion.Customer { Name = "Groznov" };
472-
new ModelNamespace.HintTest.BaseVersion.Order { Number = 99, Text = "Test order number 99" };
473-
new ModelNamespace.HintTest.BaseVersion.Order { Number = 1, Text = "Test order number 1" };
474-
tx.Complete();
475-
}
464+
_ = domain.StorageNodeManager.AddNode(BuildNodeConfiguration(domain.Configuration, alpha, DomainUpgradeMode.Recreate));
465+
_ = domain.StorageNodeManager.AddNode(BuildNodeConfiguration(domain.Configuration, beta, DomainUpgradeMode.Recreate));
466+
467+
var selectedNode = domain.StorageNodeManager.GetNode(alpha.Name);
468+
using (var session = selectedNode.OpenSession())
469+
using (var tx = session.OpenTransaction()) {
470+
_ = new ModelNamespace.HintTest.BaseVersion.Customer { Name = "CustomerName" };
471+
_ = new ModelNamespace.HintTest.BaseVersion.Customer { Name = "Groznov" };
472+
_ = new ModelNamespace.HintTest.BaseVersion.Order { Number = 99, Text = "Test order number 99" };
473+
_ = new ModelNamespace.HintTest.BaseVersion.Order { Number = 1, Text = "Test order number 1" };
474+
tx.Complete();
476475
}
477476
}
478477
}
@@ -481,8 +480,8 @@ private void BuildUpgradedVersion(Type type)
481480
{
482481
var configuration = BuildConfiguration(main, DomainUpgradeMode.PerformSafely, type);
483482
using (var domain = Domain.Build(configuration)) {
484-
domain.StorageNodeManager.AddNode(BuildNodeConfiguration(domain.Configuration, alpha, DomainUpgradeMode.PerformSafely));
485-
domain.StorageNodeManager.AddNode(BuildNodeConfiguration(domain.Configuration, beta, DomainUpgradeMode.PerformSafely));
483+
_ = domain.StorageNodeManager.AddNode(BuildNodeConfiguration(domain.Configuration, alpha, DomainUpgradeMode.PerformSafely));
484+
_ = domain.StorageNodeManager.AddNode(BuildNodeConfiguration(domain.Configuration, beta, DomainUpgradeMode.PerformSafely));
486485
}
487486
}
488487

@@ -500,12 +499,17 @@ private void CheckNode(Domain domain, string nodeName, bool spoiledExpected)
500499
currentModel.UpdateReferences();
501500
currentModel.UpdateMappings(node.Configuration); //this operation suppose to be performed by DataObjects internally
502501

503-
foreach (var typeInfo in currentModel.Types.Where(t => !t.IsSystem))
502+
foreach (var typeInfo in currentModel.Types.Where(t => !t.IsSystem)) {
504503
Assert.AreEqual(typeInfo.MappingSchema, expectedSchema);
504+
}
505+
506+
var func = spoiledExpected
507+
? new Action<string, string>(Assert.AreNotEqual)
508+
: new Action<string, string>(Assert.AreEqual);
505509

506-
var func = spoiledExpected ? new Action<string, string>(Assert.AreNotEqual) : new Action<string, string>(Assert.AreEqual);
507-
foreach (var typeInfo in spoiledModel.Types.Where(t => !t.IsSystem))
510+
foreach (var typeInfo in spoiledModel.Types.Where(t => !t.IsSystem)) {
508511
func(typeInfo.MappingSchema, expectedSchema);
512+
}
509513
}
510514

511515
private NodeConfiguration BuildNodeConfiguration(DomainConfiguration domainConfiguration, ClientNodeConfiguration nodeConfiguration, DomainUpgradeMode upgradeMode)
@@ -514,8 +518,10 @@ private NodeConfiguration BuildNodeConfiguration(DomainConfiguration domainConfi
514518
node.ConnectionInfo = nodeConfiguration.ConnectionInfo;
515519
node.ConnectionInitializationSql = nodeConfiguration.InitializationSql;
516520
node.UpgradeMode = upgradeMode;
517-
if (!domainConfiguration.DefaultSchema.IsNullOrEmpty() && !nodeConfiguration.DefaultSchema.IsNullOrEmpty())
521+
if (!domainConfiguration.DefaultSchema.IsNullOrEmpty() && !nodeConfiguration.DefaultSchema.IsNullOrEmpty()) {
518522
node.SchemaMapping.Add(domainConfiguration.DefaultSchema, nodeConfiguration.DefaultSchema);
523+
}
524+
519525
return node;
520526
}
521527

@@ -556,8 +562,9 @@ private void BuildNodeConfigurationsMetadata()
556562

557563
private ConnectionInfo ComposeConnectionToMasterDatabase(ConnectionInfo baseConnectionInfo)
558564
{
559-
if (baseConnectionInfo.ConnectionUrl==null)
565+
if (baseConnectionInfo.ConnectionUrl==null) {
560566
throw new InvalidOperationException("Can't convert connection string based ConnectionInfo");
567+
}
561568

562569
var provider = baseConnectionInfo.ConnectionUrl.Protocol;
563570
var user = baseConnectionInfo.ConnectionUrl.User;
@@ -567,21 +574,21 @@ private ConnectionInfo ComposeConnectionToMasterDatabase(ConnectionInfo baseConn
567574
var database = "master";
568575
var parameters = baseConnectionInfo.ConnectionUrl.Params;
569576

570-
string urlTemplate = "{0}://{1}{2}{3}/{4}{5}";
577+
var urlTemplate = "{0}://{1}{2}{3}/{4}{5}";
571578
var authenticationPartTemplate = "{0}:{1}@";
572579

573580
var authentication = user.IsNullOrEmpty()
574581
? string.Empty
575582
: string.Format(authenticationPartTemplate, user, password);
576583

577-
var portPart = port==0
584+
var portPart = port == 0
578585
? string.Empty
579586
: ":" + port;
580587

581588
var parametersPart = string.Empty;
582589
if (parameters.Count > 0) {
583590
parametersPart += "?";
584-
parametersPart = parameters.Aggregate(parametersPart, (current, parameter) => current + (parameter.Key + "=" + parameter.Value + "&"));
591+
parametersPart = parameters.Aggregate(parametersPart, (current, parameter) => current + parameter.Key + "=" + parameter.Value + "&");
585592
parametersPart = parametersPart.TrimEnd('&');
586593
}
587594

0 commit comments

Comments
 (0)