blob: 3ef8fa453d33a5e6db4491b86e0a4af1d4a79f74 [file] [log] [blame]
Jiri Simsa5293dcb2014-05-10 09:56:38 -07001package main
2
3import (
4 "flag"
5
Jiri Simsa519c5072014-09-17 21:37:57 -07006 "veyron.io/veyron/veyron2/naming"
7 "veyron.io/veyron/veyron2/rt"
8 "veyron.io/veyron/veyron2/vlog"
Cosmos Nicolaoud6c3c9c2014-09-30 15:42:53 -07009
10 "veyron.io/veyron/veyron/lib/signals"
11 "veyron.io/veyron/veyron/profiles/roaming"
12 "veyron.io/veyron/veyron/services/mgmt/node/config"
13 "veyron.io/veyron/veyron/services/mgmt/node/impl"
Jiri Simsa5293dcb2014-05-10 09:56:38 -070014)
15
Adam Sadovsky5181bdb2014-08-13 10:29:11 -070016var (
Adam Sadovsky5181bdb2014-08-13 10:29:11 -070017 publishAs = flag.String("name", "", "name to publish the node manager at")
18)
19
Jiri Simsa5293dcb2014-05-10 09:56:38 -070020func main() {
Jiri Simsa5293dcb2014-05-10 09:56:38 -070021 flag.Parse()
Jiri Simsa5293dcb2014-05-10 09:56:38 -070022 runtime := rt.Init()
Bogdan Caprita4258d882014-07-02 09:15:22 -070023 defer runtime.Cleanup()
Jiri Simsa5293dcb2014-05-10 09:56:38 -070024 server, err := runtime.NewServer()
25 if err != nil {
26 vlog.Fatalf("NewServer() failed: %v", err)
27 }
28 defer server.Stop()
Cosmos Nicolaoud6c3c9c2014-09-30 15:42:53 -070029 endpoint, err := server.ListenX(roaming.ListenSpec)
Jiri Simsa5293dcb2014-05-10 09:56:38 -070030 if err != nil {
Cosmos Nicolaoud6c3c9c2014-09-30 15:42:53 -070031 vlog.Fatalf("Listen(%s) failed: %v", roaming.ListenSpec, err)
Jiri Simsa5293dcb2014-05-10 09:56:38 -070032 }
Bogdan Capritac87a9142014-07-21 10:38:13 -070033 name := naming.MakeTerminal(naming.JoinAddressName(endpoint.String(), ""))
34 vlog.VI(0).Infof("Node manager object name: %v", name)
35 configState, err := config.Load()
36 if err != nil {
37 vlog.Fatalf("Failed to load config passed from parent: %v", err)
38 return
39 }
40 configState.Name = name
41 // TODO(caprita): We need a way to set config fields outside of the
42 // update mechanism (since that should ideally be an opaque
43 // implementation detail).
Gautham82bb9952014-08-28 14:11:51 -070044 dispatcher, err := impl.NewDispatcher(configState)
Bogdan Capritac87a9142014-07-21 10:38:13 -070045 if err != nil {
46 vlog.Fatalf("Failed to create dispatcher: %v", err)
47 }
Adam Sadovsky5181bdb2014-08-13 10:29:11 -070048 if err := server.Serve(*publishAs, dispatcher); err != nil {
49 vlog.Fatalf("Serve(%v) failed: %v", *publishAs, err)
Jiri Simsa24e87aa2014-06-09 09:27:34 -070050 }
Bogdan Capritac87a9142014-07-21 10:38:13 -070051 impl.InvokeCallback(name)
52
Jiri Simsa5293dcb2014-05-10 09:56:38 -070053 // Wait until shutdown.
54 <-signals.ShutdownOnSignals()
55}