func main() { err := conf.Init_conf("server") if err != nil { fmt.Fprintf(os.Stderr, "ERROR: error reading conf file: "+err.Error()) os.Exit(1) } //if !conf.INIT_SUCCESS { // conf.PrintServerUsage() // os.Exit(1) //} if conf.DEBUG_LEVEL > 0 { fmt.Println("DEBUG_LEVEL > 0") } if _, err := os.Stat(conf.DATA_PATH); err != nil && os.IsNotExist(err) { if err := os.MkdirAll(conf.DATA_PATH, 0777); err != nil { fmt.Fprintf(os.Stderr, "ERROR in creating data_path \"%s\", %s\n", conf.DATA_PATH, err.Error()) os.Exit(1) } } if _, err := os.Stat(conf.LOGS_PATH); err != nil && os.IsNotExist(err) { if err := os.MkdirAll(conf.LOGS_PATH, 0777); err != nil { fmt.Fprintf(os.Stderr, "ERROR in creating log_path \"%s\" %s\n", conf.LOGS_PATH, err.Error()) os.Exit(1) } } if _, err := os.Stat(conf.DATA_PATH + "/temp"); err != nil && os.IsNotExist(err) { if err := os.Mkdir(conf.DATA_PATH+"/temp", 0777); err != nil { fmt.Fprintf(os.Stderr, "ERROR: %v\n", err) os.Exit(1) } } if conf.DEBUG_LEVEL > 0 { fmt.Println("logger.Initialize...") } //init logger logger.Initialize("server") if conf.DEBUG_LEVEL > 0 { fmt.Println("init db...") } //init db if err := db.Initialize(); err != nil { fmt.Printf("failed to initialize job db: %s\n", err.Error()) os.Exit(1) } //init versions if err := versions.Initialize(); err != nil { fmt.Fprintf(os.Stderr, "[email protected]: %v\n", err) logger.Error("[email protected]: " + err.Error()) os.Exit(1) } if conf.DEBUG_LEVEL > 0 { fmt.Println("init db collection for user...") } //init db collection for user if err := user.Initialize(); err != nil { fmt.Fprintf(os.Stderr, "ERROR initializing user database: %s\n", err.Error()) os.Exit(1) } if conf.DEBUG_LEVEL > 0 { fmt.Println("init resource manager...") } //init resource manager core.InitResMgr("server") core.InitAwfMgr() core.InitJobDB() core.InitClientGroupDB() if conf.DEBUG_LEVEL > 0 { fmt.Println("init auth...") } //init auth auth.Initialize() controller.PrintLogo() conf.Print("server") // reload job directory if conf.RELOAD != "" { fmt.Println("####### Reloading #######") if err := reload(conf.RELOAD); err != nil { fmt.Fprintf(os.Stderr, "ERROR: %v\n", err) } fmt.Println("Done") } if conf.DEBUG_LEVEL > 0 { fmt.Println("launching server...") } //launch server control := make(chan int) go core.Ttl.Handle() go core.QMgr.TaskHandle() go core.QMgr.ClientHandle() go core.QMgr.ClientChecker() go launchSite(control, conf.SITE_PORT) go launchAPI(control, conf.API_PORT) if conf.DEBUG_LEVEL > 0 { fmt.Println("API launched...") } if err := core.AwfMgr.LoadWorkflows(); err != nil { logger.Error("LoadWorkflows: " + err.Error()) } var host string if hostname, err := os.Hostname(); err == nil { host = fmt.Sprintf("%s:%d", hostname, conf.API_PORT) } //recover unfinished jobs before server went down last time if conf.RECOVER { fmt.Println("####### Recovering unfinished jobs #######") if err := core.QMgr.RecoverJobs(); err != nil { fmt.Fprintf(os.Stderr, "ERROR: %v\n", err) } fmt.Println("Done") logger.Event(event.SERVER_RECOVER, "host="+host) } else { logger.Event(event.SERVER_START, "host="+host) } if conf.PID_FILE_PATH != "" { f, err := os.Create(conf.PID_FILE_PATH) if err != nil { err_msg := "Could not create pid file: " + conf.PID_FILE_PATH + "\n" fmt.Fprintf(os.Stderr, err_msg) logger.Error("ERROR: " + err_msg) os.Exit(1) } defer f.Close() pid := os.Getpid() fmt.Fprintln(f, pid) fmt.Println("##### pidfile #####") fmt.Printf("pid: %d saved to file: %s\n\n", pid, conf.PID_FILE_PATH) } if conf.DEBUG_LEVEL > 0 { fmt.Println("setting GOMAXPROCS...") } // setting GOMAXPROCS var procs int avail := runtime.NumCPU() if avail <= 2 { procs = 1 } else if avail == 3 { procs = 2 } else { procs = avail - 2 } fmt.Println("##### Procs #####") fmt.Printf("Number of available CPUs = %d\n", avail) if conf.GOMAXPROCS > 0 { procs = conf.GOMAXPROCS } if procs <= avail { fmt.Printf("Running AWE server with GOMAXPROCS = %d\n\n", procs) runtime.GOMAXPROCS(procs) } else { fmt.Println("GOMAXPROCS config value is greater than available number of CPUs.") fmt.Printf("Running Shock server with GOMAXPROCS = %d\n\n", avail) runtime.GOMAXPROCS(avail) } <-control //block till something dies }
func main() { if !conf.INIT_SUCCESS { conf.PrintServerUsage() os.Exit(1) } if _, err := os.Stat(conf.DATA_PATH); err != nil && os.IsNotExist(err) { if err := os.MkdirAll(conf.DATA_PATH, 0777); err != nil { fmt.Fprintf(os.Stderr, "ERROR in creating data_path %s\n", err.Error()) os.Exit(1) } } if _, err := os.Stat(conf.LOGS_PATH); err != nil && os.IsNotExist(err) { if err := os.MkdirAll(conf.LOGS_PATH, 0777); err != nil { fmt.Fprintf(os.Stderr, "ERROR in creating log_path %s\n", err.Error()) os.Exit(1) } } if _, err := os.Stat(conf.DATA_PATH + "/temp"); err != nil && os.IsNotExist(err) { if err := os.Mkdir(conf.DATA_PATH+"/temp", 0777); err != nil { fmt.Fprintf(os.Stderr, "ERROR: %v\n", err) os.Exit(1) } } //init logger logger.Initialize("server") //init db if err := db.Initialize(); err != nil { fmt.Printf("failed to initialize job db: %s\n", err.Error()) os.Exit(1) } //init db collection for user user.Initialize() //init resource manager core.InitResMgr("server") core.InitAwfMgr() core.InitJobDB() //init auth auth.Initialize() controller.PrintLogo() conf.Print("server") // reload job directory if conf.RELOAD != "" { fmt.Println("####### Reloading #######") if err := reload(conf.RELOAD); err != nil { fmt.Fprintf(os.Stderr, "ERROR: %v\n", err) } fmt.Println("Done") } //init max job number (jid) if err := core.QMgr.InitMaxJid(); err != nil { fmt.Fprintf(os.Stderr, "ERROR: %v\n", err) os.Exit(1) } //recover unfinished jobs before server went down last time if conf.RECOVER { fmt.Println("####### Recovering unfinished jobs #######") if err := core.QMgr.RecoverJobs(); err != nil { fmt.Fprintf(os.Stderr, "ERROR: %v\n", err) } fmt.Println("Done") } //launch server control := make(chan int) go core.QMgr.Handle() go core.QMgr.Timer() go core.QMgr.ClientChecker() go launchSite(control, conf.SITE_PORT) go launchAPI(control, conf.API_PORT) if err := core.AwfMgr.LoadWorkflows(); err != nil { logger.Error("LoadWorkflows: " + err.Error()) } var host string if hostname, err := os.Hostname(); err == nil { host = fmt.Sprintf("%s:%d", hostname, conf.API_PORT) } if conf.RECOVER { logger.Event(event.SERVER_RECOVER, "host="+host) } else { logger.Event(event.SERVER_START, "host="+host) } <-control //block till something dies }