From 01dab376b012283bcd53a5449a3669d9a15cc7b3 Mon Sep 17 00:00:00 2001 From: Philip O'Toole Date: Wed, 27 Aug 2014 21:33:13 -0700 Subject: [PATCH] Instantiate database object at top-level --- src/github.com/otoolep/rqlite/main.go | 10 +++++++++- .../otoolep/rqlite/server/server.go | 19 +++++++++---------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/src/github.com/otoolep/rqlite/main.go b/src/github.com/otoolep/rqlite/main.go index f01b28b7..e394272b 100644 --- a/src/github.com/otoolep/rqlite/main.go +++ b/src/github.com/otoolep/rqlite/main.go @@ -12,6 +12,7 @@ import ( "github.com/otoolep/raft" "github.com/otoolep/rqlite/command" + "github.com/otoolep/rqlite/db" "github.com/otoolep/rqlite/server" log "code.google.com/p/log4go" @@ -110,9 +111,16 @@ func main() { path := flag.Arg(0) if err := os.MkdirAll(path, 0744); err != nil { log.Error("Unable to create path: %v", err) + os.Exit(1) } - s := server.New(path, dbfile, host, port) + database := db.New(filepath.Join(path, dbfile)) + if database == nil { + log.Error("Unable to create database connection") + os.Exit(1) + } + + s := server.New(path, database, host, port) go func() { log.Error(s.ListenAndServe(join)) }() diff --git a/src/github.com/otoolep/rqlite/server/server.go b/src/github.com/otoolep/rqlite/server/server.go index ab710760..7d8bf0ed 100644 --- a/src/github.com/otoolep/rqlite/server/server.go +++ b/src/github.com/otoolep/rqlite/server/server.go @@ -8,7 +8,6 @@ import ( "io/ioutil" "math/rand" "net/http" - "path" "path/filepath" "strings" "sync" @@ -48,7 +47,7 @@ type Server struct { router *mux.Router raftServer raft.Server httpServer *http.Server - db *db.DB + database *db.DB mutex sync.RWMutex } @@ -76,13 +75,13 @@ func isTransaction(req *http.Request) (bool, error) { } // Creates a new server. -func New(dataDir string, dbfile string, host string, port int) *Server { +func New(dataDir string, database *db.DB, host string, port int) *Server { s := &Server{ - host: host, - port: port, - path: dataDir, - db: db.New(path.Join(dataDir, dbfile)), - router: mux.NewRouter(), + host: host, + port: port, + path: dataDir, + database: database, + router: mux.NewRouter(), } // Read existing name or generate a new one. @@ -111,7 +110,7 @@ func (s *Server) ListenAndServe(leader string) error { // Initialize and start Raft server. transporter := raft.NewHTTPTransporter("/raft", 200*time.Millisecond) - s.raftServer, err = raft.NewServer(s.name, s.path, transporter, nil, s.db, "") + s.raftServer, err = raft.NewServer(s.name, s.path, transporter, nil, s.database, "") if err != nil { log.Error("Failed to create new Raft server", err.Error()) return err @@ -217,7 +216,7 @@ func (s *Server) readHandler(w http.ResponseWriter, req *http.Request) { stmt := string(b) startTime := time.Now() - r, err := s.db.Query(stmt) + r, err := s.database.Query(stmt) if err != nil { log.Trace("Bad SQL statement", err.Error()) failures = append(failures, FailedSqlStmt{stmt, err.Error()})