diff --git a/app/controllers/admin/users_controller.rb b/app/controllers/admin/users_controller.rb index c1194709f..6b8a0fca4 100644 --- a/app/controllers/admin/users_controller.rb +++ b/app/controllers/admin/users_controller.rb @@ -54,7 +54,7 @@ class Admin::UsersController < Admin::AdminController @user.suspended_at = DateTime.now @user.save! StaffActionLogger.new(current_user).log_user_suspend(@user, params[:reason]) - MessageBus.publish "/logout", @user.id, user_ids: [@user.id] + DiscourseBus.publish "/logout", @user.id, user_ids: [@user.id] render nothing: true end @@ -71,7 +71,7 @@ class Admin::UsersController < Admin::AdminController if @user @user.auth_token = nil @user.save! - MessageBus.publish "/logout", @user.id, user_ids: [@user.id] + DiscourseBus.publish "/logout", @user.id, user_ids: [@user.id] render json: success_json else render json: {error: I18n.t('admin_js.admin.users.id_not_found')}, status: 404 @@ -350,7 +350,7 @@ class Admin::UsersController < Admin::AdminController end def refresh_browser(user) - MessageBus.publish "/file-change", ["refresh"], user_ids: [user.id] + DiscourseBus.publish "/file-change", ["refresh"], user_ids: [user.id] end end diff --git a/app/controllers/admin/versions_controller.rb b/app/controllers/admin/versions_controller.rb index 967c477e2..d92e8b192 100644 --- a/app/controllers/admin/versions_controller.rb +++ b/app/controllers/admin/versions_controller.rb @@ -4,4 +4,4 @@ class Admin::VersionsController < Admin::AdminController def show render json: DiscourseUpdates.check_version end -end \ No newline at end of file +end diff --git a/app/models/category.rb b/app/models/category.rb index e35f78468..91b247355 100644 --- a/app/models/category.rb +++ b/app/models/category.rb @@ -222,7 +222,7 @@ SQL end def publish_categories_list - MessageBus.publish('/categories', {categories: ActiveModel::ArraySerializer.new(Category.latest).as_json}) + DiscourseBus.publish('/categories', {categories: ActiveModel::ArraySerializer.new(Category.latest).as_json}) end def parent_category_validator diff --git a/app/models/color_scheme.rb b/app/models/color_scheme.rb index d4a1b02de..a575db8fd 100644 --- a/app/models/color_scheme.rb +++ b/app/models/color_scheme.rb @@ -97,7 +97,7 @@ class ColorScheme < ActiveRecord::Base end def publish_discourse_stylesheet - MessageBus.publish("/discourse_stylesheet", self.name) + DiscourseBus.publish("/discourse_stylesheet", self.name) DiscourseStylesheets.cache.clear end diff --git a/app/models/concerns/roleable.rb b/app/models/concerns/roleable.rb index c266eb6b8..554ba1c35 100644 --- a/app/models/concerns/roleable.rb +++ b/app/models/concerns/roleable.rb @@ -44,4 +44,4 @@ module Roleable save_and_refresh_staff_groups! end -end \ No newline at end of file +end diff --git a/app/models/post.rb b/app/models/post.rb index 281b6a3d4..9ddf014ea 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -97,7 +97,7 @@ class Post < ActiveRecord::Base # special failsafe for posts missing topics # consistency checks should fix, but message # is safe to skip - MessageBus.publish("/topic/#{topic_id}", { + DiscourseBus.publish("/topic/#{topic_id}", { id: id, post_number: post_number, updated_at: Time.now, diff --git a/app/models/post_action.rb b/app/models/post_action.rb index 5fc133012..72722d4e1 100644 --- a/app/models/post_action.rb +++ b/app/models/post_action.rb @@ -56,7 +56,7 @@ class PostAction < ActiveRecord::Base $redis.set('posts_flagged_count', posts_flagged_count) user_ids = User.staff.pluck(:id) - MessageBus.publish('/flagged_counts', { total: posts_flagged_count }, { user_ids: user_ids }) + DiscourseBus.publish('/flagged_counts', { total: posts_flagged_count }, { user_ids: user_ids }) end def self.flagged_posts_count diff --git a/app/models/queued_post.rb b/app/models/queued_post.rb index f93e7e8f1..0df3dee71 100644 --- a/app/models/queued_post.rb +++ b/app/models/queued_post.rb @@ -30,7 +30,7 @@ class QueuedPost < ActiveRecord::Base def self.broadcast_new! msg = { post_queue_new_count: QueuedPost.new_count } - MessageBus.publish('/queue_counts', msg, user_ids: User.staff.pluck(:id)) + DiscourseBus.publish('/queue_counts', msg, user_ids: User.staff.pluck(:id)) end def reject!(rejected_by) diff --git a/app/models/site_customization.rb b/app/models/site_customization.rb index 790f15ca4..aff6ae159 100644 --- a/app/models/site_customization.rb +++ b/app/models/site_customization.rb @@ -34,11 +34,11 @@ class SiteCustomization < ActiveRecord::Base after_save do remove_from_cache! if stylesheet_changed? || mobile_stylesheet_changed? - MessageBus.publish "/file-change/#{key}", SecureRandom.hex - MessageBus.publish "/file-change/#{SiteCustomization::ENABLED_KEY}", SecureRandom.hex + DiscourseBus.publish "/file-change/#{key}", SecureRandom.hex + DiscourseBus.publish "/file-change/#{SiteCustomization::ENABLED_KEY}", SecureRandom.hex end - MessageBus.publish "/header-change/#{key}", header if header_changed? - MessageBus.publish "/footer-change/#{key}", footer if footer_changed? + DiscourseBus.publish "/header-change/#{key}", header if header_changed? + DiscourseBus.publish "/footer-change/#{key}", footer if footer_changed? DiscourseStylesheets.cache.clear end @@ -109,7 +109,7 @@ class SiteCustomization < ActiveRecord::Base end def self.remove_from_cache!(key, broadcast = true) - MessageBus.publish('/site_customization', key: key) if broadcast + DiscourseBus.publish('/site_customization', key: key) if broadcast clear_cache! end diff --git a/app/models/topic.rb b/app/models/topic.rb index 89d380d96..16710ed9a 100644 --- a/app/models/topic.rb +++ b/app/models/topic.rb @@ -636,7 +636,7 @@ class Topic < ActiveRecord::Base self.add_moderator_post(user, I18n.t("archetypes.banner.message.make")) self.save - MessageBus.publish('/site/banner', banner) + DiscourseBus.publish('/site/banner', banner) end def remove_banner!(user) @@ -644,7 +644,7 @@ class Topic < ActiveRecord::Base self.add_moderator_post(user, I18n.t("archetypes.banner.message.remove")) self.save - MessageBus.publish('/site/banner', nil) + DiscourseBus.publish('/site/banner', nil) end def banner diff --git a/app/models/topic_tracking_state.rb b/app/models/topic_tracking_state.rb index 0bf3fa709..61ca7506e 100644 --- a/app/models/topic_tracking_state.rb +++ b/app/models/topic_tracking_state.rb @@ -33,7 +33,7 @@ class TopicTrackingState group_ids = topic.category && topic.category.secure_group_ids - MessageBus.publish("/new", message.as_json, group_ids: group_ids) + DiscourseBus.publish("/new", message.as_json, group_ids: group_ids) publish_read(topic.id, 1, topic.user_id) end @@ -51,7 +51,7 @@ class TopicTrackingState } group_ids = topic.category && topic.category.secure_group_ids - MessageBus.publish("/latest", message.as_json, group_ids: group_ids) + DiscourseBus.publish("/latest", message.as_json, group_ids: group_ids) end def self.publish_unread(post) @@ -77,7 +77,7 @@ class TopicTrackingState } } - MessageBus.publish("/unread/#{tu.user_id}", message.as_json, group_ids: group_ids) + DiscourseBus.publish("/unread/#{tu.user_id}", message.as_json, group_ids: group_ids) end end @@ -97,7 +97,7 @@ class TopicTrackingState } } - MessageBus.publish("/unread/#{user_id}", message.as_json, user_ids: [user_id]) + DiscourseBus.publish("/unread/#{user_id}", message.as_json, user_ids: [user_id]) end diff --git a/app/models/topic_user.rb b/app/models/topic_user.rb index 2611039f3..87df2c633 100644 --- a/app/models/topic_user.rb +++ b/app/models/topic_user.rb @@ -40,7 +40,7 @@ class TopicUser < ActiveRecord::Base notifications_reason_id: reason ) - MessageBus.publish("/topic/#{topic_id}", { + DiscourseBus.publish("/topic/#{topic_id}", { notification_level_change: notification_levels[:tracking], notifications_reason_id: reason }, user_ids: [user_id]) @@ -113,7 +113,7 @@ class TopicUser < ActiveRecord::Base end if attrs[:notification_level] - MessageBus.publish("/topic/#{topic_id}", + DiscourseBus.publish("/topic/#{topic_id}", {notification_level_change: attrs[:notification_level]}, user_ids: [user_id]) end @@ -196,7 +196,7 @@ class TopicUser < ActiveRecord::Base end if before != after - MessageBus.publish("/topic/#{topic_id}", {notification_level_change: after}, user_ids: [user.id]) + DiscourseBus.publish("/topic/#{topic_id}", {notification_level_change: after}, user_ids: [user.id]) end end @@ -219,7 +219,7 @@ class TopicUser < ActiveRecord::Base WHERE ftu.user_id = :user_id and ftu.topic_id = :topic_id)", args) - MessageBus.publish("/topic/#{topic_id}", {notification_level_change: args[:new_status]}, user_ids: [user.id]) + DiscourseBus.publish("/topic/#{topic_id}", {notification_level_change: args[:new_status]}, user_ids: [user.id]) end end diff --git a/app/models/user.rb b/app/models/user.rb index 0120ad5d7..904fea779 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -206,7 +206,7 @@ class User < ActiveRecord::Base # tricky, we need our bus to be subscribed from the right spot def sync_notification_channel_position @unread_notifications_by_type = nil - self.notification_channel_position = MessageBus.last_id("/notification/#{id}") + self.notification_channel_position = DiscourseBus.last_id("/notification/#{id}") end def invited_by @@ -298,7 +298,7 @@ class User < ActiveRecord::Base end def publish_notifications_state - MessageBus.publish("/notification/#{id}", + DiscourseBus.publish("/notification/#{id}", {unread_notifications: unread_notifications, unread_private_messages: unread_private_messages, total_unread_notifications: total_unread_notifications}, diff --git a/app/models/user_action.rb b/app/models/user_action.rb index 0e979991c..11926badf 100644 --- a/app/models/user_action.rb +++ b/app/models/user_action.rb @@ -224,7 +224,7 @@ SQL end if action.user - MessageBus.publish("/users/#{action.user.username.downcase}", action.id, user_ids: [user_id], group_ids: group_ids) + DiscourseBus.publish("/users/#{action.user.username.downcase}", action.id, user_ids: [user_id], group_ids: group_ids) end action @@ -240,7 +240,7 @@ SQL require_parameters(hash, :action_type, :user_id, :acting_user_id, :target_topic_id, :target_post_id) if action = UserAction.find_by(hash.except(:created_at)) action.destroy - MessageBus.publish("/user/#{hash[:user_id]}", {user_action_id: action.id, remove: true}) + DiscourseBus.publish("/user/#{hash[:user_id]}", {user_action_id: action.id, remove: true}) end update_like_count(hash[:user_id], hash[:action_type], -1) diff --git a/app/serializers/color_scheme_serializer.rb b/app/serializers/color_scheme_serializer.rb index bf09ff401..965d59237 100644 --- a/app/serializers/color_scheme_serializer.rb +++ b/app/serializers/color_scheme_serializer.rb @@ -5,4 +5,4 @@ class ColorSchemeSerializer < ApplicationSerializer def base object.is_base || false end -end \ No newline at end of file +end diff --git a/app/serializers/discourse_version_check_serializer.rb b/app/serializers/discourse_version_check_serializer.rb index 73cf1e696..ef53a6461 100644 --- a/app/serializers/discourse_version_check_serializer.rb +++ b/app/serializers/discourse_version_check_serializer.rb @@ -2,4 +2,4 @@ class DiscourseVersionCheckSerializer < ApplicationSerializer attributes :latest_version, :critical_updates, :installed_version, :installed_sha, :missing_versions_count, :updated_at self.root = false -end \ No newline at end of file +end diff --git a/app/services/spam_rule/auto_block.rb b/app/services/spam_rule/auto_block.rb index bc3910e26..2a5fa9dd6 100644 --- a/app/services/spam_rule/auto_block.rb +++ b/app/services/spam_rule/auto_block.rb @@ -42,4 +42,4 @@ class SpamRule::AutoBlock end end end -end \ No newline at end of file +end diff --git a/app/services/user_blocker.rb b/app/services/user_blocker.rb index 6106080e0..9a8dd7493 100644 --- a/app/services/user_blocker.rb +++ b/app/services/user_blocker.rb @@ -37,4 +37,4 @@ class UserBlocker end end -end \ No newline at end of file +end diff --git a/app/services/user_destroyer.rb b/app/services/user_destroyer.rb index 7f7a8c825..e41f04e59 100644 --- a/app/services/user_destroyer.rb +++ b/app/services/user_destroyer.rb @@ -77,7 +77,7 @@ class UserDestroyer end StaffActionLogger.new(@actor == user ? Discourse.system_user : @actor).log_user_deletion(user, opts.slice(:context)) - MessageBus.publish "/file-change", ["refresh"], user_ids: [user.id] + DiscourseBus.publish "/file-change", ["refresh"], user_ids: [user.id] end end end diff --git a/config/initializers/04-discourse_bus.rb b/config/initializers/04-discourse_bus.rb new file mode 100644 index 000000000..57b44c675 --- /dev/null +++ b/config/initializers/04-discourse_bus.rb @@ -0,0 +1,3 @@ +require_dependency 'discourse_bus' + +DiscourseBus.start! diff --git a/config/initializers/04-message_bus.rb b/config/initializers/04-message_bus.rb deleted file mode 100644 index 7ada7b9ff..000000000 --- a/config/initializers/04-message_bus.rb +++ /dev/null @@ -1,47 +0,0 @@ -MessageBus.site_id_lookup do - RailsMultisite::ConnectionManagement.current_db -end - -MessageBus.extra_response_headers_lookup do |env| - { - "Access-Control-Allow-Origin" => Discourse.base_url_no_prefix, - "Access-Control-Allow-Methods" => "GET, POST", - "Access-Control-Allow-Headers" => "X-SILENCE-LOGGER, X-Shared-Session-Key" - } -end - -MessageBus.user_id_lookup do |env| - user = CurrentUser.lookup_from_env(env) - user.id if user -end - -MessageBus.group_ids_lookup do |env| - user = CurrentUser.lookup_from_env(env) - user.groups.select('groups.id').map{|g| g.id} if user -end - -MessageBus.on_connect do |site_id| - RailsMultisite::ConnectionManagement.establish_connection(db: site_id) -end - -MessageBus.on_disconnect do |site_id| - ActiveRecord::Base.connection_handler.clear_active_connections! -end - -# Point at our redis -MessageBus.redis_config = YAML.load(ERB.new(File.new("#{Rails.root}/config/redis.yml").read).result)[Rails.env].symbolize_keys - -MessageBus.long_polling_enabled = SiteSetting.enable_long_polling -MessageBus.long_polling_interval = SiteSetting.long_polling_interval - -MessageBus.is_admin_lookup do |env| - user = CurrentUser.lookup_from_env(env) - if user && user.admin - true - else - false - end -end - -MessageBus.cache_assets = !Rails.env.development? -MessageBus.enable_diagnostics diff --git a/config/initializers/11-rack-protection.rb b/config/initializers/11-rack-protection.rb index 68e3d7106..a0fce3853 100644 --- a/config/initializers/11-rack-protection.rb +++ b/config/initializers/11-rack-protection.rb @@ -1,3 +1,3 @@ require 'rack/protection' -Rails.configuration.middleware.use Rack::Protection::FrameOptions \ No newline at end of file +Rails.configuration.middleware.use Rack::Protection::FrameOptions diff --git a/config/initializers/oj.rb b/config/initializers/oj.rb index a2f77ffc3..5f34bca19 100644 --- a/config/initializers/oj.rb +++ b/config/initializers/oj.rb @@ -1,2 +1,2 @@ # Not sure why it's not using this by default! -MultiJson.engine = :oj \ No newline at end of file +MultiJson.engine = :oj diff --git a/config/initializers/onebox_options.rb b/config/initializers/onebox_options.rb index 4f99f840e..81e4c93fd 100644 --- a/config/initializers/onebox_options.rb +++ b/config/initializers/onebox_options.rb @@ -2,4 +2,4 @@ require_dependency 'twitter_api' Onebox.options = { twitter_client: TwitterApi -} \ No newline at end of file +} diff --git a/config/initializers/rails3_ar_after_commit_tests.rb b/config/initializers/rails3_ar_after_commit_tests.rb index d9b4c6d45..d8d8caed8 100644 --- a/config/initializers/rails3_ar_after_commit_tests.rb +++ b/config/initializers/rails3_ar_after_commit_tests.rb @@ -20,4 +20,4 @@ if Rails.env.test? end end -end \ No newline at end of file +end diff --git a/config/initializers/strong_parameters.rb b/config/initializers/strong_parameters.rb index c25ce4c2b..394c1f5fd 100644 --- a/config/initializers/strong_parameters.rb +++ b/config/initializers/strong_parameters.rb @@ -1 +1 @@ -ActiveRecord::Base.send(:include, ActiveModel::ForbiddenAttributesProtection) \ No newline at end of file +ActiveRecord::Base.send(:include, ActiveModel::ForbiddenAttributesProtection) diff --git a/config/initializers/verify_config.rb b/config/initializers/verify_config.rb index d7070c7db..c0c0a8965 100644 --- a/config/initializers/verify_config.rb +++ b/config/initializers/verify_config.rb @@ -28,4 +28,4 @@ END raise "Assets have not been precompiled" end -end \ No newline at end of file +end diff --git a/db/migrate/20130712163509_add_missing_id_columns.rb b/db/migrate/20130712163509_add_missing_id_columns.rb index 293a6638b..97987e0bc 100644 --- a/db/migrate/20130712163509_add_missing_id_columns.rb +++ b/db/migrate/20130712163509_add_missing_id_columns.rb @@ -8,4 +8,4 @@ class AddMissingIdColumns < ActiveRecord::Migration remove_column :category_featured_topics, :id remove_column :topic_users, :id end -end \ No newline at end of file +end diff --git a/db/migrate/20131210181901_migrate_word_counts.rb b/db/migrate/20131210181901_migrate_word_counts.rb index b922ae401..64e05aae9 100644 --- a/db/migrate/20131210181901_migrate_word_counts.rb +++ b/db/migrate/20131210181901_migrate_word_counts.rb @@ -30,4 +30,4 @@ class MigrateWordCounts < ActiveRecord::Migration end -end \ No newline at end of file +end diff --git a/db/migrate/20140224232712_add_profile_background_to_user.rb b/db/migrate/20140224232712_add_profile_background_to_user.rb index edf46f593..83c0e2314 100644 --- a/db/migrate/20140224232712_add_profile_background_to_user.rb +++ b/db/migrate/20140224232712_add_profile_background_to_user.rb @@ -2,4 +2,4 @@ class AddProfileBackgroundToUser < ActiveRecord::Migration def change add_column :users, :profile_background, :string, limit: 255 end -end \ No newline at end of file +end diff --git a/db/migrate/20140817011612_add_external_avatar_url_to_single_sign_on_record.rb b/db/migrate/20140817011612_add_external_avatar_url_to_single_sign_on_record.rb index 926615c55..6069d8771 100644 --- a/db/migrate/20140817011612_add_external_avatar_url_to_single_sign_on_record.rb +++ b/db/migrate/20140817011612_add_external_avatar_url_to_single_sign_on_record.rb @@ -2,4 +2,4 @@ class AddExternalAvatarUrlToSingleSignOnRecord < ActiveRecord::Migration def change add_column :single_sign_on_records, :external_avatar_url, :string end -end \ No newline at end of file +end diff --git a/lib/auth/default_current_user_provider.rb b/lib/auth/default_current_user_provider.rb index 1e5cec773..19a3084bb 100644 --- a/lib/auth/default_current_user_provider.rb +++ b/lib/auth/default_current_user_provider.rb @@ -85,7 +85,7 @@ class Auth::DefaultCurrentUserProvider if SiteSetting.log_out_strict && (user = current_user) user.auth_token = nil user.save! - MessageBus.publish "/logout", user.id, user_ids: [user.id] + DiscourseBus.publish "/logout", user.id, user_ids: [user.id] end cookies[TOKEN_COOKIE] = nil end diff --git a/lib/auth/google_oauth2_authenticator.rb b/lib/auth/google_oauth2_authenticator.rb index 86af469e2..0f40c91f0 100644 --- a/lib/auth/google_oauth2_authenticator.rb +++ b/lib/auth/google_oauth2_authenticator.rb @@ -64,4 +64,4 @@ class Auth::GoogleOAuth2Authenticator < Auth::Authenticator h end -end \ No newline at end of file +end diff --git a/lib/backup_restore/backup_restore.rb b/lib/backup_restore/backup_restore.rb index c917be31b..c419e8299 100644 --- a/lib/backup_restore/backup_restore.rb +++ b/lib/backup_restore/backup_restore.rb @@ -62,7 +62,7 @@ module BackupRestore def self.logs id = start_logs_message_id - MessageBus.backlog(LOGS_CHANNEL, id).map { |m| m.data } + DiscourseBus.backlog(LOGS_CHANNEL, id).map { |m| m.data } end def self.current_version @@ -142,7 +142,7 @@ module BackupRestore end def self.save_start_logs_message_id - id = MessageBus.last_id(LOGS_CHANNEL) + id = DiscourseBus.last_id(LOGS_CHANNEL) $redis.set(start_logs_message_id_key, id) end diff --git a/lib/backup_restore/backuper.rb b/lib/backup_restore/backuper.rb index a1eff0221..3c5106857 100644 --- a/lib/backup_restore/backuper.rb +++ b/lib/backup_restore/backuper.rb @@ -336,7 +336,7 @@ module BackupRestore def publish_log(message, timestamp) return unless @publish_to_message_bus data = { timestamp: timestamp, operation: "backup", message: message } - MessageBus.publish(BackupRestore::LOGS_CHANNEL, data, user_ids: [@user_id]) + DiscourseBus.publish(BackupRestore::LOGS_CHANNEL, data, user_ids: [@user_id]) end def save_log(message, timestamp) diff --git a/lib/backup_restore/restorer.rb b/lib/backup_restore/restorer.rb index bccd2e607..0599a2c03 100644 --- a/lib/backup_restore/restorer.rb +++ b/lib/backup_restore/restorer.rb @@ -354,7 +354,7 @@ module BackupRestore def publish_log(message, timestamp) return unless @publish_to_message_bus data = { timestamp: timestamp, operation: "restore", message: message } - MessageBus.publish(BackupRestore::LOGS_CHANNEL, data, user_ids: [@user_id]) + DiscourseBus.publish(BackupRestore::LOGS_CHANNEL, data, user_ids: [@user_id]) end def save_log(message, timestamp) diff --git a/lib/configurable_urls.rb b/lib/configurable_urls.rb index 1574b8a09..3f308925f 100644 --- a/lib/configurable_urls.rb +++ b/lib/configurable_urls.rb @@ -12,4 +12,4 @@ module ConfigurableUrls SiteSetting.privacy_policy_url.blank? ? "#{Discourse::base_uri}/privacy" : SiteSetting.privacy_policy_url end -end \ No newline at end of file +end diff --git a/lib/discourse.rb b/lib/discourse.rb index 1bafaea84..304318ca4 100644 --- a/lib/discourse.rb +++ b/lib/discourse.rb @@ -95,10 +95,10 @@ module Discourse digest = Digest::MD5.hexdigest(ActionView::Base.assets_manifest.assets.values.sort.join) channel = "/global/asset-version" - message = MessageBus.last_message(channel) + message = DiscourseBus.last_message(channel) unless message && message.data == digest - MessageBus.publish channel, digest + DiscourseBus.publish channel, digest end digest end @@ -169,7 +169,7 @@ module Discourse def self.enable_readonly_mode $redis.set(readonly_mode_key, 1) - MessageBus.publish(readonly_channel, true) + DiscourseBus.publish(readonly_channel, true) keep_readonly_mode true end @@ -186,7 +186,7 @@ module Discourse def self.disable_readonly_mode $redis.del(readonly_mode_key) - MessageBus.publish(readonly_channel, false) + DiscourseBus.publish(readonly_channel, false) true end @@ -197,9 +197,9 @@ module Discourse def self.request_refresh! # Causes refresh on next click for all clients # - # This is better than `MessageBus.publish "/file-change", ["refresh"]` because + # This is better than `DiscourseBus.publish "/file-change", ["refresh"]` because # it spreads the refreshes out over a time period - MessageBus.publish '/global/asset-version', 'clobber' + DiscourseBus.publish '/global/asset-version', 'clobber' end def self.git_version @@ -274,7 +274,7 @@ module Discourse def self.after_fork current_db = RailsMultisite::ConnectionManagement.current_db RailsMultisite::ConnectionManagement.establish_connection(db: current_db) - MessageBus.after_fork + DiscourseBus.after_fork SiteSetting.after_fork $redis.client.reconnect Rails.cache.reconnect diff --git a/lib/discourse_bus.rb b/lib/discourse_bus.rb new file mode 100644 index 000000000..cb39db0df --- /dev/null +++ b/lib/discourse_bus.rb @@ -0,0 +1,73 @@ +# Proxies MessageBus and noops READONLY errors. +module DiscourseBus + + def self.start! + MessageBus.site_id_lookup do + RailsMultisite::ConnectionManagement.current_db + end + + MessageBus.extra_response_headers_lookup do |env| + { + "Access-Control-Allow-Origin" => Discourse.base_url_no_prefix, + "Access-Control-Allow-Methods" => "GET, POST", + "Access-Control-Allow-Headers" => "X-SILENCE-LOGGER, X-Shared-Session-Key" + } + end + + MessageBus.user_id_lookup do |env| + user = CurrentUser.lookup_from_env(env) + user.id if user + end + + MessageBus.group_ids_lookup do |env| + user = CurrentUser.lookup_from_env(env) + user.groups.select('groups.id').map{|g| g.id} if user + end + + MessageBus.on_connect do |site_id| + RailsMultisite::ConnectionManagement.establish_connection(db: site_id) + end + + MessageBus.on_disconnect do |site_id| + ActiveRecord::Base.connection_handler.clear_active_connections! + end + + # Point at our redis + MessageBus.redis_config = YAML.load(ERB.new(File.new("#{Rails.root}/config/redis.yml").read).result)[Rails.env].symbolize_keys + + MessageBus.long_polling_enabled = SiteSetting.enable_long_polling + MessageBus.long_polling_interval = SiteSetting.long_polling_interval + + MessageBus.is_admin_lookup do |env| + user = CurrentUser.lookup_from_env(env) + if user && user.admin + true + else + false + end + end + + MessageBus.cache_assets = !Rails.env.development? + MessageBus.enable_diagnostics + end + + def self.proxy_readonly(*methods) + methods.each do |name| + define_singleton_method(name) do |*args, &block| + DiscourseRedis.ignore_readonly { MessageBus.send(name, *args, &block) } + end + end + end + + proxy_readonly :publish, + :subscribe, + :unsubscribe, + :last_id, + :last_message, + :backlog, + :after_fork, + :on_connect, + :on_disconnect, + :track_publish + +end diff --git a/lib/discourse_redis.rb b/lib/discourse_redis.rb index a7a17012b..dd74515be 100644 --- a/lib/discourse_redis.rb +++ b/lib/discourse_redis.rb @@ -20,8 +20,8 @@ class DiscourseRedis "redis://#{(':' + config['password'] + '@') if config['password']}#{config['host']}:#{config['port']}/#{config['db']}" end - def initialize - @config = DiscourseRedis.config + def initialize(config=nil) + @config = config || DiscourseRedis.config @redis = DiscourseRedis.raw_connection(@config) end @@ -34,10 +34,20 @@ class DiscourseRedis self.class.url(@config) end + def self.ignore_readonly + yield + rescue Redis::CommandError => ex + if ex.message =~ /READONLY/ + STDERR.puts "WARN: Redis is in a readonly state. Performed a noop" + else + raise ex + end + end + # prefix the key with the namespace def method_missing(meth, *args, &block) if @redis.respond_to?(meth) - @redis.send(meth, *args, &block) + DiscourseRedis.ignore_readonly { @redis.send(meth, *args, &block) } else super end @@ -54,28 +64,36 @@ class DiscourseRedis :zremrangebyscore, :zrevrange, :zrevrangebyscore, :zrevrank, :zrangebyscore].each do |m| define_method m do |*args| args[0] = "#{DiscourseRedis.namespace}:#{args[0]}" - @redis.send(m, *args) + DiscourseRedis.ignore_readonly { @redis.send(m, *args) } end end def del(k) - k = "#{DiscourseRedis.namespace}:#{k}" - @redis.del k + DiscourseRedis.ignore_readonly do + k = "#{DiscourseRedis.namespace}:#{k}" + @redis.del k + end end def keys(pattern=nil) - len = DiscourseRedis.namespace.length + 1 - @redis.keys("#{DiscourseRedis.namespace}:#{pattern || '*'}").map{ - |k| k[len..-1] - } + DiscourseRedis.ignore_readonly do + len = DiscourseRedis.namespace.length + 1 + @redis.keys("#{DiscourseRedis.namespace}:#{pattern || '*'}").map{ + |k| k[len..-1] + } + end end def delete_prefixed(prefix) - keys("#{prefix}*").each { |k| $redis.del(k) } + DiscourseRedis.ignore_readonly do + keys("#{prefix}*").each { |k| $redis.del(k) } + end end def flushdb - keys.each{|k| del(k)} + DiscourseRedis.ignore_readonly do + keys.each{|k| del(k)} + end end def reconnect diff --git a/lib/distributed_cache.rb b/lib/distributed_cache.rb index 2ea6f930d..c1c37a7a8 100644 --- a/lib/distributed_cache.rb +++ b/lib/distributed_cache.rb @@ -51,7 +51,7 @@ class DistributedCache return if @subscribed @lock.synchronize do return if @subscribed - MessageBus.subscribe(channel_name) do |message| + DiscourseBus.subscribe(channel_name) do |message| @lock.synchronize do process_message(message) end @@ -63,7 +63,7 @@ class DistributedCache def self.publish(hash, message) message[:origin] = hash.object_id message[:hash_key] = hash.key - MessageBus.publish(channel_name, message, { user_ids: [-1] }) + DiscourseBus.publish(channel_name, message, { user_ids: [-1] }) end def self.set(hash, key, value) diff --git a/lib/freedom_patches/arel_patch.rb b/lib/freedom_patches/arel_patch.rb index b2f26ee4f..4c0ae309b 100644 --- a/lib/freedom_patches/arel_patch.rb +++ b/lib/freedom_patches/arel_patch.rb @@ -3,4 +3,4 @@ class Arel::Table def hash @name.hash end -end \ No newline at end of file +end diff --git a/lib/freedom_patches/performance_fixes.rb b/lib/freedom_patches/performance_fixes.rb index 4f2a7034a..393391009 100644 --- a/lib/freedom_patches/performance_fixes.rb +++ b/lib/freedom_patches/performance_fixes.rb @@ -8,4 +8,4 @@ class ActiveRecord::Base def blank? false end -end \ No newline at end of file +end diff --git a/lib/message_bus_diags.rb b/lib/message_bus_diags.rb index 3d7f795dc..1ef448bf7 100644 --- a/lib/message_bus_diags.rb +++ b/lib/message_bus_diags.rb @@ -11,7 +11,7 @@ class MessageBusDiags end def self.establish_peer_names - MessageBus.publish "/server-name", {channel: "/server-name-reply/#{my_id}"} + DiscourseBus.publish "/server-name", {channel: "/server-name-reply/#{my_id}"} end def self.seen_hosts @@ -20,12 +20,12 @@ class MessageBusDiags unless @subscribed - MessageBus.subscribe "/server-name-reply/#{my_id}" do |msg| + DiscourseBus.subscribe "/server-name-reply/#{my_id}" do |msg| MessageBusDiags.seen_host(msg.data) end - MessageBus.subscribe "/server-name" do |msg| - MessageBus.publish msg.data["channel"], MessageBusDiags.my_id + DiscourseBus.subscribe "/server-name" do |msg| + DiscourseBus.publish msg.data["channel"], MessageBusDiags.my_id end @subscribed = true end diff --git a/lib/site_setting_extension.rb b/lib/site_setting_extension.rb index 456f94d33..22ef80961 100644 --- a/lib/site_setting_extension.rb +++ b/lib/site_setting_extension.rb @@ -221,7 +221,7 @@ module SiteSettingExtension def ensure_listen_for_changes unless @subscribed - MessageBus.subscribe("/site_settings") do |message| + DiscourseBus.subscribe("/site_settings") do |message| process_message(message) end @subscribed = true @@ -233,10 +233,10 @@ module SiteSettingExtension if data["process"] != process_id begin @last_message_processed = message.global_id - MessageBus.on_connect.call(message.site_id) + DiscourseBus.on_connect.call(message.site_id) refresh! ensure - MessageBus.on_disconnect.call(message.site_id) + DiscourseBus.on_disconnect.call(message.site_id) end end end @@ -294,7 +294,7 @@ module SiteSettingExtension end def notify_changed! - MessageBus.publish('/site_settings', {process: process_id}) + DiscourseBus.publish('/site_settings', {process: process_id}) end def has_setting?(name) diff --git a/plugins/poll/plugin.rb b/plugins/poll/plugin.rb index 7e835e597..7c66b591d 100644 --- a/plugins/poll/plugin.rb +++ b/plugins/poll/plugin.rb @@ -66,7 +66,7 @@ after_initialize do post.custom_fields["#{VOTES_CUSTOM_FIELD}-#{user_id}"] = votes post.save_custom_fields - MessageBus.publish("/polls/#{post_id}", { poll: poll }) + DiscourseBus.publish("/polls/#{post_id}", { poll: poll }) render json: { poll: poll, vote: options } end @@ -100,7 +100,7 @@ after_initialize do post.custom_fields[POLLS_CUSTOM_FIELD] = polls post.save_custom_fields - MessageBus.publish("/polls/#{post_id}", { poll: polls[poll_name] }) + DiscourseBus.publish("/polls/#{post_id}", { poll: polls[poll_name] }) render json: { poll: polls[poll_name] } end diff --git a/plugins/poll/spec/controllers/polls_controller_spec.rb b/plugins/poll/spec/controllers/polls_controller_spec.rb index 360efc457..391f06648 100644 --- a/plugins/poll/spec/controllers/polls_controller_spec.rb +++ b/plugins/poll/spec/controllers/polls_controller_spec.rb @@ -10,7 +10,7 @@ describe ::DiscoursePoll::PollsController do describe "#vote" do it "works" do - MessageBus.expects(:publish) + DiscourseBus.expects(:publish) xhr :put, :vote, { post_id: poll.id, poll_name: "poll", options: ["A"] } @@ -76,7 +76,7 @@ describe ::DiscoursePoll::PollsController do describe "#toggle_status" do it "works for OP" do - MessageBus.expects(:publish) + DiscourseBus.expects(:publish) xhr :put, :toggle_status, { post_id: poll.id, poll_name: "poll", status: "closed" } expect(response).to be_success @@ -86,7 +86,7 @@ describe ::DiscoursePoll::PollsController do it "works for staff" do log_in(:moderator) - MessageBus.expects(:publish) + DiscourseBus.expects(:publish) xhr :put, :toggle_status, { post_id: poll.id, poll_name: "poll", status: "closed" } expect(response).to be_success diff --git a/spec/components/discourse_spec.rb b/spec/components/discourse_spec.rb index 335d689cf..66ec12d97 100644 --- a/spec/components/discourse_spec.rb +++ b/spec/components/discourse_spec.rb @@ -89,7 +89,7 @@ describe Discourse do it "adds a key in redis and publish a message through the message bus" do $redis.expects(:set).with(Discourse.readonly_mode_key, 1) - MessageBus.expects(:publish).with(Discourse.readonly_channel, true) + DiscourseBus.expects(:publish).with(Discourse.readonly_channel, true) Discourse.enable_readonly_mode end @@ -99,7 +99,7 @@ describe Discourse do it "removes a key from redis and publish a message through the message bus" do $redis.expects(:del).with(Discourse.readonly_mode_key) - MessageBus.expects(:publish).with(Discourse.readonly_channel, false) + DiscourseBus.expects(:publish).with(Discourse.readonly_channel, false) Discourse.disable_readonly_mode end diff --git a/spec/components/post_creator_spec.rb b/spec/components/post_creator_spec.rb index 411e8d715..c356a4331 100644 --- a/spec/components/post_creator_spec.rb +++ b/spec/components/post_creator_spec.rb @@ -72,7 +72,7 @@ describe PostCreator do it "does not notify on system messages" do admin = Fabricate(:admin) - messages = MessageBus.track_publish do + messages = DiscourseBus.track_publish do p = PostCreator.create(admin, basic_topic_params.merge(post_type: Post.types[:moderator_action])) PostCreator.create(admin, basic_topic_params.merge(topic_id: p.topic_id, post_type: Post.types[:moderator_action])) end @@ -93,7 +93,7 @@ describe PostCreator do created_post = nil reply = nil - messages = MessageBus.track_publish do + messages = DiscourseBus.track_publish do created_post = PostCreator.new(admin, basic_topic_params.merge(category: cat.id)).create reply = PostCreator.new(admin, raw: "this is my test reply 123 testing", topic_id: created_post.topic_id).create end @@ -118,7 +118,7 @@ describe PostCreator do it 'generates the correct messages for a normal topic' do p = nil - messages = MessageBus.track_publish do + messages = DiscourseBus.track_publish do p = creator.create end diff --git a/spec/fabricators/api_key_fabricator.rb b/spec/fabricators/api_key_fabricator.rb index 34f3efdb5..a83ba6aeb 100644 --- a/spec/fabricators/api_key_fabricator.rb +++ b/spec/fabricators/api_key_fabricator.rb @@ -1,3 +1,3 @@ Fabricator(:api_key) do key '1dfb7d427400cb8ef18052fd412781af134cceca5725dd74f34bbc6b9e35ddc9' -end \ No newline at end of file +end diff --git a/spec/fabricators/color_scheme_fabricator.rb b/spec/fabricators/color_scheme_fabricator.rb index 6d4725eb1..09bde58ef 100644 --- a/spec/fabricators/color_scheme_fabricator.rb +++ b/spec/fabricators/color_scheme_fabricator.rb @@ -2,4 +2,4 @@ Fabricator(:color_scheme) do name { sequence(:name) {|i| "Palette #{i}" } } enabled false color_scheme_colors(count: 2) { |attrs, i| Fabricate.build(:color_scheme_color, color_scheme: nil) } -end \ No newline at end of file +end diff --git a/spec/fabricators/flag_fabricator.rb b/spec/fabricators/flag_fabricator.rb index 72192fa44..e2994f8d0 100644 --- a/spec/fabricators/flag_fabricator.rb +++ b/spec/fabricators/flag_fabricator.rb @@ -2,4 +2,4 @@ Fabricator(:flag, from: :post_action) do user post post_action_type_id PostActionType.types[:spam] -end \ No newline at end of file +end diff --git a/spec/fabricators/like_fabricator.rb b/spec/fabricators/like_fabricator.rb index a9b19f217..43591bd5c 100644 --- a/spec/fabricators/like_fabricator.rb +++ b/spec/fabricators/like_fabricator.rb @@ -2,4 +2,4 @@ Fabricator(:like, from: :post_action) do post user post_action_type_id PostActionType.types[:like] -end \ No newline at end of file +end diff --git a/spec/fabricators/permalink_fabricator.rb b/spec/fabricators/permalink_fabricator.rb index 22a3c59de..8de32e478 100644 --- a/spec/fabricators/permalink_fabricator.rb +++ b/spec/fabricators/permalink_fabricator.rb @@ -1,3 +1,3 @@ Fabricator(:permalink) do url { sequence(:url) {|i| "my/#{i}/url" } } -end \ No newline at end of file +end diff --git a/spec/fabricators/screened_ip_address_fabricator.rb b/spec/fabricators/screened_ip_address_fabricator.rb index cfc57c297..a7dcb5ae4 100644 --- a/spec/fabricators/screened_ip_address_fabricator.rb +++ b/spec/fabricators/screened_ip_address_fabricator.rb @@ -1,3 +1,3 @@ Fabricator(:screened_ip_address) do ip_address { sequence(:ip_address) { |n| "123.#{(n*3)%255}.#{(n*2)%255}.#{n%255}" } } -end \ No newline at end of file +end diff --git a/spec/models/topic_spec.rb b/spec/models/topic_spec.rb index 66ce8e17b..a7ca9549d 100644 --- a/spec/models/topic_spec.rb +++ b/spec/models/topic_spec.rb @@ -573,7 +573,7 @@ describe Topic do describe "make_banner!" do it "changes the topic archetype to 'banner'" do - messages = MessageBus.track_publish do + messages = DiscourseBus.track_publish do topic.make_banner!(user) expect(topic.archetype).to eq(Archetype.banner) end @@ -597,7 +597,7 @@ describe Topic do it "resets the topic archetype" do topic.expects(:add_moderator_post) - MessageBus.expects(:publish).with("/site/banner", nil) + DiscourseBus.expects(:publish).with("/site/banner", nil) topic.remove_banner!(user) expect(topic.archetype).to eq(Archetype.default) end