public void execute(JobContext ctx) { Map<String, Long> evictionMap = contextImpl.getEvictionMap(); for(String key : evictionMap.keySet()){ Long lastTimeAccessed = evictionMap.get(key); long validTime = (lastTimeAccessed + contextImpl.getEntryEvictionTime()); long evicted = validTime - System.currentTimeMillis(); if( evicted < 0 ){ log.log(Level.FINE, "Removing _TEMP_ key ="+key+" Based on evictions policies / Evicted Time="+evicted); evictionMap.remove(key); contextImpl.remove(key); } } }
@Test public void simpleEvictionTest() throws InterruptedException { MessageReceiverHandler handler = new GridNodeImpl( "myNode", null ).getMessageReceiverHandler(); ContextImplWithEviction contextTemp = (ContextImplWithEviction) ((GridNodeServer) handler).getData().getTemp(); ((ContextImplWithEviction) contextTemp).setEntryEvictionTime(2000); // 2 seconds ((ContextImplWithEviction) contextTemp).setEvictionWakeUpTime(1000); // 1 seconds JDKTimerService timer = new JDKTimerService(1); contextTemp.set("myvalue", "value"); Long evictionWakeUpTime = contextTemp.getEvictionWakeUpTime(); timer.scheduleJob(new EvictionJob(contextTemp), new MockJobContext(), new MockTrigger(new Date(), evictionWakeUpTime)); //Set the timestamp for the first time contextTemp.set("myvalue", "value"); Thread.sleep(1000); //Update the timestamp String value = (String) contextTemp.get("myvalue"); //Wait for eviction Thread.sleep(4000); assertNull((String) contextTemp.get("myvalue")); }
public NodeData() { // Setup ROOT context, this will hold all long lived intances and instanceIds this.contextManager = new ContextManagerImpl(); this.root = new ContextImpl( ROOT, this.contextManager ); ((ContextManagerImpl) this.contextManager).addContext( this.root ); this.root.set( NODE_DATA, this ); // Setup TEMP context, this will hold all short lived instanceId and instances // TODO: TEMP context should have a time/utilisation eviction queue added this.temp = new ContextImplWithEviction( TEMP, this.contextManager, this.root); ((ContextManagerImpl) this.contextManager).addContext( this.temp ); }