Alexey Kukushkin created IGNITE-16135:
-----------------------------------------

             Summary: Expiry policy is not applied to Ignite cache after 
serialization
                 Key: IGNITE-16135
                 URL: https://issues.apache.org/jira/browse/IGNITE-16135
             Project: Ignite
          Issue Type: Bug
          Components: cache
    Affects Versions: 2.11
            Reporter: Alexey Kukushkin


Expiry Policy specified in Ignite cache operation context is not applied to the 
cache after the cache serialization/deserialization.
h3. Steps to Reproduce
 # Run an Ignite server with a cache without expiry policy
 # A client node joins the server, gets the cache proxy and applies expiry 
policy to the cache proxy
 # The client executes a Compute task taking the cache proxy as a parameter on 
the server.
 # The Compute task puts an entry to the cache using the cache proxy received 
from the client.
 # The client sleeps for a time period longer than the TTL specified for the 
expiry policy
 # The client checks if the entry that the Compute task added still exists

h3. Expected

The entry does not exist since it must expire
h3. Actual

The entry still exists in the cache.
h3. Reproducer
{code:java}
public class IgniteCacheSerializationTest {
    /** Expiry Policy specified in Ignite cache operation context is enabled 
after the cache serialization. */
    @Test
    public void igniteCacheWithExpiryPolicySerialization() throws 
InterruptedException {
        var cacheName = "cache1";
        var ttl = 1000;

        Supplier<IgniteConfiguration> igniteCfgFactory = () ->
            new IgniteConfiguration()
                .setDiscoverySpi(
                    new TcpDiscoverySpi()
                        .setIpFinder(
                            new 
TcpDiscoveryVmIpFinder().setAddresses(Collections.singleton("127.0.0.1:47500"))
                        )
                )
                .setCacheConfiguration(new CacheConfiguration<>(cacheName));

        try (var ignored = 
Ignition.start(igniteCfgFactory.get().setIgniteInstanceName("server"))) {
            try (var ignite = Ignition.start(
                
igniteCfgFactory.get().setIgniteInstanceName("test").setClientMode(true))
            ) {
                // Apply a 1-second expiry policy to the cache
                var expiryPolicy = TouchedExpiryPolicy.factoryOf(new 
Duration(TimeUnit.MILLISECONDS, ttl)).create();

                var cache = ignite.<Integer, 
String>cache(cacheName).withExpiryPolicy(expiryPolicy);

                // Run a Compute Task that serializes the cache with the 
1-second expiry policy applied.
                // The task adds a key 1 to the cache
                ignite.compute().affinityRun(cacheName, 1, new Put1(cache));

                // Sleep for a time twice longer than the TTL
                Thread.sleep(ttl * 2);

                // The key 1 must expiry by this time
                assertFalse(cache.containsKey(1), "The entry still exists in 
the cache");
            }
        }
    }

    private static final class Put1 implements IgniteRunnable {
        private final IgniteCache<Integer, String> cache;

        public Put1(IgniteCache<Integer, String> cache) {
            this.cache = cache;
        }

        @Override public void run() {
            cache.put(1, "ignored");
        }
    }
}
{code}



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to