func Init(cfg *config.Config) error { if !graph.IsPersistent(cfg.DatabaseType) { return fmt.Errorf("ignoring unproductive database initialization request: %v", ErrNotPersistent) } return graph.InitQuadStore(cfg.DatabaseType, cfg.DatabasePath, cfg.DatabaseOptions) }
func prepare(t testing.TB) { var remote bool cfg.DatabaseType = *backend switch *backend { case "memstore": cfg.DatabasePath = "../data/30kmoviedata.nq.gz" case "leveldb", "bolt": cfg.DatabasePath = "/tmp/cayley_test_" + *backend cfg.DatabaseOptions = map[string]interface{}{ "nosync": true, // It's a test. If we need to load, do it fast. } case "mongo": cfg.DatabasePath = "localhost:27017" cfg.DatabaseOptions = map[string]interface{}{ "database_name": "cayley_test", // provide a default test database } remote = true case "sql": cfg.DatabasePath = "postgres://localhost/cayley_test" remote = true default: t.Fatalf("Untestable backend store %s", *backend) } if *backendPath != "" { cfg.DatabasePath = *backendPath } var err error create.Do(func() { needsLoad := true if graph.IsPersistent(cfg.DatabaseType) && !remote { if _, err := os.Stat(cfg.DatabasePath); os.IsNotExist(err) { err = db.Init(cfg) if err != nil { t.Fatalf("Could not initialize database: %v", err) } } else { needsLoad = false } } handle, err = db.Open(cfg) if err != nil { t.Fatalf("Failed to open %q: %v", cfg.DatabasePath, err) } if needsLoad && !remote { err = internal.Load(handle.QuadWriter, cfg, "../data/30kmoviedata.nq.gz", "cquad") if err != nil { t.Fatalf("Failed to load %q: %v", cfg.DatabasePath, err) } } }) }
func deletePrepare(t testing.TB) { var err error deleteAndRecreate.Do(func() { prepare(t) if !graph.IsPersistent(cfg.DatabaseType) { err = removeAll(handle.QuadWriter, cfg, "", "cquad") if err != nil { t.Fatalf("Failed to remove %q: %v", cfg.DatabasePath, err) } err = internal.Load(handle.QuadWriter, cfg, "", "cquad") if err != nil { t.Fatalf("Failed to load %q: %v", cfg.DatabasePath, err) } } }) }
func main() { // No command? It's time for usage. if len(os.Args) == 1 { fmt.Fprintln(os.Stderr, "Cayley is a graph store and graph query layer.") usage() os.Exit(1) } cmd := os.Args[1] os.Args = append(os.Args[:1], os.Args[2:]...) flag.Parse() if *cpuprofile != "" { f, err := os.Create(*cpuprofile) if err != nil { clog.Fatalf("%v", err) } pprof.StartCPUProfile(f) defer pprof.StopCPUProfile() } var buildString string if Version != "" { buildString = fmt.Sprint("Cayley ", Version, " built ", BuildDate) clog.Infof(buildString) } cfg := configFrom(*configFile) if os.Getenv("GOMAXPROCS") == "" { runtime.GOMAXPROCS(runtime.NumCPU()) clog.Infof("Setting GOMAXPROCS to %d", runtime.NumCPU()) } else { clog.Infof("GOMAXPROCS currently %v -- not adjusting", os.Getenv("GOMAXPROCS")) } var ( handle *graph.Handle err error ) switch cmd { case "version": if Version != "" { fmt.Println(buildString) } else { fmt.Println("Cayley snapshot") } os.Exit(0) case "init": err = db.Init(cfg) if err != nil { break } if *quadFile != "" { handle, err = db.Open(cfg) if err != nil { break } err = internal.Load(handle.QuadWriter, cfg, *quadFile, *quadType) if err != nil { break } handle.Close() } case "load": handle, err = db.Open(cfg) if err != nil { break } err = internal.Load(handle.QuadWriter, cfg, *quadFile, *quadType) if err != nil { break } handle.Close() case "dump": handle, err = db.Open(cfg) if err != nil { break } if !graph.IsPersistent(cfg.DatabaseType) { err = internal.Load(handle.QuadWriter, cfg, *quadFile, *quadType) if err != nil { break } } err = internal.Dump(handle.QuadStore, *dumpFile, *dumpType) if err != nil { break } handle.Close() case "repl": if *initOpt { err = db.Init(cfg) if err != nil && err != graph.ErrDatabaseExists { break } } handle, err = db.Open(cfg) if err != nil { break } if !graph.IsPersistent(cfg.DatabaseType) { err = internal.Load(handle.QuadWriter, cfg, "", *quadType) if err != nil { break } } err = db.Repl(handle, *queryLanguage, cfg) handle.Close() case "http": if *initOpt { err = db.Init(cfg) if err != nil && err != graph.ErrDatabaseExists { break } } handle, err = db.Open(cfg) if err != nil { break } if !graph.IsPersistent(cfg.DatabaseType) { err = internal.Load(handle.QuadWriter, cfg, "", *quadType) if err != nil { break } } http.Serve(handle, cfg) handle.Close() default: fmt.Println("No command", cmd) usage() } if err != nil { clog.Errorf("%v", err) } }