fixes for space used issues

This commit is contained in:
Kyle Drake 2015-12-18 03:22:41 -08:00
parent dd51efb1da
commit b2bdcfd1f5
2 changed files with 53 additions and 26 deletions

View file

@ -988,8 +988,16 @@ class Site < Sequel::Model
end end
def actual_space_used def actual_space_used
space = Dir.glob(File.join(files_path, '*')).collect {|p| File.size(p)}.inject {|sum,x| sum += x} space = 0
space.nil? ? 0 : space
files = Dir.glob File.join(files_path, '**', '*')
files.each do |file|
next if File.directory? file
space += File.size file
end
space
end end
def total_space_used def total_space_used
@ -1231,7 +1239,6 @@ class Site < Sequel::Model
def store_files(files, opts={}) def store_files(files, opts={})
results = [] results = []
new_size = 0 new_size = 0
html_uploaded = false
if too_many_files?(files.length) if too_many_files?(files.length)
results << false results << false
@ -1239,24 +1246,30 @@ class Site < Sequel::Model
end end
files.each do |file| files.each do |file|
html_uploaded = true if file[:filename].match HTML_REGEX
existing_size = 0 existing_size = 0
site_file = site_files_dataset.where(path: scrubbed_path(file[:filename])).first site_file = site_files_dataset.where(path: scrubbed_path(file[:filename])).first
if site_file if site_file
existing_size = site_file.size existing_size = site_file.size
end end
res = store_file(file[:filename], file[:tempfile], file[:opts] || opts) res = store_file(file[:filename], file[:tempfile], file[:opts] || opts)
if res == true if res == true
new_size -= existing_size new_size -= existing_size
new_size += file[:tempfile].size new_size += file[:tempfile].size
end end
results << res results << res
end end
if results.include? true && opts[:new_install] != true if results.include? true
if((files.select {|f| f[:filename] =~ /^\/?index.html$/}.length > 0 || site_changed == true))
DB["update sites set space_used=space_used#{new_size < 0 ? new_size.to_s : '+'+new_size.to_s} where id=?", self.id].first
if opts[:new_install] != true
if files.select {|f| f[:filename] =~ /^\/?index.html$/}.length > 0 || site_changed == true
index_changed = true index_changed = true
else else
index_changed = false index_changed = false
@ -1265,17 +1278,21 @@ class Site < Sequel::Model
index_changed = false if empty_index? index_changed = false if empty_index?
time = Time.now time = Time.now
sql = DB["update sites set site_changed=?, site_updated_at=?, updated_at=?, changed_count=changed_count+1, space_used=space_used#{new_size < 0 ? new_size.to_s : '+'+new_size.to_s} where id=?",
sql = DB["update sites set site_changed=?, site_updated_at=?, updated_at=?, changed_count=changed_count+1 where id=?",
index_changed, index_changed,
time, time,
time, time,
self.id self.id
] ]
sql.first sql.first
ArchiveWorker.perform_in 24.hours, self.id
end
reload reload
#SiteChange.record self, relative_path unless opts[:new_install] #SiteChange.record self, relative_path unless opts[:new_install]
ArchiveWorker.perform_in 24.hours, self.id
end end
results results
@ -1286,7 +1303,6 @@ class Site < Sequel::Model
path = scrubbed_path path path = scrubbed_path path
site_file = site_files_dataset.where(path: path).first site_file = site_files_dataset.where(path: path).first
site_file.destroy if site_file site_file.destroy if site_file
true true
end end

View file

@ -30,19 +30,22 @@ describe 'site_files' do
end end
it 'works' do it 'works' do
initial_space_used = @site.space_used
uploaded_file = Rack::Test::UploadedFile.new('./tests/files/test.jpg', 'image/jpeg') uploaded_file = Rack::Test::UploadedFile.new('./tests/files/test.jpg', 'image/jpeg')
upload 'files[]' => uploaded_file upload 'files[]' => uploaded_file
PurgeCacheOrderWorker.jobs.clear PurgeCacheOrderWorker.jobs.clear
@site.reload.space_used.must_equal uploaded_file.size @site.reload.space_used.must_equal initial_space_used + uploaded_file.size
@site.actual_space_used.must_equal @site.space_used
file_path = @site.files_path 'test.jpg' file_path = @site.files_path 'test.jpg'
File.exists?(file_path).must_equal true File.exists?(file_path).must_equal true
delete_file filename: 'test.jpg' delete_file filename: 'test.jpg'
File.exists?(file_path).must_equal false File.exists?(file_path).must_equal false
SiteFile[site_id: @site.id, path: 'test.jpg'].must_be_nil SiteFile[site_id: @site.id, path: 'test.jpg'].must_be_nil
@site.reload.space_used.must_equal 0 @site.reload.space_used.must_equal initial_space_used
@site.actual_space_used.must_equal @site.space_used
PurgeCacheOrderWorker.jobs.length.must_equal 0 PurgeCacheOrderWorker.jobs.length.must_equal 0
DeleteCacheOrderWorker.jobs.length.must_equal 1 DeleteCacheOrderWorker.jobs.length.must_equal 1
@ -173,14 +176,20 @@ describe 'site_files' do
username, pathname = dirname_purge['args'] username, pathname = dirname_purge['args']
username.must_equal @site.username username.must_equal @site.username
pathname.must_equal '/' pathname.must_equal '/'
@site.space_used.must_equal @site.actual_space_used
(@site.space_used > 0).must_equal true
end end
it 'provides the correct space used after overwriting an existing file' do it 'provides the correct space used after overwriting an existing file' do
initial_space_used = @site.space_used
uploaded_file = Rack::Test::UploadedFile.new('./tests/files/test.jpg', 'image/jpeg') uploaded_file = Rack::Test::UploadedFile.new('./tests/files/test.jpg', 'image/jpeg')
upload 'files[]' => uploaded_file upload 'files[]' => uploaded_file
second_uploaded_file = Rack::Test::UploadedFile.new('./tests/files/img/test.jpg', 'image/jpeg') second_uploaded_file = Rack::Test::UploadedFile.new('./tests/files/img/test.jpg', 'image/jpeg')
upload 'files[]' => second_uploaded_file upload 'files[]' => second_uploaded_file
@site.reload.space_used.must_equal second_uploaded_file.size @site.reload.space_used.must_equal initial_space_used + second_uploaded_file.size
@site.space_used.must_equal @site.actual_space_used
end end
it 'does not change title for subdir index.html' do it 'does not change title for subdir index.html' do
@ -193,6 +202,7 @@ describe 'site_files' do
end end
it 'succeeds with valid file' do it 'succeeds with valid file' do
initial_space_used = @site.space_used
uploaded_file = Rack::Test::UploadedFile.new('./tests/files/test.jpg', 'image/jpeg') uploaded_file = Rack::Test::UploadedFile.new('./tests/files/test.jpg', 'image/jpeg')
upload 'files[]' => uploaded_file upload 'files[]' => uploaded_file
last_response.body.must_match /successfully uploaded/i last_response.body.must_match /successfully uploaded/i
@ -204,7 +214,8 @@ describe 'site_files' do
@site.reload @site.reload
@site.space_used.wont_equal 0 @site.space_used.wont_equal 0
@site.space_used.must_equal uploaded_file.size @site.space_used.must_equal initial_space_used + uploaded_file.size
@site.space_used.must_equal @site.actual_space_used
ThumbnailWorker.jobs.length.must_equal 1 ThumbnailWorker.jobs.length.must_equal 1
ThumbnailWorker.drain ThumbnailWorker.drain