Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitcc94420

Browse files
authored
fix: include provisioner timing action in hash func (#14388)
1 parent82e6070 commitcc94420

File tree

3 files changed

+59
-5
lines changed

3 files changed

+59
-5
lines changed
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
A resource can transition through multiple states through actions like 'delete' and 'create'.
2+
Previously we were not including the action in the 'hashByState' function, leading to missed timings.
3+
See 'docker_container.workspace[0]' below.
4+
5+
-- apply --
6+
{"@level":"info","@message":"Terraform 1.9.2","@module":"terraform.ui","@timestamp":"2024-08-21T22:59:39.724076+02:00","terraform":"1.9.2","type":"version","ui":"1.2"}
7+
{"@level":"info","@message":"data.coder_parameter.memory_size: Refreshing...","@module":"terraform.ui","@timestamp":"2024-08-21T22:59:40.003696+02:00","hook":{"resource":{"addr":"data.coder_parameter.memory_size","module":"","resource":"data.coder_parameter.memory_size","implied_provider":"coder","resource_type":"coder_parameter","resource_name":"memory_size","resource_key":null},"action":"read"},"type":"apply_start"}
8+
{"@level":"info","@message":"data.coder_workspace.me: Refreshing...","@module":"terraform.ui","@timestamp":"2024-08-21T22:59:40.003703+02:00","hook":{"resource":{"addr":"data.coder_workspace.me","module":"","resource":"data.coder_workspace.me","implied_provider":"coder","resource_type":"coder_workspace","resource_name":"me","resource_key":null},"action":"read"},"type":"apply_start"}
9+
{"@level":"info","@message":"data.coder_provisioner.me: Refreshing...","@module":"terraform.ui","@timestamp":"2024-08-21T22:59:40.003711+02:00","hook":{"resource":{"addr":"data.coder_provisioner.me","module":"","resource":"data.coder_provisioner.me","implied_provider":"coder","resource_type":"coder_provisioner","resource_name":"me","resource_key":null},"action":"read"},"type":"apply_start"}
10+
{"@level":"info","@message":"data.http.latest_commit: Refreshing...","@module":"terraform.ui","@timestamp":"2024-08-21T22:59:40.003786+02:00","hook":{"resource":{"addr":"data.http.latest_commit","module":"","resource":"data.http.latest_commit","implied_provider":"http","resource_type":"http","resource_name":"latest_commit","resource_key":null},"action":"read"},"type":"apply_start"}
11+
{"@level":"info","@message":"data.coder_provisioner.me: Refresh complete after 0s [id=6c107654-0d6d-400f-bd54-5dd3eb7c0ecd]","@module":"terraform.ui","@timestamp":"2024-08-21T22:59:40.004366+02:00","hook":{"resource":{"addr":"data.coder_provisioner.me","module":"","resource":"data.coder_provisioner.me","implied_provider":"coder","resource_type":"coder_provisioner","resource_name":"me","resource_key":null},"action":"read","id_key":"id","id_value":"6c107654-0d6d-400f-bd54-5dd3eb7c0ecd","elapsed_seconds":0},"type":"apply_complete"}
12+
{"@level":"info","@message":"data.coder_workspace.me: Refresh complete after 0s [id=5509156c-f08e-4524-8eb5-51ff595226fb]","@module":"terraform.ui","@timestamp":"2024-08-21T22:59:40.004689+02:00","hook":{"resource":{"addr":"data.coder_workspace.me","module":"","resource":"data.coder_workspace.me","implied_provider":"coder","resource_type":"coder_workspace","resource_name":"me","resource_key":null},"action":"read","id_key":"id","id_value":"5509156c-f08e-4524-8eb5-51ff595226fb","elapsed_seconds":0},"type":"apply_complete"}
13+
{"@level":"info","@message":"data.coder_parameter.memory_size: Refresh complete after 0s [id=1be91971-33dd-4eb8-a1a3-0ba3a38a8dde]","@module":"terraform.ui","@timestamp":"2024-08-21T22:59:40.004938+02:00","hook":{"resource":{"addr":"data.coder_parameter.memory_size","module":"","resource":"data.coder_parameter.memory_size","implied_provider":"coder","resource_type":"coder_parameter","resource_name":"memory_size","resource_key":null},"action":"read","id_key":"id","id_value":"1be91971-33dd-4eb8-a1a3-0ba3a38a8dde","elapsed_seconds":0},"type":"apply_complete"}
14+
{"@level":"info","@message":"coder_agent.main: Refreshing state... [id=9a62f453-6303-4d10-99d4-9001f73683c2]","@module":"terraform.ui","@timestamp":"2024-08-21T22:59:40.007139+02:00","hook":{"resource":{"addr":"coder_agent.main","module":"","resource":"coder_agent.main","implied_provider":"coder","resource_type":"coder_agent","resource_name":"main","resource_key":null},"id_key":"id","id_value":"9a62f453-6303-4d10-99d4-9001f73683c2"},"type":"refresh_start"}
15+
{"@level":"info","@message":"docker_image.main: Refreshing state... [id=sha256:443d199e8bfcce69c2aa494b36b5f8b04c3b183277cd19190e9589fd8552d618nginx:latest]","@module":"terraform.ui","@timestamp":"2024-08-21T22:59:40.008559+02:00","hook":{"resource":{"addr":"docker_image.main","module":"","resource":"docker_image.main","implied_provider":"docker","resource_type":"docker_image","resource_name":"main","resource_key":null},"id_key":"id","id_value":"sha256:443d199e8bfcce69c2aa494b36b5f8b04c3b183277cd19190e9589fd8552d618nginx:latest"},"type":"refresh_start"}
16+
{"@level":"info","@message":"coder_agent.main: Refresh complete [id=9a62f453-6303-4d10-99d4-9001f73683c2]","@module":"terraform.ui","@timestamp":"2024-08-21T22:59:40.011774+02:00","hook":{"resource":{"addr":"coder_agent.main","module":"","resource":"coder_agent.main","implied_provider":"coder","resource_type":"coder_agent","resource_name":"main","resource_key":null},"id_key":"id","id_value":"9a62f453-6303-4d10-99d4-9001f73683c2"},"type":"refresh_complete"}
17+
{"@level":"info","@message":"docker_volume.home_volume: Refreshing state... [id=coder-57e02f44-3b83-4f24-ac6f-65376cc5ab8e-home]","@module":"terraform.ui","@timestamp":"2024-08-21T22:59:40.011801+02:00","hook":{"resource":{"addr":"docker_volume.home_volume","module":"","resource":"docker_volume.home_volume","implied_provider":"docker","resource_type":"docker_volume","resource_name":"home_volume","resource_key":null},"id_key":"id","id_value":"coder-57e02f44-3b83-4f24-ac6f-65376cc5ab8e-home"},"type":"refresh_start"}
18+
{"@level":"info","@message":"coder_script.startup_script: Refreshing state... [id=46d825ef-dd7e-47b6-a8e0-cda5d7695e0e]","@module":"terraform.ui","@timestamp":"2024-08-21T22:59:40.015683+02:00","hook":{"resource":{"addr":"coder_script.startup_script","module":"","resource":"coder_script.startup_script","implied_provider":"coder","resource_type":"coder_script","resource_name":"startup_script","resource_key":null},"id_key":"id","id_value":"46d825ef-dd7e-47b6-a8e0-cda5d7695e0e"},"type":"refresh_start"}
19+
{"@level":"info","@message":"coder_script.startup_script: Refresh complete [id=46d825ef-dd7e-47b6-a8e0-cda5d7695e0e]","@module":"terraform.ui","@timestamp":"2024-08-21T22:59:40.016027+02:00","hook":{"resource":{"addr":"coder_script.startup_script","module":"","resource":"coder_script.startup_script","implied_provider":"coder","resource_type":"coder_script","resource_name":"startup_script","resource_key":null},"id_key":"id","id_value":"46d825ef-dd7e-47b6-a8e0-cda5d7695e0e"},"type":"refresh_complete"}
20+
{"@level":"info","@message":"docker_volume.home_volume: Refresh complete [id=coder-57e02f44-3b83-4f24-ac6f-65376cc5ab8e-home]","@module":"terraform.ui","@timestamp":"2024-08-21T22:59:40.017694+02:00","hook":{"resource":{"addr":"docker_volume.home_volume","module":"","resource":"docker_volume.home_volume","implied_provider":"docker","resource_type":"docker_volume","resource_name":"home_volume","resource_key":null},"id_key":"id","id_value":"coder-57e02f44-3b83-4f24-ac6f-65376cc5ab8e-home"},"type":"refresh_complete"}
21+
{"@level":"info","@message":"docker_image.main: Refresh complete [id=sha256:443d199e8bfcce69c2aa494b36b5f8b04c3b183277cd19190e9589fd8552d618nginx:latest]","@module":"terraform.ui","@timestamp":"2024-08-21T22:59:40.025098+02:00","hook":{"resource":{"addr":"docker_image.main","module":"","resource":"docker_image.main","implied_provider":"docker","resource_type":"docker_image","resource_name":"main","resource_key":null},"id_key":"id","id_value":"sha256:443d199e8bfcce69c2aa494b36b5f8b04c3b183277cd19190e9589fd8552d618nginx:latest"},"type":"refresh_complete"}
22+
{"@level":"info","@message":"docker_container.workspace[0]: Refreshing state... [id=6124169bfea9b13f34ee9e730c8772e950898136cd5565f5b3343a7849573050]","@module":"terraform.ui","@timestamp":"2024-08-21T22:59:40.027874+02:00","hook":{"resource":{"addr":"docker_container.workspace[0]","module":"","resource":"docker_container.workspace[0]","implied_provider":"docker","resource_type":"docker_container","resource_name":"workspace","resource_key":0},"id_key":"id","id_value":"6124169bfea9b13f34ee9e730c8772e950898136cd5565f5b3343a7849573050"},"type":"refresh_start"}
23+
{"@level":"info","@message":"data.http.latest_commit: Refresh complete after 0s [id=https://api.github.com/repos/coder/coder/commits/main]","@module":"terraform.ui","@timestamp":"2024-08-21T22:59:40.107958+02:00","hook":{"resource":{"addr":"data.http.latest_commit","module":"","resource":"data.http.latest_commit","implied_provider":"http","resource_type":"http","resource_name":"latest_commit","resource_key":null},"action":"read","id_key":"id","id_value":"https://api.github.com/repos/coder/coder/commits/main","elapsed_seconds":0},"type":"apply_complete"}
24+
{"@level":"info","@message":"docker_container.workspace[0]: Refresh complete [id=6124169bfea9b13f34ee9e730c8772e950898136cd5565f5b3343a7849573050]","@module":"terraform.ui","@timestamp":"2024-08-21T22:59:40.137794+02:00","hook":{"resource":{"addr":"docker_container.workspace[0]","module":"","resource":"docker_container.workspace[0]","implied_provider":"docker","resource_type":"docker_container","resource_name":"workspace","resource_key":0},"id_key":"id","id_value":"6124169bfea9b13f34ee9e730c8772e950898136cd5565f5b3343a7849573050"},"type":"refresh_complete"}
25+
{"@level":"info","@message":"docker_container.workspace[0]: Drift detected (update)","@module":"terraform.ui","@timestamp":"2024-08-21T22:59:40.151984+02:00","change":{"resource":{"addr":"docker_container.workspace[0]","module":"","resource":"docker_container.workspace[0]","implied_provider":"docker","resource_type":"docker_container","resource_name":"workspace","resource_key":0},"action":"update"},"type":"resource_drift"}
26+
{"@level":"info","@message":"coder_agent.main: Drift detected (update)","@module":"terraform.ui","@timestamp":"2024-08-21T22:59:40.152016+02:00","change":{"resource":{"addr":"coder_agent.main","module":"","resource":"coder_agent.main","implied_provider":"coder","resource_type":"coder_agent","resource_name":"main","resource_key":null},"action":"update"},"type":"resource_drift"}
27+
{"@level":"info","@message":"docker_container.workspace[0]: Plan to replace","@module":"terraform.ui","@timestamp":"2024-08-21T22:59:40.152023+02:00","change":{"resource":{"addr":"docker_container.workspace[0]","module":"","resource":"docker_container.workspace[0]","implied_provider":"docker","resource_type":"docker_container","resource_name":"workspace","resource_key":0},"action":"replace","reason":"cannot_update"},"type":"planned_change"}
28+
{"@level":"info","@message":"Plan: 1 to add, 0 to change, 1 to destroy.","@module":"terraform.ui","@timestamp":"2024-08-21T22:59:40.152028+02:00","changes":{"add":1,"change":0,"import":0,"remove":1,"operation":"plan"},"type":"change_summary"}
29+
{"@level":"info","@message":"docker_container.workspace[0]: Destroying... [id=6124169bfea9b13f34ee9e730c8772e950898136cd5565f5b3343a7849573050]","@module":"terraform.ui","@timestamp":"2024-08-21T22:59:40.204215+02:00","hook":{"resource":{"addr":"docker_container.workspace[0]","module":"","resource":"docker_container.workspace[0]","implied_provider":"docker","resource_type":"docker_container","resource_name":"workspace","resource_key":0},"action":"delete","id_key":"id","id_value":"6124169bfea9b13f34ee9e730c8772e950898136cd5565f5b3343a7849573050"},"type":"apply_start"}
30+
{"@level":"info","@message":"docker_container.workspace[0]: Destruction complete after 0s","@module":"terraform.ui","@timestamp":"2024-08-21T22:59:40.250903+02:00","hook":{"resource":{"addr":"docker_container.workspace[0]","module":"","resource":"docker_container.workspace[0]","implied_provider":"docker","resource_type":"docker_container","resource_name":"workspace","resource_key":0},"action":"delete","elapsed_seconds":0},"type":"apply_complete"}
31+
{"@level":"info","@message":"docker_container.workspace[0]: Creating...","@module":"terraform.ui","@timestamp":"2024-08-21T22:59:40.264384+02:00","hook":{"resource":{"addr":"docker_container.workspace[0]","module":"","resource":"docker_container.workspace[0]","implied_provider":"docker","resource_type":"docker_container","resource_name":"workspace","resource_key":0},"action":"create"},"type":"apply_start"}
32+
{"@level":"info","@message":"docker_container.workspace[0]: Creation complete after 1s [id=4c8842d427970f6ce34da73085b61deaa72bdaf14d0dc56972f5eaa93c86a2f0]","@module":"terraform.ui","@timestamp":"2024-08-21T22:59:40.577054+02:00","hook":{"resource":{"addr":"docker_container.workspace[0]","module":"","resource":"docker_container.workspace[0]","implied_provider":"docker","resource_type":"docker_container","resource_name":"workspace","resource_key":0},"action":"create","id_key":"id","id_value":"4c8842d427970f6ce34da73085b61deaa72bdaf14d0dc56972f5eaa93c86a2f0","elapsed_seconds":1},"type":"apply_complete"}
33+
{"@level":"info","@message":"Apply complete! Resources: 1 added, 0 changed, 1 destroyed.","@module":"terraform.ui","@timestamp":"2024-08-21T22:59:40.612265+02:00","changes":{"add":1,"change":0,"import":0,"remove":1,"operation":"apply"},"type":"change_summary"}
34+
{"@level":"info","@message":"Outputs: 0","@module":"terraform.ui","@timestamp":"2024-08-21T22:59:40.612270+02:00","outputs":{},"type":"outputs"}
35+
-- timings --
36+
{"start":"2024-08-21T20:59:40.003696Z", "end":"2024-08-21T20:59:40.004938Z", "action":"read", "source":"coder", "resource":"data.coder_parameter.memory_size", "stage":"apply", "state":"COMPLETED"}
37+
{"start":"2024-08-21T20:59:40.003703Z", "end":"2024-08-21T20:59:40.004689Z", "action":"read", "source":"coder", "resource":"data.coder_workspace.me", "stage":"apply", "state":"COMPLETED"}
38+
{"start":"2024-08-21T20:59:40.003711Z", "end":"2024-08-21T20:59:40.004366Z", "action":"read", "source":"coder", "resource":"data.coder_provisioner.me", "stage":"apply", "state":"COMPLETED"}
39+
{"start":"2024-08-21T20:59:40.003786Z", "end":"2024-08-21T20:59:40.107958Z", "action":"read", "source":"http", "resource":"data.http.latest_commit", "stage":"apply", "state":"COMPLETED"}
40+
{"start":"2024-08-21T20:59:40.007139Z", "end":"2024-08-21T20:59:40.011774Z", "action":"state refresh", "source":"coder", "resource":"coder_agent.main", "stage":"apply", "state":"COMPLETED"}
41+
{"start":"2024-08-21T20:59:40.008559Z", "end":"2024-08-21T20:59:40.025098Z", "action":"state refresh", "source":"docker", "resource":"docker_image.main", "stage":"apply", "state":"COMPLETED"}
42+
{"start":"2024-08-21T20:59:40.011801Z", "end":"2024-08-21T20:59:40.017694Z", "action":"state refresh", "source":"docker", "resource":"docker_volume.home_volume", "stage":"apply", "state":"COMPLETED"}
43+
{"start":"2024-08-21T20:59:40.015683Z", "end":"2024-08-21T20:59:40.016027Z", "action":"state refresh", "source":"coder", "resource":"coder_script.startup_script", "stage":"apply", "state":"COMPLETED"}
44+
{"start":"2024-08-21T20:59:40.027874Z", "end":"2024-08-21T20:59:40.137794Z", "action":"state refresh", "source":"docker", "resource":"docker_container.workspace[0]", "stage":"apply", "state":"COMPLETED"}
45+
{"start":"2024-08-21T20:59:40.204215Z", "end":"2024-08-21T20:59:40.250903Z", "action":"delete", "source":"docker", "resource":"docker_container.workspace[0]", "stage":"apply", "state":"COMPLETED"}
46+
{"start":"2024-08-21T20:59:40.264384Z", "end":"2024-08-21T20:59:40.577054Z", "action":"create", "source":"docker", "resource":"docker_container.workspace[0]", "stage":"apply", "state":"COMPLETED"}

‎provisioner/terraform/timings.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ func (l timingKind) Category() string {
200200
// hashState computes a hash based on a timingSpan's unique properties and state.
201201
// The combination of resource and provider names MUST be unique across entries.
202202
func (e*timingSpan)hashByState(state proto.TimingState)uint64 {
203-
id:=fmt.Sprintf("%s:%s:%s:%s",e.kind.Category(),state.String(),e.resource,e.provider)
203+
id:=fmt.Sprintf("%s:%s:%s:%s:%s",e.kind.Category(),state.String(),e.action,e.resource,e.provider)
204204
returnxxhash.Sum64String(id)
205205
}
206206

‎provisioner/terraform/timings_internal_test.go

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ var (
3030
inputIncomplete []byte
3131
//go:embed testdata/timings-aggregation/faster-than-light.txtar
3232
inputFasterThanLight []byte
33+
//go:embed testdata/timings-aggregation/multiple-resource-actions.txtar
34+
multipleResourceActions []byte
3335
)
3436

3537
funcTestAggregation(t*testing.T) {
@@ -63,6 +65,10 @@ func TestAggregation(t *testing.T) {
6365
name:"faster-than-light",
6466
input:inputFasterThanLight,
6567
},
68+
{
69+
name:"multiple-resource-actions",
70+
input:multipleResourceActions,
71+
},
6672
}
6773

6874
// nolint:paralleltest // Not since go v1.22.
@@ -101,7 +107,10 @@ func TestAggregation(t *testing.T) {
101107
expected:=terraform_internal.ParseTimingLines(t,expectedTimings.Data)
102108
terraform_internal.StableSortTimings(t,actualTimings)// To reduce flakiness.
103109
if!assert.True(t,terraform_internal.TimingsAreEqual(t,expected,actualTimings)) {
104-
printExpectation(t,expected)
110+
t.Log("expected:")
111+
printTimings(t,expected)
112+
t.Log("actual:")
113+
printTimings(t,actualTimings)
105114
}
106115
})
107116
}
@@ -133,11 +142,10 @@ func ingestAllSpans(t *testing.T, input []byte, aggregator *timingAggregator) {
133142
require.NoError(t,scanner.Err())
134143
}
135144

136-
funcprintExpectation(t*testing.T,actual []*proto.Timing) {
145+
funcprintTimings(t*testing.T,timings []*proto.Timing) {
137146
t.Helper()
138147

139-
t.Log("expected:")
140-
for_,a:=rangeactual {
148+
for_,a:=rangetimings {
141149
terraform_internal.PrintTiming(t,a)
142150
}
143151
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp