[MM-15831] Improve system for storing status of available plug… (#11185)

* Move State property from activePlugin to PluginHealthStatus. env.activePlugins is now reserved for healthy running plugins.

* Add comments for function declarations

* Combine activePlugins and pluginHealthStatuses into a common structure, registeredPlugins

* Add check to see if plugin is active before deactivating it

* Make `Deactivate` set plugin status

* Add comment explaining the `registeredPlugins` map
* Give responsibility to set plugin disabled status upon deactivation back to `env.Deactivate`

* check if plugin needs to be deactivated before setting status
Этот коммит содержится в:
Michael Kochell
2019-06-25 17:44:08 -04:00
коммит произвёл GitHub
родитель 332b53a30d
Коммит b68194e035
5 изменённых файлов: 124 добавлений и 115 удалений

Просмотреть файл

@@ -118,38 +118,39 @@ func testPluginHealthCheck_Panic(t *testing.T) {
}
func TestShouldDeactivatePlugin(t *testing.T) {
h := newPluginHealthStatus()
require.NotNil(t, h)
bundle := &model.BundleInfo{}
rp := newRegisteredPlugin(bundle)
require.NotNil(t, rp)
// No failures, don't restart
result := shouldDeactivatePlugin(h)
result := shouldDeactivatePlugin(rp)
require.Equal(t, false, result)
now := time.Now()
// Failures are recent enough to restart
h = newPluginHealthStatus()
h.failTimeStamps = append(h.failTimeStamps, now.Add(-HEALTH_CHECK_DISABLE_DURATION*0.2*time.Minute))
h.failTimeStamps = append(h.failTimeStamps, now.Add(-HEALTH_CHECK_DISABLE_DURATION*0.1*time.Minute))
h.failTimeStamps = append(h.failTimeStamps, now)
rp = newRegisteredPlugin(bundle)
rp.failTimeStamps = append(rp.failTimeStamps, now.Add(-HEALTH_CHECK_DISABLE_DURATION*0.2*time.Minute))
rp.failTimeStamps = append(rp.failTimeStamps, now.Add(-HEALTH_CHECK_DISABLE_DURATION*0.1*time.Minute))
rp.failTimeStamps = append(rp.failTimeStamps, now)
result = shouldDeactivatePlugin(h)
result = shouldDeactivatePlugin(rp)
require.Equal(t, true, result)
// Failures are too spaced out to warrant a restart
h = newPluginHealthStatus()
h.failTimeStamps = append(h.failTimeStamps, now.Add(-HEALTH_CHECK_DISABLE_DURATION*2*time.Minute))
h.failTimeStamps = append(h.failTimeStamps, now.Add(-HEALTH_CHECK_DISABLE_DURATION*1*time.Minute))
h.failTimeStamps = append(h.failTimeStamps, now)
rp = newRegisteredPlugin(bundle)
rp.failTimeStamps = append(rp.failTimeStamps, now.Add(-HEALTH_CHECK_DISABLE_DURATION*2*time.Minute))
rp.failTimeStamps = append(rp.failTimeStamps, now.Add(-HEALTH_CHECK_DISABLE_DURATION*1*time.Minute))
rp.failTimeStamps = append(rp.failTimeStamps, now)
result = shouldDeactivatePlugin(h)
result = shouldDeactivatePlugin(rp)
require.Equal(t, false, result)
// Not enough failures are present to warrant a restart
h = newPluginHealthStatus()
h.failTimeStamps = append(h.failTimeStamps, now.Add(-HEALTH_CHECK_DISABLE_DURATION*0.1*time.Minute))
h.failTimeStamps = append(h.failTimeStamps, now)
rp = newRegisteredPlugin(bundle)
rp.failTimeStamps = append(rp.failTimeStamps, now.Add(-HEALTH_CHECK_DISABLE_DURATION*0.1*time.Minute))
rp.failTimeStamps = append(rp.failTimeStamps, now)
result = shouldDeactivatePlugin(h)
result = shouldDeactivatePlugin(rp)
require.Equal(t, false, result)
}