Met very strange SqlQuery when executing simple query on partitioned. The
problem that the same cache entry is retrieved twice. Looks like first time
entry gets retrieved from primary partition and second time it is taken from
back up. Another problem that same  ScanQuery gives correct results. Code i
run to this behavior:
public class UnitDupKeyProblemTests {
    public static void main(String[] args) {
        try (Ignite ignite = Ignition.start("ignite-client-conf-unit.xml"))
{
            Collection<Result> results = ignite.compute().broadcast(new
TestCallable("ENT_LST_0004_20180630_14009_999999_99999_9999_23_USD_99999_9999999999999_999999_2018_9_99999_LN00025_999999_999999"));
            results.forEach(System.out::println);
        }
    }

    private static class BiPredicateFilter implements
IgniteBiPredicate<String, Balance> {
        @Override
        public boolean apply(String string, Balance balance) {
            return balance.getTransType().equals("23");
        }
    }

    private static class Result implements Serializable {
        int timesFound;
        int nonPrimary;
        Collection<String> addresses;
        UUID nodeUid;
        boolean primary;
        boolean backUp;

        public Result(int timesFound, int nonPrimary, Collection<String>
addresses, UUID nodeUid, boolean primary, boolean backUp) {
            this.timesFound = timesFound;
            this.addresses = addresses;
            this.nodeUid = nodeUid;
            this.primary = primary;
            this.nonPrimary = nonPrimary;
            this.backUp = backUp;
        }

        public int getTimesFound() {
            return timesFound;
        }

        @Override
        public String toString() {
            return "Result{" +
                    "timesFound=" + timesFound +
                    ", nonPrimary=" + nonPrimary +
                    ", addresses=" + addresses +
                    ", nodeUid=" + nodeUid +
                    ", primary=" + primary +
                    ", backUp=" + backUp +
                    '}';
        }
    }

    private static class TestCallable implements IgniteCallable<Result> {

        @IgniteInstanceResource
        transient Ignite ignite;

        private final String keyToTest;

        public TestCallable(String keyToTest) {
            this.keyToTest = keyToTest;
        }

        @Override
        public Result call() throws Exception {
            final IgniteCache<String, Balance> cache =
ignite.cache("BALANCE");
            final ClusterNode clusterNode = ignite.cluster().localNode();
            //final ScanQuery<String, Balance> query = new ScanQuery<>(new
BiPredicateFilter());
            final SqlQuery<String, Balance> query = new
SqlQuery<>(Balance.class, "transType='23'");


            query.setLocal(true);
            int num = 0;
            int nonPrimary = 0;
            try (final QueryCursor<Cache.Entry&lt;String, Balance>> cursor =
cache.query(query)) {
                for (Cache.Entry<String, Balance> entry : cursor) {
                    if (cache.localPeek(entry.getKey(),
CachePeekMode.PRIMARY) == null) {
                        nonPrimary++;
                    }

                    if (keyToTest.equals(entry.getKey())) {
                        num++;
                    }
                }
            }

            ignite.affinity("BALANCE").isPrimary(clusterNode, keyToTest);
            return new Result(num, nonPrimary, clusterNode.addresses(),
clusterNode.id(),
                    ignite.affinity("BALANCE").isPrimary(clusterNode,
keyToTest),
                    ignite.affinity("BALANCE").isBackup(clusterNode,
keyToTest));
        }
    }
}

Output that proves my assumptions is:
Result{timesFound=1, nonPrimary=4, addresses=[127.0.0.1, 48.124.176.58],
nodeUid=0d45348c-2e94-4ac3-b9aa-b61fbdd56749, primary=false, backUp=true}
Result{timesFound=0, nonPrimary=5, addresses=[127.0.0.1, 48.124.184.19],
nodeUid=b5161591-7d62-4c0d-a866-7610b3665760, primary=false, backUp=false}
Result{timesFound=0, nonPrimary=2, addresses=[127.0.0.1, 48.124.176.57],
nodeUid=da3da1d3-a4f0-4273-8fac-f4ba479ae211, primary=false, backUp=false}
Result{timesFound=1, nonPrimary=2, addresses=[127.0.0.1, 48.124.184.20],
nodeUid=39203ddb-2c6b-4247-84bf-22f380130711, primary=true, backUp=false}

if switch to scanquery output looks correct:
Result{timesFound=0, nonPrimary=0, addresses=[127.0.0.1, 48.124.176.58],
nodeUid=0d45348c-2e94-4ac3-b9aa-b61fbdd56749, primary=false, backUp=true}
Result{timesFound=1, nonPrimary=0, addresses=[127.0.0.1, 48.124.184.20],
nodeUid=39203ddb-2c6b-4247-84bf-22f380130711, primary=true, backUp=false}
Result{timesFound=0, nonPrimary=0, addresses=[127.0.0.1, 48.124.176.57],
nodeUid=da3da1d3-a4f0-4273-8fac-f4ba479ae211, primary=false, backUp=false}
Result{timesFound=0, nonPrimary=0, addresses=[127.0.0.1, 48.124.184.19],
nodeUid=b5161591-7d62-4c0d-a866-7610b3665760, primary=false, backUp=false}




--
Sent from: http://apache-ignite-users.70518.x6.nabble.com/

Reply via email to