import org.simantics.acorn.GraphClientImpl2;
import org.simantics.acorn.exception.AcornAccessVerificationException;
import org.simantics.acorn.exception.IllegalAcornStateException;
-import org.simantics.db.common.utils.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/*
* The order rule of synchronization for LRU and LRUObject is:
- * § Always lock LRUObject first!
+ * � Always lock LRUObject first!
*
*/
public class LRU<MapKey,MapValue extends LRUObject<MapKey, MapValue>> {
-
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(LRU.class);
+
public static boolean VERIFY = true;
final private long swapTime = 5L*1000000000L;
public void acquireMutex() throws IllegalAcornStateException {
try {
while(!mutex.tryAcquire(3, TimeUnit.SECONDS)) {
- System.err.println("Mutex is taking a long time to acquire - owner is " + mutexOwner);
+ LOGGER.info("Mutex is taking a long time to acquire - owner is " + mutexOwner);
}
if(VERIFY)
mutexOwner = Thread.currentThread();
public void shutdown() {
if (GraphClientImpl2.DEBUG)
- System.err.println("Shutting down LRU writers " + writers);
+ LOGGER.info("Shutting down LRU writers " + writers);
writers.shutdown();
try {
writers.awaitTermination(60, TimeUnit.SECONDS);
}
});
if (GraphClientImpl2.DEBUG)
- System.err.println("Resuming LRU writers " + writers);
+ LOGGER.info("Resuming LRU writers " + writers);
}
/*
}
}
+
+
+ public MapValue purge(MapKey id) {
+ return map.remove(id);
+ }
+
public MapValue get(MapKey key) throws AcornAccessVerificationException {
if(VERIFY) verifyAccess();
manager.notSafeToMakeSnapshot(new IllegalAcornStateException(t));
}
t.printStackTrace();
- Logger.defaultLogError(t);
+ LOGGER.error("Exception happened in WriteRunnable.run", t);
}
}
boolean gotMutex = impl.tryAcquireMutex();
boolean done = false;
+ int count = 0;
+ long startTime = 0;
while (!done) {
if (gotMutex || borrowMutex) {
runWithMutex();
done = true;
} else {
- System.err.println("Retry mutex acquire");
+ if (count % 10 == 0) {
+ // Taking too long, sleep for a while.
+ LOGGER.warn("Retry mutex acquire");
+ try {
+ Thread.sleep(10);
+ } catch (InterruptedException e) {
+ }
+ }
gotMutex = impl.tryAcquireMutex();
+ long currentTime = System.currentTimeMillis();
+ if ((currentTime - startTime) > 10) {
+ startTime = currentTime;
+ count++;
+ }
}
}