blob: 7865bc6ddc44b87fc7dbe811bbdac9d7ceaa21c7 [file] [log] [blame]
Bogdan Capritac87a9142014-07-21 10:38:13 -07001package impl
2
3import (
Matt Rosencrantz137b8d22014-08-18 09:56:15 -07004 "time"
5
Jiri Simsa519c5072014-09-17 21:37:57 -07006 "veyron.io/veyron/veyron2/mgmt"
7 "veyron.io/veyron/veyron2/rt"
8 "veyron.io/veyron/veyron2/vlog"
Cosmos Nicolaou486d3492014-09-30 22:21:20 -07009
10 "veyron.io/veyron/veyron/lib/exec"
11 "veyron.io/veyron/veyron/services/mgmt/node"
Bogdan Capritac87a9142014-07-21 10:38:13 -070012)
13
Cosmos Nicolaouad2793f2014-10-27 16:24:15 -070014// InvokeCallback provides the parent node manager with the given name (which
15// is expected to be this node manager's object name).
Bogdan Capritac87a9142014-07-21 10:38:13 -070016func InvokeCallback(name string) {
17 handle, err := exec.GetChildHandle()
18 switch err {
19 case nil:
20 // Node manager was started by self-update, notify the parent.
Jiri Simsaf57930f2014-11-05 15:19:31 -080021 callbackName, err := handle.Config.Get(mgmt.ParentNameConfigKey)
Bogdan Capritac87a9142014-07-21 10:38:13 -070022 if err != nil {
Cosmos Nicolaouad2793f2014-10-27 16:24:15 -070023 // Node manager was not started by self-update, return silently.
24 return
Bogdan Capritac87a9142014-07-21 10:38:13 -070025 }
Bogdan Caprita4d67c042014-08-19 10:41:19 -070026 nmClient, err := node.BindConfig(callbackName)
Bogdan Capritac87a9142014-07-21 10:38:13 -070027 if err != nil {
28 vlog.Fatalf("BindNode(%v) failed: %v", callbackName, err)
29 }
Matt Rosencrantz137b8d22014-08-18 09:56:15 -070030 ctx, cancel := rt.R().NewContext().WithTimeout(time.Minute)
31 defer cancel()
Jiri Simsaf57930f2014-11-05 15:19:31 -080032 if err := nmClient.Set(ctx, mgmt.ChildNameConfigKey, name); err != nil {
33 vlog.Fatalf("Set(%v, %v) failed: %v", mgmt.ChildNameConfigKey, name, err)
Bogdan Capritac87a9142014-07-21 10:38:13 -070034 }
35 case exec.ErrNoVersion:
36 default:
37 vlog.Fatalf("GetChildHandle() failed: %v", err)
38 }
39}