[Fact] // -- too slow public async Task tx_session_locks() { var settings = new PostgresqlSettings(); using (var conn1 = new NpgsqlConnection(Servers.PostgresConnectionString)) using (var conn2 = new NpgsqlConnection(Servers.PostgresConnectionString)) using (var conn3 = new NpgsqlConnection(Servers.PostgresConnectionString)) { await conn1.OpenAsync(); await conn2.OpenAsync(); await conn3.OpenAsync(); var tx1 = conn1.BeginTransaction(); await settings.GetGlobalTxLock(conn1, tx1, 4); // Cannot get the lock here var tx2 = conn2.BeginTransaction(); (await settings.TryGetGlobalTxLock(conn2, tx2, 4)).ShouldBeFalse(); // Can get the new lock var tx3 = conn3.BeginTransaction(); (await settings.TryGetGlobalTxLock(conn3, tx3, 5)).ShouldBeTrue(); // Cannot get the lock here (await settings.TryGetGlobalTxLock(conn2, tx2, 5)).ShouldBeFalse(); tx1.Rollback(); tx2.Rollback(); tx3.Rollback(); } }
public static void StoreOutgoing(this IDocumentSession session, PostgresqlSettings settings, Envelope envelope, int ownerId) { var operation = new StoreOutgoingEnvelope(settings.OutgoingFullName, envelope, ownerId); session.QueueOperation(operation); }
public void PasswordFromArgumentsOverridesConnectionString() { var expected = Guid.NewGuid().ToString(); var settings = new MemstateSettings("--Memstate:StorageProviders:Postgresql:Password", expected); var pgSettings = new PostgresqlSettings(settings); Assert.Equal(expected, pgSettings.Password); }
public void PasswordFromEnvironmentVariableOverridesConnectionString() { string key = "Memstate:StorageProviders:Postgresql:Password"; var expected = Guid.NewGuid().ToString(); Environment.SetEnvironmentVariable(key, expected); var settings = new MemstateSettings(); var pgSettings = new PostgresqlSettings(settings); Assert.Equal(expected, pgSettings.Password); Environment.SetEnvironmentVariable(key, null); }
public MartenEnvelopeTransaction(IDocumentSession session, IMessageContext bus) { if (bus.Advanced.Persistence is PostgresqlEnvelopePersistence persistence) { _settings = persistence.Settings; _nodeId = persistence.Options.UniqueNodeId; } else { throw new InvalidOperationException( "This Jasper application is not using Postgresql + Marten as the backing message persistence"); } _session = session; }
public override void SetUp() { _envelopes.Clear(); _nodeLockers.Clear(); _workers = new RecordingWorkerQueue(); _host = JasperHost.CreateDefaultBuilder() .UseJasper(_ => { _.ServiceName = Guid.NewGuid().ToString(); _.MartenConnectionStringIs(Servers.PostgresConnectionString); _.Services.AddSingleton <IWorkerQueue>(_workers); _.Include <MartenBackedPersistence>(); _.Settings.Alter <JasperOptions>(x => { x.Retries.FirstNodeReassignmentExecution = 30.Minutes(); x.ScheduledJobs.FirstExecution = 30.Minutes(); x.Retries.FirstNodeReassignmentExecution = 30.Minutes(); x.Retries.NodeReassignmentPollingTime = 30.Minutes(); }); }) .StartJasper(); _admin = _host.Get <IEnvelopePersistence>().Admin; _admin.RebuildSchemaObjects(); _settings = _host.Get <PostgresqlSettings>(); _serializers = _host.Get <MessagingSerializationGraph>(); theStore = _host.Get <IDocumentStore>(); theStore.Advanced.Clean.DeleteAllDocuments(); _currentNodeId = _host.Get <JasperOptions>().UniqueNodeId; _owners["This Node"] = _currentNodeId; }
public async Task explicitly_release_global_tx_session_locks() { var settings = new PostgresqlSettings(); using (var conn1 = new NpgsqlConnection(Servers.PostgresConnectionString)) using (var conn2 = new NpgsqlConnection(Servers.PostgresConnectionString)) using (var conn3 = new NpgsqlConnection(Servers.PostgresConnectionString)) { await conn1.OpenAsync(); await conn2.OpenAsync(); await conn3.OpenAsync(); var tx1 = conn1.BeginTransaction(); await settings.GetGlobalTxLock(conn1, tx1, 2); // Cannot get the lock here var tx2 = conn2.BeginTransaction(); (await settings.TryGetGlobalTxLock(conn2, tx2, 2)).ShouldBeFalse(); tx1.Rollback(); for (var j = 0; j < 5; j++) { if (await settings.TryGetGlobalTxLock(conn2, tx2, 2)) { tx2.Rollback(); return; } await Task.Delay(250); } throw new Exception("Advisory lock was not released"); } }
public override void SetUp() { _envelopes.Clear(); _nodeLockers.Clear(); _workers = new RecordingWorkerQueue(); _host = Host.CreateDefaultBuilder() .UseJasper(_ => { _.ServiceName = Guid.NewGuid().ToString(); _.Endpoints.As <TransportCollection>().Add(new StubTransport()); _.Extensions.UseMarten(Servers.PostgresConnectionString); _.Services.AddSingleton <IWorkerQueue>(_workers); _.Advanced.FirstNodeReassignmentExecution = 30.Minutes(); _.Advanced.ScheduledJobFirstExecution = 30.Minutes(); _.Advanced.FirstNodeReassignmentExecution = 30.Minutes(); _.Advanced.NodeReassignmentPollingTime = 30.Minutes(); }) .Start(); _admin = _host.Services.GetService <IEnvelopePersistence>().Admin; _admin.RebuildSchemaObjects(); _settings = _host.Services.GetService <PostgresqlSettings>(); _serializers = _host.Services.GetService <MessagingSerializationGraph>(); theStore = _host.Services.GetService <IDocumentStore>(); theStore.Advanced.Clean.DeleteAllDocuments(); _currentNodeId = _host.Services.GetService <AdvancedSettings>().UniqueNodeId; _owners["This Node"] = _currentNodeId; }
public async Task explicitly_release_global_session_locks() { var settings = new PostgresqlSettings(); using (var conn1 = new NpgsqlConnection(Servers.PostgresConnectionString)) using (var conn2 = new NpgsqlConnection(Servers.PostgresConnectionString)) using (var conn3 = new NpgsqlConnection(Servers.PostgresConnectionString)) { await conn1.OpenAsync(); await conn2.OpenAsync(); await conn3.OpenAsync(); await settings.GetGlobalLock(conn1, 1); // Cannot get the lock here (await settings.TryGetGlobalLock(conn2, 1)).ShouldBeFalse(); await settings.ReleaseGlobalLock(conn1, 1); for (var j = 0; j < 5; j++) { if (await settings.TryGetGlobalLock(conn2, 1)) { return; } await Task.Delay(250); } throw new Exception("Advisory lock was not released"); } }
[Fact] // - too slow public async Task global_session_locks() { var settings = new PostgresqlSettings(); using (var conn1 = new NpgsqlConnection(Servers.PostgresConnectionString)) using (var conn2 = new NpgsqlConnection(Servers.PostgresConnectionString)) using (var conn3 = new NpgsqlConnection(Servers.PostgresConnectionString)) { await conn1.OpenAsync(); await conn2.OpenAsync(); await conn3.OpenAsync(); await settings.GetGlobalLock(conn1, 24); try { // Cannot get the lock here (await settings.TryGetGlobalLock(conn2, 24)).ShouldBeFalse(); // Can get the new lock (await settings.TryGetGlobalLock(conn3, 25)).ShouldBeTrue(); // Cannot get the lock here (await settings.TryGetGlobalLock(conn2, 25)).ShouldBeFalse(); } finally { await settings.ReleaseGlobalLock(conn1, 24); await settings.ReleaseGlobalLock(conn3, 25); } } }
public static void StoreIncoming(this IDocumentSession session, PostgresqlSettings settings, Envelope envelope) { var operation = new StoreIncomingEnvelope(settings.IncomingFullName, envelope); session.QueueOperation(operation); }
public PostgresqlEnvelopeStorageAdmin(PostgresqlSettings settings) { _connectionString = settings.ConnectionString; SchemaName = settings.SchemaName; }
public PostgresqlSettingsTests(ITestOutputHelper log) { _log = log; _memstateSettings = new MemstateSettings(); _settings = new PostgresqlSettings(_memstateSettings); }