From b4a11193560abec2a0baee20c64a9a86c8da657b Mon Sep 17 00:00:00 2001 From: Navid EMAD Date: Wed, 25 Sep 2024 20:58:20 +0200 Subject: [PATCH 1/6] Support nil logger --- .../subscription_adapter/solid_cable.rb | 2 +- .../subscription_adapter/solid_cable_test.rb | 29 ++++++++++++++----- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/lib/action_cable/subscription_adapter/solid_cable.rb b/lib/action_cable/subscription_adapter/solid_cable.rb index bebc37c..401c273 100644 --- a/lib/action_cable/subscription_adapter/solid_cable.rb +++ b/lib/action_cable/subscription_adapter/solid_cable.rb @@ -104,7 +104,7 @@ def broadcast_messages end def with_polling_volume - if ::SolidCable.silence_polling? + if ::SolidCable.silence_polling? && ActiveRecord::Base.logger ActiveRecord::Base.logger.silence { yield } else yield diff --git a/test/lib/action_cable/subscription_adapter/solid_cable_test.rb b/test/lib/action_cable/subscription_adapter/solid_cable_test.rb index c09e587..154afaa 100644 --- a/test/lib/action_cable/subscription_adapter/solid_cable_test.rb +++ b/test/lib/action_cable/subscription_adapter/solid_cable_test.rb @@ -14,16 +14,16 @@ class ActionCable::SubscriptionAdapter::SolidCableTest < ActionCable::TestCase WAIT_WHEN_NOT_EXPECTING_EVENT = 0.2 setup do - server = ActionCable::Server::Base.new - server.config.cable = cable_config.with_indifferent_access - server.config.logger = Logger.new(StringIO.new).tap do |l| + @server = ActionCable::Server::Base.new + @server.config.cable = cable_config.with_indifferent_access + @server.config.logger = Logger.new(StringIO.new).tap do |l| l.level = Logger::UNKNOWN end - adapter_klass = server.config.pubsub_adapter + adapter_klass = @server.config.pubsub_adapter - @rx_adapter = adapter_klass.new(server) - @tx_adapter = adapter_klass.new(server) + @rx_adapter = adapter_klass.new(@server) + @tx_adapter = adapter_klass.new(@server) @tx_adapter.shutdown @tx_adapter = @rx_adapter @@ -136,10 +136,18 @@ class ActionCable::SubscriptionAdapter::SolidCableTest < ActionCable::TestCase end end + test "silencing polling queries when there's no Active Record logger" do + with_active_record_logger(nil) do + @rx_adapter.send(:listener).send(:broadcast_messages) + end + + assert true + end + private def cable_config { adapter: "solid_cable", message_retention: "1.second", - polling_interval: "0.01.seconds" } + polling_interval: "0.01.seconds", silence_polling: true } end def subscribe_as_queue(channel, adapter = @rx_adapter) @@ -159,4 +167,11 @@ def subscribe_as_queue(channel, adapter = @rx_adapter) ensure adapter.unsubscribe(channel, callback) if subscribed.set? end + + def with_active_record_logger(logger) + old_logger, @server.config.logger = @server.config.logger, logger + yield + ensure + @server.config.logger = old_logger + end end From c59380919d0d7347ca27c41022b1ac520ba4bf31 Mon Sep 17 00:00:00 2001 From: Navid EMAD Date: Wed, 25 Sep 2024 21:24:44 +0200 Subject: [PATCH 2/6] Fix silence for older rails version --- lib/action_cable/subscription_adapter/solid_cable.rb | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/action_cable/subscription_adapter/solid_cable.rb b/lib/action_cable/subscription_adapter/solid_cable.rb index 401c273..2d80967 100644 --- a/lib/action_cable/subscription_adapter/solid_cable.rb +++ b/lib/action_cable/subscription_adapter/solid_cable.rb @@ -105,7 +105,17 @@ def broadcast_messages def with_polling_volume if ::SolidCable.silence_polling? && ActiveRecord::Base.logger - ActiveRecord::Base.logger.silence { yield } + if ActiveRecord::Base.logger.respond_to?(:silence) + ActiveRecord::Base.logger.silence { yield } + else + begin + old_level = ActiveRecord::Base.logger.level + ActiveRecord::Base.logger.level = Logger::ERROR + yield + ensure + ActiveRecord::Base.logger.level = old_level + end + end else yield end From 9c2780f8a805db2b79433fd01fdbb7322144e54b Mon Sep 17 00:00:00 2001 From: Navid EMAD Date: Sat, 28 Sep 2024 18:26:14 +0200 Subject: [PATCH 3/6] Fixes PR reviews --- .../subscription_adapter/solid_cable_test.rb | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/test/lib/action_cable/subscription_adapter/solid_cable_test.rb b/test/lib/action_cable/subscription_adapter/solid_cable_test.rb index 154afaa..14ab4e9 100644 --- a/test/lib/action_cable/subscription_adapter/solid_cable_test.rb +++ b/test/lib/action_cable/subscription_adapter/solid_cable_test.rb @@ -136,18 +136,21 @@ class ActionCable::SubscriptionAdapter::SolidCableTest < ActionCable::TestCase end end - test "silencing polling queries when there's no Active Record logger" do + test "does not raise error when polling with no Active Record logger" do with_active_record_logger(nil) do - @rx_adapter.send(:listener).send(:broadcast_messages) + subscribe_as_queue("channel") do |queue| + assert_nothing_raised do + @tx_adapter.broadcast("channel", "hello world") + end + assert_equal "hello world", queue.pop + end end - - assert true end private def cable_config { adapter: "solid_cable", message_retention: "1.second", - polling_interval: "0.01.seconds", silence_polling: true } + polling_interval: "0.01.seconds" } end def subscribe_as_queue(channel, adapter = @rx_adapter) @@ -169,7 +172,8 @@ def subscribe_as_queue(channel, adapter = @rx_adapter) end def with_active_record_logger(logger) - old_logger, @server.config.logger = @server.config.logger, logger + old_logger = @server.config.logger + @server.config.logger = logger yield ensure @server.config.logger = old_logger From 92c85c385041639e76a0b42af195c92a16072d31 Mon Sep 17 00:00:00 2001 From: Navid EMAD Date: Sat, 28 Sep 2024 19:16:24 +0200 Subject: [PATCH 4/6] Simplify with_polling_volume method --- lib/action_cable/subscription_adapter/solid_cable.rb | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/lib/action_cable/subscription_adapter/solid_cable.rb b/lib/action_cable/subscription_adapter/solid_cable.rb index 2d80967..401c273 100644 --- a/lib/action_cable/subscription_adapter/solid_cable.rb +++ b/lib/action_cable/subscription_adapter/solid_cable.rb @@ -105,17 +105,7 @@ def broadcast_messages def with_polling_volume if ::SolidCable.silence_polling? && ActiveRecord::Base.logger - if ActiveRecord::Base.logger.respond_to?(:silence) - ActiveRecord::Base.logger.silence { yield } - else - begin - old_level = ActiveRecord::Base.logger.level - ActiveRecord::Base.logger.level = Logger::ERROR - yield - ensure - ActiveRecord::Base.logger.level = old_level - end - end + ActiveRecord::Base.logger.silence { yield } else yield end From 40185fa2b8b0827af319e2b2241d323e008d68d8 Mon Sep 17 00:00:00 2001 From: Navid EMAD Date: Sat, 28 Sep 2024 23:53:14 +0200 Subject: [PATCH 5/6] Fixes PR reviews --- test/dummy/solid_cable_test-shm | Bin 0 -> 32768 bytes test/dummy/solid_cable_test-wal | 0 .../subscription_adapter/solid_cable_test.rb | 27 +++++++++--------- 3 files changed, 14 insertions(+), 13 deletions(-) create mode 100644 test/dummy/solid_cable_test-shm create mode 100644 test/dummy/solid_cable_test-wal diff --git a/test/dummy/solid_cable_test-shm b/test/dummy/solid_cable_test-shm new file mode 100644 index 0000000000000000000000000000000000000000..fe9ac2845eca6fe6da8a63cd096d9cf9e24ece10 GIT binary patch literal 32768 zcmeIuAr62r3 Date: Sat, 28 Sep 2024 23:54:56 +0200 Subject: [PATCH 6/6] Fixes PR reviews --- test/lib/action_cable/subscription_adapter/solid_cable_test.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/lib/action_cable/subscription_adapter/solid_cable_test.rb b/test/lib/action_cable/subscription_adapter/solid_cable_test.rb index 8a869c2..6dedad8 100644 --- a/test/lib/action_cable/subscription_adapter/solid_cable_test.rb +++ b/test/lib/action_cable/subscription_adapter/solid_cable_test.rb @@ -11,7 +11,7 @@ class ActionCable::SubscriptionAdapter::SolidCableTest < ActionCable::TestCase include ConfigStubs WAIT_WHEN_EXPECTING_EVENT = 1 - WAIT_WHEN_NOT_EXPECTING_EVENT = 1 + WAIT_WHEN_NOT_EXPECTING_EVENT = 0.2 setup do server = ActionCable::Server::Base.new