Skip to content

Commit c79c562

Browse files
authored
Expire packages in create/update hooks (#4111)
* Expire packages in create/update hooks * ensures that Docker packages are also expired * Mock BitsExpiration.expire_packages! in package_model tests * Mock BitsExpiration.expire_packages! in stagings_controller tests * Test package_model hooks in bits_expiration test * expire_packages! is now implicitly called by hooks * Run package update hook also for failed state * Fix RuboCop warning
1 parent 93ad9c6 commit c79c562

File tree

5 files changed

+18
-5
lines changed

5 files changed

+18
-5
lines changed

app/models/runtime/package_model.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,18 @@ class PackageModel < Sequel::Model(:packages)
3030

3131
set_field_as_encrypted :docker_password, salt: :docker_password_salt, column: :encrypted_docker_password
3232

33+
def after_create
34+
super
35+
BitsExpiration.new.expire_packages!(app) if ready?
36+
end
37+
38+
def after_update
39+
super
40+
return unless column_changed?(:state)
41+
42+
BitsExpiration.new.expire_packages!(app) if ready? || failed?
43+
end
44+
3345
def validate
3446
validates_max_length 5_000, :docker_password, message: 'can be up to 5,000 characters', allow_nil: true
3547
validates_includes PACKAGE_STATES, :state, allow_missing: true

lib/cloud_controller/packager/package_upload_handler.rb

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@ def pack
2121
end
2222

2323
package.succeed_upload!(checksums)
24-
25-
VCAP::CloudController::BitsExpiration.new.expire_packages!(package.app)
2624
ensure
2725
FileUtils.rm_f(@uploaded_files_path) if @uploaded_files_path
2826
end

spec/unit/controllers/runtime/stagings_controller_spec.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,7 @@ module VCAP::CloudController
238238
Fog.unmock!
239239
TestConfig.override(**staging_config)
240240
set_current_user_as_admin(user: User.make(guid: '1234'), email: '[email protected]', user_name: 'briggs')
241+
allow_any_instance_of(BitsExpiration).to receive(:expire_packages!)
241242
end
242243

243244
after { FileUtils.rm_rf(workspace) }

spec/unit/lib/cloud_controller/bits_expiration_spec.rb

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -161,14 +161,12 @@ module VCAP::CloudController
161161

162162
it 'expires old packages' do
163163
expiration = BitsExpiration.new
164-
expiration.expire_packages!(app)
165164
num_of_packages_to_keep = expiration.packages_storage_count + 1
166165
remaining_packages = PackageModel.where(state: PackageModel::READY_STATE, app_guid: app.guid)
167166
expect(remaining_packages.count).to eq(num_of_packages_to_keep)
168167
end
169168

170169
it 'does not delete the package related to the current droplet' do
171-
BitsExpiration.new.expire_packages!(app)
172170
app.reload && @current_package.reload
173171
expect(@current_package.state).to eq(PackageModel::READY_STATE)
174172
end
@@ -181,7 +179,7 @@ module VCAP::CloudController
181179
end
182180

183181
it 'enqueues a job to delete the blob' do
184-
expect { BitsExpiration.new.expire_packages!(app) }.to change(Delayed::Job, :count).from(0).to(5)
182+
expect(Delayed::Job.count).to eq(5)
185183
expect(Delayed::Job).to(be_all { |j| j.handler.include?('DeleteExpiredPackageBlob') })
186184
end
187185
end

spec/unit/models/runtime/package_model_spec.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
module VCAP::CloudController
44
RSpec.describe PackageModel do
5+
before do
6+
allow_any_instance_of(BitsExpiration).to receive(:expire_packages!)
7+
end
8+
59
describe 'validations' do
610
it { is_expected.to validates_includes PackageModel::PACKAGE_STATES, :state, allow_missing: true }
711

0 commit comments

Comments
 (0)