Skip to content

Commit 55c893f

Browse files
authored
Fix app crash events for apps using rolling deployments (#3790)
- The internal app crash event endpoint assumed that the web process guid == app guid (legacy behavior from the v2->v3 data model migrations) - Rolling deployments create new web processes that have different guids which made it so this endpoint no longer created events associated with the parent app - This change updates the endpoint to make app crash events for the app guid instead of the process guid which should resolve the rolling deployment issue and support crash events for non-web process types Fixes #2587
1 parent 309fbc0 commit 55c893f

File tree

2 files changed

+14
-13
lines changed

2 files changed

+14
-13
lines changed

app/controllers/internal/app_crashed_controller.rb

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,18 @@ class AppCrashedController < RestController::BaseController
77
allow_unauthenticated_access
88

99
post '/internal/v4/apps/:process_guid/crashed', :crashed
10-
def crashed(process_guid)
10+
def crashed(lrp_process_guid)
1111
crash_payload = crashed_request
1212

13-
app_guid = Diego::ProcessGuid.cc_process_guid(process_guid)
13+
cc_process_guid = Diego::ProcessGuid.cc_process_guid(lrp_process_guid)
1414

15-
process = ProcessModel.find(guid: app_guid)
16-
raise CloudController::Errors::NotFound.new_from_details('ProcessNotFound', app_guid) unless process
15+
process = ProcessModel.find(guid: cc_process_guid)
16+
raise CloudController::Errors::NotFound.new_from_details('ProcessNotFound', cc_process_guid) unless process
1717

18-
crash_payload['version'] = Diego::ProcessGuid.cc_process_version(process_guid)
18+
crash_payload['version'] = Diego::ProcessGuid.cc_process_version(lrp_process_guid)
1919

2020
Repositories::ProcessEventRepository.record_crash(process, crash_payload)
21-
Repositories::AppEventRepository.new.create_app_crash_event(process, crash_payload)
21+
Repositories::AppEventRepository.new.create_app_crash_event(process.app, crash_payload)
2222

2323
[200, '{}']
2424
end

spec/unit/controllers/internal/app_crashed_controller_spec.rb

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
module VCAP::CloudController
66
RSpec.describe AppCrashedController do
77
describe 'POST /internal/v4/apps/:process_guid/crashed' do
8-
let(:diego_process) { ProcessModelFactory.make(state: 'STARTED', diego: true) }
8+
let(:diego_process) { ProcessModelFactory.make(state: 'STARTED', diego: true, type: 'rolled-web') }
9+
let(:app_model) { diego_process.app }
910
let(:process_guid) { Diego::ProcessGuid.from(diego_process.guid, 'some-version-guid') }
1011
let(:url) { "/internal/v4/apps/#{process_guid}/crashed" }
1112

@@ -35,13 +36,13 @@ module VCAP::CloudController
3536
expect(last_response.status).to eq(200)
3637
expect(last_response.body).to eq '{}'
3738

38-
app_event = Event.find(actee: diego_process.guid, actor_type: 'app')
39+
app_event = Event.find(actee: app_model.guid, actor_type: 'app')
3940

4041
expect(app_event).to be
41-
expect(app_event.space).to eq(diego_process.space)
42+
expect(app_event.space).to eq(app_model.space)
4243
expect(app_event.type).to eq('app.crash')
4344
expect(app_event.actor_type).to eq('app')
44-
expect(app_event.actor).to eq(diego_process.guid)
45+
expect(app_event.actor).to eq(app_model.guid)
4546
expect(app_event.metadata['instance']).to eq(crashed_request['instance'])
4647
expect(app_event.metadata['index']).to eq(crashed_request['index'])
4748
expect(app_event.metadata['exit_status']).to eq(crashed_request['exit_status'])
@@ -54,15 +55,15 @@ module VCAP::CloudController
5455
expect(last_response.status).to eq(200)
5556
expect(last_response.body).to eq '{}'
5657

57-
app_event = Event.find(actee: diego_process.guid, actor_type: 'process')
58+
app_event = Event.find(actee: app_model.guid, actor_type: 'process')
5859

5960
expect(app_event).to be
60-
expect(app_event.space).to eq(diego_process.space)
61+
expect(app_event.space).to eq(app_model.space)
6162
expect(app_event.type).to eq('audit.app.process.crash')
6263
expect(app_event.actor_type).to eq('process')
6364
expect(app_event.actor).to eq(diego_process.guid)
6465
expect(app_event.actee_type).to eq('app')
65-
expect(app_event.actee).to eq(diego_process.app.guid)
66+
expect(app_event.actee).to eq(app_model.guid)
6667
expect(app_event.metadata['instance']).to eq(crashed_request['instance'])
6768
expect(app_event.metadata['index']).to eq(crashed_request['index'])
6869
expect(app_event.metadata['exit_status']).to eq(crashed_request['exit_status'])

0 commit comments

Comments
 (0)