ignite-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Vladimir Ozerov (JIRA)" <j...@apache.org>
Subject [jira] [Created] (IGNITE-6195) SQL: Do not allow JOINs on caches with different affinity functions
Date Mon, 28 Aug 2017 12:24:00 GMT
Vladimir Ozerov created IGNITE-6195:

             Summary: SQL: Do not allow JOINs on caches with different affinity functions
                 Key: IGNITE-6195
                 URL: https://issues.apache.org/jira/browse/IGNITE-6195
             Project: Ignite
          Issue Type: Task
          Components: sql
    Affects Versions: 2.1
            Reporter: Vladimir Ozerov
             Fix For: 2.2

Currently it is possible to execute JOIN on non-colocated caches. No exceptions will appear,
user just receive incorrect result. We need to detect such situations and throw errors instead.

*Proposed solution*
Correct SQL result is possible when either distributed joins are enabled, or data is co-located
properly. Under *proper* co-location we mean:
1) Participating {{PARTITIONED}} caches use the same affinity function
2) This affinity function doesn't depend on it's own previous state, i.e. it doesn't rely
on {{AffinityFunctionContext.previousAssignment}}. For instance, {{RendezvousAffinityFunction}}
doesn't use, while {{FairAffinityFunction}} does.

As such, the following procedure should be implemented in order to determine whether SQL can
be executed:
1) If {{distributedJoins}} are enabled - return, SQL can be executed
2) Get the list of participating caches
3) Exclude {{REPLICATED}} caches from that list
4) If all remaining caches belong to the same cache group - return, SQL can be executed
5) Get affinity function of the first cache
6) Check if affinity function doesn't use {{AffinityFunctionContext.previousAssignment}}.
This could be controlled either through annotation, or through new method on {{AffinityFunction}}
interface, e.g. {{boolean isDependOnPreviousState}}. If {{false}} - throw an exception
7) Check if affinity functions of all caches are equal through standard {{equals()}} method.
If {{false}} - throw an exception.
8) Otherwise - SQL can be executed safely.

This message was sent by Atlassian JIRA

View raw message