package org.jboss.cache.eviction;
import EDU.oswego.cs.dl.util.concurrent.BoundedBuffer;
import org.jboss.cache.Fqn;
import org.jboss.logging.Logger;
public class Region
{
public static final long WAIT_TIME = 10000;
private int maxNodes_ = 0; private long timeToLiveSeconds_ = 0; private String fqn_;
private EvictionAlgorithm algorithm_;
private EvictionPolicy policy_;
protected BoundedBuffer nodeEventQueue_;
protected Logger log_ = Logger.getLogger(Region.class);
Region()
{
createQueue();
}
void createQueue()
{
nodeEventQueue_ = new BoundedBuffer(RegionManager.CAPACITY);
}
Region(String fqn, EvictionPolicy policy, EvictionAlgorithm algorithm) {
fqn_ = fqn;
policy_ = policy;
algorithm_ = algorithm;
createQueue();
}
public int getMaxNodes() { return maxNodes_; }
public void setMaxNodes(int maxNodes) { maxNodes_ = maxNodes; }
public long getTimeToLiveSeconds() { return timeToLiveSeconds_; }
public void setTimeToLiveSeconds(long secs) { timeToLiveSeconds_ = secs; }
public EvictionAlgorithm getEvictionAlgorithm() { return algorithm_; }
public EvictionPolicy getEvictionPolicy() { return policy_; }
public String getFqn() { return fqn_; }
public void setAddedNode(Fqn fqn)
{
putNodeEvent(fqn, EvictedEventNode.ADD_EVENT);
}
public void setRemovedNode(Fqn fqn)
{
putNodeEvent(fqn, EvictedEventNode.REMOVE_EVENT);
}
public void setVisitedNode(Fqn fqn)
{
putNodeEvent(fqn, EvictedEventNode.VISIT_EVENT);
}
protected void putNodeEvent(Fqn fqn, Integer event) {
try {
if( nodeEventQueue_.size() > (100*RegionManager.CAPACITY)/98 ) {
log_.warn("putNodeEvent(): eviction node event queue size is at 98% threshold value of capacity: "
+RegionManager.CAPACITY + " You will need to reduce the wakeUpIntervalSeconds parameter.");
}
nodeEventQueue_.put(new EvictedEventNode(fqn, event));
} catch (InterruptedException e) {
e.printStackTrace(); }
}
public EvictedEventNode takeLastEventNode()
{
try {
return (EvictedEventNode)nodeEventQueue_.poll(0);
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
public int nodeEventQueueSize()
{
return nodeEventQueue_.size();
}
public void resetEvictionQueues()
{
BoundedBuffer q1 = nodeEventQueue_;
log_.info("reseteEvictionQueues(): node queue size: " +q1.size() +
" region name: " +fqn_);
createQueue();
for(int i=0; i < q1.size(); i++) {
try {
q1.take();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public String toString() {
StringBuffer buf = new StringBuffer();
buf.append("Regions--- fqn: ").append(getFqn()).append(" maxNodes " +getMaxNodes());
buf.append(" TimeToIdleSeconds " +getTimeToLiveSeconds());
return buf.toString();
}
}