message_bus 3.3.8 → 3.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b45c0d65f5a82c9465f620059d2125ebca09ee5619a9094fcbc309a0e179a983
4
- data.tar.gz: b691c40ae2360ae661aa83f83e9647cb0223a70a6ca536f285db21ce791a3ae3
3
+ metadata.gz: bb9967cb1c20e9a7c2f02ea36bfd54a3a13dac00ef44dcd0f27f7f878504ee2c
4
+ data.tar.gz: 6ad58769e032468f20411b507aab0c7eaf72e09ab904641f1f635a5061c42c3c
5
5
  SHA512:
6
- metadata.gz: 2bb5db140d0fc8bbee5df6e00f57560b1e399c7cac86d825f9841c4c9d8bc805ec8f9ab2ea8ba0ad066c53039a44b5044ecef7299a74f942b3a52cd426ecbef6
7
- data.tar.gz: 66fdc2a3c483d1b775b3963b71bdc422edcdf16233cb47aa2ec99d3a6946e6e0f6f6ca917db12e5d528de6dfb39cc494923e2abe380ca0c75d64d92f6f167d7e
6
+ metadata.gz: e6f3ab3af97533e26cf7fc91eb529dd5bd90f7e3b7a818b6c86636bbd4cbfb5b8f38479ee81ca1230da1ec5d6101d59a56273186f46c8d3b52807a467c40abdb
7
+ data.tar.gz: ab4a57f673a4cb99c1a00225a041dfe69dfbc6f9c7213774a6e4f64e6250241d3c69148fc14cf900409e15f1574d0a6b41be43b9b3c5819f2313d25ab0713418
@@ -60,6 +60,8 @@ jobs:
60
60
  run: npm install
61
61
 
62
62
  - name: Tests
63
+ env:
64
+ TESTOPTS: --verbose
63
65
  run: bundle exec rake
64
66
  timeout-minutes: 3
65
67
 
data/CHANGELOG CHANGED
@@ -1,3 +1,17 @@
1
+ 31-12-2021
2
+
3
+ - Version 3.4.0
4
+
5
+ - FEATURE: remove "suicide" feature from message_bus - (message_bus used to terminate process when keepalive exceeded)
6
+
7
+ 20-12-2021
8
+
9
+ - Version 3.3.8
10
+
11
+ - FIX: Restore dist js files to fix a regression in 3.3.7
12
+ - FIX: Stop various thread/pg connection leaks
13
+ - DEV: Fix ruby warnings
14
+
1
15
  15-12-2021
2
16
 
3
17
  - Version 3.3.7
@@ -63,14 +77,14 @@
63
77
 
64
78
  - Version 3.3.0
65
79
 
66
- - FEATURE: `MessageBus.base_route=` to alter the route that message bus will listen on.
80
+ - FEATURE: `MessageBus.base_route=` to alter the route that message bus will listen on.
67
81
 
68
82
  07-05-2020
69
83
 
70
84
  - Version 3.2.0
71
85
 
72
- - FIX: compatibility with Rails 6.0.3, note: apps without ActionDispatch::Flash may stop working after this upgrade
73
- to correct this disable middleware injection with `config.skip_message_bus_middleware = true` and configure middleware by hand with `app.middleware.use(MessageBus::Rack::Middleware)`
86
+ - FIX: compatibility with Rails 6.0.3, note: apps without ActionDispatch::Flash may stop working after this upgrade
87
+ to correct this disable middleware injection with `config.skip_message_bus_middleware = true` and configure middleware by hand with `app.middleware.use(MessageBus::Rack::Middleware)`
74
88
 
75
89
  28-04-2020
76
90
 
@@ -105,7 +119,6 @@
105
119
 
106
120
  - FIX: In the redis backend make the `is_readonly?` method compatible with the redis gem both pre and post v4.0 when the `client` attribute was removed
107
121
 
108
-
109
122
  30-04-2019
110
123
 
111
124
  - Version 2.2.1
