Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Boxiang Sun
gitlab-ce
Commits
a210cb6b
Commit
a210cb6b
authored
Nov 09, 2017
by
Michael Kozono
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Rename table to untracked_files_for_uploads
parent
2ab3031b
Changes
7
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
157 additions
and
157 deletions
+157
-157
db/post_migrate/20171103140253_track_untracked_uploads.rb
db/post_migrate/20171103140253_track_untracked_uploads.rb
+9
-9
db/schema.rb
db/schema.rb
+3
-3
lib/gitlab/background_migration/populate_untracked_uploads.rb
...gitlab/background_migration/populate_untracked_uploads.rb
+8
-8
lib/gitlab/background_migration/prepare_untracked_uploads.rb
lib/gitlab/background_migration/prepare_untracked_uploads.rb
+11
-11
spec/lib/gitlab/background_migration/populate_untracked_uploads_spec.rb
...b/background_migration/populate_untracked_uploads_spec.rb
+106
-106
spec/lib/gitlab/background_migration/prepare_untracked_uploads_spec.rb
...ab/background_migration/prepare_untracked_uploads_spec.rb
+12
-12
spec/migrations/track_untracked_uploads_spec.rb
spec/migrations/track_untracked_uploads_spec.rb
+8
-8
No files found.
db/post_migrate/20171103140253_track_untracked_uploads.rb
View file @
a210cb6b
...
...
@@ -7,31 +7,31 @@ class TrackUntrackedUploads < ActiveRecord::Migration
disable_ddl_transaction!
DOWNTIME
=
false
MIGRATION
=
'PrepareUn
hash
edUploads'
MIGRATION
=
'PrepareUn
track
edUploads'
def
up
unless
table_exists?
(
:un
hashed_upload_file
s
)
create_table
:un
hashed_upload_file
s
do
|
t
|
unless
table_exists?
(
:un
tracked_files_for_upload
s
)
create_table
:un
tracked_files_for_upload
s
do
|
t
|
t
.
string
:path
,
null:
false
t
.
boolean
:tracked
,
default:
false
,
null:
false
t
.
timestamps_with_timezone
null:
false
end
end
unless
index_exists?
(
:un
hashed_upload_file
s
,
:path
)
add_index
:un
hashed_upload_file
s
,
:path
,
unique:
true
unless
index_exists?
(
:un
tracked_files_for_upload
s
,
:path
)
add_index
:un
tracked_files_for_upload
s
,
:path
,
unique:
true
end
unless
index_exists?
(
:un
hashed_upload_file
s
,
:tracked
)
add_index
:un
hashed_upload_file
s
,
:tracked
unless
index_exists?
(
:un
tracked_files_for_upload
s
,
:tracked
)
add_index
:un
tracked_files_for_upload
s
,
:tracked
end
BackgroundMigrationWorker
.
perform_async
(
MIGRATION
)
end
def
down
if
table_exists?
(
:un
hashed_upload_file
s
)
drop_table
:un
hashed_upload_file
s
if
table_exists?
(
:un
tracked_files_for_upload
s
)
drop_table
:un
tracked_files_for_upload
s
end
end
end
db/schema.rb
View file @
a210cb6b
...
...
@@ -1719,15 +1719,15 @@ ActiveRecord::Schema.define(version: 20171124150326) do
add_index
"u2f_registrations"
,
[
"key_handle"
],
name:
"index_u2f_registrations_on_key_handle"
,
using: :btree
add_index
"u2f_registrations"
,
[
"user_id"
],
name:
"index_u2f_registrations_on_user_id"
,
using: :btree
create_table
"un
hashed_upload_file
s"
,
force: :cascade
do
|
t
|
create_table
"un
tracked_files_for_upload
s"
,
force: :cascade
do
|
t
|
t
.
string
"path"
,
null:
false
t
.
boolean
"tracked"
,
default:
false
,
null:
false
t
.
datetime_with_timezone
"created_at"
,
null:
false
t
.
datetime_with_timezone
"updated_at"
,
null:
false
end
add_index
"un
hashed_upload_files"
,
[
"path"
],
name:
"index_unhashed_upload_file
s_on_path"
,
unique:
true
,
using: :btree
add_index
"un
hashed_upload_files"
,
[
"tracked"
],
name:
"index_unhashed_upload_file
s_on_tracked"
,
using: :btree
add_index
"un
tracked_files_for_uploads"
,
[
"path"
],
name:
"index_untracked_files_for_upload
s_on_path"
,
unique:
true
,
using: :btree
add_index
"un
tracked_files_for_uploads"
,
[
"tracked"
],
name:
"index_untracked_files_for_upload
s_on_tracked"
,
using: :btree
create_table
"uploads"
,
force: :cascade
do
|
t
|
t
.
integer
"size"
,
limit:
8
,
null:
false
...
...
lib/gitlab/background_migration/populate_untracked_uploads.rb
View file @
a210cb6b
module
Gitlab
module
BackgroundMigration
class
PopulateUntrackedUploads
class
Un
hashedUploa
dFile
<
ActiveRecord
::
Base
self
.
table_name
=
'un
hashed_upload_file
s'
class
Un
tracke
dFile
<
ActiveRecord
::
Base
self
.
table_name
=
'un
tracked_files_for_upload
s'
# Ends with /:random_hex/:filename
FILE_UPLOADER_PATH_PATTERN
=
%r{/
\h
+/[^/]+
\z
}
...
...
@@ -84,7 +84,7 @@ module Gitlab
end
def
upload_path
# Un
hashedUploa
dFile#path is absolute, but Upload#path depends on uploader
# Un
tracke
dFile#path is absolute, but Upload#path depends on uploader
if
uploader
==
'FileUploader'
# Path relative to project directory in uploads
matchd
=
path_relative_to_upload_dir
.
match
(
FILE_UPLOADER_PATH_PATTERN
)
...
...
@@ -118,7 +118,7 @@ module Gitlab
# Not including a leading slash
def
path_relative_to_upload_dir
base
=
%r{
\A
#{
Regexp
.
escape
(
Gitlab
::
BackgroundMigration
::
PrepareUn
hash
edUploads
::
UPLOAD_DIR
)
}
/}
base
=
%r{
\A
#{
Regexp
.
escape
(
Gitlab
::
BackgroundMigration
::
PrepareUn
track
edUploads
::
UPLOAD_DIR
)
}
/}
@path_relative_to_upload_dir
||=
path
.
sub
(
base
,
''
)
end
...
...
@@ -218,10 +218,10 @@ module Gitlab
def
perform
(
start_id
,
end_id
)
return
unless
migrate?
files
=
Un
hashedUploa
dFile
.
untracked
.
where
(
id:
start_id
..
end_id
)
files
.
each
do
|
un
hashed_uploa
d_file
|
files
=
Un
tracke
dFile
.
untracked
.
where
(
id:
start_id
..
end_id
)
files
.
each
do
|
un
tracke
d_file
|
begin
un
hashed_uploa
d_file
.
ensure_tracked!
un
tracke
d_file
.
ensure_tracked!
rescue
StandardError
=>
e
Rails
.
logger
.
warn
"Failed to add untracked file to uploads:
#{
e
.
message
}
"
...
...
@@ -235,7 +235,7 @@ module Gitlab
private
def
migrate?
Un
hashedUploa
dFile
.
table_exists?
&&
Upload
.
table_exists?
Un
tracke
dFile
.
table_exists?
&&
Upload
.
table_exists?
end
end
end
...
...
lib/gitlab/background_migration/prepare_un
hash
ed_uploads.rb
→
lib/gitlab/background_migration/prepare_un
track
ed_uploads.rb
View file @
a210cb6b
module
Gitlab
module
BackgroundMigration
class
PrepareUn
hash
edUploads
class
PrepareUn
track
edUploads
# For bulk_queue_background_migration_jobs_by_range
include
Database
::
MigrationHelpers
...
...
@@ -8,31 +8,31 @@ module Gitlab
UPLOAD_DIR
=
"
#{
CarrierWave
.
root
}
/uploads"
.
freeze
FOLLOW_UP_MIGRATION
=
'PopulateUntrackedUploads'
.
freeze
class
Un
hashedUploa
dFile
<
ActiveRecord
::
Base
class
Un
tracke
dFile
<
ActiveRecord
::
Base
include
EachBatch
self
.
table_name
=
'un
hashed_upload_file
s'
self
.
table_name
=
'un
tracked_files_for_upload
s'
end
def
perform
return
unless
migrate?
clear_un
hashed_uploa
d_file_paths
store_un
hashed_uploa
d_file_paths
clear_un
tracke
d_file_paths
store_un
tracke
d_file_paths
schedule_populate_untracked_uploads_jobs
end
private
def
migrate?
Un
hashedUploa
dFile
.
table_exists?
Un
tracke
dFile
.
table_exists?
end
def
clear_un
hashed_uploa
d_file_paths
Un
hashedUploa
dFile
.
delete_all
def
clear_un
tracke
d_file_paths
Un
tracke
dFile
.
delete_all
end
def
store_un
hashed_uploa
d_file_paths
def
store_un
tracke
d_file_paths
return
unless
Dir
.
exist?
(
UPLOAD_DIR
)
each_file_batch
(
UPLOAD_DIR
,
FILE_PATH_BATCH_SIZE
)
do
|
file_paths
|
...
...
@@ -89,7 +89,7 @@ module Gitlab
end
def
insert_file_path
(
file_path
)
table_columns_and_values
=
'un
hashed_upload_file
s (path, created_at, updated_at) VALUES (?, ?, ?)'
table_columns_and_values
=
'un
tracked_files_for_upload
s (path, created_at, updated_at) VALUES (?, ?, ?)'
sql
=
if
Gitlab
::
Database
.
postgresql?
"INSERT INTO
#{
table_columns_and_values
}
ON CONFLICT DO NOTHING;"
...
...
@@ -103,7 +103,7 @@ module Gitlab
end
def
schedule_populate_untracked_uploads_jobs
bulk_queue_background_migration_jobs_by_range
(
Un
hashedUploa
dFile
,
FOLLOW_UP_MIGRATION
)
bulk_queue_background_migration_jobs_by_range
(
Un
tracke
dFile
,
FOLLOW_UP_MIGRATION
)
end
end
end
...
...
spec/lib/gitlab/background_migration/populate_untracked_uploads_spec.rb
View file @
a210cb6b
This diff is collapsed.
Click to expand it.
spec/lib/gitlab/background_migration/prepare_un
hash
ed_uploads_spec.rb
→
spec/lib/gitlab/background_migration/prepare_un
track
ed_uploads_spec.rb
View file @
a210cb6b
require
'spec_helper'
describe
Gitlab
::
BackgroundMigration
::
PrepareUn
hash
edUploads
,
:migration
,
:sidekiq
,
schema:
20171103140253
do
let!
(
:un
hashed_upload_files
)
{
table
(
:unhashed_upload_file
s
)
}
describe
Gitlab
::
BackgroundMigration
::
PrepareUn
track
edUploads
,
:migration
,
:sidekiq
,
schema:
20171103140253
do
let!
(
:un
tracked_files_for_uploads
)
{
table
(
:untracked_files_for_upload
s
)
}
let
(
:user1
)
{
create
(
:user
)
}
let
(
:user2
)
{
create
(
:user
)
}
...
...
@@ -39,20 +39,20 @@ describe Gitlab::BackgroundMigration::PrepareUnhashedUploads, :migration, :sidek
UploadService
.
new
(
project2
,
uploaded_file
,
FileUploader
).
execute
end
it
'adds unhashed files to the un
hashed_upload_file
s table'
do
it
'adds unhashed files to the un
tracked_files_for_upload
s table'
do
Sidekiq
::
Testing
.
fake!
do
expect
do
described_class
.
new
.
perform
end
.
to
change
{
un
hashed_upload_file
s
.
count
}.
from
(
0
).
to
(
5
)
end
.
to
change
{
un
tracked_files_for_upload
s
.
count
}.
from
(
0
).
to
(
5
)
end
end
it
'does not add hashed files to the un
hashed_upload_file
s table'
do
it
'does not add hashed files to the un
tracked_files_for_upload
s table'
do
Sidekiq
::
Testing
.
fake!
do
described_class
.
new
.
perform
hashed_file_path
=
project2
.
uploads
.
where
(
uploader:
'FileUploader'
).
first
.
path
expect
(
un
hashed_upload_file
s
.
where
(
"path like '%
#{
hashed_file_path
}
%'"
).
exists?
).
to
be_falsey
expect
(
un
tracked_files_for_upload
s
.
where
(
"path like '%
#{
hashed_file_path
}
%'"
).
exists?
).
to
be_falsey
end
end
...
...
@@ -66,16 +66,16 @@ describe Gitlab::BackgroundMigration::PrepareUnhashedUploads, :migration, :sidek
end
# E.g. from a previous failed run of this background migration
context
'when there is existing data in un
hashed_upload_file
s'
do
context
'when there is existing data in un
tracked_files_for_upload
s'
do
before
do
un
hashed_upload_file
s
.
create
(
path:
'/foo/bar.jpg'
)
un
tracked_files_for_upload
s
.
create
(
path:
'/foo/bar.jpg'
)
end
it
'clears existing data before adding new data'
do
Sidekiq
::
Testing
.
fake!
do
expect
do
described_class
.
new
.
perform
end
.
to
change
{
un
hashed_upload_file
s
.
count
}.
from
(
1
).
to
(
5
)
end
.
to
change
{
un
tracked_files_for_upload
s
.
count
}.
from
(
1
).
to
(
5
)
end
end
end
...
...
@@ -91,7 +91,7 @@ describe Gitlab::BackgroundMigration::PrepareUnhashedUploads, :migration, :sidek
Sidekiq
::
Testing
.
fake!
do
expect
do
described_class
.
new
.
perform
end
.
to
change
{
un
hashed_upload_file
s
.
count
}.
from
(
0
).
to
(
5
)
end
.
to
change
{
un
tracked_files_for_upload
s
.
count
}.
from
(
0
).
to
(
5
)
end
end
end
...
...
@@ -100,11 +100,11 @@ describe Gitlab::BackgroundMigration::PrepareUnhashedUploads, :migration, :sidek
# Very new or lightly-used installations that are running this migration
# may not have an upload directory because they have no uploads.
context
'when no files were ever uploaded'
do
it
'does not add to the un
hashed_upload_file
s table (and does not raise error)'
do
it
'does not add to the un
tracked_files_for_upload
s table (and does not raise error)'
do
Sidekiq
::
Testing
.
fake!
do
expect
do
described_class
.
new
.
perform
end
.
not_to
change
{
un
hashed_upload_file
s
.
count
}.
from
(
0
)
end
.
not_to
change
{
un
tracked_files_for_upload
s
.
count
}.
from
(
0
)
end
end
end
...
...
spec/migrations/track_untracked_uploads_spec.rb
View file @
a210cb6b
...
...
@@ -4,8 +4,8 @@ require Rails.root.join('db', 'post_migrate', '20171103140253_track_untracked_up
describe
TrackUntrackedUploads
,
:migration
,
:sidekiq
do
include
TrackUntrackedUploadsHelpers
class
Un
hashedUploa
dFile
<
ActiveRecord
::
Base
self
.
table_name
=
'un
hashed_upload_file
s'
class
Un
tracke
dFile
<
ActiveRecord
::
Base
self
.
table_name
=
'un
tracked_files_for_upload
s'
end
matcher
:be_scheduled_migration
do
...
...
@@ -29,10 +29,10 @@ describe TrackUntrackedUploads, :migration, :sidekiq do
end
end
it
'ensures the un
hashed_upload_file
s table exists'
do
it
'ensures the un
tracked_files_for_upload
s table exists'
do
expect
do
migrate!
end
.
to
change
{
table_exists?
(
:un
hashed_upload_file
s
)
}.
from
(
false
).
to
(
true
)
end
.
to
change
{
table_exists?
(
:un
tracked_files_for_upload
s
)
}.
from
(
false
).
to
(
true
)
end
it
'has a path field long enough for really long paths'
do
...
...
@@ -48,7 +48,7 @@ describe TrackUntrackedUploads, :migration, :sidekiq do
component
# filename
].
flatten
.
join
(
'/'
)
record
=
Un
hashedUploa
dFile
.
create!
(
path:
long_path
)
record
=
Un
tracke
dFile
.
create!
(
path:
long_path
)
expect
(
record
.
reload
.
path
.
size
).
to
eq
(
5711
)
end
...
...
@@ -132,12 +132,12 @@ describe TrackUntrackedUploads, :migration, :sidekiq do
end
end
it
'all Un
hashedUploa
dFile records are marked as tracked'
do
it
'all Un
tracke
dFile records are marked as tracked'
do
Sidekiq
::
Testing
.
inline!
do
migrate!
expect
(
Un
hashedUploa
dFile
.
count
).
to
eq
(
8
)
expect
(
Un
hashedUploadFile
.
count
).
to
eq
(
UnhashedUploa
dFile
.
where
(
tracked:
true
).
count
)
expect
(
Un
tracke
dFile
.
count
).
to
eq
(
8
)
expect
(
Un
trackedFile
.
count
).
to
eq
(
Untracke
dFile
.
where
(
tracked:
true
).
count
)
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