func reloadDB() (err error) { fmt.Printf("dropping & re-initializing database...") if err = core.DropDB(); err != nil { return err } core.InitDB() fmt.Printf("done\n") return }
func main() { if !conf.INIT_SUCCESS { conf.PrintServerUsage() os.Exit(1) } printLogo() conf.Print() 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 Log = NewLogger("server") //init db core.InitDB() // 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 := queueMgr.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 := queueMgr.RecoverJobs(); err != nil { fmt.Fprintf(os.Stderr, "ERROR: %v\n", err) } fmt.Println("Done") } //launch server control := make(chan int) go Log.Handle() go queueMgr.Handle() go queueMgr.Timer() go queueMgr.ClientChecker() go launchSite(control, conf.SITE_PORT) go launchAPI(control, conf.API_PORT) var host string if hostname, err := os.Hostname(); err == nil { host = fmt.Sprintf("%s:%d", hostname, conf.API_PORT) } if conf.RECOVER { Log.Event(EVENT_SERVER_RECOVER, "host="+host) } else { Log.Event(EVENT_SERVER_START, "host="+host) } <-control //block till something dies }