@@ -136,7 +149,7 @@
136
149
  - Version 2.2.0.pre
137
150
 
138
151
  - FIX: In redis backend we now expire the key used to track channel id this can cause a redis key leak
139
- with large amounts of subscriptions that go away
152
+ with large amounts of subscriptions that go away
140
153
  - FEATURE: Much extra implementation documentation, and some improvements to usage documentation.
141
154
  - FEATURE: Improvements to development workflow:
142
155
  - Fully docker-based development and testing, with no other dependencies.
@@ -153,44 +166,47 @@
153
166
  - Supports setting backlog size on publication for memory/postgres
154
167
  - FEATURE: `MessageBus.off` now prevents the server subscription from starting up.
155
168
  - FEATURE: Trims unused parts of the public API:
169
+
156
170
  - Methods removed:
157
- * ConnectionManager#stats (never used and the ConnectionManager is not exposed to application code)
158
- * Client#cancel (effectively duplicate of Client#close and the Client is only available via the ConnectionManager, thus not available to application code)
171
+
172
+ - ConnectionManager#stats (never used and the ConnectionManager is not exposed to application code)
173
+ - Client#cancel (effectively duplicate of Client#close and the Client is only available via the ConnectionManager, thus not available to application code)
159
174
 
160
175
  - Methods made private:
161
- * MessageBus::Implementation#encode_channel_name
162
- * MessageBus::Implementation#decode_channel_name
163
- * Client#in_async?
164
- * Client#ensure_closed!
165
- * ConnectionManager#subscribe_client
166
- * Diagnostics.full_process_path
167
- * Diagnostics.hostname
168
- * MessageBus::Rack::Diagnostics#js_asset
169
- * MessageBus::Rack::Diagnostics#generate_script_tag
170
- * MessageBus::Rack::Diagnostics#file_hash
171
- * MessageBus::Rack::Diagnostics#asset_contents
172
- * MessageBus::Rack::Diagnostics#asset_path
173
- * MessageBus::Rack::Diagnostics#index
174
- * MessageBus::Rack::Diagnostics#translate_handlebars
175
- * MessageBus::Rack::Diagnostics#indent
176
- * MessageBus::Rack::Middleware#start_listener
177
- * MessageBus::Rack::Middleware#close_db_connection!
178
- * MessageBus::Rack::Middleware#add_client_with_timeout
176
+
177
+ - MessageBus::Implementation#encode_channel_name
178
+ - MessageBus::Implementation#decode_channel_name
179
+ - Client#in_async?
180
+ - Client#ensure_closed!
181
+ - ConnectionManager#subscribe_client
182
+ - Diagnostics.full_process_path
183
+ - Diagnostics.hostname
184
+ - MessageBus::Rack::Diagnostics#js_asset
185
+ - MessageBus::Rack::Diagnostics#generate_script_tag
186
+ - MessageBus::Rack::Diagnostics#file_hash
187
+ - MessageBus::Rack::Diagnostics#asset_contents
188
+ - MessageBus::Rack::Diagnostics#asset_path
189
+ - MessageBus::Rack::Diagnostics#index
190
+ - MessageBus::Rack::Diagnostics#translate_handlebars
191
+ - MessageBus::Rack::Diagnostics#indent
192
+ - MessageBus::Rack::Middleware#start_listener
193
+ - MessageBus::Rack::Middleware#close_db_connection!
194
+ - MessageBus::Rack::Middleware#add_client_with_timeout
179
195
 
180
196
  - Methods switched from protected to private:
