Skip to content

Commit faaedb6

Browse files
committed
Allow skipping condition during customplugin initialization
1 parent e7fe0b2 commit faaedb6

File tree

4 files changed

+39
-2
lines changed

4 files changed

+39
-2
lines changed

docs/custom_plugin_monitor.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,5 @@
66
* `timeout`: Time after which custom plugins invokation will be terminated and considered timeout.
77
* `max_output_length`: The maximum standard output size from custom plugins that NPD will be cut and use for condition status message.
88
* `concurrency`: The plugin worker number, i.e., how many custom plugins will be invoked concurrently.
9-
* `enable_message_change_based_condition_update`: Flag controls whether message change should result in a condition update.
9+
* `enable_message_change_based_condition_update`: Flag controls whether message change should result in a condition update.
10+
* `skip_initial_status`: Flag controls whether condition will be emitted during plugin initialization.

pkg/custompluginmonitor/custom_plugin_monitor.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,9 @@ func (c *customPluginMonitor) Stop() {
122122

123123
// monitorLoop is the main loop of customPluginMonitor.
124124
func (c *customPluginMonitor) monitorLoop() {
125-
c.initializeStatus()
125+
if !*c.config.PluginGlobalConfig.SkipInitialStatus {
126+
c.initializeStatus()
127+
}
126128

127129
resultChan := c.plugin.GetResultChan()
128130

pkg/custompluginmonitor/types/config.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ var (
3333
defaultConcurrency = 3
3434
defaultMessageChangeBasedConditionUpdate = false
3535
defaultEnableMetricsReporting = true
36+
defaultSkipInitialStatus = false
3637

3738
customPluginName = "custom"
3839
)
@@ -52,6 +53,8 @@ type pluginGlobalConfig struct {
5253
Concurrency *int `json:"concurrency,omitempty"`
5354
// EnableMessageChangeBasedConditionUpdate indicates whether NPD should enable message change based condition update.
5455
EnableMessageChangeBasedConditionUpdate *bool `json:"enable_message_change_based_condition_update,omitempty"`
56+
// SkipInitialStatus prevents the first status update with default conditions
57+
SkipInitialStatus *bool `json:"skip_initial_status,omitempty"`
5558
}
5659

5760
// Custom plugin config is the configuration of custom plugin monitor.
@@ -105,6 +108,10 @@ func (cpc *CustomPluginConfig) ApplyConfiguration() error {
105108
cpc.PluginGlobalConfig.EnableMessageChangeBasedConditionUpdate = &defaultMessageChangeBasedConditionUpdate
106109
}
107110

111+
if cpc.PluginGlobalConfig.SkipInitialStatus == nil {
112+
cpc.PluginGlobalConfig.SkipInitialStatus = &defaultSkipInitialStatus
113+
}
114+
108115
for _, rule := range cpc.Rules {
109116
if rule.TimeoutString != nil {
110117
timeout, err := time.ParseDuration(*rule.TimeoutString)

pkg/custompluginmonitor/types/config_test.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ func TestCustomPluginConfigApplyConfiguration(t *testing.T) {
3333
concurrency := 2
3434
messageChangeBasedConditionUpdate := true
3535
disableMetricsReporting := false
36+
disableInitialStatusUpdate := true
3637

3738
ruleTimeout := 1 * time.Second
3839
ruleTimeoutString := ruleTimeout.String()
@@ -62,6 +63,7 @@ func TestCustomPluginConfigApplyConfiguration(t *testing.T) {
6263
MaxOutputLength: &defaultMaxOutputLength,
6364
Concurrency: &defaultConcurrency,
6465
EnableMessageChangeBasedConditionUpdate: &defaultMessageChangeBasedConditionUpdate,
66+
SkipInitialStatus: &defaultSkipInitialStatus,
6567
},
6668
EnableMetricsReporting: &defaultEnableMetricsReporting,
6769
Rules: []*CustomRule{
@@ -91,6 +93,7 @@ func TestCustomPluginConfigApplyConfiguration(t *testing.T) {
9193
MaxOutputLength: &defaultMaxOutputLength,
9294
Concurrency: &defaultConcurrency,
9395
EnableMessageChangeBasedConditionUpdate: &defaultMessageChangeBasedConditionUpdate,
96+
SkipInitialStatus: &defaultSkipInitialStatus,
9497
},
9598
EnableMetricsReporting: &defaultEnableMetricsReporting,
9699
},
@@ -110,6 +113,7 @@ func TestCustomPluginConfigApplyConfiguration(t *testing.T) {
110113
MaxOutputLength: &defaultMaxOutputLength,
111114
Concurrency: &defaultConcurrency,
112115
EnableMessageChangeBasedConditionUpdate: &defaultMessageChangeBasedConditionUpdate,
116+
SkipInitialStatus: &defaultSkipInitialStatus,
113117
},
114118
EnableMetricsReporting: &defaultEnableMetricsReporting,
115119
},
@@ -129,6 +133,7 @@ func TestCustomPluginConfigApplyConfiguration(t *testing.T) {
129133
MaxOutputLength: &maxOutputLength,
130134
Concurrency: &defaultConcurrency,
131135
EnableMessageChangeBasedConditionUpdate: &defaultMessageChangeBasedConditionUpdate,
136+
SkipInitialStatus: &defaultSkipInitialStatus,
132137
},
133138
EnableMetricsReporting: &defaultEnableMetricsReporting,
134139
},
@@ -148,6 +153,7 @@ func TestCustomPluginConfigApplyConfiguration(t *testing.T) {
148153
MaxOutputLength: &defaultMaxOutputLength,
149154
Concurrency: &concurrency,
150155
EnableMessageChangeBasedConditionUpdate: &defaultMessageChangeBasedConditionUpdate,
156+
SkipInitialStatus: &defaultSkipInitialStatus,
151157
},
152158
EnableMetricsReporting: &defaultEnableMetricsReporting,
153159
},
@@ -167,6 +173,7 @@ func TestCustomPluginConfigApplyConfiguration(t *testing.T) {
167173
MaxOutputLength: &defaultMaxOutputLength,
168174
Concurrency: &defaultConcurrency,
169175
EnableMessageChangeBasedConditionUpdate: &messageChangeBasedConditionUpdate,
176+
SkipInitialStatus: &defaultSkipInitialStatus,
170177
},
171178
EnableMetricsReporting: &defaultEnableMetricsReporting,
172179
},
@@ -184,10 +191,30 @@ func TestCustomPluginConfigApplyConfiguration(t *testing.T) {
184191
MaxOutputLength: &defaultMaxOutputLength,
185192
Concurrency: &defaultConcurrency,
186193
EnableMessageChangeBasedConditionUpdate: &defaultMessageChangeBasedConditionUpdate,
194+
SkipInitialStatus: &defaultSkipInitialStatus,
187195
},
188196
EnableMetricsReporting: &disableMetricsReporting,
189197
},
190198
},
199+
"disable status update during initialization": {
200+
Orig: CustomPluginConfig{PluginGlobalConfig: pluginGlobalConfig{
201+
SkipInitialStatus: &disableInitialStatusUpdate,
202+
},
203+
},
204+
Wanted: CustomPluginConfig{
205+
PluginGlobalConfig: pluginGlobalConfig{
206+
InvokeIntervalString: &defaultInvokeIntervalString,
207+
InvokeInterval: &defaultInvokeInterval,
208+
TimeoutString: &defaultGlobalTimeoutString,
209+
Timeout: &defaultGlobalTimeout,
210+
MaxOutputLength: &defaultMaxOutputLength,
211+
Concurrency: &defaultConcurrency,
212+
EnableMessageChangeBasedConditionUpdate: &defaultMessageChangeBasedConditionUpdate,
213+
SkipInitialStatus: &disableInitialStatusUpdate,
214+
},
215+
EnableMetricsReporting: &defaultEnableMetricsReporting,
216+
},
217+
},
191218
}
192219

193220
for desp, utMeta := range utMetas {

0 commit comments

Comments
 (0)