1
0
Fork 0
forked from External/grumble

Make servers reside in the 'servers' subdir of the DataDir.

This commit is contained in:
Mikkel Krautz 2011-11-12 03:18:10 +01:00
parent 9ee6172b04
commit a22606e8bf
2 changed files with 50 additions and 31 deletions

View file

@ -36,7 +36,7 @@ func (server *Server) FreezeToFile() (err error) {
if err != nil { if err != nil {
return err 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 { if err != nil {
return err return err
} }
@ -56,7 +56,7 @@ func (server *Server) FreezeToFile() (err error) {
if err != nil { if err != nil {
return err 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 { if err != nil {
return err return err
} }
@ -72,7 +72,7 @@ func (server *Server) FreezeToFile() (err error) {
// Open a new freeze log // Open a new freeze log
func (server *Server) openFreezeLog() (err error) { 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) err = os.Remove(logfn)
if pe, ok := err.(*os.PathError); ok && pe.Err == os.ENOENT { if pe, ok := err.(*os.PathError); ok && pe.Err == os.ENOENT {
// OK. File does not exist... // OK. File does not exist...
@ -390,7 +390,7 @@ func NewServerFromFrozen(name string) (s *Server, err error) {
return nil, err return nil, err
} }
path := filepath.Join(Args.DataDir, name) path := filepath.Join(Args.DataDir, "servers", name)
mainFile := filepath.Join(path, "main.fz") mainFile := filepath.Join(path, "main.fz")
logFile := filepath.Join(path, "log.fz") logFile := filepath.Join(path, "log.fz")

View file

@ -26,26 +26,25 @@ func main() {
return return
} }
err = logtarget.Target.OpenFile(Args.LogPath) // Open the data dir to check whether it exists.
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.
dataDir, err := os.Open(Args.DataDir) dataDir, err := os.Open(Args.DataDir)
if err != nil { if err != nil {
log.Fatalf("Unable to open data directory: %v", err) log.Fatalf("Unable to open data directory: %v", err)
return 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 // Open the blobstore. If the directory doesn't
// already exist, create the directory and open // already exist, create the directory and open
@ -164,17 +163,34 @@ func main() {
return return
} }
// Run the SSH admin console. // Create the servers directory if it doesn't already
RunSSH() // 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. // 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 { if err != nil {
log.Fatal("Unable to read file from data directory: %v", err.Error()) log.Fatal("Unable to read file from data directory: %v", err.Error())
} }
// The data dir file descriptor. // The data dir file descriptor.
err = dataDir.Close() err = serversDir.Close()
if err != nil { if err != nil {
log.Fatalf("Unable to close data directory: %v", err.Error()) log.Fatalf("Unable to close data directory: %v", err.Error())
return return
@ -195,10 +211,6 @@ func main() {
log.Fatalf("Unable to freeze server to disk: %v", err.Error()) log.Fatalf("Unable to freeze server to disk: %v", err.Error())
} }
servers[s.Id] = s 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 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() err = s.FreezeToFile()
if err != nil { if err != nil {
log.Fatalf("Unable to freeze newly created server to disk: %v", err.Error()) 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 { 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())
} }
} }