forked from External/grumble
Make servers reside in the 'servers' subdir of the DataDir.
This commit is contained in:
parent
9ee6172b04
commit
a22606e8bf
2 changed files with 50 additions and 31 deletions
|
|
@ -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")
|
||||||
|
|
||||||
|
|
|
||||||
73
grumble.go
73
grumble.go
|
|
@ -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())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue