MM-17488: simplify plugin health check (#11820)

Simplify the plugin health check to only leverage the `Ping` API instead of sending signals, the latter of which is not supported on Windows.
Этот коммит содержится в:
Jesse Hallam
2019-08-12 18:38:25 -03:00
коммит произвёл GitHub
родитель 87c0d304c6
Коммит 1135e42ac0

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

@@ -4,14 +4,11 @@
package plugin package plugin
import ( import (
"errors"
"fmt" "fmt"
"os"
"os/exec" "os/exec"
"path/filepath" "path/filepath"
"runtime" "runtime"
"strings" "strings"
"syscall"
"time" "time"
plugin "github.com/hashicorp/go-plugin" plugin "github.com/hashicorp/go-plugin"
@@ -111,13 +108,8 @@ func (sup *supervisor) Hooks() Hooks {
return sup.hooks return sup.hooks
} }
// PerformHealthCheck checks the plugin through a process check, an RPC ping, and a HealthCheck hook call. // PerformHealthCheck checks the plugin through an an RPC ping.
func (sup *supervisor) PerformHealthCheck() error { func (sup *supervisor) PerformHealthCheck() error {
if procErr := sup.CheckProcess(); procErr != nil {
mlog.Debug(fmt.Sprintf("Error checking plugin process, error: %s", procErr.Error()))
return errors.New("Plugin process not found, or not responding")
}
if pingErr := sup.Ping(); pingErr != nil { if pingErr := sup.Ping(); pingErr != nil {
for pingFails := 1; pingFails < HEALTH_CHECK_PING_FAIL_LIMIT; pingFails++ { for pingFails := 1; pingFails < HEALTH_CHECK_PING_FAIL_LIMIT; pingFails++ {
pingErr = sup.Ping() pingErr = sup.Ping()
@@ -145,21 +137,6 @@ func (sup *supervisor) Ping() error {
return client.Ping() return client.Ping()
} }
// CheckProcess checks if the plugin process's PID exists and can respond to a signal.
func (sup *supervisor) CheckProcess() error {
process, err := os.FindProcess(sup.pid)
if err != nil {
return err
}
err = process.Signal(syscall.Signal(0))
if err != nil {
return err
}
return nil
}
func (sup *supervisor) Implements(hookId int) bool { func (sup *supervisor) Implements(hookId int) bool {
return sup.implemented[hookId] return sup.implemented[hookId]
} }