public MartenBackedListenerContext() { theStore = DocumentStore.For(_ => { _.Connection(ConnectionSource.ConnectionString); _.PLV8Enabled = false; _.Storage.Add <PostgresqlEnvelopeStorage>(); }); theStore.Advanced.Clean.CompletelyRemoveAll(); theStore.Schema.ApplyAllConfiguredChangesToDatabase(); theWorkerQueue = Substitute.For <IWorkerQueue>(); theSettings = new BusSettings(); var tables = new EnvelopeTables(theSettings, new StoreOptions()); var retries = new MartenRetries(theStore, tables, CompositeTransportLogger.Empty(), theSettings); theListener = new MartenBackedListener( Substitute.For <IListeningAgent>(), theWorkerQueue, theStore, CompositeTransportLogger.Empty(), theSettings, tables, retries); }
public ReassignFromDormantNodes(EnvelopeTables marker, JasperOptions settings) { _marker = marker; _reassignDormantNodeIncomingSql = $@" update {marker.Incoming} set owner_id = 0 where owner_id in ( select distinct owner_id from {marker.Incoming} where owner_id != 0 AND owner_id != {settings.UniqueNodeId} AND pg_try_advisory_xact_lock(owner_id) ); "; _reassignDormantNodeOutgoingSql = $@" update {marker.Outgoing} set owner_id = 0 where owner_id in ( select distinct owner_id from {marker.Outgoing} where owner_id != 0 AND owner_id != {settings.UniqueNodeId} AND pg_try_advisory_xact_lock(owner_id) ); "; }
public static void StoreOutgoing(this IDocumentSession session, EnvelopeTables marker, Envelope envelope, int ownerId) { var operation = new StoreOutgoingEnvelope(marker.Outgoing, envelope, ownerId); session.QueueOperation(operation); }
public run_scheduled_job_specs() { var logger = TransportLogger.Empty(); var envelopeTables = new EnvelopeTables(theSettings, new StoreOptions()); var retries = new EnvelopeRetries(new MartenEnvelopePersistor(theStore, envelopeTables), logger, theSettings); theScheduledJob = new RunScheduledJobs(theWorkerQueue, theStore, envelopeTables, logger, retries); }
public MartenBackedRetryAgent(IDocumentStore store, ISender sender, RetrySettings settings, EnvelopeTables marker, CompositeTransportLogger logger) : base(sender, settings) { _store = store; _marker = marker; _logger = logger; _deleteIncoming = $"delete from {_marker.Incoming} where id = ANY(:idlist)"; }
public static void StoreIncoming(this IDocumentSession session, EnvelopeTables marker, Envelope[] messages) { foreach (var envelope in messages) { var operation = new StoreIncomingEnvelope(marker.Incoming, envelope); session.QueueOperation(operation); } }
public MartenCallback(Envelope envelope, IWorkerQueue queue, IDocumentStore store, EnvelopeTables marker, MartenRetries retries, ITransportLogger logger) { _envelope = envelope; _queue = queue; _store = store; _marker = marker; _retries = retries; _logger = logger; }
public LocalSendingAgent(Uri destination, IWorkerQueue queues, IDocumentStore store, EnvelopeTables marker, SerializationGraph serializers, MartenRetries retries, CompositeTransportLogger logger) { _queues = queues; _store = store; _marker = marker; _serializers = serializers; _retries = retries; _logger = logger; Destination = destination; }
public MartenBackedSendingAgent(Uri destination, IDocumentStore store, ISender sender, CancellationToken cancellation, CompositeTransportLogger logger, BusSettings settings, EnvelopeTables marker, MartenRetries retries) : base(destination, sender, logger, settings, new MartenBackedRetryAgent(store, sender, settings.Retries, marker, logger)) { _cancellation = cancellation; _logger = logger; _store = store; _settings = settings; _marker = marker; _retries = retries; }
public MartenBackedMessagePersistence(IDocumentStore store, CompositeTransportLogger logger, BusSettings settings, EnvelopeTables tables, BusMessageSerializationGraph serializers) { _store = store; _logger = logger; Settings = settings; Tables = tables; _serializers = serializers; _retries = new MartenRetries(_store, tables, _logger, Settings); }
public RecoverIncomingMessages(IWorkerQueue workers, MessagingSettings settings, EnvelopeTables marker, ITransportLogger logger) { _workers = workers; _settings = settings; _marker = marker; _logger = logger; _findAtLargeEnvelopesSql = $"select body from {marker.Incoming} where owner_id = {TransportConstants.AnyNode} and status = '{TransportConstants.Incoming}' limit {settings.Retries.RecoveryBatchSize}"; }
public MartenBackedListener(IListeningAgent agent, IWorkerQueue queues, IDocumentStore store, CompositeTransportLogger logger, BusSettings settings, EnvelopeTables marker, MartenRetries retries) { _agent = agent; _queues = queues; _store = store; _logger = logger; _settings = settings; _marker = marker; _retries = retries; }
public RecoverOutgoingMessages(ISubscriberGraph subscribers, MessagingSettings settings, EnvelopeTables marker, ITransportLogger logger) { _subscribers = subscribers; _settings = settings; _marker = marker; _logger = logger; _findUniqueDestinations = $"select distinct destination from {_marker.Outgoing}"; _findOutgoingEnvelopesSql = $"select body from {marker.Outgoing} where owner_id = {TransportConstants.AnyNode} and destination = :destination limit {settings.Retries.RecoveryBatchSize}"; _deleteOutgoingSql = $"delete from {marker.Outgoing} where owner_id = :owner and destination = :destination"; }
public RunScheduledJobs(IWorkerQueue workers, IDocumentStore store, EnvelopeTables marker, ITransportLogger logger, IRetries retries) { _workers = workers; _marker = marker; _logger = logger; _retries = retries; _persistor = new MartenEnvelopePersistor(store, _marker); _findReadyToExecuteJobs = $"select body from {marker.Incoming} where status = '{TransportConstants.Scheduled}' and execution_time <= :time"; _markOwnedIncomingSql = $"update {marker.Incoming} set owner_id = :owner, status = '{TransportConstants.Incoming}' where id = ANY(:idlist)"; }
public SchedulingAgent(ISubscriberGraph subscribers, IWorkerQueue workers, IDocumentStore store, JasperOptions settings, ITransportLogger logger, StoreOptions storeOptions, IRetries retries, EnvelopeTables tables) : base(settings, logger, new RunScheduledJobs(workers, store, tables, logger, retries), new RecoverIncomingMessages(workers, settings, tables, logger), new RecoverOutgoingMessages(subscribers, settings, tables, logger), new ReassignFromDormantNodes(tables, settings) ) { _store = store; }
public MartenBackedDurableMessagingFactory(IDocumentStore store, ITransportLogger logger, JasperOptions settings, EnvelopeTables tables) { _store = store; _logger = logger; Settings = settings; Tables = tables; _persistor = new MartenEnvelopePersistor(_store, tables); _retries = new EnvelopeRetries(new MartenEnvelopePersistor(_store, tables), _logger, Settings); }
public MartenRetries(IDocumentStore store, EnvelopeTables tables, CompositeTransportLogger logger, BusSettings settings) { _store = store; _tables = tables; _logger = logger; _settings = settings; _deleteIncoming = new ActionBlock <Envelope[]>(deleteIncoming); _deleteIncomingBatching = new BatchingBlock <Envelope>(250.Milliseconds(), _deleteIncoming, settings.Cancellation); _deleteOutgoing = new ActionBlock <Envelope[]>(deleteOutgoing); _deleteOutgoingBatching = new BatchingBlock <Envelope>(250.Milliseconds(), _deleteOutgoing, settings.Cancellation); _logErrorReport = new ActionBlock <ErrorReport[]>(logErrorReports); _logErrorReportBatching = new BatchingBlock <ErrorReport>(250.Milliseconds(), _logErrorReport, settings.Cancellation); _scheduleIncoming = new ActionBlock <Envelope[]>(scheduleIncoming); _scheduleIncomingBatching = new BatchingBlock <Envelope>(250.Milliseconds(), _scheduleIncoming, settings.Cancellation); }
public MartenCallbackTests() { theRuntime = JasperRuntime.For(_ => { _.MartenConnectionStringIs(Servers.PostgresConnectionString); _.ConfigureMarten(x => { x.Storage.Add <PostgresqlEnvelopeStorage>(); x.PLV8Enabled = false; }); }); theStore = theRuntime.Get <IDocumentStore>(); theStore.Advanced.Clean.CompletelyRemoveAll(); theStore.Schema.ApplyAllConfiguredChangesToDatabase(); theEnvelope = ObjectMother.Envelope(); theEnvelope.Status = TransportConstants.Incoming; var marker = new EnvelopeTables(new MessagingSettings(), new StoreOptions()); using (var session = theStore.OpenSession()) { session.StoreIncoming(marker, theEnvelope); session.SaveChanges(); } var logger = TransportLogger.Empty(); theRetries = new EnvelopeRetries(new MartenEnvelopePersistor(theStore, marker), logger, new MessagingSettings()); var persistor = new MartenEnvelopePersistor(theStore, marker); theCallback = new DurableCallback(theEnvelope, Substitute.For <IWorkerQueue>(), persistor, theRetries, logger); }
public override void SetUp() { _envelopes.Clear(); _nodeLockers.Clear(); _workers = new RecordingWorkerQueue(); _schedulerAgent = new RecordingSchedulingAgent(); _runtime = JasperRuntime.For(_ => { _.MartenConnectionStringIs(Servers.PostgresConnectionString); _.Services.AddSingleton <ITransport, StubTransport>(); _.Services.AddSingleton <IWorkerQueue>(_workers); _.Services.AddSingleton <ISchedulingAgent>(_schedulerAgent); _.Include <MartenBackedPersistence>(); _.Settings.Alter <MessagingSettings>(x => { x.Retries.FirstNodeReassignmentExecution = 30.Minutes(); x.ScheduledJobs.FirstExecution = 30.Minutes(); x.Retries.FirstNodeReassignmentExecution = 30.Minutes(); x.Retries.NodeReassignmentPollingTime = 30.Minutes(); }); }); _runtime.Get <MartenBackedDurableMessagingFactory>().ClearAllStoredMessages(); _marker = _runtime.Get <EnvelopeTables>(); _serializers = _runtime.Get <MessagingSerializationGraph>(); theStore = _runtime.Get <IDocumentStore>(); theStore.Advanced.Clean.DeleteAllDocuments(); _currentNodeId = _runtime.Get <MessagingSettings>().UniqueNodeId; _owners["This Node"] = _currentNodeId; }
public MartenEnvelopePersistor(IDocumentStore store, EnvelopeTables tables) { _store = store; _tables = tables; }