diff --git a/db/up/jam_track_updates.sql b/db/up/jam_track_updates.sql index f084bfd53..4b6b609f7 100644 --- a/db/up/jam_track_updates.sql +++ b/db/up/jam_track_updates.sql @@ -31,7 +31,7 @@ ALTER TABLE jam_track_rights ADD COLUMN length INTEGER NOT NULL DEFAULT 0, ADD COLUMN download_count INTEGER NOT NULL DEFAULT 0, ADD COLUMN signed BOOLEAN NOT NULL DEFAULT FALSE, - ADD COLUMN downloaded BOOLEAN NOT NULL DEFAULT FALSE, + ADD COLUMN downloaded_since_sign BOOLEAN NOT NULL DEFAULT FALSE, ADD COLUMN created_at timestamp without time zone NOT NULL, ADD COLUMN updated_at timestamp without time zone NOT NULL, ALTER COLUMN jam_track_id TYPE BIGINT USING 0, diff --git a/ruby/lib/jam_ruby/jam_tracks_manager.rb b/ruby/lib/jam_ruby/jam_tracks_manager.rb index 4ea820d5a..7055ddb57 100644 --- a/ruby/lib/jam_ruby/jam_tracks_manager.rb +++ b/ruby/lib/jam_ruby/jam_tracks_manager.rb @@ -50,6 +50,7 @@ module JamRuby jam_track_right.url.store!(File.open(output_jkz)) jam_track_right.signed=true + jam_track_right.downloaded_since_sign=false jam_track_right.save! end end # mktmpdir diff --git a/ruby/lib/jam_ruby/models/jam_track_right.rb b/ruby/lib/jam_ruby/models/jam_track_right.rb index 672bae8a8..1a22ace5e 100644 --- a/ruby/lib/jam_ruby/models/jam_track_right.rb +++ b/ruby/lib/jam_ruby/models/jam_track_right.rb @@ -36,7 +36,7 @@ module JamRuby end def self.ready_to_clean - JamTrackRight.where("downloaded=TRUE AND updated_at <= ?", 5.minutes.ago).limit(1000) + JamTrackRight.where("downloaded_since_sign=? AND updated_at <= ?", true, 5.minutes.ago).limit(1000) end @@ -45,7 +45,7 @@ module JamRuby # we would verify their rights (can_download?), and generates a URL in response to the click so that they can download # but the url is short lived enough so that it wouldn't be easily shared def sign_url(expiration_time = 120) - s3_manager.sign_url(self[:url], {:expires => expiration_time, :response_content_type => 'jkz', :secure => false}) + s3_manager.sign_url(self[:url], {:expires => expiration_time, :secure => false}) end def delete_s3_files diff --git a/ruby/lib/jam_ruby/resque/scheduled/jam_tracks_cleaner.rb b/ruby/lib/jam_ruby/resque/scheduled/jam_tracks_cleaner.rb index b8fe904bc..3ef073b01 100644 --- a/ruby/lib/jam_ruby/resque/scheduled/jam_tracks_cleaner.rb +++ b/ruby/lib/jam_ruby/resque/scheduled/jam_tracks_cleaner.rb @@ -20,7 +20,7 @@ module JamRuby end def self.perform - JamTrackRight.downloaded.each do |jam_track_right| + JamTrackRight.ready_to_clean.each do |jam_track_right| @@log.debug("deleting files for jam_track_right #{jam_track_right.id}") jam_track_right.delete_s3_files end diff --git a/ruby/spec/jam_ruby/resque/jam_tracks_cleaner_spec.rb b/ruby/spec/jam_ruby/resque/jam_tracks_cleaner_spec.rb new file mode 100644 index 000000000..36cb5a067 --- /dev/null +++ b/ruby/spec/jam_ruby/resque/jam_tracks_cleaner_spec.rb @@ -0,0 +1,53 @@ +require 'spec_helper' + +describe JamTracksCleaner do + include UsesTempFiles + include CarrierWave::Test::Matchers + RIGHT_NAME = 'abc.jkz' + in_directory_with_file(RIGHT_NAME) + + before (:all) do + @user = FactoryGirl.create(:user) + @jam_track = FactoryGirl.create(:jam_track) + original_storage = JamTrackRightUploader.storage = :fog + end + + after(:all) do + JamTrackRightUploader.storage = @original_storage + end + + + before(:each) do + content_for_file('abc') + end + + it "should clean" do + jam_track_right = JamTrackRight.create(:user=>@user, :jam_track=>@jam_track) + jam_track_right.signed=true + jam_track_right + + jam_track_right.url.store!(File.open(RIGHT_NAME)) + jam_track_right.downloaded_since_sign=true + jam_track_right.save! + + jam_track_right[:url].should == jam_track_right.store_dir + '/' + jam_track_right.filename + jam_track_right.reload + + # Should exist after uploading: + url = jam_track_right[:url] + s3 = S3Manager.new(APP_CONFIG.aws_bucket, APP_CONFIG.aws_access_key_id, APP_CONFIG.aws_secret_access_key) + + url.should_not be_nil + s3 = S3Manager.new(APP_CONFIG.aws_bucket, APP_CONFIG.aws_access_key_id, APP_CONFIG.aws_secret_access_key) + s3.exists?(jam_track_right[:url]).should be_true + + JamRuby::JamTracksCleaner.perform + s3.exists?(url).should be_true + s3 = S3Manager.new(APP_CONFIG.aws_bucket, APP_CONFIG.aws_access_key_id, APP_CONFIG.aws_secret_access_key) + jam_track_right.update_attribute("updated_at", 6.minutes.ago) + + # But not after running cleaner job: + JamRuby::JamTracksCleaner.perform + s3.exists?(url).should be_false + end +end \ No newline at end of file