From a22606e8bf17d2728f92b8c12ee95b32f2fb02d0 Mon Sep 17 00:00:00 2001 From: Mikkel Krautz Date: Sat, 12 Nov 2011 03:18:10 +0100 Subject: [PATCH] Make servers reside in the 'servers' subdir of the DataDir. --- freeze.go | 8 +++--- grumble.go | 73 ++++++++++++++++++++++++++++++++++-------------------- 2 files changed, 50 insertions(+), 31 deletions(-) diff --git a/freeze.go b/freeze.go index b844222..82c5b63 100644 --- a/freeze.go +++ b/freeze.go @@ -36,7 +36,7 @@ func (server *Server) FreezeToFile() (err error) { if err != nil { return err } - f, err := ioutil.TempFile(filepath.Join(Args.DataDir, strconv.Itoa64(server.Id)), ".main.fz_") + f, err := ioutil.TempFile(filepath.Join(Args.DataDir, "servers", strconv.Itoa64(server.Id)), ".main.fz_") if err != nil { return err } @@ -56,7 +56,7 @@ func (server *Server) FreezeToFile() (err error) { if err != nil { return err } - err = os.Rename(f.Name(), filepath.Join(Args.DataDir, strconv.Itoa64(server.Id), "main.fz")) + err = os.Rename(f.Name(), filepath.Join(Args.DataDir, "servers", strconv.Itoa64(server.Id), "main.fz")) if err != nil { return err } @@ -72,7 +72,7 @@ func (server *Server) FreezeToFile() (err error) { // Open a new freeze log func (server *Server) openFreezeLog() (err error) { - logfn := filepath.Join(Args.DataDir, strconv.Itoa64(server.Id), "log.fz") + logfn := filepath.Join(Args.DataDir, "servers", strconv.Itoa64(server.Id), "log.fz") err = os.Remove(logfn) if pe, ok := err.(*os.PathError); ok && pe.Err == os.ENOENT { // OK. File does not exist... @@ -390,7 +390,7 @@ func NewServerFromFrozen(name string) (s *Server, err error) { return nil, err } - path := filepath.Join(Args.DataDir, name) + path := filepath.Join(Args.DataDir, "servers", name) mainFile := filepath.Join(path, "main.fz") logFile := filepath.Join(path, "log.fz") diff --git a/grumble.go b/grumble.go index 8ade966..fd71b0b 100644 --- a/grumble.go +++ b/grumble.go @@ -26,26 +26,25 @@ func main() { return } - err = logtarget.Target.OpenFile(Args.LogPath) - if err != nil { - fmt.Fprintf(os.Stderr, "Unable to open log file: %v", err) - return - } - - log.SetPrefix("[G] ") - log.SetFlags(log.LstdFlags | log.Lmicroseconds) - log.SetOutput(&logtarget.Target) - log.Printf("Grumble") - log.Printf("Using data directory: %s", Args.DataDir) - - // Open the data dir. We need it later for looking up - // the virtual server folders in the data dir. - // We need it now to make sure the data dir actually exists. + // Open the data dir to check whether it exists. dataDir, err := os.Open(Args.DataDir) if err != nil { log.Fatalf("Unable to open data directory: %v", err) return } + dataDir.Close() + + // Set up logging + err = logtarget.Target.OpenFile(Args.LogPath) + if err != nil { + fmt.Fprintf(os.Stderr, "Unable to open log file: %v", err) + return + } + log.SetPrefix("[G] ") + log.SetFlags(log.LstdFlags | log.Lmicroseconds) + log.SetOutput(&logtarget.Target) + log.Printf("Grumble") + log.Printf("Using data directory: %s", Args.DataDir) // Open the blobstore. If the directory doesn't // already exist, create the directory and open @@ -164,17 +163,34 @@ func main() { return } - // Run the SSH admin console. - RunSSH() + // Create the servers directory if it doesn't already + // exist. + serversDirPath := filepath.Join(Args.DataDir, "servers") + err = os.Mkdir(serversDirPath, 0700) + if err != nil { + exists := false + if e, ok := err.(*os.PathError); ok { + if e.Err == os.EEXIST { + exists = true + } + } + if !exists { + log.Fatal("Unable to create servers directory: %v", err.Error()) + } + } - // Read all entries of the data directory. + // Read all entries of the servers directory. // We need these to load our virtual servers. - names, err := dataDir.Readdirnames(-1) + serversDir, err := os.Open(serversDirPath) + if err != nil { + log.Fatalf("Unable to open the servers directory: %v", err.Error()) + } + names, err := serversDir.Readdirnames(-1) if err != nil { log.Fatal("Unable to read file from data directory: %v", err.Error()) } // The data dir file descriptor. - err = dataDir.Close() + err = serversDir.Close() if err != nil { log.Fatalf("Unable to close data directory: %v", err.Error()) return @@ -195,10 +211,6 @@ func main() { log.Fatalf("Unable to freeze server to disk: %v", err.Error()) } servers[s.Id] = s - err = s.Start() - if err != nil { - log.Printf("Unable to start server %v: %v", s.Id, err.Error()) - } } } @@ -210,14 +222,21 @@ func main() { } servers[s.Id] = s - os.Mkdir(filepath.Join(Args.DataDir, fmt.Sprintf("%v", 1)), 0750) + os.Mkdir(filepath.Join(serversDirPath, fmt.Sprintf("%v", 1)), 0750) err = s.FreezeToFile() if err != nil { log.Fatalf("Unable to freeze newly created server to disk: %v", err.Error()) } - err = s.Start() + } + + // Run the SSH admin console. + RunSSH() + + // Launch the servers we found during launch... + for _, server := range servers { + err = server.Start() if err != nil { - log.Fatal("Unable to start newly created server: %v", err.Error()) + log.Printf("Unable to start server %v: %v", server.Id, err.Error()) } }