BigW Consortium Gitlab
Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
gitlab-ce
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Forest Godfrey
gitlab-ce
Commits
345a304a
Commit
345a304a
authored
Aug 11, 2017
by
Sean McGivern
Committed by
Jose Ivan Vargas
Aug 11, 2017
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Merge branch 'broadcast-messages-cache' into 'master'
Better caching and indexing of broadcast messages Closes #31706 See merge request !13429
parent
f1ccff47
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
80 additions
and
8 deletions
+80
-8
broadcast_message.rb
app/models/broadcast_message.rb
+12
-2
broadcast-messages-cache.yml
changelogs/unreleased/broadcast-messages-cache.yml
+4
-0
20170809133343_add_broadcast_messages_index.rb
db/migrate/20170809133343_add_broadcast_messages_index.rb
+21
-0
20170809134534_add_broadcast_message_not_null_constraints.rb
...70809134534_add_broadcast_message_not_null_constraints.rb
+17
-0
schema.rb
db/schema.rb
+7
-5
broadcast_message_spec.rb
spec/models/broadcast_message_spec.rb
+19
-1
No files found.
app/models/broadcast_message.rb
View file @
345a304a
...
...
@@ -14,9 +14,15 @@ 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
(
"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
Rails
.
cache
.
fetch
(
CACHE_KEY
)
do
where
(
'ends_at > :now AND starts_at <= :now'
,
now:
Time
.
zone
.
now
)
.
reorder
(
id: :asc
)
.
to_a
end
end
...
...
@@ -31,4 +37,8 @@ class BroadcastMessage < ActiveRecord::Base
def
ended?
ends_at
<
Time
.
zone
.
now
end
def
flush_redis_cache
Rails
.
cache
.
delete
(
CACHE_KEY
)
end
end
changelogs/unreleased/broadcast-messages-cache.yml
0 → 100644
View file @
345a304a
---
title
:
Better caching and indexing of broadcast messages
merge_request
:
author
:
db/migrate/20170809133343_add_broadcast_messages_index.rb
0 → 100644
View file @
345a304a
# 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
db/migrate/20170809134534_add_broadcast_message_not_null_constraints.rb
0 → 100644
View file @
345a304a
# 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
db/schema.rb
View file @
345a304a
...
...
@@ -163,16 +163,18 @@ ActiveRecord::Schema.define(version: 20170809142252) do
create_table
"broadcast_messages"
,
force: :cascade
do
|
t
|
t
.
text
"message"
,
null:
false
t
.
datetime
"starts_at"
t
.
datetime
"ends_at"
t
.
datetime
"created_at"
t
.
datetime
"updated_at"
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
.
string
"color"
t
.
string
"font"
t
.
text
"message_html"
t
.
text
"message_html"
,
null:
false
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
...
...
spec/models/broadcast_message_spec.rb
View file @
345a304a
...
...
@@ -20,7 +20,7 @@ describe BroadcastMessage do
it
{
is_expected
.
not_to
allow_value
(
'000'
).
for
(
:font
)
}
end
describe
'.current'
do
describe
'.current'
,
:use_clean_rails_memory_store_caching
do
it
'returns message if time match'
do
message
=
create
(
:broadcast_message
)
...
...
@@ -45,6 +45,14 @@ 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
...
...
@@ -102,4 +110,14 @@ 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
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment