// ResetConfig accepts a full-set or subset of global configuration // and updates projector related fields. func (p *Projector) ResetConfig(config c.Config) { p.rw.Lock() defer p.rw.Unlock() defer logging.Infof("%v\n", c.LogRuntime()) // reset configuration. if cv, ok := config["projector.settings.log_level"]; ok { logging.SetLogLevel(logging.Level(cv.String())) } if cv, ok := config["projector.maxCpuPercent"]; ok { c.SetNumCPUs(cv.Int()) } p.config = p.config.Override(config) // CPU-profiling cpuProfile, ok := config["projector.cpuProfile"] if ok && cpuProfile.Bool() && p.cpuProfFd == nil { cpuProfFname, ok := config["projector.cpuProfFname"] if ok { fname := cpuProfFname.String() logging.Infof("%v cpu profiling => %q\n", p.logPrefix, fname) p.cpuProfFd = p.startCPUProfile(fname) } else { logging.Errorf("Missing cpu-profile o/p filename\n") } } else if ok && !cpuProfile.Bool() { if p.cpuProfFd != nil { pprof.StopCPUProfile() logging.Infof("%v cpu profiling stopped\n", p.logPrefix) } p.cpuProfFd = nil } else if ok { logging.Warnf("%v cpu profiling already active !!\n", p.logPrefix) } // MEM-profiling memProfile, ok := config["projector.memProfile"] if ok && memProfile.Bool() { memProfFname, ok := config["projector.memProfFname"] if ok { fname := memProfFname.String() if p.takeMEMProfile(fname) { logging.Infof("%v mem profile => %q\n", p.logPrefix, fname) } } else { logging.Errorf("Missing mem-profile o/p filename\n") } } }
func main() { platform.HideConsole(true) defer platform.HideConsole(false) c.SeedProcess() logging.Infof("Projector started with command line: %v\n", os.Args) cluster := argParse() // eg. "localhost:9000" config := c.SystemConfig.Clone() logging.SetLogLevel(logging.Level(options.loglevel)) config.SetValue("maxVbuckets", options.numVbuckets) if f := getlogFile(); f != nil { fmt.Printf("Projector logging to %q\n", f.Name()) logging.SetLogWriter(f) config.SetValue("log.file", f.Name()) } config.SetValue("projector.clusterAddr", cluster) config.SetValue("projector.adminport.listenAddr", options.adminport) // setup cbauth if options.auth != "" { up := strings.Split(options.auth, ":") if _, err := cbauth.InternalRetryDefaultInit(cluster, up[0], up[1]); err != nil { logging.Fatalf("Failed to initialize cbauth: %s", err) } } epfactory := NewEndpointFactory(cluster, options.numVbuckets) config.SetValue("projector.routerEndpointFactory", epfactory) logging.Infof("%v\n", c.LogOs()) logging.Infof("%v\n", c.LogRuntime()) go c.ExitOnStdinClose() projector.NewProjector(options.numVbuckets, config) <-done }