[ 
https://issues.apache.org/jira/browse/IGNITE-4523?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15831859#comment-15831859
 ] 

Alexei Scherbakov commented on IGNITE-4523:
-------------------------------------------

Added support for local queries.

As was requested on dev list, I'm adding short description of API changes:

Query class is extended with methods:

{noformat}
/**
     * Gets partitions for query, in ascending order.
     */
    @Nullable public int[] getPartitions() {
        return parts;
    }

    /**
     * Sets partitions for a query.
     * The query will be executed only on nodes which are primary for specified 
partitions.
     *
     * @param parts Partitions.
     * @return {@code this} for chaining.
     */
    public Query<R> setPartitions(@Nullable int... parts) {
        this.parts = parts;

        if (this.parts != null) {
            A.notEmpty(parts, "Partitions");

            // Validate partitions.
            for (int i = 0; i < parts.length; i++) {
                if (i < parts.length - 1)
                    A.ensure(parts[i] != parts[i + 1], "Partition duplicates 
are not allowed");

                A.ensure(0 <= parts[i] && parts[i] < 
CacheConfiguration.MAX_PARTITIONS_COUNT, "Illegal partition");
            }

            Arrays.sort(this.parts);
        }

        return this;
    }
{noformat}

ScanQuery class methods are marked for deprecation, because we already have 
get/setPartitions(int... parts):

{noformat}
/**
     * Sets partition number over which this query should iterate. If {@code 
null}, query will iterate over
     * all partitions in the cache. Must be in the range [0, N) where N is 
partition number in the cache.
     *
     * @param part Partition number over which this query should iterate.
     * @return {@code this} for chaining.
     *
     * @deprecated Use {@link #setPartitions(int... parts)} instead.}
     */
    @Deprecated
    public ScanQuery<K, V> setPartition(@Nullable Integer part) {
        if (part == null)
            setPartitions(null);
        else
            setPartitions(part);

        return this;
    }

    /**
     * Gets partition number over which this query should iterate. Will return 
{@code null} if partition was not
     * set. In this case query will iterate over all partitions in the cache.
     *
     * @return Partition number or {@code null}.
     *
     * @deprecated Use {@link #getPartitions()} instead.}
     */
    @Deprecated
    @Nullable public Integer getPartition() {
        return getPartitions() == null ? null : getPartitions()[0];
    }
{noformat}



> Allow distributed SQL query execution over explicit set of partitions
> ---------------------------------------------------------------------
>
>                 Key: IGNITE-4523
>                 URL: https://issues.apache.org/jira/browse/IGNITE-4523
>             Project: Ignite
>          Issue Type: Improvement
>          Components: cache, SQL
>    Affects Versions: 1.8
>            Reporter: Alexei Scherbakov
>            Assignee: Alexei Scherbakov
>             Fix For: 1.9
>
>
> 3Currently distributed SQL query is executed on all nodes containing primary 
> partitions for a cache, sending map query requests on all nodes in grid.
> Sometimes we know in advance which partitions hold a data for query, on 
> example, in case of custom affinity function. 
> Therefore it's possible to reduce number of nodes receiving map query request 
> by providing explicit set of partitions, which will give significant 
> performance advantage and traffic reduction in case of very large clusters.
> Internally we already have such functionality, so the only necessary thing is 
> to provide public API for what.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to