Skip to content
This repository was archived by the owner on Jun 2, 2021. It is now read-only.

Commit b8d3980

Browse files
authored
Merge pull request cloudfoundry#1909 from cloudfoundry/fix-docker-app-deletion-package-registry
fix docker app deletion when using a package registry [finishes #175295965]
2 parents 6280433 + 6b2dd93 commit b8d3980

4 files changed

Lines changed: 72 additions & 28 deletions

File tree

app/actions/package_delete.rb

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,8 @@ def delete(packages)
88
packages = Array(packages)
99

1010
packages.each do |package|
11-
package_delete = if VCAP::CloudController::Config.config.package_image_registry_configured?
12-
Jobs::Kubernetes::RegistryDelete.new(package.bits_image_reference)
13-
else
14-
Jobs::Runtime::BlobstoreDelete.new(package.guid, :package_blobstore)
15-
end
16-
Jobs::Enqueuer.new(package_delete, queue: Jobs::Queues.generic).enqueue
11+
package_src_delete_job = create_package_source_deletion_job(package)
12+
Jobs::Enqueuer.new(package_src_delete_job, queue: Jobs::Queues.generic).enqueue if package_src_delete_job
1713
package.destroy
1814

1915
Repositories::PackageEventRepository.record_app_package_delete(
@@ -23,5 +19,17 @@ def delete(packages)
2319

2420
[]
2521
end
22+
23+
private
24+
25+
def create_package_source_deletion_job(package)
26+
return Jobs::Runtime::BlobstoreDelete.new(package.guid, :package_blobstore) unless package_registry_configured?
27+
28+
package.bits? ? Jobs::Kubernetes::RegistryDelete.new(package.bits_image_reference) : nil
29+
end
30+
31+
def package_registry_configured?
32+
VCAP::CloudController::Config.config.package_image_registry_configured?
33+
end
2634
end
2735
end

app/jobs/runtime/delete_expired_package_blob.rb

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,7 @@ def perform
1717
package = PackageModel.find(guid: package_guid)
1818
return unless package
1919

20-
if VCAP::CloudController::Config.config.package_image_registry_configured?
21-
VCAP::CloudController::Jobs::Kubernetes::RegistryDelete.new(package.bits_image_reference).perform
22-
else
23-
BlobstoreDelete.new(package_guid, :package_blobstore).perform
24-
end
20+
create_package_source_deletion_job(package)&.perform
2521
package.update(package_hash: nil, sha256_checksum: nil)
2622
end
2723

@@ -36,6 +32,18 @@ def max_attempts
3632
def logger
3733
@logger ||= Steno.logger('cc.background')
3834
end
35+
36+
private
37+
38+
def package_registry_configured?
39+
VCAP::CloudController::Config.config.package_image_registry_configured?
40+
end
41+
42+
def create_package_source_deletion_job(package)
43+
return Jobs::Runtime::BlobstoreDelete.new(package.guid, :package_blobstore) unless package_registry_configured?
44+
45+
package.bits? ? Jobs::Kubernetes::RegistryDelete.new(package.bits_image_reference) : nil
46+
end
3947
end
4048
end
4149
end

spec/unit/actions/package_delete_spec.rb

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,18 +24,32 @@ module VCAP::CloudController
2424
TestConfig.override(packages: { image_registry: { base_path: 'hub.example.com/user' } })
2525
end
2626

27-
it 'schedules a job to the delete the blobstore item' do
28-
expect {
29-
package_delete.delete(package)
30-
}.to change {
31-
Delayed::Job.count
32-
}.by(1)
27+
context 'when the package type is bits' do
28+
it 'schedules a job to the delete the package from the container registry' do
29+
expect {
30+
package_delete.delete(package)
31+
}.to change {
32+
Delayed::Job.count
33+
}.by(1)
3334

34-
job = Delayed::Job.last
35-
expect(job.handler).to include('VCAP::CloudController::Jobs::Kubernetes::RegistryDelete')
36-
expect(job.handler).to include(package.bits_image_reference(digest: false))
37-
expect(job.queue).to eq(Jobs::Queues.generic)
38-
expect(job.guid).not_to be_nil
35+
job = Delayed::Job.last
36+
expect(job.handler).to include('VCAP::CloudController::Jobs::Kubernetes::RegistryDelete')
37+
expect(job.handler).to include(package.bits_image_reference(digest: false))
38+
expect(job.queue).to eq(Jobs::Queues.generic)
39+
expect(job.guid).not_to be_nil
40+
end
41+
end
42+
43+
context 'when the package type is docker' do
44+
let!(:package) { PackageModel.make(type: PackageModel::DOCKER_TYPE) }
45+
46+
it 'does not schedule a deletion job since there was no source code uploaded' do
47+
expect {
48+
package_delete.delete(package)
49+
}.to change {
50+
Delayed::Job.count
51+
}.by(0)
52+
end
3953
end
4054
end
4155

spec/unit/jobs/runtime/delete_expired_package_blob_spec.rb

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ module VCAP::CloudController
44
module Jobs::Runtime
55
RSpec.describe DeleteExpiredPackageBlob, job_context: :worker do
66
subject(:job) { DeleteExpiredPackageBlob.new(package.guid) }
7-
let(:package) { PackageModel.make(package_hash: 'some-hash', sha256_checksum: 'example-256-checksum') }
7+
let(:type) { PackageModel::BITS_TYPE }
8+
let(:package) { PackageModel.make(package_hash: 'some-hash', sha256_checksum: 'example-256-checksum', type: type) }
89

910
it { is_expected.to be_a_valid_job }
1011

@@ -17,12 +18,25 @@ module Jobs::Runtime
1718
allow(registry_delete).to receive(:perform)
1819
end
1920

20-
it 'delegates to registry delete job' do
21-
job.perform
21+
context 'when the package type is bits' do
22+
it 'delegates to registry delete job' do
23+
job.perform
24+
25+
expect(VCAP::CloudController::Jobs::Kubernetes::RegistryDelete).to have_received(:new).
26+
with(package.bits_image_reference(digest: false))
27+
expect(registry_delete).to have_received(:perform)
28+
end
29+
end
30+
31+
context 'when the package type is docker' do
32+
let(:type) { PackageModel::DOCKER_TYPE }
33+
34+
it 'does not perform registry deletion' do
35+
job.perform
2236

23-
expect(VCAP::CloudController::Jobs::Kubernetes::RegistryDelete).to have_received(:new).
24-
with(package.bits_image_reference(digest: false))
25-
expect(registry_delete).to have_received(:perform)
37+
expect(VCAP::CloudController::Jobs::Kubernetes::RegistryDelete).not_to have_received(:new)
38+
expect(registry_delete).not_to have_received(:perform)
39+
end
2640
end
2741

2842
it 'nils the package_hash and sha256_checksum values' do

0 commit comments

Comments
 (0)