181
- * MessageBus::Implementation#global?
182
- * MessageBus::Implementation#decode_message!
183
- * MessageBus::Implementation#replay_backlog
184
- * MessageBus::Implementation#subscribe_impl
185
- * MessageBus::Implementation#unsubscribe_impl
186
- * MessageBus::Implementation#ensure_subscriber_thread
187
- * MessageBus::Implementation#new_subscriber_thread
188
- * MessageBus::Implementation#global_subscribe_thread
189
- * MessageBus::Implementation#multi_each
190
- * Client#write_headers
191
- * Client#write_chunk
192
- * Client#write_and_close
193
- * Client#messages_to_json
197
+ - MessageBus::Implementation#global?
198
+ - MessageBus::Implementation#decode_message!
199
+ - MessageBus::Implementation#replay_backlog
200
+ - MessageBus::Implementation#subscribe_impl
201
+ - MessageBus::Implementation#unsubscribe_impl
202
+ - MessageBus::Implementation#ensure_subscriber_thread
203
+ - MessageBus::Implementation#new_subscriber_thread
204
+ - MessageBus::Implementation#global_subscribe_thread
205
+ - MessageBus::Implementation#multi_each
206
+ - Client#write_headers
207
+ - Client#write_chunk
208
+ - Client#write_and_close
209
+ - Client#messages_to_json
194
210
 
195
211
  15-10-2018
196
212
 
@@ -219,7 +235,7 @@
219
235
  - Version 2.1.2
220
236
 
221
237
  - FEATURE: minHiddenPollInterval set to 1500ms out of the box, ensures we never do hidden tab
222
- polls at a high rate if tons of tabs are open
238
+ polls at a high rate if tons of tabs are open
223
239
  - FEATURE: added random 500ms to delayed polls to increase tab entropy
224
240
 
225
241
  18-12-2017
@@ -233,7 +249,7 @@
233
249
  - Version 2.1.0
234
250
 
235
251
  - FEATURE: you can now lookup last N messages on channel on subscribe from JavaScript
236
- Subscribe at position (-1 - numberOfMessages) from the client
252
+ Subscribe at position (-1 - numberOfMessages) from the client
237
253
 
238
254
  24-11-2017
239
255
 
@@ -253,8 +269,7 @@
253
269
  - Version 2.0.7
254
270
 
255
271
  - Fix/Feature: use LUA script for publishing to bus, this eliminates a race condition
256
- and ensures that we are never stuck in a multi transaction by mistake
257
-
272
+ and ensures that we are never stuck in a multi transaction by mistake
258
273
 
259
274
  29-09-2017
260
275
 
@@ -282,12 +297,10 @@
282
297
  - Version 2.0.2
283
298
  - Feature: Add on_middleware_error callback for remapping middleware errors to HTTP results
284
299
 
285
-
286
300
  25-07-2016
287
301
 
288
302
  - Feature: Add JavaScript MessageBus.status() function
289
303
 
290
-
291
304
  21-06-2016
292
305
 
293
306
  - Version 2.0.1
@@ -368,8 +381,8 @@
368
381
 
369
382
  - Version 1.1.1
370
383
  - Fix: In multisite config there was no way to specify site for last_id or backlog
371
- to resolve overrides were added to #last_id and #backlog, MessageBus::Client now
372
- uses the new overrides
384
+ to resolve overrides were added to #last_id and #backlog, MessageBus::Client now
385
+ uses the new overrides
373
386
 
374
387
  07-12-2015
375
388
 
@@ -379,86 +392,105 @@
379
392
  - Feature: remove most jQuery dependency from message-bus.js
380
393
 
381
394
  09-07-2015
395
+
382
396
  - Version 1.0.16
383
397
  - Fix: correct edge cases around keepalive checks on bus
384
398
 
385
399
  09-07-2015
400
+
386
401
  - Version 1.0.15
387
402
  - Feature: MessageBus.reliable_pub_sub.max_backlog_age (in secs) configurable (default to 7 days)
388
403
  - Fix: API for MessageBus.backlog("/bla") was returning global backlog by mistake
389
404
  - Change: Max global backlog size reduced to 2000 elements
390
405
 
391
406
  08-06-2015
407
+
392
408
  - Version 1.0.14
393
409
  - Fix: we can not use Thread#kill best keepalive can do is terminate process cleanly
394
410
  - Feature: you can opt-out of keepalive with MessageBus.keepalive_timeout = 0
