Mercurial > hg > blitz_condensed
view test/org/dancres/blitz/arc/ArcTest.java @ 34:6f68e94c1fb8 default tip
Add CondensedStats monitoring utility, equivalent to vmstat
author | Dominic Cleal <dominic-cleal@cdo2.com> |
---|---|
date | Thu, 05 Aug 2010 11:07:25 +0100 |
parents | 3dc0c5604566 |
children |
line wrap: on
line source
package org.dancres.blitz.arc; import java.io.IOException; import java.util.HashMap; import java.util.Random; import org.dancres.blitz.cache.Identifiable; import org.dancres.blitz.cache.Identifier; public class ArcTest { private static Random theRNG = new Random(); private static int theMaxEntries; private static ArcCache theCache; public static void main(String args[]) { BackingStore myStore = new BackingStoreImpl(); System.out.println("ArcTest with CacheSize: " + args[0] + " Max Entry:" + args[1]); theCache = new ArcCache(myStore, Integer.parseInt(args[0])); theMaxEntries = Integer.parseInt(args[1]); try { // Write the entries in for (int i = 0; i < theMaxEntries; i++) { IdentifierImpl myId = new IdentifierImpl(i); Element myElement = new Element(myId, i); theCache.insert(myElement); } while (true) { int myChoice = theRNG.nextInt(2); switch(myChoice) { case 0 : { randomSelect(); break; } case 1 : { randomRange(); break; } } } } catch (Exception anE) { System.err.println("Exceptioned"); anE.printStackTrace(System.err); } } private static final void randomSelect() throws Exception { // Random select int myInt = theRNG.nextInt(theMaxEntries); System.out.println("Random: " + myInt); CacheBlockDescriptor myCBD = theCache.find(new IdentifierImpl(myInt)); myCBD.release(); } private static final void randomRange() throws Exception { // Random start point int myStart = theRNG.nextInt(theMaxEntries); int myLength = theRNG.nextInt((theMaxEntries - myStart)); System.out.println("Linear: " + myStart + ", " + myLength); for (int i = myStart; i < (myStart + myLength); i++) { CacheBlockDescriptor myCBD = theCache.find(new IdentifierImpl(i)); myCBD.release(); } } private static final class IdentifierImpl implements Identifier { private int theInt; IdentifierImpl(int anInt) { theInt = anInt; } public boolean equals(Object anObject) { if (anObject instanceof IdentifierImpl) { IdentifierImpl myOther = (IdentifierImpl) anObject; return (myOther.theInt == theInt); } return false; } public int hashCode() { return theInt; } public int compareTo(Object anObject) { IdentifierImpl myOther = (IdentifierImpl) anObject; return theInt - myOther.theInt; } public String toString() { return "Id: " + theInt; } } private static final class Element implements Identifiable { private IdentifierImpl theId; private int theVal; Element(IdentifierImpl anId, int aVal) { theId = anId; theVal = aVal; } public Identifier getId() { return theId; } public String toString() { return "Element: " + theVal; } } private static final class BackingStoreImpl implements BackingStore { private HashMap thePrepared = new HashMap(); private HashMap theStorage = new HashMap(); public String getName() { return "ArcTest::BackingStoreImpl"; } public void prepareForCaching(Identifiable anIdentifiable) { synchronized(thePrepared) { thePrepared.put(anIdentifiable.getId(), anIdentifiable); } } /** @return Identifiable associated with Identifier or <code>null</code> if it cannot be found. */ public Identifiable load(Identifier anId) throws IOException { Identifiable myIdent; // First check prepcache synchronized(thePrepared) { myIdent = (Identifiable) thePrepared.remove(anId); if (myIdent != null) { synchronized(theStorage) { theStorage.put(anId, myIdent); } return myIdent; } } synchronized(theStorage) { myIdent = (Identifiable) theStorage.get(anId); if (myIdent == null) { System.err.println("Panic: storage lost entry"); throw new RuntimeException(); } else return myIdent; } } /** Must deal with handling of delete, update and write. */ public void save(Identifiable anIdentifiable) throws IOException { // Nothing for us to do in this case } public void force() throws IOException { // Nothing for us to do in this case } } }