Skip to content

Commit 99e4e94

Browse files
committed
Removes stack_warnings from the models.
Actions own their warnings and Controllers set warnings → headers Signed-off-by: Rashed Kamal <rashed.kamal@broadcom.com>
1 parent 6b3e82d commit 99e4e94

21 files changed

+43
-117
lines changed

app/actions/app_create.rb

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,15 @@ class AppCreate
99

1010
class InvalidApp < StandardError; end
1111

12+
attr_reader :warnings
13+
1214
def initialize(user_audit_info)
1315
@user_audit_info = user_audit_info
1416
@logger = Steno.logger('cc.action.app_create')
1517
end
1618

1719
def create(message, lifecycle)
1820
app = nil
19-
warnings = []
2021
AppModel.db.transaction do
2122
app = AppModel.create(
2223
name: message.name,
@@ -25,7 +26,7 @@ def create(message, lifecycle)
2526
)
2627

2728
lifecycle.create_lifecycle_data_model(app)
28-
warnings = validate_stack_state(app, lifecycle)
29+
@warnings = validate_stack_state(app, lifecycle)
2930
validate_buildpacks_are_ready(app)
3031

3132
MetadataUpdate.update(app, message)
@@ -45,8 +46,6 @@ def create(message, lifecycle)
4546
)
4647
end
4748

48-
app.instance_variable_set(:@stack_warnings, warnings)
49-
5049
app
5150
rescue Sequel::ValidationFailed => e
5251
v3_api_error!(:UniquenessError, e.message) if e.errors.on(%i[space_guid name])

app/actions/app_update.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ class AppUpdate
77
class DropletNotFound < StandardError; end
88
class InvalidApp < StandardError; end
99

10+
attr_reader :warnings
11+
1012
def initialize(user_audit_info, manifest_triggered: false, runners: nil)
1113
@user_audit_info = user_audit_info
1214
@logger = Steno.logger('cc.action.app_update')
@@ -53,8 +55,7 @@ def update(app, message, lifecycle)
5355
end
5456
end
5557

56-
warnings = validate_stack_state(app, message, lifecycle)
57-
app.instance_variable_set(:@stack_warnings, warnings)
58+
@warnings = validate_stack_state(app, message, lifecycle)
5859

5960
app
6061
rescue Sequel::ValidationFailed,

app/actions/build_create.rb

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ class LogRateLimitOrgQuotaExceeded < BuildError
2525
class StagingInProgress < BuildError
2626
end
2727

28-
attr_reader :staging_response
28+
attr_reader :staging_response, :warnings
2929

