diff --git a/src/store/graph_store_sqlite.go b/src/store/graph_store_sqlite.go index 36c0bd7..b3c43e1 100644 --- a/src/store/graph_store_sqlite.go +++ b/src/store/graph_store_sqlite.go @@ -265,8 +265,8 @@ func (s *txStore) NodeExists(id string) (bool, error) { return nodeExists(s.db, // --- ID generation --- -func genID() string { - b := make([]byte, 5) +func genID(length int) string { + b := make([]byte, length) for i := range b { b[i] = "abcdefghijklmnopqrstuvwxyz"[rand.Intn(26)] } @@ -274,14 +274,21 @@ func genID() string { } func generateID(q querier) (string, error) { - for { - id := genID() - exists, err := nodeExists(q, id) - if err != nil { - return "", err + for length := 3; ; length++ { + // Try up to 10*capacity attempts at this length before growing. + capacity := 1 + for i := 0; i < length; i++ { + capacity *= 26 } - if !exists { - return id, nil + for attempt := 0; attempt < 10*capacity; attempt++ { + id := genID(length) + exists, err := nodeExists(q, id) + if err != nil { + return "", err + } + if !exists { + return id, nil + } } } }