/**
   * @param sndId Sender node id.
   * @param req Query request.
   * @return Query info.
   */
  @Nullable
  private GridCacheQueryInfo distributedQueryInfo(UUID sndId, GridCacheQueryRequest req) {
    IgniteReducer<Object, Object> rdc = req.reducer();
    IgniteClosure<Object, Object> trans = req.transformer();

    ClusterNode sndNode = cctx.node(sndId);

    if (sndNode == null) return null;

    GridCacheQueryAdapter<?> qry =
        new GridCacheQueryAdapter<>(
            cctx,
            req.type(),
            log,
            req.pageSize(),
            0,
            false,
            req.includeBackups(),
            false,
            null,
            req.keyValueFilter(),
            req.partition(),
            req.className(),
            req.clause(),
            req.includeMetaData(),
            req.keepPortable(),
            req.subjectId(),
            req.taskHash());

    return new GridCacheQueryInfo(
        false,
        trans,
        rdc,
        qry,
        null,
        sndId,
        req.id(),
        req.includeMetaData(),
        req.allPages(),
        req.arguments());
  }