3030
def initialize(user_audit_info: UserAuditInfo.from_context(SecurityContext),
3131
memory_limit_calculator: QuotaValidatingStagingMemoryCalculator.new,
@@ -41,7 +41,7 @@ def initialize(user_audit_info: UserAuditInfo.from_context(SecurityContext),
4141

4242
def create_and_stage(package:, lifecycle:, metadata: nil, start_after_staging: false)
4343
logger.info("creating build for package #{package.guid}")
44-
warnings = validate_stack_state!(lifecycle, package.app)
44+
@warnings = validate_stack_state!(lifecycle, package.app)
4545
staging_in_progress! if package.app.staging_in_progress?
4646
raise InvalidPackage.new('Cannot stage package whose state is not ready.') if package.state != PackageModel::READY_STATE
4747

@@ -61,7 +61,6 @@ def create_and_stage(package:, lifecycle:, metadata: nil, start_after_staging: f
6161
created_by_user_name: @user_audit_info.user_name,
6262
created_by_user_email: @user_audit_info.user_email
6363
)
64-
build.instance_variable_set(:@stack_warnings, warnings)
6564

6665
BuildModel.db.transaction do
6766
build.save

app/actions/v2/app_create.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
module VCAP::CloudController
22
module V2
33
class AppCreate
4+
attr_reader :warnings
5+
46
def initialize(access_validator:)
57
@access_validator = access_validator
68
end
@@ -46,8 +48,7 @@ def create(request_attrs)
4648
@access_validator.validate_access(:create, process, request_attrs)
4749
end
4850

49-
warnings = validate_stack_state(request_attrs)
50-
process.instance_variable_set(:@stack_warnings, warnings)
51+
@warnings = validate_stack_state(request_attrs)
5152

5253
process
5354
end

app/actions/v2/app_stage.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ def stage(process)
2929
start_after_staging: true
3030
)
3131

32-
@warnings = build.instance_variable_get(:@stack_warnings) || []
32+
@warnings = build_creator.warnings || []
3333

3434
TelemetryLogger.v2_emit(
3535
'create-build',

app/controllers/runtime/apps_controller.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -358,7 +358,7 @@ def create
358358
creator = V2::AppCreate.new(access_validator: self)
359359
process = creator.create(request_attrs)
360360

361-
process.stack_warnings&.each { |warning| add_warning(warning) }
361+
creator.warnings&.each { |warning| add_warning(warning) }
362362

363363
@app_event_repository.record_app_create(
364364
process,

app/controllers/v3/apps_controller.rb

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,8 @@ def create
9898
FeatureFlag.raise_unless_enabled!(:diego_cnb) if lifecycle.type == VCAP::CloudController::Lifecycles::CNB
9999
unprocessable!(lifecycle.errors.full_messages) unless lifecycle.valid?
100100

101-
app = AppCreate.new(user_audit_info).create(message, lifecycle)
101+
app_creator = AppCreate.new(user_audit_info)
102+
app = app_creator.create(message, lifecycle)
102103
TelemetryLogger.v3_emit(
103104
'create-app',
104105
{
@@ -107,7 +108,7 @@ def create
107108
}
108109
)
109110

110-
add_warning_headers(app.stack_warnings) if app.stack_warnings&.any?
111+
add_warning_headers(app_creator.warnings) if app_creator.warnings&.any?
111112

112113
render status: :created, json: Presenters::V3::AppPresenter.new(app)
113114
rescue AppCreate::InvalidApp => e
@@ -127,7 +128,8 @@ def update
127128
lifecycle = AppLifecycleProvider.provide_for_update(message, app)
128129
unprocessable!(lifecycle.errors.full_messages) unless lifecycle.valid?
129130

130-
app = AppUpdate.new(user_audit_info).update(app, message, lifecycle)
131+
app_updater = AppUpdate.new(user_audit_info)
132+
app = app_updater.update(app, message, lifecycle)
131133
TelemetryLogger.v3_emit(
132134
'update-app',
133135
{
@@ -136,7 +138,7 @@ def update
136138
}
137139
)
138140

139-
add_warning_headers(app.stack_warnings) if app.stack_warnings&.any?
141+
add_warning_headers(app_updater.warnings) if app_updater.warnings&.any?
140142

141143
render status: :ok, json: Presenters::V3::AppPresenter.new(app)
142144
rescue AppUpdate::DropletNotFound

app/controllers/v3/builds_controller.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,8 @@ def create
4949
FeatureFlag.raise_unless_enabled!(:diego_cnb) if lifecycle.type == VCAP::CloudController::Lifecycles::CNB
5050
unprocessable!(lifecycle.errors.full_messages) unless lifecycle.valid?
5151

52-
build = BuildCreate.new.create_and_stage(package: package, lifecycle: lifecycle, metadata: message.metadata)
52+
build_creator = BuildCreate.new
53+
build = build_creator.create_and_stage(package: package, lifecycle: lifecycle, metadata: message.metadata)
5354

5455
TelemetryLogger.v3_emit(
5556
'create-build',
@@ -65,7 +66,7 @@ def create
6566
}
6667
)
6768

68-
add_warning_headers(build.stack_warnings) if build.stack_warnings&.any?
69+
add_warning_headers(build_creator.warnings) if build_creator.warnings&.any?
6970

7071
render status: :created, json: Presenters::V3::BuildPresenter.new(build)
7172
rescue BuildCreate::InvalidPackage => e

app/models/runtime/app_model.rb

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@ class AppModel < Sequel::Model(:apps)
1111
DEFAULT_CONTAINER_USER = 'vcap'.freeze
1212
DEFAULT_DOCKER_CONTAINER_USER = 'root'.freeze
1313

14-
attr_reader :stack_warnings
15-
1614
many_to_many :routes, join_table: :route_mappings, left_key: :app_guid, left_primary_key: :guid, right_primary_key: :guid, right_key: :route_guid
1715
one_to_many :route_mappings, class: 'VCAP::CloudController::RouteMappingModel', key: :app_guid, primary_key: :guid
1816
one_to_many :service_bindings, key: :app_guid, primary_key: :guid

app/models/runtime/build_model.rb

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@ class BuildModel < Sequel::Model(:builds)
1717
CNBGenericBuildFailed CNBDownloadBuildpackFailed CNBDetectFailed
1818
CNBBuildFailed CNBExportFailed CNBLaunchFailed CNBRestoreFailed].map(&:freeze).freeze
1919

20-
attr_reader :stack_warnings
21-
2220
many_to_one :app,
2321
class: 'VCAP::CloudController::AppModel',
2422
key: :app_guid,

0 commit comments

Comments
 (0)