Hi Vladimir,
Thank you for your help. I have tested your test case, but it was not worked.
It is failed as the got cache1 is null.
Here is the output result and exception,
[09:23:09,404][INFO ][test-runner][GridDiscoveryManager] Topology snapshot
[ver=1, servers=1, clients=0, CPUs=8, heap=3.5GB]
[09:23:09,432][INFO
][exchange-worker-#43%examples.EventsExamplesSelfTest0%][GridCacheProcessor]
Started cache [name=DiffCache, mode=PARTITIONED]
[09:23:09,472][INFO
][exchange-worker-#43%examples.EventsExamplesSelfTest0%][GridDhtPreloader]
<DiffCache> Starting rebalancing in SYNC mode: DiffCache
EventsExamplesSelfTest.testExpiry cache1 = null
[09:23:09,475][INFO ][main][root] >>> Stopping test: testExpiry in 1557 ms <<<
[09:23:09,476][INFO ][main][root] >>> Stopping grid
[name=examples.EventsExamplesSelfTest0, id=003ae91f-041c-4cd0-a36f-2cad4e238000]
[09:23:09,474][ERROR][main][root] Test failed.
java.lang.NullPointerException
at
org.apache.ignite.examples.EventsExamplesSelfTest.testExpiry(EventsExamplesSelfTest.java:61)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at junit.framework.TestCase.runTest(TestCase.java:176)
at
org.apache.ignite.testframework.junits.GridAbstractTest.runTestInternal(GridAbstractTest.java:1665)
at
org.apache.ignite.testframework.junits.GridAbstractTest.access$000(GridAbstractTest.java:111)
at
org.apache.ignite.testframework.junits.GridAbstractTest$6.run(GridAbstractTest.java:1603)
Here is the testing case:
public class EventsExamplesSelfTest extends GridAbstractExamplesTest {
public void testExpiry() throws Exception {
Ignite ignite = startGrid(0);
CacheConfiguration<Integer, Integer> cfg = new CacheConfiguration<>();
cfg.setName("DiffCache");
cfg.setCacheMode(CacheMode.PARTITIONED);
cfg.setRebalanceMode(CacheRebalanceMode.SYNC);
cfg.setBackups(1);
ignite.getOrCreateCache(cfg);
IgniteCache<Object, Object> cache1 = ignite.cache(null);
System.out.println("EventsExamplesSelfTest.testExpiry cache1 = " +
cache1);
IgniteCache<Object, Object> cache2 = cache1.withExpiryPolicy(
new CreatedExpiryPolicy(new Duration(TimeUnit.SECONDS, 1)));
cache1.put(1, 1);
cache1.put(2, 2);
cache2.put(3, 3);
cache2.get(1); // Does not affect ExpiryPolicy.
U.sleep(2000);
assert cache1.get(1) == 1;
assert cache2.get(1) == 1; // not Expired
assert cache1.get(2) == 2;
assert cache1.get(3) == null; // Expired.
}
}
I have tried to do something like the expiry policies wrapper, and it is just a
semi-finished, and I am not sure will it be worked for the all situations.
I would like to share my idea and codes in the next response, hope you and
other guys to given any suggestions.
Thanks again.
Lin.
------------------ Original ------------------
From: "Vladimir Ershov";<[email protected]>;
Date: Tue, Dec 1, 2015 08:33 PM
To: "user"<[email protected]>;
Subject: Re: Can I set an expiry policy for some specify entry?
Hi Lin,
An expiry policy is working for all values, which were added through
cacheWithExpiryPolicy according to the next example:
IgniteCache<Object, Object> cacheWithExpiryPolicy = cache.withExpiryPolicy(
new CreatedExpiryPolicy(new Duration(TimeUnit.SECONDS, 5)));
You are welcome to find an explaining example in the end of this message.
It is also possible, that actually you are looking for something like eviction
policy. Please take a look here then:
https://apacheignite.readme.io/v1.5/docs/evictions
Please, provide the feedback, if this answer was useful, or not.
Thanks!
public void test() throws Exception {
Ignite ignite = startGrid(0); // some starting util method
CacheConfiguration<Integer, Integer> cfg = new CacheConfiguration<>();
cfg.setName(CACHE);
cfg.setCacheMode(CacheMode.PARTITIONED);
cfg.setRebalanceMode(CacheRebalanceMode.SYNC);
cfg.setBackups(1);
ignite.getOrCreateCache(cfg);
IgniteCache<Object, Object> cache1 = ignite.cache(null);
IgniteCache<Object, Object> cache2 = cache1.withExpiryPolicy(
new CreatedExpiryPolicy(new Duration(TimeUnit.SECONDS, 1)));
cache1.put(1, 1);
cache1.put(2, 2);
cache2.put(3, 3);
cache2.get(1); // Does not affect ExpiryPolicy.
U.sleep(2000);
assert cache1.get(1) == 1;
assert cache2.get(1) == 1; // not Expired
assert cache1.get(2) == 2;
assert cache1.get(3) == null; // Expired.
}
On Tue, Dec 1, 2015 at 10:47 AM, Lin <[email protected]> wrote:
Hi,
I have read the docs on jcache expiry policies, the policy will be used for
each operation invoked on the returned cache instance.
IgniteCache<Object, Object> cache = cache.withExpiryPolicy( new
CreatedExpiryPolicy(new Duration(TimeUnit.SECONDS, 5)));
and searched the nabble faq and found
http://apache-ignite-users.70518.x6.nabble.com/Does-IgniteCache-withExpiryPolicy-affect-existing-cache-entries-td1870.html
As I know, the expiry policy is worked for all the entries in the cache. I
would like to specify different expiry policies for some different entries,
How can I do?
Thanks for you help.
Regards,
Lin