mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-06-30 01:02:33 +00:00
agent: use hypervisor pid as backup proxy pid for non-kata proxy cases
Then we can check hypervisor liveness in those cases to avoid long timeout when connecting to the agent when hypervisor is dead. For kata-agent, we still use the kata-proxy pid for the same purpose. Signed-off-by: Peng Tao <bergwolf@hyper.sh>
This commit is contained in:
parent
835b6e9e1b
commit
67c401c059
@ -616,6 +616,7 @@ func (k *kataAgent) startProxy(sandbox *Sandbox) error {
|
|||||||
|
|
||||||
proxyParams := proxyParams{
|
proxyParams := proxyParams{
|
||||||
id: sandbox.id,
|
id: sandbox.id,
|
||||||
|
hid: sandbox.hypervisor.pid(),
|
||||||
path: sandbox.config.ProxyConfig.Path,
|
path: sandbox.config.ProxyConfig.Path,
|
||||||
agentURL: agentURL,
|
agentURL: agentURL,
|
||||||
consoleURL: consoleURL,
|
consoleURL: consoleURL,
|
||||||
@ -1600,7 +1601,14 @@ func (k *kataAgent) connect() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
k.Logger().WithField("url", k.state.URL).Info("New client")
|
if k.state.ProxyPid > 0 {
|
||||||
|
// check that proxy is running before talk with it avoiding long timeouts
|
||||||
|
if err := syscall.Kill(k.state.ProxyPid, syscall.Signal(0)); err != nil {
|
||||||
|
return errors.New("Proxy is not running")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
k.Logger().WithField("url", k.state.URL).WithField("proxy", k.state.ProxyPid).Info("New client")
|
||||||
client, err := kataclient.NewAgentClient(k.ctx, k.state.URL, k.proxyBuiltIn)
|
client, err := kataclient.NewAgentClient(k.ctx, k.state.URL, k.proxyBuiltIn)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
k.dead = true
|
k.dead = true
|
||||||
@ -1792,13 +1800,6 @@ func (k *kataAgent) sendReq(request interface{}) (interface{}, error) {
|
|||||||
span.SetTag("request", request)
|
span.SetTag("request", request)
|
||||||
defer span.Finish()
|
defer span.Finish()
|
||||||
|
|
||||||
if k.state.ProxyPid > 0 {
|
|
||||||
// check that proxy is running before talk with it avoiding long timeouts
|
|
||||||
if err := syscall.Kill(k.state.ProxyPid, syscall.Signal(0)); err != nil {
|
|
||||||
return nil, fmt.Errorf("Proxy is not running: %v", err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := k.connect(); err != nil {
|
if err := k.connect(); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -64,7 +64,7 @@ func (p *kataBuiltInProxy) start(params proxyParams) (int, string, error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return -1, params.agentURL, nil
|
return params.hid, params.agentURL, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// stop is the proxy stop implementation for kata builtin proxy.
|
// stop is the proxy stop implementation for kata builtin proxy.
|
||||||
|
@ -34,7 +34,7 @@ func (p *noProxy) start(params proxyParams) (int, string, error) {
|
|||||||
return -1, "", fmt.Errorf("AgentURL cannot be empty")
|
return -1, "", fmt.Errorf("AgentURL cannot be empty")
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0, params.agentURL, nil
|
return params.hid, params.agentURL, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// stop is noProxy stop implementation for proxy interface.
|
// stop is noProxy stop implementation for proxy interface.
|
||||||
|
@ -14,7 +14,7 @@ var noopProxyURL = "noopProxyURL"
|
|||||||
// register is the proxy start implementation for testing purpose.
|
// register is the proxy start implementation for testing purpose.
|
||||||
// It does nothing.
|
// It does nothing.
|
||||||
func (p *noopProxy) start(params proxyParams) (int, string, error) {
|
func (p *noopProxy) start(params proxyParams) (int, string, error) {
|
||||||
return 0, noopProxyURL, nil
|
return params.hid, noopProxyURL, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// stop is the proxy stop implementation for testing purpose.
|
// stop is the proxy stop implementation for testing purpose.
|
||||||
|
@ -28,6 +28,7 @@ type proxyParams struct {
|
|||||||
agentURL string
|
agentURL string
|
||||||
consoleURL string
|
consoleURL string
|
||||||
logger *logrus.Entry
|
logger *logrus.Entry
|
||||||
|
hid int
|
||||||
debug bool
|
debug bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user