395
411
 
396
412
  08-06-2015
413
+
397
414
  - Version 1.0.13
398
415
  - Fix: on global subscribe reconnect replay missed messages
399
416
  - Feature: keepalive tests for global subscribe, catches hung redis connections
400
417
 
401
418
  28-05-2015
419
+
402
420
  - Version 1.0.12
403
421
  - Feature: Support client_id targeted message
404
422
 
405
423
  06-05-2015
424
+
406
425
  - Version 1.0.11
407
426
  - Fix: race condition in TimerThread
408
427
 
409
428
  01-05-2015
429
+
410
430
  - Version: 1.0.10
411
431
  - Feature: no longer depends on EventMachine (only used for Thin backend)
412
432
  - Feature: reliable pub sub will queue messages in memory if redis is readonly, configurable
413
433
  - Fix: if redis is flushed we will continue to deliver messages
414
434
 
415
435
  23-03-2015
436
+
416
437
  - Version 1.0.9
417
438
  - Fix: inherit off StandardError not Exception for all exceptions raised
418
439
 
419
440
  20-03-2015
441
+
420
442
  - Version 1.0.8
421
443
  - Fix: aggressive short polling in background
422
444
 
423
445
  16-03-2015
446
+
424
447
  - Version 1.0.7
425
448
  - Feature: added pause and resume methods
426
449
 
427
450
  03-02-2015
451
+
428
452
  - Version 1.0.6
429
453
  - Fix: global backlog not truncating correctly
430
454
 
431
455
  23-09-2014
456
+
432
457
  - Version 1.0.5
433
458
  - Fix: missing custom headers from long polls
434
459
 
435
460
  23-09-2014
461
+
436
462
  - Version 1.0.4
437
463
  - Change: MessageBus.access_control_allow_origin_lookup to extra_response_headers_lookup
438
464
 
439
465
  23-09-2014
466
+
440
467
  - Version 1.0.3
441
468
  - Change: MessageBus.access_control_allow_origin to MessageBus.access_control_allow_origin_lookup
442
469
 
443
470
  23-09-2014
471
+
444
472
  - Version 1.0.2
445
473
  - Feature: MessageBus.access_control_allow_origin to control origin header
446
474
 
447
475
  23-09-2014
476
+
448
477
  - Version 1.0.1
449
478
  - Feature: $.ajax dependency can be passed in.
450
479
  - Feature: unsubscribe accepts a second param for the function to unsubscribe.
451
480
 
452
481
  22-09-2014
482
+
453
483
  - Version 1.0.0
454
484
  - Feature: add backgroundCallbackInterval - interval to send polls when page is in the background
455
485
  - Feature: issue a long poll as soon as page moves into the foreground
456
486
 
457
487
  11-08-2014
488
+
458
489
  - Version 0.9.5
459
490
  - Fix: release db connection a lot earlier for long polling (rails defer closes)
460
491
 
461
492
  13-01-2014
493
+
462
494
  - Version 0.9.4
463
495
  - Added support for /global/ channel to publish messages across a multisite
464
496
  - Cleaned up test harness so it uses local bus as opposed to global
@@ -467,19 +499,23 @@
467
499
  - ensure_reactor could say the reactor is running, but it was not, on first call
468
500
 
469
501
  06-12-2013
502
+
470
503
  - Version 0.9.3.2
471
504
  - Fix permissions in gem
472
505
 
473
506
  05-12-2013
507
+
474
508
  - Version 0.9.3.1
475
509
  - Add MessageBus.diagnostics() for diagnosing bus issues client side
476
510
  - Add more robustness to JavaScript, if callbacks used to fail they would halt the chain
477
511
 
478
512
  03-12-2013
513
+
479
514
  - Version 0.9.3
480
515
  - Remove thin dependency
481
516
  - Improve robustness under failure conditions
482
517
 
483
518
  30-09-2013
519
+
484
520
  - Fix failures in Ruby 1.9
