Skip to content

Commit a222fdc

Browse files
authored
feat: log a warning when an invalid executable is found (#321)
Instead of potentially breaking a workspaces state, invalid executables are excluded from the executable cache. During sync, warnings will be logged for each invalid executable encountered. This should make it easier to discover and fix broken executables.
1 parent 9a39db0 commit a222fdc

File tree

2 files changed

+31
-9
lines changed

2 files changed

+31
-9
lines changed

internal/cache/executables_cache.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,16 @@ func (c *ExecutableCacheImpl) Update() error { //nolint:gocognit
8888
continue
8989
}
9090
for _, e := range flowFile.Executables {
91+
if vErr := e.Validate(); vErr != nil {
92+
logger.Log().Warnx(
93+
"invalid executable found during cache update",
94+
"ref", e.Ref().String(),
95+
"workspace", wsCfg.AssignedName(),
96+
"err", vErr,
97+
)
98+
continue
99+
}
100+
91101
if e == nil || (e.Visibility != nil && common.Visibility(*e.Visibility).IsHidden()) {
92102
continue
93103
}

internal/cache/executables_cache_test.go

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ var _ = Describe("ExecutableCacheImpl", func() {
5252
Namespace: "testdata",
5353
Visibility: &v,
5454
Executables: executable.ExecutableList{
55-
{Verb: "run", Name: "exec"},
55+
{Verb: "run", Name: "exec", Exec: &executable.ExecExecutableType{}},
5656
},
5757
}
5858
execCfg.SetContext(wsName, wsPath, filepath.Join(wsPath, "test"+executable.FlowFileExt))
@@ -153,7 +153,11 @@ var _ = Describe("ExecutableCacheImpl", func() {
153153
Namespace: "testdata",
154154
Visibility: &v,
155155
Executables: executable.ExecutableList{
156-
{Verb: "run", Name: "test-alias", Aliases: []string{"alias1"}},
156+
{
157+
Verb: "run", Name: "test-alias",
158+
Aliases: []string{"alias1"},
159+
Exec: &executable.ExecExecutableType{},
160+
},
157161
},
158162
}
159163
execCfg.SetContext(wsName, wsPath, filepath.Join(wsPath, "aliases-test"+executable.FlowFileExt))
@@ -179,7 +183,11 @@ var _ = Describe("ExecutableCacheImpl", func() {
179183
Namespace: "testdata",
180184
Visibility: &v,
181185
Executables: executable.ExecutableList{
182-
{Verb: "run", Name: "run-alias", VerbAliases: []executable.Verb{executable.VerbActivate}},
186+
{
187+
Verb: "run", Name: "run-alias",
188+
VerbAliases: []executable.Verb{executable.VerbActivate},
189+
Exec: &executable.ExecExecutableType{},
190+
},
183191
},
184192
}
185193
execCfg.SetContext(wsName, wsPath, filepath.Join(wsPath, "verbaliases"+executable.FlowFileExt))
@@ -345,7 +353,7 @@ var _ = Describe("ExecutableCacheImpl", func() {
345353
Namespace: "testdata",
346354
Visibility: &v,
347355
Executables: executable.ExecutableList{
348-
{Verb: "run", Name: "duplicate-exec"},
356+
{Verb: "run", Name: "duplicate-exec", Exec: &executable.ExecExecutableType{}},
349357
},
350358
}
351359
execCfg1.SetContext(wsName, wsPath, filepath.Join(wsPath, "first"+executable.FlowFileExt))
@@ -356,7 +364,7 @@ var _ = Describe("ExecutableCacheImpl", func() {
356364
Namespace: "testdata",
357365
Visibility: &v,
358366
Executables: executable.ExecutableList{
359-
{Verb: "run", Name: "duplicate-exec"},
367+
{Verb: "run", Name: "duplicate-exec", Exec: &executable.ExecExecutableType{}},
360368
},
361369
}
362370
execCfg2.SetContext(wsName, wsPath, filepath.Join(wsPath, "second"+executable.FlowFileExt))
@@ -385,7 +393,7 @@ var _ = Describe("ExecutableCacheImpl", func() {
385393
Namespace: "testdata",
386394
Visibility: &v,
387395
Executables: executable.ExecutableList{
388-
{Verb: "run", Name: "first-exec"},
396+
{Verb: "run", Name: "first-exec", Exec: &executable.ExecExecutableType{}},
389397
},
390398
}
391399
execCfg1.SetContext(wsName, wsPath, filepath.Join(wsPath, "first"+executable.FlowFileExt))
@@ -396,7 +404,7 @@ var _ = Describe("ExecutableCacheImpl", func() {
396404
Namespace: "testdata",
397405
Visibility: &v,
398406
Executables: executable.ExecutableList{
399-
{Verb: "exec", Name: "first-exec"},
407+
{Verb: "exec", Name: "first-exec", Exec: &executable.ExecExecutableType{}},
400408
},
401409
}
402410
execCfg2.SetContext(wsName, wsPath, filepath.Join(wsPath, "second"+executable.FlowFileExt))
@@ -420,7 +428,11 @@ var _ = Describe("ExecutableCacheImpl", func() {
420428
Namespace: "testdata",
421429
Visibility: &v,
422430
Executables: executable.ExecutableList{
423-
{Verb: "run", Name: "first-exec", Aliases: []string{"shared-alias"}},
431+
{
432+
Verb: "run", Name: "first-exec",
433+
Aliases: []string{"shared-alias"},
434+
Exec: &executable.ExecExecutableType{},
435+
},
424436
},
425437
}
426438
execCfg1.SetContext(wsName, wsPath, filepath.Join(wsPath, "first"+executable.FlowFileExt))
@@ -431,7 +443,7 @@ var _ = Describe("ExecutableCacheImpl", func() {
431443
Namespace: "testdata",
432444
Visibility: &v,
433445
Executables: executable.ExecutableList{
434-
{Verb: "run", Name: "shared-alias"},
446+
{Verb: "run", Name: "shared-alias", Exec: &executable.ExecExecutableType{}},
435447
},
436448
}
437449
execCfg2.SetContext(wsName, wsPath, filepath.Join(wsPath, "second"+executable.FlowFileExt))

0 commit comments

Comments
 (0)