This is the explanation I was looking for. I indeed was just not clear on
how these worked, but this helped me clear it up. thanks.

On Wed, Oct 21, 2020 at 11:44 PM Ilya Kazakov <[email protected]>
wrote:

> Hello, Nicholas!
>
> As I understand from your code and from your explanation, it looks like
> you are a little confused about the Eviction Policies and the Expiry
> Policies.
>
> 1. Eviction policy determines which data should be removed from RAM if RAM
> runs out.
> 2. Expiry policy using for determining TTL of cache entries.
>
> In your case you need only Expiry policy. Look at my example:
>
> private static final String ORG_CACHE = IgniteCache.class.getSimpleName()
> + "Organizations";
>
> public static void main(String[] args) throws Exception {
>     DataRegionConfiguration dfltDataRegConf = new
> DataRegionConfiguration();
>     dfltDataRegConf.setPersistenceEnabled(true);
>
>     DataStorageConfiguration dsCfg = new DataStorageConfiguration();
>     dsCfg.setDefaultDataRegionConfiguration(dfltDataRegConf);
>     dsCfg.setStoragePath("/home/kazakov/tmp");
>
>     IgniteConfiguration igniteConfiguration = new IgniteConfiguration();
>     igniteConfiguration.setDataStorageConfiguration(dsCfg);
>
>     TcpDiscoverySpi tcpDiscoverySpi = new TcpDiscoverySpi();
>     TcpDiscoveryVmIpFinder ipFinder = new TcpDiscoveryVmIpFinder();
>     ipFinder.setAddresses(Arrays.asList("127.0.0.1:47500..47509"));
>     tcpDiscoverySpi.setIpFinder(ipFinder);
>
>     igniteConfiguration.setDiscoverySpi(tcpDiscoverySpi);
>
>     try(Ignite ignite = Ignition.start(igniteConfiguration)) {
>         ignite.active(true);
>
>         CacheConfiguration<Long, X12File> cacheCfg = new
> CacheConfiguration<>(ORG_CACHE);
>
>         cacheCfg.setCacheMode(CacheMode.REPLICATED);
>         cacheCfg.setAtomicityMode(CacheAtomicityMode.ATOMIC);
>         cacheCfg.setBackups(1);
>         cacheCfg.setOnheapCacheEnabled(true);
>
>         IgniteCache<Long, X12File> cache =
> ignite.getOrCreateCache(cacheCfg).withExpiryPolicy(new
> CreatedExpiryPolicy(new Duration(TimeUnit.SECONDS, 1)));
>
>         for (long i = 0; i < 4_000_000; i++) {
>             if (i > 0 && i % 10_000 == 0)
>                 System.out.println("Done: " + i);
>
>             cache.put(i, new X12File("x12file" + i,
> LocalDateTime.now().toString()));
>         }
>
>         Thread.sleep(5000);
>
>         int matches = 0;
>         for (long i = 0; i < 4_000_000; i++) {
>             if (cache.get(i) != null)
>                 ++matches;
>         }
>         System.out.println("Matches: " + matches);
>     }
> }
>
> Ilya Kazakov
>
>
> ср, 21 окт. 2020 г. в 21:27, Nicholas DiPiazza <
> [email protected]>:
> >
> > Trying to get some help with my stack overflow question here
> https://stackoverflow.com/questions/64456578/apache-ignite-2-x-can-i-take-advantage-of-offheap-storage-and-also-still-have
> >
> > Cross posting it here.
> >
> > I am using Apache Ignite 2.8.1
> >
> > I have a specific cache that I need to store off heap (because otherwise
> I will be plagued with out of memory conditions). And I also need the cache
> to be distributed.
> >
> > But I also want a time based eviction policy to evict entries from
> on/off memory cache.
> >
> > Is this even possible with Apache Ignite 2.x?
> >
> > See the snippet here. I have tried to configure this every which way,
> but nothing evicts these entries from the cache except doing it manually.
> >
> > When I run the test method below, all the entries remain in the cache.
> >
> > import java.time.LocalDateTime;
> > import java.util.Arrays;
> > import java.util.concurrent.TimeUnit;
> >
> > import javax.cache.expiry.CreatedExpiryPolicy;
> > import javax.cache.expiry.Duration;
> >
> > import org.apache.ignite.Ignite;
> > import org.apache.ignite.Ignition;
> > import org.apache.ignite.cache.CacheAtomicityMode;
> > import org.apache.ignite.cache.CacheMode;
> > import org.apache.ignite.cache.eviction.lru.LruEvictionPolicyFactory;
> > import org.apache.ignite.configuration.CacheConfiguration;
> > import org.apache.ignite.configuration.DataRegionConfiguration;
> > import org.apache.ignite.configuration.DataStorageConfiguration;
> > import org.apache.ignite.configuration.IgniteConfiguration;
> > import org.apache.ignite.configuration.NearCacheConfiguration;
> > import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
> > import
> org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
> >
> > public class IgniteCache {
> >     private static final String ORG_CACHE =
> IgniteCache.class.getSimpleName() + "Organizations";
> >
> >     private static Ignite ignite;
> >
> >     private static org.apache.ignite.IgniteCache cache;
> >
> >     public void start() {
> >
> >         IgniteConfiguration igniteConfiguration = new
> IgniteConfiguration();
> >         DataStorageConfiguration dsCfg = new DataStorageConfiguration();
> >         DataRegionConfiguration dfltDataRegConf = new
> DataRegionConfiguration();
> >         dfltDataRegConf.setPersistenceEnabled(true);
> >         dsCfg.setDefaultDataRegionConfiguration(dfltDataRegConf);
> >         dsCfg.setStoragePath("E:\\igniteStorage");
> >         igniteConfiguration.setDataStorageConfiguration(dsCfg);
> >
> >         TcpDiscoverySpi tcpDiscoverySpi = new TcpDiscoverySpi();
> >         TcpDiscoveryVmIpFinder ipFinder = new TcpDiscoveryVmIpFinder();
> >         ipFinder.setAddresses(Arrays.asList("127.0.0.1:47500..47509"));
> >         tcpDiscoverySpi.setIpFinder(ipFinder);
> >
> >         igniteConfiguration.setDiscoverySpi(tcpDiscoverySpi);
> >
> >         ignite = Ignition.start(igniteConfiguration);
> >
> >         ignite.active(true);
> >
> >         CacheConfiguration<Long, X12File> cacheCfg = new
> CacheConfiguration<>(ORG_CACHE);
> >
> >         cacheCfg.setCacheMode(CacheMode.REPLICATED);
> >         cacheCfg.setAtomicityMode(CacheAtomicityMode.ATOMIC);
> >         cacheCfg.setBackups(1);
> >
> >         cacheCfg.setEvictionPolicyFactory(new
> LruEvictionPolicyFactory<>(50000, 40, 5050)); // this doesn't do anything.
> >         cacheCfg.setNearConfiguration(
> >                 new NearCacheConfiguration<Long, X12File>()
> >                 .setNearEvictionPolicyFactory(new
> LruEvictionPolicyFactory<>(1_000_000))); // this doesn't do anything.
> >
> >         cache = ignite.getOrCreateCache(cacheCfg);
> >
> >         for (long i = 0; i < 4_000_000; i++) {
> >             if (i > 0 && i % 10_000 == 0) {
> >                 System.out.println("Done: " + i);
> >             }
> >             cache.withExpiryPolicy(new CreatedExpiryPolicy(new
> Duration(TimeUnit.SECONDS, 1))) // this expiry policy doesn't do anything
> >                 .put(i, new X12File("x12file" + i,
> LocalDateTime.now().toString()));
> >         }
> >     }
> >
> >     public void test() {
> >         System.out.println("Checking if cache entries are being properly
> evicted ...");
> >
> >         int matches = 0;
> >         for (long i = 0; i < 4_000_000; i++) {
> >             if (cache.get(i) != null) {
> >                 ++matches;
> >             }
> >         }
> >         System.out.println("Matches: " + matches);
> >     }
> > }
> >
> > Is this just a shortcoming of Apache Ignite 2.x in my particular use
> case?
>

Reply via email to