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
Show 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
...
@@ -7,31 +7,31 @@ class TrackUntrackedUploads < ActiveRecord::Migration
disable_ddl_transaction!
disable_ddl_transaction!
DOWNTIME
=
false
DOWNTIME
=
false
MIGRATION
=
'PrepareUn
hash
edUploads'
MIGRATION
=
'PrepareUn
track
edUploads'
def
up
def
up
unless
table_exists?
(
:un
hashed_upload_file
s
)
unless
table_exists?
(
:un
tracked_files_for_upload
s
)
create_table
:un
hashed_upload_file
s
do
|
t
|
create_table
:un
tracked_files_for_upload
s
do
|
t
|
t
.
string
:path
,
null:
false
t
.
string
:path
,
null:
false
t
.
boolean
:tracked
,
default:
false
,
null:
false
t
.
boolean
:tracked
,
default:
false
,
null:
false
t
.
timestamps_with_timezone
null:
false
t
.
timestamps_with_timezone
null:
false
end
end
end
end
unless
index_exists?
(
:un
hashed_upload_file
s
,
:path
)
unless
index_exists?
(
:un
tracked_files_for_upload
s
,
:path
)
add_index
:un
hashed_upload_file
s
,
:path
,
unique:
true
add_index
:un
tracked_files_for_upload
s
,
:path
,
unique:
true
end
end
unless
index_exists?
(
:un
hashed_upload_file
s
,
:tracked
)
unless
index_exists?
(
:un
tracked_files_for_upload
s
,
:tracked
)
add_index
:un
hashed_upload_file
s
,
:tracked
add_index
:un
tracked_files_for_upload
s
,
:tracked
end
end
BackgroundMigrationWorker
.
perform_async
(
MIGRATION
)
BackgroundMigrationWorker
.
perform_async
(
MIGRATION
)
end
end
def
down
def
down
if
table_exists?
(
:un
hashed_upload_file
s
)
if
table_exists?
(
:un
tracked_files_for_upload
s
)
drop_table
:un
hashed_upload_file
s
drop_table
:un
tracked_files_for_upload
s
end
end
end
end
end
end
db/schema.rb
View file @
a210cb6b
...
@@ -1719,15 +1719,15 @@ ActiveRecord::Schema.define(version: 20171124150326) do
...
@@ -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"
,
[
"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
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
.
string
"path"
,
null:
false
t
.
boolean
"tracked"
,
default:
false
,
null:
false
t
.
boolean
"tracked"
,
default:
false
,
null:
false
t
.
datetime_with_timezone
"created_at"
,
null:
false
t
.
datetime_with_timezone
"created_at"
,
null:
false
t
.
datetime_with_timezone
"updated_at"
,
null:
false
t
.
datetime_with_timezone
"updated_at"
,
null:
false
end
end
add_index
"un
hashed_upload_files"
,
[
"path"
],
name:
"index_unhashed_upload_file
s_on_path"
,
unique:
true
,
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
hashed_upload_files"
,
[
"tracked"
],
name:
"index_unhashed_upload_file
s_on_tracked"
,
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
|
create_table
"uploads"
,
force: :cascade
do
|
t
|
t
.
integer
"size"
,
limit:
8
,
null:
false
t
.
integer
"size"
,
limit:
8
,
null:
false
...
...
lib/gitlab/background_migration/populate_untracked_uploads.rb
View file @
a210cb6b
module
Gitlab
module
Gitlab
module
BackgroundMigration
module
BackgroundMigration
class
PopulateUntrackedUploads
class
PopulateUntrackedUploads
class
Un
hashedUploa
dFile
<
ActiveRecord
::
Base
class
Un
tracke
dFile
<
ActiveRecord
::
Base
self
.
table_name
=
'un
hashed_upload_file
s'
self
.
table_name
=
'un
tracked_files_for_upload
s'
# Ends with /:random_hex/:filename
# Ends with /:random_hex/:filename
FILE_UPLOADER_PATH_PATTERN
=
%r{/
\h
+/[^/]+
\z
}
FILE_UPLOADER_PATH_PATTERN
=
%r{/
\h
+/[^/]+
\z
}
...
@@ -84,7 +84,7 @@ module Gitlab
...
@@ -84,7 +84,7 @@ module Gitlab
end
end
def
upload_path
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'
if
uploader
==
'FileUploader'
# Path relative to project directory in uploads
# Path relative to project directory in uploads
matchd
=
path_relative_to_upload_dir
.
match
(
FILE_UPLOADER_PATH_PATTERN
)
matchd
=
path_relative_to_upload_dir
.
match
(
FILE_UPLOADER_PATH_PATTERN
)
...
@@ -118,7 +118,7 @@ module Gitlab
...
@@ -118,7 +118,7 @@ module Gitlab
# Not including a leading slash
# Not including a leading slash
def
path_relative_to_upload_dir
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
,
''
)
@path_relative_to_upload_dir
||=
path
.
sub
(
base
,
''
)
end
end
...
@@ -218,10 +218,10 @@ module Gitlab
...
@@ -218,10 +218,10 @@ module Gitlab
def
perform
(
start_id
,
end_id
)
def
perform
(
start_id
,
end_id
)
return
unless
migrate?
return
unless
migrate?
files
=
Un
hashedUploa
dFile
.
untracked
.
where
(
id:
start_id
..
end_id
)
files
=
Un
tracke
dFile
.
untracked
.
where
(
id:
start_id
..
end_id
)
files
.
each
do
|
un
hashed_uploa
d_file
|
files
.
each
do
|
un
tracke
d_file
|
begin
begin
un
hashed_uploa
d_file
.
ensure_tracked!
un
tracke
d_file
.
ensure_tracked!
rescue
StandardError
=>
e
rescue
StandardError
=>
e
Rails
.
logger
.
warn
"Failed to add untracked file to uploads:
#{
e
.
message
}
"
Rails
.
logger
.
warn
"Failed to add untracked file to uploads:
#{
e
.
message
}
"
...
@@ -235,7 +235,7 @@ module Gitlab
...
@@ -235,7 +235,7 @@ module Gitlab
private
private
def
migrate?
def
migrate?
Un
hashedUploa
dFile
.
table_exists?
&&
Upload
.
table_exists?
Un
tracke
dFile
.
table_exists?
&&
Upload
.
table_exists?
end
end
end
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
Gitlab
module
BackgroundMigration
module
BackgroundMigration
class
PrepareUn
hash
edUploads
class
PrepareUn
track
edUploads
# For bulk_queue_background_migration_jobs_by_range
# For bulk_queue_background_migration_jobs_by_range
include
Database
::
MigrationHelpers
include
Database
::
MigrationHelpers
...
@@ -8,31 +8,31 @@ module Gitlab
...
@@ -8,31 +8,31 @@ module Gitlab
UPLOAD_DIR
=
"
#{
CarrierWave
.
root
}
/uploads"
.
freeze
UPLOAD_DIR
=
"
#{
CarrierWave
.
root
}
/uploads"
.
freeze
FOLLOW_UP_MIGRATION
=
'PopulateUntrackedUploads'
.
freeze
FOLLOW_UP_MIGRATION
=
'PopulateUntrackedUploads'
.
freeze
class
Un
hashedUploa
dFile
<
ActiveRecord
::
Base
class
Un
tracke
dFile
<
ActiveRecord
::
Base
include
EachBatch
include
EachBatch
self
.
table_name
=
'un
hashed_upload_file
s'
self
.
table_name
=
'un
tracked_files_for_upload
s'
end
end
def
perform
def
perform
return
unless
migrate?
return
unless
migrate?
clear_un
hashed_uploa
d_file_paths
clear_un
tracke
d_file_paths
store_un
hashed_uploa
d_file_paths
store_un
tracke
d_file_paths
schedule_populate_untracked_uploads_jobs
schedule_populate_untracked_uploads_jobs
end
end
private
private
def
migrate?
def
migrate?
Un
hashedUploa
dFile
.
table_exists?
Un
tracke
dFile
.
table_exists?
end
end
def
clear_un
hashed_uploa
d_file_paths
def
clear_un
tracke
d_file_paths
Un
hashedUploa
dFile
.
delete_all
Un
tracke
dFile
.
delete_all
end
end
def
store_un
hashed_uploa
d_file_paths
def
store_un
tracke
d_file_paths
return
unless
Dir
.
exist?
(
UPLOAD_DIR
)
return
unless
Dir
.
exist?
(
UPLOAD_DIR
)
each_file_batch
(
UPLOAD_DIR
,
FILE_PATH_BATCH_SIZE
)
do
|
file_paths
|
each_file_batch
(
UPLOAD_DIR
,
FILE_PATH_BATCH_SIZE
)
do
|
file_paths
|
...
@@ -89,7 +89,7 @@ module Gitlab
...
@@ -89,7 +89,7 @@ module Gitlab
end
end
def
insert_file_path
(
file_path
)
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?
sql
=
if
Gitlab
::
Database
.
postgresql?
"INSERT INTO
#{
table_columns_and_values
}
ON CONFLICT DO NOTHING;"
"INSERT INTO
#{
table_columns_and_values
}
ON CONFLICT DO NOTHING;"
...
@@ -103,7 +103,7 @@ module Gitlab
...
@@ -103,7 +103,7 @@ module Gitlab
end
end
def
schedule_populate_untracked_uploads_jobs
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
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'
require
'spec_helper'
describe
Gitlab
::
BackgroundMigration
::
PrepareUn
hash
edUploads
,
:migration
,
:sidekiq
,
schema:
20171103140253
do
describe
Gitlab
::
BackgroundMigration
::
PrepareUn
track
edUploads
,
:migration
,
:sidekiq
,
schema:
20171103140253
do
let!
(
:un
hashed_upload_files
)
{
table
(
:unhashed_upload_file
s
)
}
let!
(
:un
tracked_files_for_uploads
)
{
table
(
:untracked_files_for_upload
s
)
}
let
(
:user1
)
{
create
(
:user
)
}
let
(
:user1
)
{
create
(
:user
)
}
let
(
:user2
)
{
create
(
:user
)
}
let
(
:user2
)
{
create
(
:user
)
}
...
@@ -39,20 +39,20 @@ describe Gitlab::BackgroundMigration::PrepareUnhashedUploads, :migration, :sidek
...
@@ -39,20 +39,20 @@ describe Gitlab::BackgroundMigration::PrepareUnhashedUploads, :migration, :sidek
UploadService
.
new
(
project2
,
uploaded_file
,
FileUploader
).
execute
UploadService
.
new
(
project2
,
uploaded_file
,
FileUploader
).
execute
end
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
Sidekiq
::
Testing
.
fake!
do
expect
do
expect
do
described_class
.
new
.
perform
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
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
Sidekiq
::
Testing
.
fake!
do
described_class
.
new
.
perform
described_class
.
new
.
perform
hashed_file_path
=
project2
.
uploads
.
where
(
uploader:
'FileUploader'
).
first
.
path
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
end
end
...
@@ -66,16 +66,16 @@ describe Gitlab::BackgroundMigration::PrepareUnhashedUploads, :migration, :sidek
...
@@ -66,16 +66,16 @@ describe Gitlab::BackgroundMigration::PrepareUnhashedUploads, :migration, :sidek
end
end
# E.g. from a previous failed run of this background migration
# 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
before
do
un
hashed_upload_file
s
.
create
(
path:
'/foo/bar.jpg'
)
un
tracked_files_for_upload
s
.
create
(
path:
'/foo/bar.jpg'
)
end
end
it
'clears existing data before adding new data'
do
it
'clears existing data before adding new data'
do
Sidekiq
::
Testing
.
fake!
do
Sidekiq
::
Testing
.
fake!
do
expect
do
expect
do
described_class
.
new
.
perform
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
end
end
end
...
@@ -91,7 +91,7 @@ describe Gitlab::BackgroundMigration::PrepareUnhashedUploads, :migration, :sidek
...
@@ -91,7 +91,7 @@ describe Gitlab::BackgroundMigration::PrepareUnhashedUploads, :migration, :sidek
Sidekiq
::
Testing
.
fake!
do
Sidekiq
::
Testing
.
fake!
do
expect
do
expect
do
described_class
.
new
.
perform
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
end
end
end
...
@@ -100,11 +100,11 @@ describe Gitlab::BackgroundMigration::PrepareUnhashedUploads, :migration, :sidek
...
@@ -100,11 +100,11 @@ describe Gitlab::BackgroundMigration::PrepareUnhashedUploads, :migration, :sidek
# Very new or lightly-used installations that are running this migration
# Very new or lightly-used installations that are running this migration
# may not have an upload directory because they have no uploads.
# may not have an upload directory because they have no uploads.
context
'when no files were ever uploaded'
do
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
Sidekiq
::
Testing
.
fake!
do
expect
do
expect
do
described_class
.
new
.
perform
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
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
...
@@ -4,8 +4,8 @@ require Rails.root.join('db', 'post_migrate', '20171103140253_track_untracked_up
describe
TrackUntrackedUploads
,
:migration
,
:sidekiq
do
describe
TrackUntrackedUploads
,
:migration
,
:sidekiq
do
include
TrackUntrackedUploadsHelpers
include
TrackUntrackedUploadsHelpers
class
Un
hashedUploa
dFile
<
ActiveRecord
::
Base
class
Un
tracke
dFile
<
ActiveRecord
::
Base
self
.
table_name
=
'un
hashed_upload_file
s'
self
.
table_name
=
'un
tracked_files_for_upload
s'
end
end
matcher
:be_scheduled_migration
do
matcher
:be_scheduled_migration
do
...
@@ -29,10 +29,10 @@ describe TrackUntrackedUploads, :migration, :sidekiq do
...
@@ -29,10 +29,10 @@ describe TrackUntrackedUploads, :migration, :sidekiq do
end
end
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
expect
do
migrate!
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
end
it
'has a path field long enough for really long paths'
do
it
'has a path field long enough for really long paths'
do
...
@@ -48,7 +48,7 @@ describe TrackUntrackedUploads, :migration, :sidekiq do
...
@@ -48,7 +48,7 @@ describe TrackUntrackedUploads, :migration, :sidekiq do
component
# filename
component
# filename
].
flatten
.
join
(
'/'
)
].
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
)
expect
(
record
.
reload
.
path
.
size
).
to
eq
(
5711
)
end
end
...
@@ -132,12 +132,12 @@ describe TrackUntrackedUploads, :migration, :sidekiq do
...
@@ -132,12 +132,12 @@ describe TrackUntrackedUploads, :migration, :sidekiq do
end
end
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
Sidekiq
::
Testing
.
inline!
do
migrate!
migrate!
expect
(
Un
hashedUploa
dFile
.
count
).
to
eq
(
8
)
expect
(
Un
tracke
dFile
.
count
).
to
eq
(
8
)
expect
(
Un
hashedUploadFile
.
count
).
to
eq
(
UnhashedUploa
dFile
.
where
(
tracked:
true
).
count
)
expect
(
Un
trackedFile
.
count
).
to
eq
(
Untracke
dFile
.
where
(
tracked:
true
).
count
)
end
end
end
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