func (self *ClusterConfiguration) getShardsToMatchQuery(querySpec *parser.QuerySpec) ([]*ShardData, error) { self.shardLock.RLock() defer self.shardLock.RUnlock() seriesNames, fromRegex := querySpec.TableNamesAndRegex() db := querySpec.Database() if fromRegex != nil { seriesNames = self.MetaStore.GetSeriesForDatabaseAndRegex(db, fromRegex) } uniqueShards := make(map[uint32]*ShardData) for _, name := range seriesNames { if fs := self.MetaStore.GetFieldsForSeries(db, name); len(fs) == 0 { return nil, fmt.Errorf("Couldn't find series: %s", name) } space := self.getShardSpaceToMatchSeriesName(db, name) if space == nil { continue } for _, shard := range space.shards { uniqueShards[shard.id] = shard } } shards := make([]*ShardData, 0, len(uniqueShards)) for _, shard := range uniqueShards { shards = append(shards, shard) } SortShardsByTimeDescending(shards) return shards, nil }