func buildPrimaryIndex(keyspace datastore.Keyspace, hintIndexes, otherIndexes []datastore.Index) ( primary datastore.PrimaryIndex, err error) { ok := false // Prefer hints for _, index := range hintIndexes { if !index.IsPrimary() { continue } primary, ok = index.(datastore.PrimaryIndex) if ok { return } else { return nil, fmt.Errorf("Unable to cast primary index %s", index.Name()) } } // Consider other primary indexes if otherIndexes != nil { for _, index := range otherIndexes { if !index.IsPrimary() { continue } primary, ok = index.(datastore.PrimaryIndex) if ok { return } else { return nil, fmt.Errorf("Unable to cast primary index %s", index.Name()) } } } // Return first online primary index indexers, er := keyspace.Indexers() if er != nil { return nil, err } for _, indexer := range indexers { primaries, er := indexer.PrimaryIndexes() if er != nil { return nil, er } for _, primary = range primaries { state, _, er := primary.State() if er != nil { return nil, er } if state == datastore.ONLINE { return } } } if primary == nil { return nil, fmt.Errorf( "No primary index on keyspace %s. Use CREATE PRIMARY INDEX to create one.", keyspace.Name()) } return nil, fmt.Errorf("Primary index %s not online.", primary.Name()) }