func populateListeningURL() { host, err := netutil.FullyQualifiedHostname() if err != nil { host, err = os.Hostname() if err != nil { log.Fatalf("os.Hostname() failed: %v", err) } } ListeningURL = url.URL{ Scheme: "http", Host: fmt.Sprintf("%v:%v", host, *Port), Path: "/", } }
// bindAddr: the address for the query service advertised by this agent func (agent *ActionAgent) Start(mysqlPort, vtPort, vtsPort int) error { var err error if err = agent.readTablet(); err != nil { return err } // find our hostname as fully qualified, and IP hostname := *tabletHostname if hostname == "" { hostname, err = netutil.FullyQualifiedHostname() if err != nil { return err } } ipAddrs, err := net.LookupHost(hostname) if err != nil { return err } ipAddr := ipAddrs[0] // Update bind addr for mysql and query service in the tablet node. f := func(tablet *topo.Tablet) error { tablet.Hostname = hostname tablet.IPAddr = ipAddr if tablet.Portmap == nil { tablet.Portmap = make(map[string]int) } if mysqlPort != 0 { // only overwrite mysql port if we know it, otherwise // leave it as is. tablet.Portmap["mysql"] = mysqlPort } tablet.Portmap["vt"] = vtPort if vtsPort != 0 { tablet.Portmap["vts"] = vtsPort } else { delete(tablet.Portmap, "vts") } return nil } if err := agent.TopoServer.UpdateTabletFields(agent.Tablet().Alias, f); err != nil { return err } // Reread to get the changes we just made if err := agent.readTablet(); err != nil { return err } if err = agent.verifyTopology(); err != nil { return err } if err = agent.verifyServingAddrs(); err != nil { return err } oldTablet := &topo.Tablet{} if err = agent.updateState(context.TODO(), oldTablet, "Start"); err != nil { log.Warningf("Initial updateState failed, will need a state change before running properly: %v", err) } return nil }