[jira] [Created] (IGNITE-2526) get() from a REPLICATED cache for a non-existing key on a non-primary node causes a get() to the primary node

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

[jira] [Created] (IGNITE-2526) get() from a REPLICATED cache for a non-existing key on a non-primary node causes a get() to the primary node

Anton Vinogradov (Jira)
Noam Liran created IGNITE-2526:
----------------------------------

             Summary: get() from a REPLICATED cache for a non-existing key on a non-primary node causes a get() to the primary node
                 Key: IGNITE-2526
                 URL: https://issues.apache.org/jira/browse/IGNITE-2526
             Project: Ignite
          Issue Type: Bug
          Components: cache
    Affects Versions: 1.5.0.final
            Reporter: Noam Liran


{code}
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.Ignition;
import org.apache.ignite.cache.CacheMode;
import org.apache.ignite.cache.affinity.Affinity;
import org.apache.ignite.configuration.CacheConfiguration;
import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.lang.IgniteUuid;

public class Main {
    private static CacheConfiguration<Object, Object> CACHE_CONFIG = new CacheConfiguration<>()
            .setName("test")
            .setCacheMode(CacheMode.REPLICATED);
    static {
        CACHE_CONFIG.setStatisticsEnabled(true);
    }

    private static Object getKeyInNode(Ignite ignite) {
        Affinity<Object> affinity = ignite.affinity(CACHE_CONFIG.getName());

        IgniteUuid uuid = IgniteUuid.randomUuid();
        while (!affinity.isPrimary(ignite.cluster().localNode(), uuid)) {
            uuid = IgniteUuid.randomUuid();
        }

        return uuid;
    }

    public static void main(String[] args) throws InterruptedException {
        Ignite ignite1 = Ignition.start(new IgniteConfiguration().setGridName("1"));
        Ignite ignite2 = Ignition.start(new IgniteConfiguration().setGridName("2"));
        Ignite ignite3 = Ignition.start(new IgniteConfiguration().setGridName("3"));

        IgniteCache<Object, Object> cache1 = ignite1.getOrCreateCache(CACHE_CONFIG);
        IgniteCache<Object, Object> cache2 = ignite2.getOrCreateCache(CACHE_CONFIG);
        IgniteCache<Object, Object> cache3 = ignite3.getOrCreateCache(CACHE_CONFIG);

        Thread.sleep(3_000);

        Object cache2Key = getKeyInNode(ignite2);

        System.out.printf("initial:  cache1gets:%d cache2gets:%d cache3gets:%d\n",
                cache1.metrics().getCacheGets(), cache2.metrics().getCacheGets(), cache3.metrics().getCacheGets());

        cache1.get(cache2Key);
        cache3.get(cache2Key);

        System.out.printf("status:   cache1gets:%d cache2gets:%d cache3gets:%d\n",
                cache1.metrics().getCacheGets(), cache2.metrics().getCacheGets(), cache3.metrics().getCacheGets());
        System.out.printf("expected: cache1gets:1 cache2gets:0 cache3gets:1\n");

        Ignition.stopAll(false);
    }
}
{code}

Output:
{noformat}
initial:  cache1gets:0 cache2gets:0 cache3gets:0
status:   cache1gets:0 cache2gets:2 cache3gets:0
expected: cache1gets:1 cache2gets:0 cache3gets:1
{noformat}



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