blob: 6d190ae8e822c4fd26ef30ec3832c79893d91d7a [file] [log] [blame]
package impl
import (
"time"
"veyron/services/mgmt/lib/exec"
"veyron/services/mgmt/node"
"veyron2/mgmt"
"veyron2/rt"
"veyron2/vlog"
)
// InvokeCallback provides the parent node manager with the given name (which is
// expected to be this node manager's object name).
func InvokeCallback(name string) {
handle, err := exec.GetChildHandle()
switch err {
case nil:
// Node manager was started by self-update, notify the parent.
callbackName, err := handle.Config.Get(mgmt.ParentNodeManagerConfigKey)
if err != nil {
vlog.Fatalf("Failed to get callback name from config: %v", err)
}
nmClient, err := node.BindConfig(callbackName)
if err != nil {
vlog.Fatalf("BindNode(%v) failed: %v", callbackName, err)
}
ctx, cancel := rt.R().NewContext().WithTimeout(time.Minute)
defer cancel()
if err := nmClient.Set(ctx, mgmt.ChildNodeManagerConfigKey, name); err != nil {
vlog.Fatalf("Set(%v, %v) failed: %v", mgmt.ChildNodeManagerConfigKey, name, err)
}
case exec.ErrNoVersion:
default:
vlog.Fatalf("GetChildHandle() failed: %v", err)
}
}