mirror of
https://github.com/OpenHFT/Chronicle-Map.git
synced 2021-09-13 01:26:12 +00:00
111 lines
4.3 KiB
Java
111 lines
4.3 KiB
Java
package net.openhft.chronicle.map.locks;
|
|
|
|
import net.openhft.chronicle.map.ChronicleMap;
|
|
|
|
import java.util.Scanner;
|
|
import java.util.concurrent.locks.StampedLock;
|
|
|
|
import static net.openhft.chronicle.values.Values.newNativeReference;
|
|
|
|
//import net.openhft.chronicle.map.fromdocs.BondVOInterface;
|
|
|
|
public class DirtyReadOffender {
|
|
|
|
public static void main(String[] args) {
|
|
Scanner sc = new Scanner(System.in);
|
|
|
|
try {
|
|
String isoLevel = args[0];
|
|
long sleepT = Long.parseLong(args[1]);
|
|
long holdTime = Long.parseLong(args[2]);
|
|
|
|
ChronicleMap<String, BondVOInterface> chm =
|
|
DirtyReadTolerance.offHeap(
|
|
args[3]
|
|
+ "OPERAND_CHRONICLE_MAP"
|
|
);
|
|
System.out.println(
|
|
" @t=" + System.currentTimeMillis() +
|
|
" DirtyReadOffender established chm "
|
|
);
|
|
StampedLock offHeapLock = new ChronicleStampedLock(
|
|
args[3]
|
|
+ "OPERAND_ChronicleStampedLock"
|
|
);
|
|
BondVOInterface bond = newNativeReference(BondVOInterface.class);
|
|
//BondVOInterface cslMock = newNativeReference(BondVOInterface.class);
|
|
chm.acquireUsing("369604101", bond);
|
|
//chm.acquireUsing("Offender ", cslMock); // mock ChronicleStampLock
|
|
System.out.println(
|
|
" @t=" + System.currentTimeMillis() +
|
|
" DirtyReadOffender sleeping " + sleepT + " seconds "
|
|
);
|
|
Thread.sleep(sleepT * 1_000);
|
|
System.out.println(
|
|
" @t=" + System.currentTimeMillis() +
|
|
" DirtyReadOffender awakening "
|
|
);
|
|
/**
|
|
* ben.cotton@rutgers.edu ... anticipate Chronicle (www.OpenHFT.net)
|
|
* providing a j.u.c.l.StampedLock API for off-heap enthusiasts
|
|
*
|
|
* START
|
|
*
|
|
*/
|
|
long stamp = 0;
|
|
System.out.println(
|
|
" @t=" + System.currentTimeMillis() +
|
|
" DirtyReadOffender ACQUIRING offHeapLock.writeLock();"
|
|
);
|
|
while ((stamp = offHeapLock.writeLock()) == 0) {
|
|
}
|
|
System.out.println(
|
|
" @t=" + System.currentTimeMillis() +
|
|
" DirtyReadOffender ACQUIRED offHeapLock.writeLock();"
|
|
);
|
|
try {
|
|
double newCoupon = 3.5 + Math.random();
|
|
System.out.println(
|
|
" @t=" + System.currentTimeMillis() +
|
|
" DirtyReadOffender " +
|
|
" calling chm.put('369604101'," + newCoupon + ") "
|
|
);
|
|
bond.setCoupon(newCoupon);
|
|
chm.put("369604101", bond);
|
|
//cslMock.setEntryLockState(System.currentTimeMillis()); //mock'd
|
|
// chm.put("Offender ",cslMock); //mock'd
|
|
System.out.println(
|
|
" @t=" + System.currentTimeMillis() +
|
|
" DirtyReadOffender coupon=[" +
|
|
bond.getCoupon() +
|
|
"] written. "
|
|
);
|
|
} finally {
|
|
System.out.println(
|
|
" @t=" + System.currentTimeMillis() +
|
|
" DirtyReadOffender sleeping " + holdTime + " seconds "
|
|
);
|
|
Thread.sleep(holdTime * 1_000);
|
|
offHeapLock.unlockWrite(stamp);
|
|
System.out.println(
|
|
" @t=" + System.currentTimeMillis() +
|
|
" DirtyReadOffender called " +
|
|
"offHeapLock.unlockWrite(" + stamp + ");"
|
|
);
|
|
}
|
|
/**
|
|
* ben.cotton@rutgers.edu
|
|
*
|
|
* END
|
|
*
|
|
*/
|
|
} catch (Exception throwables) {
|
|
throwables.printStackTrace();
|
|
} finally {
|
|
System.out.println(
|
|
" ,,@t=" + System.currentTimeMillis() +
|
|
" DirtyReadOffender COMMITTED"
|
|
);
|
|
}
|
|
}
|
|
} |