Uploaded image for project: 'Ignite'
  1. Ignite
  2. IGNITE-6195

SQL: Do not allow JOINs on caches with different affinity functions

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Won't Fix
    • 2.1
    • 2.8
    • sql

    Description

      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.

      Attachments

        1. patch6195.patch
          26 kB
          Sergey Grimstad

        Issue Links

          Activity

            People

              Unassigned Unassigned
              vozerov Vladimir Ozerov
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: