func main() { rand.Seed(time.Now().UnixNano()) x.Init() checkFlagsAndInitDirs() ps, err := store.NewStore(*postingDir) x.Checkf(err, "Error initializing postings store") defer ps.Close() if len(*schemaFile) > 0 { err = schema.Parse(*schemaFile) x.Checkf(err, "Error while loading schema: %s", *schemaFile) } // Posting will initialize index which requires schema. Hence, initialize // schema before calling posting.Init(). posting.Init(ps) worker.Init(ps) x.Check(group.ParseGroupConfig(*conf)) // Setup external communication. che := make(chan error, 1) go setupServer(che) go worker.StartRaftNodes(*walDir) if err := <-che; !strings.Contains(err.Error(), "use of closed network connection") { log.Fatal(err) } }
func createTestData(t *testing.T, ps *store.Store) { dir, err := ioutil.TempDir("", "wal") require.NoError(t, err) group.ParseGroupConfig("") worker.StartRaftNodes(dir) p := geom.NewPoint(geom.XY).MustSetCoords(geom.Coord{-122.082506, 37.4249518}) addGeoData(t, ps, 1, p, "Googleplex") p = geom.NewPoint(geom.XY).MustSetCoords(geom.Coord{-122.080668, 37.426753}) addGeoData(t, ps, 2, p, "Shoreline Amphitheater") p = geom.NewPoint(geom.XY).MustSetCoords(geom.Coord{-122.2527428, 37.513653}) addGeoData(t, ps, 3, p, "San Carlos Airport") poly := geom.NewPolygon(geom.XY).MustSetCoords([][]geom.Coord{ {{-121.6, 37.1}, {-122.4, 37.3}, {-122.6, 37.8}, {-122.5, 38.3}, {-121.9, 38}, {-121.6, 37.1}}, }) addGeoData(t, ps, 4, poly, "SF Bay area") poly = geom.NewPolygon(geom.XY).MustSetCoords([][]geom.Coord{ {{-122.06, 37.37}, {-122.1, 37.36}, {-122.12, 37.4}, {-122.11, 37.43}, {-122.04, 37.43}, {-122.06, 37.37}}, }) addGeoData(t, ps, 5, poly, "Mountain View") poly = geom.NewPolygon(geom.XY).MustSetCoords([][]geom.Coord{ {{-122.25, 37.49}, {-122.28, 37.49}, {-122.27, 37.51}, {-122.25, 37.52}, {-122.24, 37.51}}, }) addGeoData(t, ps, 6, poly, "San Carlos") time.Sleep(200 * time.Millisecond) // Let the index process jobs from channel. }
func prepare() (dir1, dir2 string, ps *store.Store, rerr error) { var err error dir1, err = ioutil.TempDir("", "storetest_") if err != nil { return "", "", nil, err } ps, err = store.NewStore(dir1) if err != nil { return "", "", nil, err } dir2, err = ioutil.TempDir("", "wal_") if err != nil { return dir1, "", nil, err } posting.Init(ps) loader.Init(ps) group.ParseGroupConfig("groups.conf") worker.StartRaftNodes(dir2) { // Then load data. f, err := os.Open("testdata.nq") if err != nil { return dir1, dir2, nil, err } gm := map[uint32]bool{ 0: true, } _, err = loader.LoadEdges(f, gm) f.Close() if err != nil { return dir1, dir2, nil, err } } return dir1, dir2, ps, nil }
func populateGraph(t *testing.T) (string, string, *store.Store) { // logrus.SetLevel(logrus.DebugLevel) dir, err := ioutil.TempDir("", "storetest_") require.NoError(t, err) ps, err := store.NewStore(dir) require.NoError(t, err) schema.ParseBytes([]byte(schemaStr)) posting.Init(ps) worker.Init(ps) group.ParseGroupConfig("") dir2, err := ioutil.TempDir("", "wal_") require.NoError(t, err) worker.StartRaftNodes(dir2) // So, user we're interested in has uid: 1. // She has 5 friends: 23, 24, 25, 31, and 101 addEdgeToUID(t, ps, "friend", 1, 23) addEdgeToUID(t, ps, "friend", 1, 24) addEdgeToUID(t, ps, "friend", 1, 25) addEdgeToUID(t, ps, "friend", 1, 31) addEdgeToUID(t, ps, "friend", 1, 101) // Now let's add a few properties for the main user. addEdgeToValue(t, ps, "name", 1, "Michonne") addEdgeToValue(t, ps, "gender", 1, "female") var coord types.Geo err = coord.UnmarshalText([]byte("{\"Type\":\"Point\", \"Coordinates\":[1.1,2.0]}")) require.NoError(t, err) gData, err := coord.MarshalBinary() require.NoError(t, err) addEdgeToTypedValue(t, ps, "loc", 1, types.GeoID, gData) data, err := types.Int32(15).MarshalBinary() require.NoError(t, err) addEdgeToTypedValue(t, ps, "age", 1, types.Int32ID, data) addEdgeToValue(t, ps, "address", 1, "31, 32 street, Jupiter") data, err = types.Bool(true).MarshalBinary() require.NoError(t, err) addEdgeToTypedValue(t, ps, "alive", 1, types.BoolID, data) addEdgeToValue(t, ps, "age", 1, "38") addEdgeToValue(t, ps, "survival_rate", 1, "98.99") addEdgeToValue(t, ps, "sword_present", 1, "true") addEdgeToValue(t, ps, "_xid_", 1, "mich") // Now let's add a name for each of the friends, except 101. addEdgeToTypedValue(t, ps, "name", 23, types.StringID, []byte("Rick Grimes")) addEdgeToValue(t, ps, "age", 23, "15") err = coord.UnmarshalText([]byte(`{"Type":"Polygon", "Coordinates":[[[0.0,0.0], [2.0,0.0], [2.0, 2.0], [0.0, 2.0]]]}`)) require.NoError(t, err) gData, err = coord.MarshalBinary() require.NoError(t, err) addEdgeToTypedValue(t, ps, "loc", 23, types.GeoID, gData) addEdgeToValue(t, ps, "address", 23, "21, mark street, Mars") addEdgeToValue(t, ps, "name", 24, "Glenn Rhee") addEdgeToValue(t, ps, "name", 25, "Daryl Dixon") addEdgeToValue(t, ps, "name", 31, "Andrea") addEdgeToValue(t, ps, "dob", 23, "1910-01-02") addEdgeToValue(t, ps, "dob", 24, "1909-05-05") addEdgeToValue(t, ps, "dob", 25, "1909-01-10") addEdgeToValue(t, ps, "dob", 31, "1901-01-15") return dir, dir2, ps }