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.
Этот коммит содержится в:
коммит произвёл
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]
|
||||||
}
|
}
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user