// ExecuteEntityIds excutes a non-streaming query based on given KeyspaceId map. func (vtg *VTGate) ExecuteEntityIds(context context.Context, query *proto.EntityIdsQuery, reply *proto.QueryResult) (err error) { defer handlePanic(&err) startTime := time.Now() statsKey := []string{"ExecuteEntityIds", query.Keyspace, string(query.TabletType)} defer vtg.timings.Record(statsKey, startTime) x := vtg.inFlight.Add(1) defer vtg.inFlight.Add(-1) if 0 < vtg.maxInFlight && vtg.maxInFlight < x { return ErrTooManyInFlight } qr, err := vtg.resolver.ExecuteEntityIds(context, query) if err == nil { reply.Result = qr vtg.rowsReturned.Add(statsKey, int64(len(qr.Rows))) } else { reply.Error = err.Error() if strings.Contains(reply.Error, errDupKey) { infoErrors.Add("DupKey", 1) } else { normalErrors.Add(statsKey, 1) vtg.logExecuteEntityIds.Errorf("%v, query: %+v", err, query) } } reply.Session = query.Session return nil }