@@ -15,6 +15,7 @@ import (
15
15
"github.com/block/ftl/common/slices"
16
16
"github.com/block/ftl/internal/channels"
17
17
"github.com/block/ftl/internal/key"
18
+ "github.com/block/ftl/internal/log"
18
19
)
19
20
20
21
type inMemProvisioningTask struct {
@@ -69,6 +70,7 @@ type stepCompletedEvent struct {
69
70
}
70
71
71
72
func (d * InMemProvisioner ) Provision (ctx context.Context , req * provisioner.ProvisionRequest ) ([]* schemapb.RuntimeElement , error ) {
73
+ logger := log .FromContext (ctx )
72
74
parsed , err := key .ParseChangesetKey (req .Changeset )
73
75
if err != nil {
74
76
err = fmt .Errorf ("invalid changeset: %w" , err )
@@ -97,8 +99,10 @@ func (d *InMemProvisioner) Provision(ctx context.Context, req *provisioner.Provi
97
99
// use chans to safely collect all events before completing each task
98
100
completions := make (chan stepCompletedEvent , 16 )
99
101
102
+ noop := true
100
103
for id , desired := range desiredNodes {
101
104
previous , prevOk := previousNodes [id ]
105
+ logger .Tracef ("Provisioning resource %s" , id )
102
106
103
107
for _ , resource := range desired .GetProvisioned () {
104
108
if ! prevOk || resource .DeploymentSpecific || ! resource .IsEqual (previous .GetProvisioned ().Get (resource .Kind )) {
@@ -120,6 +124,7 @@ func (d *InMemProvisioner) Provision(ctx context.Context, req *provisioner.Provi
120
124
}
121
125
step := & inMemProvisioningStep {Done : atomic .New (false )}
122
126
task .steps = append (task .steps , step )
127
+ noop = false
123
128
go func () {
124
129
event , err := handler (ctx , parsed , desiredModule .Runtime .Deployment .DeploymentKey , desired )
125
130
if err != nil {
@@ -137,17 +142,19 @@ func (d *InMemProvisioner) Provision(ctx context.Context, req *provisioner.Provi
137
142
}
138
143
}
139
144
140
- for c := range channels .IterContext (ctx , completions ) {
141
- if e , ok := c .event .Get (); ok {
142
- task .events = append (task .events , & e )
143
- }
144
- c .step .Done .Store (true )
145
- done , err := task .Done ()
146
- if err != nil {
147
- return nil , fmt .Errorf ("provisioning failed: %w" , err )
148
- }
149
- if done {
150
- break
145
+ if ! noop {
146
+ for c := range channels .IterContext (ctx , completions ) {
147
+ if e , ok := c .event .Get (); ok {
148
+ task .events = append (task .events , & e )
149
+ }
150
+ c .step .Done .Store (true )
151
+ done , err := task .Done ()
152
+ if err != nil {
153
+ return nil , fmt .Errorf ("provisioning failed: %w" , err )
154
+ }
155
+ if done {
156
+ break
157
+ }
151
158
}
152
159
}
153
160
return slices .Map (task .events , func (e * schema.RuntimeElement ) * schemapb.RuntimeElement {
0 commit comments