diff options
-rw-r--r-- | app/models/broadcast_message.rb | 14 | ||||
-rw-r--r-- | changelogs/unreleased/broadcast-messages-cache.yml | 4 | ||||
-rw-r--r-- | db/migrate/20170809133343_add_broadcast_messages_index.rb | 21 | ||||
-rw-r--r-- | db/migrate/20170809134534_add_broadcast_message_not_null_constraints.rb | 17 | ||||
-rw-r--r-- | db/schema.rb | 12 | ||||
-rw-r--r-- | spec/models/broadcast_message_spec.rb | 20 |
6 files changed, 8 insertions, 80 deletions
diff --git a/app/models/broadcast_message.rb b/app/models/broadcast_message.rb index 3692bcc680d..944725d91c3 100644 --- a/app/models/broadcast_message.rb +++ b/app/models/broadcast_message.rb @@ -14,15 +14,9 @@ class BroadcastMessage < ActiveRecord::Base default_value_for :color, '#E75E40' default_value_for :font, '#FFFFFF' - CACHE_KEY = 'broadcast_message_current'.freeze - - after_commit :flush_redis_cache - def self.current - Rails.cache.fetch(CACHE_KEY) do - where('ends_at > :now AND starts_at <= :now', now: Time.zone.now) - .reorder(id: :asc) - .to_a + Rails.cache.fetch("broadcast_message_current", expires_in: 1.minute) do + where('ends_at > :now AND starts_at <= :now', now: Time.zone.now).order([:created_at, :id]).to_a end end @@ -37,8 +31,4 @@ class BroadcastMessage < ActiveRecord::Base def ended? ends_at < Time.zone.now end - - def flush_redis_cache - Rails.cache.delete(CACHE_KEY) - end end diff --git a/changelogs/unreleased/broadcast-messages-cache.yml b/changelogs/unreleased/broadcast-messages-cache.yml deleted file mode 100644 index a3c9e1ff465..00000000000 --- a/changelogs/unreleased/broadcast-messages-cache.yml +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: Better caching and indexing of broadcast messages -merge_request: -author: diff --git a/db/migrate/20170809133343_add_broadcast_messages_index.rb b/db/migrate/20170809133343_add_broadcast_messages_index.rb deleted file mode 100644 index 4ab2ddb059d..00000000000 --- a/db/migrate/20170809133343_add_broadcast_messages_index.rb +++ /dev/null @@ -1,21 +0,0 @@ -# See http://doc.gitlab.com/ce/development/migration_style_guide.html -# for more information on how to write migrations for GitLab. - -class AddBroadcastMessagesIndex < ActiveRecord::Migration - include Gitlab::Database::MigrationHelpers - - # Set this constant to true if this migration requires downtime. - DOWNTIME = false - - disable_ddl_transaction! - - COLUMNS = %i[starts_at ends_at id].freeze - - def up - add_concurrent_index :broadcast_messages, COLUMNS - end - - def down - remove_concurrent_index :broadcast_messages, COLUMNS - end -end diff --git a/db/migrate/20170809134534_add_broadcast_message_not_null_constraints.rb b/db/migrate/20170809134534_add_broadcast_message_not_null_constraints.rb deleted file mode 100644 index 13e8ef52f22..00000000000 --- a/db/migrate/20170809134534_add_broadcast_message_not_null_constraints.rb +++ /dev/null @@ -1,17 +0,0 @@ -# See http://doc.gitlab.com/ce/development/migration_style_guide.html -# for more information on how to write migrations for GitLab. - -class AddBroadcastMessageNotNullConstraints < ActiveRecord::Migration - include Gitlab::Database::MigrationHelpers - - # Set this constant to true if this migration requires downtime. - DOWNTIME = false - - COLUMNS = %i[starts_at ends_at created_at updated_at message_html] - - def change - COLUMNS.each do |column| - change_column_null :broadcast_messages, column, false - end - end -end diff --git a/db/schema.rb b/db/schema.rb index 6540ab80129..ec92b185be2 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -163,18 +163,16 @@ ActiveRecord::Schema.define(version: 20170809142252) do create_table "broadcast_messages", force: :cascade do |t| t.text "message", null: false - t.datetime "starts_at", null: false - t.datetime "ends_at", null: false - t.datetime "created_at", null: false - t.datetime "updated_at", null: false + t.datetime "starts_at" + t.datetime "ends_at" + t.datetime "created_at" + t.datetime "updated_at" t.string "color" t.string "font" - t.text "message_html", null: false + t.text "message_html" t.integer "cached_markdown_version" end - add_index "broadcast_messages", ["starts_at", "ends_at", "id"], name: "index_broadcast_messages_on_starts_at_and_ends_at_and_id", using: :btree - create_table "chat_names", force: :cascade do |t| t.integer "user_id", null: false t.integer "service_id", null: false diff --git a/spec/models/broadcast_message_spec.rb b/spec/models/broadcast_message_spec.rb index 3369aef1d3e..a8ca1d110e4 100644 --- a/spec/models/broadcast_message_spec.rb +++ b/spec/models/broadcast_message_spec.rb @@ -20,7 +20,7 @@ describe BroadcastMessage do it { is_expected.not_to allow_value('000').for(:font) } end - describe '.current', :use_clean_rails_memory_store_caching do + describe '.current' do it 'returns message if time match' do message = create(:broadcast_message) @@ -45,14 +45,6 @@ describe BroadcastMessage do expect(described_class.current).to be_empty end - - it 'caches the output of the query' do - create(:broadcast_message) - - expect(described_class).to receive(:where).and_call_original.once - - 2.times { described_class.current } - end end describe '#active?' do @@ -110,14 +102,4 @@ describe BroadcastMessage do end end end - - describe '#flush_redis_cache' do - it 'flushes the Redis cache' do - message = create(:broadcast_message) - - expect(Rails.cache).to receive(:delete).with(described_class::CACHE_KEY) - - message.flush_redis_cache - end - end end |