Skip to content

Commit

Permalink
Merge pull request #202 from Particular/release-2.2
Browse files Browse the repository at this point in the history
Release 2.2
  • Loading branch information
weralabaj authored Nov 15, 2017
2 parents 02c5225 + 44f9510 commit f136474
Show file tree
Hide file tree
Showing 18 changed files with 215 additions and 79 deletions.
4 changes: 2 additions & 2 deletions packaging/nuget/NServiceBus.Persistence.Sql.MsBuild.targets
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,13 @@
</Otherwise>
</Choose>
<UsingTask
TaskName="NServiceBus.Persistence.Sql.ScriptBuilderTask"
TaskName="NServiceBus.Persistence.Sql.SqlPersistenceScriptBuilderTask"
AssemblyFile="$(ScriptBuilderTaskPath)" />

<Target
AfterTargets="AfterCompile"
Name="SqlPersistenceScriptBuilder">
<ScriptBuilderTask
<SqlPersistenceScriptBuilderTask
AssemblyPath="$(ProjectDir)@(IntermediateAssembly)"
IntermediateDirectory="$(ProjectDir)$(IntermediateOutputPath)"
ProjectDirectory="$(ProjectDir)"
Expand Down
2 changes: 2 additions & 0 deletions src/AcceptanceTestsHolder/AcceptanceTestsHolder.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="App_Packages\NoPersistenceServer.cs" />
<Compile Include="App_Packages\NSB.AcceptanceTests.6.3.2\Audit\When_auditing.cs" />
<Compile Include="App_Packages\NSB.AcceptanceTests.6.3.2\Audit\When_auditing_message_with_TimeToBeReceived.cs" />
<Compile Include="App_Packages\NSB.AcceptanceTests.6.3.2\Audit\When_audit_is_overridden_in_code.cs" />
Expand Down Expand Up @@ -238,6 +239,7 @@
<Compile Include="App_Packages\NSB.AcceptanceTests.6.3.2\Tx\When_receiving_with_the_default_settings.cs" />
<Compile Include="App_Packages\NSB.AcceptanceTests.6.3.2\Tx\When_sending_within_an_ambient_transaction.cs" />
<Compile Include="App_Packages\NSB.AcceptanceTests.6.3.2\Versioning\When_multiple_versions_of_a_message_is_published.cs" />
<Compile Include="App_Packages\When_using_different_persistence.cs" />
<Compile Include="AssemblyInfo.cs" />
<Compile Include="TestSuiteConstraints.cs" />
</ItemGroup>
Expand Down
57 changes: 57 additions & 0 deletions src/AcceptanceTestsHolder/App_Packages/NoPersistenceServer.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
namespace NServiceBus.AcceptanceTests.EndpointTemplates
{
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using AcceptanceTesting.Customization;
using AcceptanceTesting.Support;
using Configuration.AdvanceExtensibility;
using Features;
using Config.ConfigurationSource;

public class NoPersistenceServer : IEndpointSetupTemplate
{
public NoPersistenceServer()
{
typesToInclude = new List<Type>();
}

public NoPersistenceServer(List<Type> typesToInclude)
{
this.typesToInclude = typesToInclude;
}

#pragma warning disable CS0618
public async Task<EndpointConfiguration> GetConfiguration(RunDescriptor runDescriptor, EndpointCustomizationConfiguration endpointConfiguration, IConfigurationSource configSource, Action<EndpointConfiguration> configurationBuilderCustomization)
#pragma warning restore CS0618
{
var types = endpointConfiguration.GetTypesScopedByTestClass();

typesToInclude.AddRange(types);

var configuration = new EndpointConfiguration(endpointConfiguration.EndpointName);

configuration.TypesToIncludeInScan(typesToInclude);
configuration.CustomConfigurationSource(configSource);
configuration.EnableInstallers();

configuration.DisableFeature<TimeoutManager>();

var recoverability = configuration.Recoverability();
recoverability.Delayed(delayed => delayed.NumberOfRetries(0));
recoverability.Immediate(immediate => immediate.NumberOfRetries(0));
configuration.SendFailedMessagesTo("error");

await configuration.DefineTransport(runDescriptor, endpointConfiguration).ConfigureAwait(false);

configuration.RegisterComponentsAndInheritanceHierarchy(runDescriptor);

configuration.GetSettings().SetDefault("ScaleOut.UseSingleBrokerQueue", true);
configurationBuilderCustomization(configuration);

return configuration;
}

List<Type> typesToInclude;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
using System.Threading.Tasks;
using NServiceBus;
using NServiceBus.AcceptanceTesting;
using NServiceBus.AcceptanceTests;
using NServiceBus.AcceptanceTests.EndpointTemplates;
using NUnit.Framework;

[TestFixture]
public class When_using_different_persistence : NServiceBusAcceptanceTest
{
[Test]
public async Task Should_not_execute_installers()
{
// The EndpointsStarted flag is set by acceptance framework
var context = await Scenario.Define<Context>()
.WithEndpoint<InMemoryPersistenceEndpoint>()
.Done(c => c.EndpointsStarted)
.Run()
.ConfigureAwait(false);

// If installers were run, we'd get an System.Exception: "ConnectionBuilder must be defined."
Assert.True(context.EndpointsStarted);
}

public class Context : ScenarioContext
{
}

public class InMemoryPersistenceEndpoint : EndpointConfigurationBuilder
{
public InMemoryPersistenceEndpoint()
{
EndpointSetup<NoPersistenceServer>(c => c.UsePersistence<InMemoryPersistence>());
}
}

public class StartSagaMessage : IMessage
{
public string Property { get; set; }
}

}
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
namespace NServiceBus.AcceptanceTests.Sagas
{
#if RELEASE
using NUnit.Framework;

[Category("MySqlUnicode")]
// So this test does not run on CI as server install does not support unicode
[Explicit("MySqlUnicode")]
#endif
partial class When_correlating_special_chars
{
}
}
}
3 changes: 2 additions & 1 deletion src/ScriptBuilder.Tests/Saga/SagaDefinitionReaderTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -214,7 +214,8 @@ protected override void ConfigureMapping(IMessagePropertyMapper mapper)
public void WithStatementBodyProperty()
{
var sagaType = module.GetTypeDefinition<WithStatementBodyPropertySaga>();
SagaDefinitionReader.TryGetSqlSagaDefinition(sagaType, out var definition);
SagaDefinition definition;
SagaDefinitionReader.TryGetSqlSagaDefinition(sagaType, out definition);
ObjectApprover.VerifyWithJson(definition);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ namespace NServiceBus.Persistence.Sql
using System.IO;
using System.Reflection;

public class ScriptBuilderTask : Task
public class SqlPersistenceScriptBuilderTask : Task
{
BuildLogger logger;

Expand All @@ -24,12 +24,12 @@ public class ScriptBuilderTask : Task
[Required]
public string SolutionDirectory { get; set; }

static Version assemblyVersion= typeof(ScriptBuilderTask).GetTypeInfo().Assembly.GetName().Version;
static Version assemblyVersion= typeof(SqlPersistenceScriptBuilderTask).GetTypeInfo().Assembly.GetName().Version;

public override bool Execute()
{
logger = new BuildLogger(BuildEngine);
logger.LogInfo($"ScriptBuilderTask (version {assemblyVersion}) Executing");
logger.LogInfo($"SqlPersistenceScriptBuilderTask (version {assemblyVersion}) Executing");

var stopwatch = Stopwatch.StartNew();

Expand All @@ -53,7 +53,7 @@ public override bool Execute()
}
finally
{
logger.LogInfo($" Finished ScriptBuilderTask {stopwatch.ElapsedMilliseconds}ms.");
logger.LogInfo($" Finished SqlPersistenceScriptBuilderTask {stopwatch.ElapsedMilliseconds}ms.");
}
return !logger.ErrorOccurred;
}
Expand Down
37 changes: 8 additions & 29 deletions src/SqlPersistence/Config/SqlPersistenceConfig_Enabled.cs
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
using NServiceBus.Configuration.AdvanceExtensibility;
using NServiceBus.Persistence;
using NServiceBus.Persistence.Sql;
using NServiceBus.Settings;

namespace NServiceBus
{
using Configuration.AdvanceExtensibility;
using Persistence;
using Settings;

public static partial class SqlPersistenceConfig
{
Expand All @@ -14,42 +14,21 @@ public static partial class SqlPersistenceConfig
public static void DisableInstaller(this PersistenceExtensions<SqlPersistence> configuration)
{
Guard.AgainstNull(nameof(configuration), configuration);
configuration.GetSettings()
.Set("SqlPersistence.DisableInstaller", true);
}

static bool GetDisableInstaller(this ReadOnlySettings settings)
{
bool value;
if (settings.TryGet("SqlPersistence.DisableInstaller", out value))
{
return value;
}
return false;
}

internal static void EnableFeature<TStorageType>(this ReadOnlySettings settingsHolder)
where TStorageType : StorageType
{
settingsHolder.Get<EnabledStorageFeatures>().Enable<TStorageType>();
var installerSettings = configuration.GetSettings().GetOrCreate<InstallerSettings>();
installerSettings.Disabled = true;
}

static bool GetFeatureEnabled<TStorageType>(this ReadOnlySettings settings)
internal static bool GetFeatureEnabled<TStorageType>(this ReadOnlySettings settings)
where TStorageType : StorageType
{
return settings.GetOrDefault<EnabledStorageFeatures>()?.IsEnabled<TStorageType>() ?? false;
}

internal static bool ShouldInstall<TStorageType>(this ReadOnlySettings settings)
internal static void EnableFeature<TStorageType>(this ReadOnlySettings settingsHolder)
where TStorageType : StorageType
{
var featureEnabled = settings.GetFeatureEnabled<TStorageType>();
var disableInstaller = settings.GetDisableInstaller();
return
featureEnabled &&
!disableInstaller;
settingsHolder.Get<EnabledStorageFeatures>().Enable<TStorageType>();
}


}
}
23 changes: 15 additions & 8 deletions src/SqlPersistence/Installer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,19 +14,26 @@ class Installer : INeedToInstallSomething
{
ReadOnlySettings settings;
static ILog log = LogManager.GetLogger<Installer>();
InstallerSettings installerSettings;

public Installer(ReadOnlySettings settings)
{
this.settings = settings;
installerSettings = settings.GetOrDefault<InstallerSettings>();
}

public async Task Install(string identity)
{
var connectionBuilder = settings.GetConnectionBuilder();
var sqlVariant = settings.GetSqlVariant();
if (installerSettings == null || installerSettings.Disabled)
{
return;
}

var connectionBuilder = installerSettings.ConnectionBuilder;
var sqlVariant = installerSettings.SqlVariant;
var schema = settings.GetSchema();
var scriptDirectory = ScriptLocation.FindScriptDirectory(sqlVariant);
var tablePrefix = settings.GetTablePrefix();
var scriptDirectory = installerSettings.ScriptDirectory;
var tablePrefix = installerSettings.TablePrefix;

ConfigValidation.ValidateTableSettings(sqlVariant, tablePrefix, schema);

Expand All @@ -44,7 +51,7 @@ public async Task Install(string identity)

Task InstallOutbox(string scriptDirectory, DbConnection connection, DbTransaction transaction, string tablePrefix, string schema, SqlVariant sqlVariant)
{
if (!settings.ShouldInstall<StorageType.Outbox>())
if (!settings.GetFeatureEnabled<StorageType.Outbox>())
{
return Task.FromResult(0);
}
Expand All @@ -71,7 +78,7 @@ Task InstallOutbox(string scriptDirectory, DbConnection connection, DbTransactio

Task InstallSubscriptions(string scriptDirectory, DbConnection connection, DbTransaction transaction, string tablePrefix, string schema, SqlVariant sqlVariant)
{
if (!settings.ShouldInstall<StorageType.Subscriptions>())
if (!settings.GetFeatureEnabled<StorageType.Subscriptions>())
{
return Task.FromResult(0);
}
Expand All @@ -98,7 +105,7 @@ Task InstallSubscriptions(string scriptDirectory, DbConnection connection, DbTra

Task InstallTimeouts(string scriptDirectory, DbConnection connection, DbTransaction transaction, string tablePrefix, string schema, SqlVariant sqlVariant)
{
if (!settings.ShouldInstall<StorageType.Timeouts>())
if (!settings.GetFeatureEnabled<StorageType.Timeouts>())
{
return Task.FromResult(0);
}
Expand All @@ -125,7 +132,7 @@ Task InstallTimeouts(string scriptDirectory, DbConnection connection, DbTransact

Task InstallSagas(string scriptDirectory, DbConnection connection, DbTransaction transaction, string tablePrefix, string schema, SqlVariant sqlVariant)
{
if (!settings.ShouldInstall<StorageType.Sagas>())
if (!settings.GetFeatureEnabled<StorageType.Sagas>())
{
return Task.FromResult(0);
}
Expand Down
24 changes: 24 additions & 0 deletions src/SqlPersistence/InstallerFeature.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
using NServiceBus;
using NServiceBus.Features;

class InstallerFeature : Feature
{
public InstallerFeature()
{
Defaults(s => s.SetDefault<InstallerSettings>(new InstallerSettings()));
}

protected override void Setup(FeatureConfigurationContext context)
{
var settings = context.Settings.Get<InstallerSettings>();
if (settings.Disabled)
{
return;
}

settings.ConnectionBuilder = context.Settings.GetConnectionBuilder();
settings.SqlVariant = context.Settings.GetSqlVariant();
settings.ScriptDirectory = ScriptLocation.FindScriptDirectory(context.Settings);
settings.TablePrefix = context.Settings.GetTablePrefix();
}
}
12 changes: 12 additions & 0 deletions src/SqlPersistence/InstallerSettings.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using System;
using System.Data.Common;
using NServiceBus.Persistence.Sql;

class InstallerSettings
{
public bool Disabled { get; set; }
public Func<DbConnection> ConnectionBuilder { get; set; }
public SqlVariant SqlVariant { get; set; }
public string ScriptDirectory { get; set; }
public string TablePrefix { get; set; }
}
Loading

0 comments on commit f136474

Please sign in to comment.