func convertToEdges(ctx context.Context, nquads []rdf.NQuad) (mutationResult, error) { var edges []*task.DirectedEdge var mr mutationResult newUids := make(map[string]uint64) for _, nq := range nquads { if strings.HasPrefix(nq.Subject, "_new_:") { newUids[nq.Subject] = 0 } else if !strings.HasPrefix(nq.Subject, "_uid_:") { uid, err := rdf.GetUid(nq.Subject) x.Check(err) newUids[nq.Subject] = uid } if len(nq.ObjectId) > 0 { if strings.HasPrefix(nq.ObjectId, "_new_:") { newUids[nq.ObjectId] = 0 } else if !strings.HasPrefix(nq.ObjectId, "_uid_:") { uid, err := rdf.GetUid(nq.ObjectId) x.Check(err) newUids[nq.ObjectId] = uid } } } if len(newUids) > 0 { if err := worker.AssignUidsOverNetwork(ctx, newUids); err != nil { x.TraceError(ctx, x.Wrapf(err, "Error while GetOrAssignUidsOverNetwork")) return mr, err } } for _, nq := range nquads { // Get edges from nquad using newUids. edge, err := nq.ToEdgeUsing(newUids) if err != nil { x.TraceError(ctx, x.Wrapf(err, "Error while converting to edge: %v", nq)) return mr, err } edges = append(edges, edge) } resultUids := make(map[string]uint64) // Strip out _new_: prefix from the keys. for k, v := range newUids { if strings.HasPrefix(k, "_new_:") { resultUids[k[6:]] = v } } mr = mutationResult{ edges: edges, newUids: resultUids, } return mr, nil }
func (s *state) getUidForString(str string) { _, err := rdf.GetUid(str, s.instanceIdx, s.numInstances) for err != nil { // Just put in a retry loop to tackle temporary errors. if err == posting.E_TMP_ERROR { time.Sleep(time.Microsecond) glog.WithError(err).WithField("nq.Subject", str). Error("Temporary error") } else { glog.WithError(err).WithField("nq.Subject", str). Error("While getting UID") return } _, err = rdf.GetUid(str, s.instanceIdx, s.numInstances) } }
func convert(n rdf.NQuad) R { r := R{} var err error r.os = n.Subject r.s, err = rdf.GetUid(n.Subject) x.Checkf(err, "Subject: %v", n.Subject) r.p = n.Predicate if len(n.ObjectId) > 0 { r.o, err = rdf.GetUid(n.ObjectId) x.Checkf(err, "Object: %v", n.ObjectId) r.oo = n.ObjectId } r.v = string(n.ObjectValue) return r }
func TestQuery(t *testing.T) { var numInstances uint64 = 2 mod := math.MaxUint64 / numInstances minIdx0 := 0 * mod minIdx1 := 1 * mod logrus.SetLevel(logrus.DebugLevel) dir, err := ioutil.TempDir("", "storetest_") if err != nil { t.Error(err) return } defer os.RemoveAll(dir) ps := new(store.Store) ps.Init(dir) clog := commit.NewLogger(dir, "mutations", 50<<20) clog.Init() defer clog.Close() posting.Init(clog) uid.Init(ps) list := []string{"alice", "bob", "mallory", "ash", "man", "dgraph"} for _, str := range list { if farm.Fingerprint64([]byte(str))%numInstances == 0 { uid, err := rdf.GetUid(str, 0, numInstances) if uid < minIdx0 || uid > minIdx0+mod-1 { t.Error("Not the correct UID", err) } t.Logf("Instance-0 Correct UID", str, uid) } else { uid, err := rdf.GetUid(str, 1, numInstances) if uid < minIdx1 || uid > minIdx1+mod-1 { t.Error("Not the correct UID", err) } t.Logf("Instance-1 Correct UID", str, uid) } } }