Class: Mammoth::Application
- Inherits:
-
Object
- Object
- Mammoth::Application
- Defined in:
- lib/mammoth/application.rb
Overview
Top-level Mammoth application runtime.
Application wires Mammoth's delivery-side runtime pieces: configuration, operational-state adapter, replication consumer, delivery worker, checkpoint store, dead-letter store, and webhook sink. Upstream PostgreSQL transport composition stays outside this class so the application runtime consumes an injected CDC work source rather than owning upstream CDC source-adapter lifecycle decisions. rubocop:disable Metrics/ClassLength
Instance Attribute Summary collapse
-
#checkpoint_store ⇒ Object
readonly
Returns the value of attribute checkpoint_store.
-
#config ⇒ Object
readonly
Returns the value of attribute config.
-
#consumer ⇒ Object
readonly
Returns the value of attribute consumer.
-
#delivery_worker ⇒ Object
readonly
Returns the value of attribute delivery_worker.
-
#lifecycle_hooks ⇒ Object
readonly
Returns the value of attribute lifecycle_hooks.
-
#observer ⇒ Object
readonly
Returns the value of attribute observer.
-
#progress_coordinator ⇒ Object
readonly
Returns the value of attribute progress_coordinator.
-
#state_adapter ⇒ Object
readonly
Returns the value of attribute state_adapter.
Instance Method Summary collapse
-
#initialize(config, source: nil, sink: nil, state_adapter: nil, sleeper: Kernel.method(:sleep), lifecycle_hooks: LifecycleHooks.new, observer: nil) ⇒ Application
constructor
A new instance of Application.
-
#sqlite_store ⇒ Mammoth::SQLiteStore
Underlying SQLite store for compatibility.
-
#start ⇒ Integer
Start the application runtime and deliver consumed CDC work.
Constructor Details
#initialize(config, source: nil, sink: nil, state_adapter: nil, sleeper: Kernel.method(:sleep), lifecycle_hooks: LifecycleHooks.new, observer: nil) ⇒ Application
Returns a new instance of Application.
24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/mammoth/application.rb', line 24 def initialize(config, source: nil, sink: nil, state_adapter: nil, sleeper: Kernel.method(:sleep), lifecycle_hooks: LifecycleHooks.new, observer: nil) @config = config @lifecycle_hooks = build_lifecycle_hooks(lifecycle_hooks) @observer = observer || MetricsObserver.new @state_adapter = state_adapter || build_state_adapter @checkpoint_store = @state_adapter.checkpoint_store @consumer = ReplicationConsumer.new(source: source || build_source, delivery_unit: delivery_unit) @progress_coordinator = build_progress_coordinator @delivery_worker = sink ? build_delivery_worker(sink: sink, sleeper: sleeper) : build_configured_delivery_worker(sleeper:) end |
Instance Attribute Details
#checkpoint_store ⇒ Object (readonly)
Returns the value of attribute checkpoint_store.
14 15 16 |
# File 'lib/mammoth/application.rb', line 14 def checkpoint_store @checkpoint_store end |
#config ⇒ Object (readonly)
Returns the value of attribute config.
14 15 16 |
# File 'lib/mammoth/application.rb', line 14 def config @config end |
#consumer ⇒ Object (readonly)
Returns the value of attribute consumer.
14 15 16 |
# File 'lib/mammoth/application.rb', line 14 def consumer @consumer end |
#delivery_worker ⇒ Object (readonly)
Returns the value of attribute delivery_worker.
14 15 16 |
# File 'lib/mammoth/application.rb', line 14 def delivery_worker @delivery_worker end |
#lifecycle_hooks ⇒ Object (readonly)
Returns the value of attribute lifecycle_hooks.
14 15 16 |
# File 'lib/mammoth/application.rb', line 14 def lifecycle_hooks @lifecycle_hooks end |
#observer ⇒ Object (readonly)
Returns the value of attribute observer.
14 15 16 |
# File 'lib/mammoth/application.rb', line 14 def observer @observer end |
#progress_coordinator ⇒ Object (readonly)
Returns the value of attribute progress_coordinator.
14 15 16 |
# File 'lib/mammoth/application.rb', line 14 def progress_coordinator @progress_coordinator end |
#state_adapter ⇒ Object (readonly)
Returns the value of attribute state_adapter.
14 15 16 |
# File 'lib/mammoth/application.rb', line 14 def state_adapter @state_adapter end |
Instance Method Details
#sqlite_store ⇒ Mammoth::SQLiteStore
Returns underlying SQLite store for compatibility.
37 38 39 |
# File 'lib/mammoth/application.rb', line 37 def sqlite_store state_adapter.respond_to?(:sqlite_store) ? state_adapter.sqlite_store : nil end |
#start ⇒ Integer
Start the application runtime and deliver consumed CDC work.
44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/mammoth/application.rb', line 44 def start runtime = build_runtime processed = nil lifecycle_hooks.call(:before_start, application_context(runtime: runtime)) processed = process_consumer(runtime) lifecycle_hooks.call(:after_start, application_context(runtime: runtime, processed: processed)) processed ensure lifecycle_hooks.call(:before_shutdown, application_context(runtime: runtime, processed: processed)) runtime.shutdown if runtime.respond_to?(:shutdown) lifecycle_hooks.call(:after_shutdown, application_context(runtime: runtime, processed: processed)) end |