485
521
  - Set up rack hijack by default in light of passengers new setting
data/README.md CHANGED
@@ -26,15 +26,21 @@ MessageBus only support officially supported versions of Ruby; as of [2021-03-31
26
26
 
27
27
  Add this line to your application's Gemfile:
28
28
 
29
- gem 'message_bus'
29
+ ```ruby
30
+ gem 'message_bus'
31
+ ```
30
32
 
31
33
  And then execute:
32
34
 
33
- $ bundle
35
+ ```shell
36
+ $ bundle
37
+ ```
34
38
 
35
39
  Or install it yourself as:
36
40
 
37
- $ gem install message_bus
41
+ ```shell
42
+ $ gem install message_bus
43
+ ```
38
44
 
39
45
  ## Usage
40
46
 
@@ -109,7 +115,7 @@ MessageBus.user_id_lookup do |env|
109
115
  end
110
116
  ```
111
117
 
112
- If both `user_ids` and `group_ids` options are supplied when publishing a message, the message will be targeted at clients with lookup return values that matches on either the `user_ids` **or** the `group_ids` options.
118
+ If both `user_ids` and `group_ids` options are supplied when publishing a message, the message will be targeted at clients with lookup return values that matches on either the `user_ids` **or** the `group_ids` options.
113
119
 
114
120
  ```ruby
115
121
  MessageBus.publish "/channel", "hello", user_ids: [1, 2, 3], group_ids: [1, 2, 3]
@@ -129,7 +135,7 @@ Custom client message filters can be registered via `MessageBus#register_client_
129
135
 
130
136
  For example, ensuring that only messages seen by the server in the last 20 seconds are published to the client:
131
137
 
132
- ```
138
+ ```ruby
133
139
  MessageBus.register_client_message_filter('/test') do |message|
134
140
  (Time.now.to_i - message.data[:published_at]) <= 20
135
141
  end
@@ -280,7 +286,7 @@ MessageBus.start(); // call once at startup
280
286
  MessageBus.callbackInterval = 500;
281
287
 
282
288
  // you will get all new messages sent to channel
283
- MessageBus.subscribe("/channel", function(data){
289
+ MessageBus.subscribe("/channel", function (data) {
284
290
  // data shipped from server
285
291
  });
286
292
 
@@ -386,6 +392,16 @@ headers|{}|Extra headers to be include with requests. Properties and values of o
386
392
 
387
393
  message_bus can be configured to use one of several available storage backends, and each has its own configuration options.
388
394
 
395
+ ### Keepalive
396
+
397
+ To ensure correct operation of message_bus, every 60 seconds a message is broadcast to itself. If for any reason the message is not consumed by the same process within 3 keepalive intervals a warning log message is raised.
398
+
399
+ To control keepalive interval use
400
+
401
+ ```ruby
402
+ MessageBus.configure(keepalive_interval: 60)
403
+ ```
404
+
389
405
  ### Redis
390
406
 
391
407
  message_bus supports using Redis as a storage backend, and you can configure message_bus to use redis in `config/initializers/message_bus.rb`, like so:
@@ -435,7 +451,6 @@ MessageBus.configure(backend: :memory)
435
451
 
436
452
  The `:clear_every` option supported by the PostgreSQL backend is also supported by the in-memory backend.
437
453
 
438
-
439
454
  ### Transport codecs
440
455
 
441
456
  By default MessageBus serializes messages to the backend using JSON. Under most situation this performs extremely well.
@@ -456,7 +471,7 @@ Keep in mind, much of MessageBus internals and supporting tools expect data to b
456
471
 
457
472
  Another example may be very large and complicated messages where Oj in compatibility mode outperforms JSON. To opt for the Oj codec use:
458
473
 
459
- ```
474
+ ```ruby
460
475
  MessageBus.configure(transport_codec: MessageBus::Codec::Oj.new)
461
476
  ```
462
477
 
@@ -503,7 +518,6 @@ For more information see the [Passenger documentation](https://www.phusionpassen
503
518
 
504
519
  ```ruby
505
520
  # path/to/your/config/puma.rb
506
- require 'message_bus' # omit this line for Rails 5
507
521
  on_worker_boot do
508
522
  MessageBus.after_fork
509
523
  end
@@ -513,7 +527,6 @@ end
513
527
 
514
528
  ```ruby
515
529
  # path/to/your/config/unicorn.rb
516
- require 'message_bus'
517
530
  after_fork do |server, worker|
518
531
  MessageBus.after_fork
519
532
  end
@@ -554,26 +567,21 @@ MessageBus ships with an optional `DistributedCache` API which provides a simple
554
567
  require 'message_bus/distributed_cache'
555
568
 
556
569
  # process 1
557
-
558
570
  cache = MessageBus::DistributedCache.new("animals")
559
571
 
560
572
  # process 2
561
-
562
573
  cache = MessageBus::DistributedCache.new("animals")
563
574
 
564
575
  # process 1
565
-
566
576
  cache["frogs"] = 5
567
577
 
568
578
  # process 2
569
-
570
579
  puts cache["frogs"]
571
580
  # => 5
572
581
 
573
582
  cache["frogs"] = nil
574
583
 
575
584
  # process 1
576
-
577
585
  puts cache["frogs"]
578
586
  # => nil
579
587
  ```
@@ -631,7 +639,7 @@ In e.g. `config/initializers/message_bus.rb`:
631
639
  ```ruby
632
640
  MessageBus.extra_response_headers_lookup do |env|
633
641
  [
634
- ["Access-Control-Allow-Origin", "http://example.com:3000"],
642
+ ["Access-Control-Allow-Origin", "http://example.com:3000"],
635
643
  ]
636
644
  end
637
645
  ```
@@ -692,8 +700,8 @@ In certain conditions, a status message will be delivered and look like this:
692
700
  "message_id": -1,
693
701
  "channel": "/__status",
694
702
  "data": {
695
- "/some/channel":5,
696
- "/other/channel":9
703
+ "/some/channel": 5,
704
+ "/other/channel": 9
697
705
  }
698
706
  }
699
707
  ```
@@ -727,7 +735,7 @@ When submitting a PR, please be sure to include notes on it in the `Unreleased`
727
735
 
728
736
  To run tests you need both Postgres and Redis installed. By default on Redis the tests connect to `localhost:6379` and on Postgres connect the database `localhost:5432/message_bus_test` with the system username; if you wish to override this, you can set alternative values:
729
737
 
730
- ```
738
+ ```shell
731
739
  PGUSER=some_user PGDATABASE=some_db bundle exec rake
732
740
  ```
733
741
 
data/Rakefile CHANGED
@@ -5,18 +5,16 @@ require 'bundler'
5
5
  require 'bundler/gem_tasks'
6
6
  require 'bundler/setup'
7
7
  require 'rubocop/rake_task'
8
+ require 'yard'
8
9
 
9
- RuboCop::RakeTask.new
10
+ Bundler.require(:default, :test)
10
11
 
11
- require 'yard'
12
+ RuboCop::RakeTask.new
12
13
  YARD::Rake::YardocTask.new
13
14
 
14
- desc "Generate documentation for Yard, and fail if there are any warnings"
15
- task :test_doc do
16
- sh "yard --fail-on-warning #{'--no-progress' if ENV['CI']}"
17
- end
18
-
19
- Bundler.require(:default, :test)
15
+ BACKENDS = Dir["lib/message_bus/backends/*.rb"].map { |file| file.match(%r{backends/(?<backend>.*).rb})[:backend] } - ["base"]
16
+ SPEC_FILES = Dir['spec/**/*_spec.rb']
17
+ INTEGRATION_FILES = Dir['spec/integration/**/*_spec.rb']
20
18
 
21
19
  module CustomBuild
22
20
  def build_gem
@@ -31,6 +29,11 @@ module Bundler
31
29
  end
32
30
  end
33
31
 
32
+ desc "Generate documentation for Yard, and fail if there are any warnings"
33
+ task :test_doc do
34
+ sh "yard --fail-on-warning #{'--no-progress' if ENV['CI']}"
35
+ end
36
+
34
37
  namespace :jasmine do
35
38
  desc "Run Jasmine tests in headless mode"
36
39
  task 'ci' do
@@ -40,18 +43,16 @@ namespace :jasmine do
40
43
  end
41
44
  end
42
45
 
43
- backends = Dir["lib/message_bus/backends/*.rb"].map { |file| file.match(%r{backends/(?<backend>.*).rb})[:backend] } - ["base"]
44
-
45
46
  namespace :spec do
46
- spec_files = Dir['spec/**/*_spec.rb']
47
- integration_files = Dir['spec/integration/**/*_spec.rb']
48
-
49
- backends.each do |backend|
47
+ BACKENDS.each do |backend|
50
48
  desc "Run tests on the #{backend} backend"
51
49
  task backend do
52
50
  begin
53
51
  ENV['MESSAGE_BUS_BACKEND'] = backend
54
- sh "#{FileUtils::RUBY} -e \"ARGV.each{|f| load f}\" #{(spec_files - integration_files).to_a.join(' ')}"
52
+ Rake::TestTask.new(backend) do |t|
53
+ t.test_files = SPEC_FILES - INTEGRATION_FILES
54
+ end
55
+ Rake::Task[backend].invoke
55
56
  ensure
56
57
  ENV.delete('MESSAGE_BUS_BACKEND')
57
58
  end
@@ -74,7 +75,10 @@ namespace :spec do
74
75
  ENV['MESSAGE_BUS_BACKEND'] = 'memory'
75
76
  pid = spawn("bundle exec puma -p 9292 spec/fixtures/test/config.ru")
76
77
  sleep 1 while port_available?(9292)
77
- sh "#{FileUtils::RUBY} -e \"ARGV.each{|f| load f}\" #{integration_files.to_a.join(' ')}"
78
+ Rake::TestTask.new(:integration) do |t|
79
+ t.test_files = INTEGRATION_FILES
80
+ end
81
+ Rake::Task[:integration].invoke
78
82
  ensure
79
83
  ENV.delete('MESSAGE_BUS_BACKEND')
80
84
  Process.kill('TERM', pid) if pid
@@ -83,12 +87,12 @@ namespace :spec do
83
87
  end
84
88
 
85
89
  desc "Run tests on all backends, plus client JS tests"
86
- task spec: backends.map { |backend| "spec:#{backend}" } + ["jasmine:ci", "spec:integration"]
90
+ task spec: BACKENDS.map { |backend| "spec:#{backend}" } + ["jasmine:ci", "spec:integration"]
87
91
 
88
92
  desc "Run performance benchmarks on all backends"
89
93
  task :performance do
90
94
  begin
91
- ENV['MESSAGE_BUS_BACKENDS'] = backends.join(",")
95
+ ENV['MESSAGE_BUS_BACKENDS'] = BACKENDS.join(",")
92
96
  sh "#{FileUtils::RUBY} -e \"ARGV.each{|f| load f}\" #{Dir['spec/performance/*.rb'].to_a.join(' ')}"
93
97
  ensure
94
98
  ENV.delete('MESSAGE_BUS_BACKENDS')
@@ -97,7 +101,3 @@ end
97
101
 
98
102
  desc "Run all tests, link checks and confirms documentation compiles without error"
99
103
  task default: [:spec, :rubocop, :test_doc]
100
-
101
- Rake::Task['release'].enhance do
102
- sh "yarn publish"
103
- end
@@ -259,6 +259,7 @@ module MessageBus
259
259
  @max_backlog_age = 604800
260
260
  @clear_every = config[:clear_every] || 1
261
261
  @mutex = Mutex.new
262
+ @client = nil
262
263
  end
263
264
 
264
265
  # Reconnects to Postgres; used after a process fork, typically triggered by a forking webserver
@@ -58,6 +58,7 @@ module MessageBus
58
58
  @in_memory_backlog = []
59
59
  @lock = Mutex.new
60
60
  @flush_backlog_thread = nil
61
+ @pub_redis = nil
61
62
  # after 7 days inactive backlogs will be removed
62
63
  @max_backlog_age = 604800
63
64
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MessageBus
4
- VERSION = "3.3.8"
4
+ VERSION = "3.4.0"
5
5
  end
data/lib/message_bus.rb CHANGED
@@ -744,34 +744,11 @@ module MessageBus::Implementation
744
744
  if !@destroyed && thread.alive? && keepalive_interval > MIN_KEEPALIVE
745
745
 
746
746
  publish("/__mb_keepalive__/", Process.pid, user_ids: [-1])
747
- # going for x3 keepalives missed for a restart, need to ensure this only very rarely happens
748
- # note: after_fork will sort out a bad @last_message date, but thread will be dead anyway
749
747
  if (Time.now - (@last_message || Time.now)) > keepalive_interval * 3
750
- logger.warn "Global messages on #{Process.pid} timed out, restarting process"
751
- # No other clean way to remove this thread, its listening on a socket
752
- # no data is arriving
753
- #
754
- # In production we see this kind of situation ... sometimes ... when there is
755
- # a VRRP failover, or weird networking condition
756
- pid = Process.pid
757
-
758
- # do the best we can to terminate self cleanly
759
- fork do
760
- Process.kill('TERM', pid)
761
- sleep 10
762
- begin
763
- Process.kill('KILL', pid)
764
- rescue Errno::ESRCH
765
- logger.warn "#{Process.pid} successfully terminated by `TERM` signal."
766
- end
767
- end
768
-
769
- sleep 10
770
- Process.kill('KILL', pid)
771
-
772
- else
773
- timer.queue(keepalive_interval, &blk) if keepalive_interval > MIN_KEEPALIVE
748
+ logger.warn "Global messages on #{Process.pid} timed out, message bus is no longer functioning correctly"
774
749
  end
750
+
751
+ timer.queue(keepalive_interval, &blk) if keepalive_interval > MIN_KEEPALIVE
775
752
  end
776
753
  end
777
754
 
@@ -91,6 +91,7 @@ describe PUB_SUB_CLASS do
91
91
  end
92
92
 
93
93
  bus.global_unsubscribe
94
+ bus.reset!
94
95
  bus.destroy
95
96
  end
96
97
  end
@@ -52,10 +52,6 @@ describe MessageBus::TimerThread do
52
52
  it "should call the error callback if something goes wrong" do
53
53
  error = nil
54
54
 
55
- @timer.queue do
56
- boom
57
- end
58
-
59
55
  @timer.on_error do |e|
60
56
  error = e
61
57
  end
@@ -64,7 +60,7 @@ describe MessageBus::TimerThread do
64
60
  boom
65
61
  end
66
62
 
67
- wait_for(10) do
63
+ wait_for(100) do
68
64
  error
69
65
  end
70
66
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: message_bus
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.3.8
4
+ version: 3.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam Saffron
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-12-20 00:00:00.000000000 Z
11
+ date: 2021-12-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -362,7 +362,7 @@ homepage: https://github.com/discourse/message_bus
362
362
  licenses:
363
363
  - MIT
364
364
  metadata: {}
365
- post_install_message:
365
+ post_install_message:
366
366
  rdoc_options: []
367
367
  require_paths:
368
368
  - lib
@@ -377,8 +377,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
377
377
  - !ruby/object:Gem::Version
378
378
  version: '0'
379
379
  requirements: []
380
- rubygems_version: 3.1.6
381
- signing_key:
380
+ rubygems_version: 3.3.3
381
+ signing_key:
382
382
  specification_version: 4
383
383
  summary: ''
384
384
  test_files: