From fc66df2e49a8a071f9f38e19a3a7d4b26adaf80f Mon Sep 17 00:00:00 2001 From: cotton-ben Date: Sat, 18 Jul 2020 12:27:43 -0400 Subject: [PATCH] building a ChronicleStampedLock.java reference implementation in the RFC repo. --- cp.txt | 2 +- cp2.txt | 2 +- .../revelations/ChronicleStampedLock.java | 160 ++++++++++++++++-- .../acid/revelations/DirtyReadIntolerant.java | 2 +- .../acid/revelations/DirtyReadOffender.java | 2 +- 5 files changed, 153 insertions(+), 15 deletions(-) diff --git a/cp.txt b/cp.txt index 91cefc710..dab99d742 100644 --- a/cp.txt +++ b/cp.txt @@ -1 +1 @@ -C:\Users\buddy\.m2\repository\com\intellij\annotations\12.0\annotations-12.0.jar;C:\Users\buddy\.m2\repository\net\openhft\chronicle-core\2.19.72\chronicle-core-2.19.72.jar;C:\Users\buddy\.m2\repository\org\jetbrains\annotations\19.0.0\annotations-19.0.0.jar;C:\Users\buddy\.m2\repository\net\openhft\chronicle-values\2.19.42\chronicle-values-2.19.42.jar;C:\Users\buddy\.m2\repository\net\openhft\chronicle-bytes\2.19.73-SNAPSHOT\chronicle-bytes-2.19.73-SNAPSHOT.jar;C:\Users\buddy\.m2\repository\com\squareup\javapoet\1.12.1\javapoet-1.12.1.jar;C:\Users\buddy\.m2\repository\net\openhft\chronicle-threads\2.19.71-SNAPSHOT\chronicle-threads-2.19.71-SNAPSHOT.jar;C:\Users\buddy\.m2\repository\org\slf4j\slf4j-api\1.7.30\slf4j-api-1.7.30.jar;C:\Users\buddy\.m2\repository\net\openhft\chronicle-wire\2.19.75\chronicle-wire-2.19.75.jar;C:\Users\buddy\.m2\repository\net\openhft\compiler\2.3.6\compiler-2.3.6.jar;C:\Users\buddy\.m2\repository\net\openhft\chronicle-algorithms\2.19.42\chronicle-algorithms-2.19.42.jar;C:\Users\buddy\.m2\repository\net\java\dev\jna\jna\5.5.0\jna-5.5.0.jar;C:\Users\buddy\.m2\repository\net\java\dev\jna\jna-platform\5.5.0\jna-platform-5.5.0.jar;C:\Users\buddy\.m2\repository\com\thoughtworks\xstream\xstream\1.4.12\xstream-1.4.12.jar;C:\Users\buddy\.m2\repository\xmlpull\xmlpull\1.1.3.1\xmlpull-1.1.3.1.jar;C:\Users\buddy\.m2\repository\xpp3\xpp3_min\1.1.4c\xpp3_min-1.1.4c.jar;C:\Users\buddy\.m2\repository\org\codehaus\jettison\jettison\1.4.1\jettison-1.4.1.jar;C:\Users\buddy\.m2\repository\org\ops4j\pax\url\pax-url-aether\2.6.2\pax-url-aether-2.6.2.jar;C:\Users\buddy\.m2\repository\org\ops4j\pax\url\pax-url-aether-support\2.6.2\pax-url-aether-support-2.6.2.jar;C:\Users\buddy\.m2\repository\org\apache\maven\resolver\maven-resolver-impl\1.3.1\maven-resolver-impl-1.3.1.jar;C:\Users\buddy\.m2\repository\org\apache\maven\resolver\maven-resolver-api\1.3.1\maven-resolver-api-1.3.1.jar;C:\Users\buddy\.m2\repository\org\apache\maven\resolver\maven-resolver-spi\1.3.1\maven-resolver-spi-1.3.1.jar;C:\Users\buddy\.m2\repository\org\apache\maven\resolver\maven-resolver-util\1.3.1\maven-resolver-util-1.3.1.jar;C:\Users\buddy\.m2\repository\org\slf4j\jcl-over-slf4j\1.6.6\jcl-over-slf4j-1.6.6.jar;C:\Users\buddy\.m2\repository\net\openhft\jlbh\1.19.30\jlbh-1.19.30.jar;C:\Users\buddy\.m2\repository\junit\junit\4.13\junit-4.13.jar;C:\Users\buddy\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;C:\Users\buddy\.m2\repository\org\slf4j\slf4j-simple\1.7.30\slf4j-simple-1.7.30.jar;C:\Users\buddy\.m2\repository\org\mockito\mockito-core\3.3.3\mockito-core-3.3.3.jar;C:\Users\buddy\.m2\repository\net\bytebuddy\byte-buddy\1.10.5\byte-buddy-1.10.5.jar;C:\Users\buddy\.m2\repository\net\bytebuddy\byte-buddy-agent\1.10.5\byte-buddy-agent-1.10.5.jar;C:\Users\buddy\.m2\repository\org\objenesis\objenesis\2.6\objenesis-2.6.jar;C:\Users\buddy\.m2\repository\org\powermock\powermock-module-junit4\2.0.7\powermock-module-junit4-2.0.7.jar;C:\Users\buddy\.m2\repository\org\powermock\powermock-module-junit4-common\2.0.7\powermock-module-junit4-common-2.0.7.jar;C:\Users\buddy\.m2\repository\org\powermock\powermock-reflect\2.0.7\powermock-reflect-2.0.7.jar;C:\Users\buddy\.m2\repository\org\powermock\powermock-core\2.0.7\powermock-core-2.0.7.jar;C:\Users\buddy\.m2\repository\org\javassist\javassist\3.27.0-GA\javassist-3.27.0-GA.jar;C:\Users\buddy\.m2\repository\org\powermock\powermock-api-mockito\1.7.4\powermock-api-mockito-1.7.4.jar;C:\Users\buddy\.m2\repository\org\powermock\powermock-api-mockito-common\1.7.4\powermock-api-mockito-common-1.7.4.jar;C:\Users\buddy\.m2\repository\org\powermock\powermock-api-support\1.7.4\powermock-api-support-1.7.4.jar;C:\Users\buddy\.m2\repository\net\openhft\affinity\3.2.3\affinity-3.2.3.jar;C:\Users\buddy\.m2\repository\com\google\guava\guava-testlib\19.0\guava-testlib-19.0.jar;C:\Users\buddy\.m2\repository\com\google\code\findbugs\jsr305\1.3.9\jsr305-1.3.9.jar;C:\Users\buddy\.m2\repository\com\google\errorprone\error_prone_annotations\2.0.2\error_prone_annotations-2.0.2.jar;C:\Users\buddy\.m2\repository\com\google\guava\guava\19.0\guava-19.0.jar;C:\Users\buddy\.m2\repository\net\openhft\zero-allocation-hashing\0.8\zero-allocation-hashing-0.8.jar;C:\Users\buddy\.m2\repository\com\samskivert\samskivert\1.9\samskivert-1.9.jar;C:\Users\buddy\.m2\repository\org\apache\commons\commons-lang3\3.10\commons-lang3-3.10.jar;C:\Users\buddy\.m2\repository\io\hawt\hawtio-embedded\2.7.1\hawtio-embedded-2.7.1.jar;C:\Users\buddy\.m2\repository\org\eclipse\jetty\jetty-webapp\9.4.6.v20170531\jetty-webapp-9.4.6.v20170531.jar;C:\Users\buddy\.m2\repository\org\eclipse\jetty\jetty-xml\9.4.6.v20170531\jetty-xml-9.4.6.v20170531.jar;C:\Users\buddy\.m2\repository\org\eclipse\jetty\jetty-util\9.4.6.v20170531\jetty-util-9.4.6.v20170531.jar;C:\Users\buddy\.m2\repository\org\eclipse\jetty\jetty-servlet\9.4.6.v20170531\jetty-servlet-9.4.6.v20170531.jar;C:\Users\buddy\.m2\repository\org\eclipse\jetty\jetty-security\9.4.6.v20170531\jetty-security-9.4.6.v20170531.jar;C:\Users\buddy\.m2\repository\org\eclipse\jetty\jetty-server\9.4.6.v20170531\jetty-server-9.4.6.v20170531.jar;C:\Users\buddy\.m2\repository\javax\servlet\javax.servlet-api\3.1.0\javax.servlet-api-3.1.0.jar;C:\Users\buddy\.m2\repository\org\eclipse\jetty\jetty-http\9.4.6.v20170531\jetty-http-9.4.6.v20170531.jar;C:\Users\buddy\.m2\repository\org\eclipse\jetty\jetty-io\9.4.6.v20170531\jetty-io-9.4.6.v20170531.jar;C:\Users\buddy\.m2\repository\org\skyscreamer\jsonassert\1.5.0\jsonassert-1.5.0.jar;C:\Users\buddy\.m2\repository\com\vaadin\external\google\android-json\0.0.20131108.vaadin1\android-json-0.0.20131108.vaadin1.jar;C:\Users\buddy\.m2\repository\net\openhft\stage-compiler\1.11\stage-compiler-1.11.jar;C:\Users\buddy\.m2\repository\net\openhft\spoon-core\4.4.1\spoon-core-4.4.1.jar;C:\Users\buddy\.m2\repository\org\eclipse\jdt\core\compiler\ecj\4.4.2\ecj-4.4.2.jar;C:\Users\buddy\.m2\repository\com\martiansoftware\jsap\2.1\jsap-2.1.jar;C:\Users\buddy\.m2\repository\log4j\log4j\1.2.17\log4j-1.2.17.jar;C:\Users\buddy\.m2\repository\commons-io\commons-io\1.3.2\commons-io-1.3.2.jar;C:\Users\buddy\.m2\repository\it\unimi\dsi\fastutil\7.0.6\fastutil-7.0.6.jar;C:\Users\buddy\.m2\repository\org\junit\jupiter\junit-jupiter\5.7.0-M1\junit-jupiter-5.7.0-M1.jar;C:\Users\buddy\.m2\repository\org\junit\jupiter\junit-jupiter-api\5.7.0-M1\junit-jupiter-api-5.7.0-M1.jar;C:\Users\buddy\.m2\repository\org\apiguardian\apiguardian-api\1.1.0\apiguardian-api-1.1.0.jar;C:\Users\buddy\.m2\repository\org\opentest4j\opentest4j\1.2.0\opentest4j-1.2.0.jar;C:\Users\buddy\.m2\repository\org\junit\platform\junit-platform-commons\1.7.0-M1\junit-platform-commons-1.7.0-M1.jar;C:\Users\buddy\.m2\repository\org\junit\jupiter\junit-jupiter-params\5.7.0-M1\junit-jupiter-params-5.7.0-M1.jar;C:\Users\buddy\.m2\repository\org\junit\jupiter\junit-jupiter-engine\5.7.0-M1\junit-jupiter-engine-5.7.0-M1.jar;C:\Users\buddy\.m2\repository\org\junit\platform\junit-platform-engine\1.7.0-M1\junit-platform-engine-1.7.0-M1.jar;C:\Java\jre\..\lib\tools.jar \ No newline at end of file +C:\Users\buddy\.m2\repository\com\intellij\annotations\12.0\annotations-12.0.jar;C:\Users\buddy\.m2\repository\net\openhft\chronicle-core\2.19.72\chronicle-core-2.19.72.jar;C:\Users\buddy\.m2\repository\org\jetbrains\annotations\19.0.0\annotations-19.0.0.jar;C:\Users\buddy\.m2\repository\net\openhft\chronicle-values\2.19.42\chronicle-values-2.19.42.jar;C:\Users\buddy\.m2\repository\net\openhft\chronicle-bytes\2.19.72\chronicle-bytes-2.19.72.jar;C:\Users\buddy\.m2\repository\com\squareup\javapoet\1.12.1\javapoet-1.12.1.jar;C:\Users\buddy\.m2\repository\net\openhft\chronicle-threads\2.19.72\chronicle-threads-2.19.72.jar;C:\Users\buddy\.m2\repository\org\slf4j\slf4j-api\1.7.30\slf4j-api-1.7.30.jar;C:\Users\buddy\.m2\repository\net\openhft\chronicle-wire\2.19.75\chronicle-wire-2.19.75.jar;C:\Users\buddy\.m2\repository\net\openhft\compiler\2.3.6\compiler-2.3.6.jar;C:\Users\buddy\.m2\repository\net\openhft\chronicle-algorithms\2.19.42\chronicle-algorithms-2.19.42.jar;C:\Users\buddy\.m2\repository\net\java\dev\jna\jna\5.5.0\jna-5.5.0.jar;C:\Users\buddy\.m2\repository\net\java\dev\jna\jna-platform\5.5.0\jna-platform-5.5.0.jar;C:\Users\buddy\.m2\repository\com\thoughtworks\xstream\xstream\1.4.12\xstream-1.4.12.jar;C:\Users\buddy\.m2\repository\xmlpull\xmlpull\1.1.3.1\xmlpull-1.1.3.1.jar;C:\Users\buddy\.m2\repository\xpp3\xpp3_min\1.1.4c\xpp3_min-1.1.4c.jar;C:\Users\buddy\.m2\repository\org\codehaus\jettison\jettison\1.4.1\jettison-1.4.1.jar;C:\Users\buddy\.m2\repository\org\ops4j\pax\url\pax-url-aether\2.6.2\pax-url-aether-2.6.2.jar;C:\Users\buddy\.m2\repository\org\ops4j\pax\url\pax-url-aether-support\2.6.2\pax-url-aether-support-2.6.2.jar;C:\Users\buddy\.m2\repository\org\apache\maven\resolver\maven-resolver-impl\1.3.1\maven-resolver-impl-1.3.1.jar;C:\Users\buddy\.m2\repository\org\apache\maven\resolver\maven-resolver-api\1.3.1\maven-resolver-api-1.3.1.jar;C:\Users\buddy\.m2\repository\org\apache\maven\resolver\maven-resolver-spi\1.3.1\maven-resolver-spi-1.3.1.jar;C:\Users\buddy\.m2\repository\org\apache\maven\resolver\maven-resolver-util\1.3.1\maven-resolver-util-1.3.1.jar;C:\Users\buddy\.m2\repository\org\slf4j\jcl-over-slf4j\1.6.6\jcl-over-slf4j-1.6.6.jar;C:\Users\buddy\.m2\repository\net\openhft\jlbh\1.19.30\jlbh-1.19.30.jar;C:\Users\buddy\.m2\repository\junit\junit\4.13\junit-4.13.jar;C:\Users\buddy\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;C:\Users\buddy\.m2\repository\org\slf4j\slf4j-simple\1.7.30\slf4j-simple-1.7.30.jar;C:\Users\buddy\.m2\repository\org\mockito\mockito-core\3.3.3\mockito-core-3.3.3.jar;C:\Users\buddy\.m2\repository\net\bytebuddy\byte-buddy\1.10.5\byte-buddy-1.10.5.jar;C:\Users\buddy\.m2\repository\net\bytebuddy\byte-buddy-agent\1.10.5\byte-buddy-agent-1.10.5.jar;C:\Users\buddy\.m2\repository\org\objenesis\objenesis\2.6\objenesis-2.6.jar;C:\Users\buddy\.m2\repository\org\powermock\powermock-module-junit4\2.0.7\powermock-module-junit4-2.0.7.jar;C:\Users\buddy\.m2\repository\org\powermock\powermock-module-junit4-common\2.0.7\powermock-module-junit4-common-2.0.7.jar;C:\Users\buddy\.m2\repository\org\powermock\powermock-reflect\2.0.7\powermock-reflect-2.0.7.jar;C:\Users\buddy\.m2\repository\org\powermock\powermock-core\2.0.7\powermock-core-2.0.7.jar;C:\Users\buddy\.m2\repository\org\javassist\javassist\3.27.0-GA\javassist-3.27.0-GA.jar;C:\Users\buddy\.m2\repository\org\powermock\powermock-api-mockito\1.7.4\powermock-api-mockito-1.7.4.jar;C:\Users\buddy\.m2\repository\org\powermock\powermock-api-mockito-common\1.7.4\powermock-api-mockito-common-1.7.4.jar;C:\Users\buddy\.m2\repository\org\powermock\powermock-api-support\1.7.4\powermock-api-support-1.7.4.jar;C:\Users\buddy\.m2\repository\net\openhft\affinity\3.2.3\affinity-3.2.3.jar;C:\Users\buddy\.m2\repository\com\google\guava\guava-testlib\19.0\guava-testlib-19.0.jar;C:\Users\buddy\.m2\repository\com\google\code\findbugs\jsr305\1.3.9\jsr305-1.3.9.jar;C:\Users\buddy\.m2\repository\com\google\errorprone\error_prone_annotations\2.0.2\error_prone_annotations-2.0.2.jar;C:\Users\buddy\.m2\repository\com\google\guava\guava\19.0\guava-19.0.jar;C:\Users\buddy\.m2\repository\net\openhft\zero-allocation-hashing\0.8\zero-allocation-hashing-0.8.jar;C:\Users\buddy\.m2\repository\com\samskivert\samskivert\1.9\samskivert-1.9.jar;C:\Users\buddy\.m2\repository\org\apache\commons\commons-lang3\3.10\commons-lang3-3.10.jar;C:\Users\buddy\.m2\repository\io\hawt\hawtio-embedded\2.7.1\hawtio-embedded-2.7.1.jar;C:\Users\buddy\.m2\repository\org\eclipse\jetty\jetty-webapp\9.4.6.v20170531\jetty-webapp-9.4.6.v20170531.jar;C:\Users\buddy\.m2\repository\org\eclipse\jetty\jetty-xml\9.4.6.v20170531\jetty-xml-9.4.6.v20170531.jar;C:\Users\buddy\.m2\repository\org\eclipse\jetty\jetty-util\9.4.6.v20170531\jetty-util-9.4.6.v20170531.jar;C:\Users\buddy\.m2\repository\org\eclipse\jetty\jetty-servlet\9.4.6.v20170531\jetty-servlet-9.4.6.v20170531.jar;C:\Users\buddy\.m2\repository\org\eclipse\jetty\jetty-security\9.4.6.v20170531\jetty-security-9.4.6.v20170531.jar;C:\Users\buddy\.m2\repository\org\eclipse\jetty\jetty-server\9.4.6.v20170531\jetty-server-9.4.6.v20170531.jar;C:\Users\buddy\.m2\repository\javax\servlet\javax.servlet-api\3.1.0\javax.servlet-api-3.1.0.jar;C:\Users\buddy\.m2\repository\org\eclipse\jetty\jetty-http\9.4.6.v20170531\jetty-http-9.4.6.v20170531.jar;C:\Users\buddy\.m2\repository\org\eclipse\jetty\jetty-io\9.4.6.v20170531\jetty-io-9.4.6.v20170531.jar;C:\Users\buddy\.m2\repository\org\skyscreamer\jsonassert\1.5.0\jsonassert-1.5.0.jar;C:\Users\buddy\.m2\repository\com\vaadin\external\google\android-json\0.0.20131108.vaadin1\android-json-0.0.20131108.vaadin1.jar;C:\Users\buddy\.m2\repository\net\openhft\stage-compiler\1.11\stage-compiler-1.11.jar;C:\Users\buddy\.m2\repository\net\openhft\spoon-core\4.4.1\spoon-core-4.4.1.jar;C:\Users\buddy\.m2\repository\org\eclipse\jdt\core\compiler\ecj\4.4.2\ecj-4.4.2.jar;C:\Users\buddy\.m2\repository\com\martiansoftware\jsap\2.1\jsap-2.1.jar;C:\Users\buddy\.m2\repository\log4j\log4j\1.2.17\log4j-1.2.17.jar;C:\Users\buddy\.m2\repository\commons-io\commons-io\1.3.2\commons-io-1.3.2.jar;C:\Users\buddy\.m2\repository\it\unimi\dsi\fastutil\7.0.6\fastutil-7.0.6.jar;C:\Users\buddy\.m2\repository\org\junit\jupiter\junit-jupiter\5.7.0-M1\junit-jupiter-5.7.0-M1.jar;C:\Users\buddy\.m2\repository\org\junit\jupiter\junit-jupiter-api\5.7.0-M1\junit-jupiter-api-5.7.0-M1.jar;C:\Users\buddy\.m2\repository\org\apiguardian\apiguardian-api\1.1.0\apiguardian-api-1.1.0.jar;C:\Users\buddy\.m2\repository\org\opentest4j\opentest4j\1.2.0\opentest4j-1.2.0.jar;C:\Users\buddy\.m2\repository\org\junit\platform\junit-platform-commons\1.7.0-M1\junit-platform-commons-1.7.0-M1.jar;C:\Users\buddy\.m2\repository\org\junit\jupiter\junit-jupiter-params\5.7.0-M1\junit-jupiter-params-5.7.0-M1.jar;C:\Users\buddy\.m2\repository\org\junit\jupiter\junit-jupiter-engine\5.7.0-M1\junit-jupiter-engine-5.7.0-M1.jar;C:\Users\buddy\.m2\repository\org\junit\platform\junit-platform-engine\1.7.0-M1\junit-platform-engine-1.7.0-M1.jar;C:\Java\jre\..\lib\tools.jar \ No newline at end of file diff --git a/cp2.txt b/cp2.txt index 094ce0469..e2977b200 100644 --- a/cp2.txt +++ b/cp2.txt @@ -1 +1 @@ -/C//Users/buddy/.m2/repository/com/intellij/annotations/12.0/annotations-12.0.jar:/C//Users/buddy/.m2/repository/net/openhft/chronicle-core/2.19.72/chronicle-core-2.19.72.jar:/C//Users/buddy/.m2/repository/org/jetbrains/annotations/19.0.0/annotations-19.0.0.jar:/C//Users/buddy/.m2/repository/net/openhft/chronicle-values/2.19.42/chronicle-values-2.19.42.jar:/C//Users/buddy/.m2/repository/net/openhft/chronicle-bytes/2.19.73-SNAPSHOT/chronicle-bytes-2.19.73-SNAPSHOT.jar:/C//Users/buddy/.m2/repository/com/squareup/javapoet/1.12.1/javapoet-1.12.1.jar:/C//Users/buddy/.m2/repository/net/openhft/chronicle-threads/2.19.71-SNAPSHOT/chronicle-threads-2.19.71-SNAPSHOT.jar:/C//Users/buddy/.m2/repository/org/slf4j/slf4j-api/1.7.30/slf4j-api-1.7.30.jar:/C//Users/buddy/.m2/repository/net/openhft/chronicle-wire/2.19.75/chronicle-wire-2.19.75.jar:/C//Users/buddy/.m2/repository/net/openhft/compiler/2.3.6/compiler-2.3.6.jar:/C//Users/buddy/.m2/repository/net/openhft/chronicle-algorithms/2.19.42/chronicle-algorithms-2.19.42.jar:/C//Users/buddy/.m2/repository/net/java/dev/jna/jna/5.5.0/jna-5.5.0.jar:/C//Users/buddy/.m2/repository/net/java/dev/jna/jna-platform/5.5.0/jna-platform-5.5.0.jar:/C//Users/buddy/.m2/repository/com/thoughtworks/xstream/xstream/1.4.12/xstream-1.4.12.jar:/C//Users/buddy/.m2/repository/xmlpull/xmlpull/1.1.3.1/xmlpull-1.1.3.1.jar:/C//Users/buddy/.m2/repository/xpp3/xpp3_min/1.1.4c/xpp3_min-1.1.4c.jar:/C//Users/buddy/.m2/repository/org/codehaus/jettison/jettison/1.4.1/jettison-1.4.1.jar:/C//Users/buddy/.m2/repository/org/ops4j/pax/url/pax-url-aether/2.6.2/pax-url-aether-2.6.2.jar:/C//Users/buddy/.m2/repository/org/ops4j/pax/url/pax-url-aether-support/2.6.2/pax-url-aether-support-2.6.2.jar:/C//Users/buddy/.m2/repository/org/apache/maven/resolver/maven-resolver-impl/1.3.1/maven-resolver-impl-1.3.1.jar:/C//Users/buddy/.m2/repository/org/apache/maven/resolver/maven-resolver-api/1.3.1/maven-resolver-api-1.3.1.jar:/C//Users/buddy/.m2/repository/org/apache/maven/resolver/maven-resolver-spi/1.3.1/maven-resolver-spi-1.3.1.jar:/C//Users/buddy/.m2/repository/org/apache/maven/resolver/maven-resolver-util/1.3.1/maven-resolver-util-1.3.1.jar:/C//Users/buddy/.m2/repository/org/slf4j/jcl-over-slf4j/1.6.6/jcl-over-slf4j-1.6.6.jar:/C//Users/buddy/.m2/repository/net/openhft/jlbh/1.19.30/jlbh-1.19.30.jar:/C//Users/buddy/.m2/repository/junit/junit/4.13/junit-4.13.jar:/C//Users/buddy/.m2/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar:/C//Users/buddy/.m2/repository/org/slf4j/slf4j-simple/1.7.30/slf4j-simple-1.7.30.jar:/C//Users/buddy/.m2/repository/org/mockito/mockito-core/3.3.3/mockito-core-3.3.3.jar:/C//Users/buddy/.m2/repository/net/bytebuddy/byte-buddy/1.10.5/byte-buddy-1.10.5.jar:/C//Users/buddy/.m2/repository/net/bytebuddy/byte-buddy-agent/1.10.5/byte-buddy-agent-1.10.5.jar:/C//Users/buddy/.m2/repository/org/objenesis/objenesis/2.6/objenesis-2.6.jar:/C//Users/buddy/.m2/repository/org/powermock/powermock-module-junit4/2.0.7/powermock-module-junit4-2.0.7.jar:/C//Users/buddy/.m2/repository/org/powermock/powermock-module-junit4-common/2.0.7/powermock-module-junit4-common-2.0.7.jar:/C//Users/buddy/.m2/repository/org/powermock/powermock-reflect/2.0.7/powermock-reflect-2.0.7.jar:/C//Users/buddy/.m2/repository/org/powermock/powermock-core/2.0.7/powermock-core-2.0.7.jar:/C//Users/buddy/.m2/repository/org/javassist/javassist/3.27.0-GA/javassist-3.27.0-GA.jar:/C//Users/buddy/.m2/repository/org/powermock/powermock-api-mockito/1.7.4/powermock-api-mockito-1.7.4.jar:/C//Users/buddy/.m2/repository/org/powermock/powermock-api-mockito-common/1.7.4/powermock-api-mockito-common-1.7.4.jar:/C//Users/buddy/.m2/repository/org/powermock/powermock-api-support/1.7.4/powermock-api-support-1.7.4.jar:/C//Users/buddy/.m2/repository/net/openhft/affinity/3.2.3/affinity-3.2.3.jar:/C//Users/buddy/.m2/repository/com/google/guava/guava-testlib/19.0/guava-testlib-19.0.jar:/C//Users/buddy/.m2/repository/com/google/code/findbugs/jsr305/1.3.9/jsr305-1.3.9.jar:/C//Users/buddy/.m2/repository/com/google/errorprone/error_prone_annotations/2.0.2/error_prone_annotations-2.0.2.jar:/C//Users/buddy/.m2/repository/com/google/guava/guava/19.0/guava-19.0.jar:/C//Users/buddy/.m2/repository/net/openhft/zero-allocation-hashing/0.8/zero-allocation-hashing-0.8.jar:/C//Users/buddy/.m2/repository/com/samskivert/samskivert/1.9/samskivert-1.9.jar:/C//Users/buddy/.m2/repository/org/apache/commons/commons-lang3/3.10/commons-lang3-3.10.jar:/C//Users/buddy/.m2/repository/io/hawt/hawtio-embedded/2.7.1/hawtio-embedded-2.7.1.jar:/C//Users/buddy/.m2/repository/org/eclipse/jetty/jetty-webapp/9.4.6.v20170531/jetty-webapp-9.4.6.v20170531.jar:/C//Users/buddy/.m2/repository/org/eclipse/jetty/jetty-xml/9.4.6.v20170531/jetty-xml-9.4.6.v20170531.jar:/C//Users/buddy/.m2/repository/org/eclipse/jetty/jetty-util/9.4.6.v20170531/jetty-util-9.4.6.v20170531.jar:/C//Users/buddy/.m2/repository/org/eclipse/jetty/jetty-servlet/9.4.6.v20170531/jetty-servlet-9.4.6.v20170531.jar:/C//Users/buddy/.m2/repository/org/eclipse/jetty/jetty-security/9.4.6.v20170531/jetty-security-9.4.6.v20170531.jar:/C//Users/buddy/.m2/repository/org/eclipse/jetty/jetty-server/9.4.6.v20170531/jetty-server-9.4.6.v20170531.jar:/C//Users/buddy/.m2/repository/javax/servlet/javax.servlet-api/3.1.0/javax.servlet-api-3.1.0.jar:/C//Users/buddy/.m2/repository/org/eclipse/jetty/jetty-http/9.4.6.v20170531/jetty-http-9.4.6.v20170531.jar:/C//Users/buddy/.m2/repository/org/eclipse/jetty/jetty-io/9.4.6.v20170531/jetty-io-9.4.6.v20170531.jar:/C//Users/buddy/.m2/repository/org/skyscreamer/jsonassert/1.5.0/jsonassert-1.5.0.jar:/C//Users/buddy/.m2/repository/com/vaadin/external/google/android-json/0.0.20131108.vaadin1/android-json-0.0.20131108.vaadin1.jar:/C//Users/buddy/.m2/repository/net/openhft/stage-compiler/1.11/stage-compiler-1.11.jar:/C//Users/buddy/.m2/repository/net/openhft/spoon-core/4.4.1/spoon-core-4.4.1.jar:/C//Users/buddy/.m2/repository/org/eclipse/jdt/core/compiler/ecj/4.4.2/ecj-4.4.2.jar:/C//Users/buddy/.m2/repository/com/martiansoftware/jsap/2.1/jsap-2.1.jar:/C//Users/buddy/.m2/repository/log4j/log4j/1.2.17/log4j-1.2.17.jar:/C//Users/buddy/.m2/repository/commons-io/commons-io/1.3.2/commons-io-1.3.2.jar:/C//Users/buddy/.m2/repository/it/unimi/dsi/fastutil/7.0.6/fastutil-7.0.6.jar:/C//Users/buddy/.m2/repository/org/junit/jupiter/junit-jupiter/5.7.0-M1/junit-jupiter-5.7.0-M1.jar:/C//Users/buddy/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.7.0-M1/junit-jupiter-api-5.7.0-M1.jar:/C//Users/buddy/.m2/repository/org/apiguardian/apiguardian-api/1.1.0/apiguardian-api-1.1.0.jar:/C//Users/buddy/.m2/repository/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar:/C//Users/buddy/.m2/repository/org/junit/platform/junit-platform-commons/1.7.0-M1/junit-platform-commons-1.7.0-M1.jar:/C//Users/buddy/.m2/repository/org/junit/jupiter/junit-jupiter-params/5.7.0-M1/junit-jupiter-params-5.7.0-M1.jar:/C//Users/buddy/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.7.0-M1/junit-jupiter-engine-5.7.0-M1.jar:/C//Users/buddy/.m2/repository/org/junit/platform/junit-platform-engine/1.7.0-M1/junit-platform-engine-1.7.0-M1.jar:/C//Java/jre/../lib/tools.jar \ No newline at end of file +/C//Users/buddy/.m2/repository/com/intellij/annotations/12.0/annotations-12.0.jar:/C//Users/buddy/.m2/repository/net/openhft/chronicle-core/2.19.72/chronicle-core-2.19.72.jar:/C//Users/buddy/.m2/repository/org/jetbrains/annotations/19.0.0/annotations-19.0.0.jar:/C//Users/buddy/.m2/repository/net/openhft/chronicle-values/2.19.42/chronicle-values-2.19.42.jar:/C//Users/buddy/.m2/repository/net/openhft/chronicle-bytes/2.19.72/chronicle-bytes-2.19.72.jar:/C//Users/buddy/.m2/repository/com/squareup/javapoet/1.12.1/javapoet-1.12.1.jar:/C//Users/buddy/.m2/repository/net/openhft/chronicle-threads/2.19.72/chronicle-threads-2.19.72.jar:/C//Users/buddy/.m2/repository/org/slf4j/slf4j-api/1.7.30/slf4j-api-1.7.30.jar:/C//Users/buddy/.m2/repository/net/openhft/chronicle-wire/2.19.75/chronicle-wire-2.19.75.jar:/C//Users/buddy/.m2/repository/net/openhft/compiler/2.3.6/compiler-2.3.6.jar:/C//Users/buddy/.m2/repository/net/openhft/chronicle-algorithms/2.19.42/chronicle-algorithms-2.19.42.jar:/C//Users/buddy/.m2/repository/net/java/dev/jna/jna/5.5.0/jna-5.5.0.jar:/C//Users/buddy/.m2/repository/net/java/dev/jna/jna-platform/5.5.0/jna-platform-5.5.0.jar:/C//Users/buddy/.m2/repository/com/thoughtworks/xstream/xstream/1.4.12/xstream-1.4.12.jar:/C//Users/buddy/.m2/repository/xmlpull/xmlpull/1.1.3.1/xmlpull-1.1.3.1.jar:/C//Users/buddy/.m2/repository/xpp3/xpp3_min/1.1.4c/xpp3_min-1.1.4c.jar:/C//Users/buddy/.m2/repository/org/codehaus/jettison/jettison/1.4.1/jettison-1.4.1.jar:/C//Users/buddy/.m2/repository/org/ops4j/pax/url/pax-url-aether/2.6.2/pax-url-aether-2.6.2.jar:/C//Users/buddy/.m2/repository/org/ops4j/pax/url/pax-url-aether-support/2.6.2/pax-url-aether-support-2.6.2.jar:/C//Users/buddy/.m2/repository/org/apache/maven/resolver/maven-resolver-impl/1.3.1/maven-resolver-impl-1.3.1.jar:/C//Users/buddy/.m2/repository/org/apache/maven/resolver/maven-resolver-api/1.3.1/maven-resolver-api-1.3.1.jar:/C//Users/buddy/.m2/repository/org/apache/maven/resolver/maven-resolver-spi/1.3.1/maven-resolver-spi-1.3.1.jar:/C//Users/buddy/.m2/repository/org/apache/maven/resolver/maven-resolver-util/1.3.1/maven-resolver-util-1.3.1.jar:/C//Users/buddy/.m2/repository/org/slf4j/jcl-over-slf4j/1.6.6/jcl-over-slf4j-1.6.6.jar:/C//Users/buddy/.m2/repository/net/openhft/jlbh/1.19.30/jlbh-1.19.30.jar:/C//Users/buddy/.m2/repository/junit/junit/4.13/junit-4.13.jar:/C//Users/buddy/.m2/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar:/C//Users/buddy/.m2/repository/org/slf4j/slf4j-simple/1.7.30/slf4j-simple-1.7.30.jar:/C//Users/buddy/.m2/repository/org/mockito/mockito-core/3.3.3/mockito-core-3.3.3.jar:/C//Users/buddy/.m2/repository/net/bytebuddy/byte-buddy/1.10.5/byte-buddy-1.10.5.jar:/C//Users/buddy/.m2/repository/net/bytebuddy/byte-buddy-agent/1.10.5/byte-buddy-agent-1.10.5.jar:/C//Users/buddy/.m2/repository/org/objenesis/objenesis/2.6/objenesis-2.6.jar:/C//Users/buddy/.m2/repository/org/powermock/powermock-module-junit4/2.0.7/powermock-module-junit4-2.0.7.jar:/C//Users/buddy/.m2/repository/org/powermock/powermock-module-junit4-common/2.0.7/powermock-module-junit4-common-2.0.7.jar:/C//Users/buddy/.m2/repository/org/powermock/powermock-reflect/2.0.7/powermock-reflect-2.0.7.jar:/C//Users/buddy/.m2/repository/org/powermock/powermock-core/2.0.7/powermock-core-2.0.7.jar:/C//Users/buddy/.m2/repository/org/javassist/javassist/3.27.0-GA/javassist-3.27.0-GA.jar:/C//Users/buddy/.m2/repository/org/powermock/powermock-api-mockito/1.7.4/powermock-api-mockito-1.7.4.jar:/C//Users/buddy/.m2/repository/org/powermock/powermock-api-mockito-common/1.7.4/powermock-api-mockito-common-1.7.4.jar:/C//Users/buddy/.m2/repository/org/powermock/powermock-api-support/1.7.4/powermock-api-support-1.7.4.jar:/C//Users/buddy/.m2/repository/net/openhft/affinity/3.2.3/affinity-3.2.3.jar:/C//Users/buddy/.m2/repository/com/google/guava/guava-testlib/19.0/guava-testlib-19.0.jar:/C//Users/buddy/.m2/repository/com/google/code/findbugs/jsr305/1.3.9/jsr305-1.3.9.jar:/C//Users/buddy/.m2/repository/com/google/errorprone/error_prone_annotations/2.0.2/error_prone_annotations-2.0.2.jar:/C//Users/buddy/.m2/repository/com/google/guava/guava/19.0/guava-19.0.jar:/C//Users/buddy/.m2/repository/net/openhft/zero-allocation-hashing/0.8/zero-allocation-hashing-0.8.jar:/C//Users/buddy/.m2/repository/com/samskivert/samskivert/1.9/samskivert-1.9.jar:/C//Users/buddy/.m2/repository/org/apache/commons/commons-lang3/3.10/commons-lang3-3.10.jar:/C//Users/buddy/.m2/repository/io/hawt/hawtio-embedded/2.7.1/hawtio-embedded-2.7.1.jar:/C//Users/buddy/.m2/repository/org/eclipse/jetty/jetty-webapp/9.4.6.v20170531/jetty-webapp-9.4.6.v20170531.jar:/C//Users/buddy/.m2/repository/org/eclipse/jetty/jetty-xml/9.4.6.v20170531/jetty-xml-9.4.6.v20170531.jar:/C//Users/buddy/.m2/repository/org/eclipse/jetty/jetty-util/9.4.6.v20170531/jetty-util-9.4.6.v20170531.jar:/C//Users/buddy/.m2/repository/org/eclipse/jetty/jetty-servlet/9.4.6.v20170531/jetty-servlet-9.4.6.v20170531.jar:/C//Users/buddy/.m2/repository/org/eclipse/jetty/jetty-security/9.4.6.v20170531/jetty-security-9.4.6.v20170531.jar:/C//Users/buddy/.m2/repository/org/eclipse/jetty/jetty-server/9.4.6.v20170531/jetty-server-9.4.6.v20170531.jar:/C//Users/buddy/.m2/repository/javax/servlet/javax.servlet-api/3.1.0/javax.servlet-api-3.1.0.jar:/C//Users/buddy/.m2/repository/org/eclipse/jetty/jetty-http/9.4.6.v20170531/jetty-http-9.4.6.v20170531.jar:/C//Users/buddy/.m2/repository/org/eclipse/jetty/jetty-io/9.4.6.v20170531/jetty-io-9.4.6.v20170531.jar:/C//Users/buddy/.m2/repository/org/skyscreamer/jsonassert/1.5.0/jsonassert-1.5.0.jar:/C//Users/buddy/.m2/repository/com/vaadin/external/google/android-json/0.0.20131108.vaadin1/android-json-0.0.20131108.vaadin1.jar:/C//Users/buddy/.m2/repository/net/openhft/stage-compiler/1.11/stage-compiler-1.11.jar:/C//Users/buddy/.m2/repository/net/openhft/spoon-core/4.4.1/spoon-core-4.4.1.jar:/C//Users/buddy/.m2/repository/org/eclipse/jdt/core/compiler/ecj/4.4.2/ecj-4.4.2.jar:/C//Users/buddy/.m2/repository/com/martiansoftware/jsap/2.1/jsap-2.1.jar:/C//Users/buddy/.m2/repository/log4j/log4j/1.2.17/log4j-1.2.17.jar:/C//Users/buddy/.m2/repository/commons-io/commons-io/1.3.2/commons-io-1.3.2.jar:/C//Users/buddy/.m2/repository/it/unimi/dsi/fastutil/7.0.6/fastutil-7.0.6.jar:/C//Users/buddy/.m2/repository/org/junit/jupiter/junit-jupiter/5.7.0-M1/junit-jupiter-5.7.0-M1.jar:/C//Users/buddy/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.7.0-M1/junit-jupiter-api-5.7.0-M1.jar:/C//Users/buddy/.m2/repository/org/apiguardian/apiguardian-api/1.1.0/apiguardian-api-1.1.0.jar:/C//Users/buddy/.m2/repository/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar:/C//Users/buddy/.m2/repository/org/junit/platform/junit-platform-commons/1.7.0-M1/junit-platform-commons-1.7.0-M1.jar:/C//Users/buddy/.m2/repository/org/junit/jupiter/junit-jupiter-params/5.7.0-M1/junit-jupiter-params-5.7.0-M1.jar:/C//Users/buddy/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.7.0-M1/junit-jupiter-engine-5.7.0-M1.jar:/C//Users/buddy/.m2/repository/org/junit/platform/junit-platform-engine/1.7.0-M1/junit-platform-engine-1.7.0-M1.jar:/C//Java/jre/../lib/tools.jar \ No newline at end of file diff --git a/src/test/java/net/openhft/chronicle/map/fromdocs/acid/revelations/ChronicleStampedLock.java b/src/test/java/net/openhft/chronicle/map/fromdocs/acid/revelations/ChronicleStampedLock.java index 278257c1a..ec52c5f50 100644 --- a/src/test/java/net/openhft/chronicle/map/fromdocs/acid/revelations/ChronicleStampedLock.java +++ b/src/test/java/net/openhft/chronicle/map/fromdocs/acid/revelations/ChronicleStampedLock.java @@ -4,6 +4,7 @@ import net.openhft.chronicle.core.values.LongValue; import net.openhft.chronicle.map.ChronicleMap; import net.openhft.chronicle.map.ChronicleMapBuilder; import net.openhft.chronicle.values.Values; + import java.io.File; import java.io.IOException; import java.util.concurrent.locks.StampedLock; @@ -16,6 +17,9 @@ import static net.openhft.chronicle.values.Values.newNativeReference; * A totally hacked impl, awaiting OpenHFT's official ChronicleStampedLock API *

* A usable 'reference' impl will more properly belong in the Chronicle-Algorithms/ repo + *

+ * NOTE: This impl only provides off-Heap capability for the tryXXXXX() family of + * j.u.c.l.StampedLock methosds. */ public class ChronicleStampedLock extends StampedLock { @@ -31,7 +35,7 @@ public class ChronicleStampedLock extends StampedLock { ChronicleStampedLock(String chronicelStampedLockLocality) { // path of Operand set i.e. /dev/shm/ try { chm = offHeapLock(chronicelStampedLockLocality); - chmR = offHeapLockReaderCount(chronicelStampedLockLocality+"=ReaderCount"); + chmR = offHeapLockReaderCount(chronicelStampedLockLocality + "=ReaderCount"); chm.acquireUsing("Stamp ", offHeapLock); // K="Stamp ", V=OffHeapLock impl chm.acquireUsing("LastWriterTime ", lastWriterT); //needed for validate chmR.acquireUsing("ReaderCount ", readLockHolderCount); @@ -52,7 +56,7 @@ public class ChronicleStampedLock extends StampedLock { chm.put("Stamp ", offHeapLock); System.out.println( " ,@t=" + System.currentTimeMillis() + - " ChronicleStampedLock saw stamp=["+0L+"]"+ + " ChronicleStampedLock saw stamp=[" + 0L + "]" + " tryOptmisticRead() returning stamp=" + t + "," @@ -101,6 +105,11 @@ public class ChronicleStampedLock extends StampedLock { offHeapLock = chm.get("Stamp "); lastWriterT = chm.get("LastWriterTime "); + l = offHeapLock.getEntryLockState(); + + if (l != 0L) + return 0L; + do { System.out.println( " ,@t=" + System.currentTimeMillis() + @@ -141,8 +150,11 @@ public class ChronicleStampedLock extends StampedLock { long l = 0L; offHeapLock = chm.get("Stamp "); - readLockHolderCount = chmR.get("ReaderCount "); + readLockHolderCount = chmR.get("ReaderCount "); + l = (offHeapLock = chm.get("Stamp ")).getEntryLockState(); + if (l < 0L) + return (0); do { System.out.println( " ,@t=" + System.currentTimeMillis() + @@ -164,7 +176,7 @@ public class ChronicleStampedLock extends StampedLock { //" readerCount=[" + readerCount.getReaderCount() + "]" + " readerCount=[" + (readLockHolderCount = chmR.get("ReaderCount ")).getVolatileValue() + "]" + - " BEFORE addAtomic(1) "+ + " BEFORE addAtomic(1) " + "," ); @@ -182,23 +194,128 @@ public class ChronicleStampedLock extends StampedLock { " ChronicleStampedLock tryReadLock() returned stamp=" + offHeapLock.getEntryLockState() + " readerCount=[" + readLockHolderCount.getVolatileValue() + "]" + - " AFTER addAtomic(1) "+ + " AFTER addAtomic(1) " + "," ); return (offHeapLock.getEntryLockState()); } + @Override + public long writeLock() { + long l = 0L; + + offHeapLock = chm.get("Stamp "); + lastWriterT = chm.get("LastWriterTime "); + + do { + System.out.println( + " ,@t=" + System.currentTimeMillis() + + " ChronicleStampedLock tryWriterLock() ?WAITING " + + " on offHeapLock.unlock(" + + offHeapLock.getEntryLockState() + + ") ," + ); + offHeapLock = chm.get("Stamp "); + l = offHeapLock.getEntryLockState(); + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } while (l != 0L || readLockHolderCount.getVolatileValue() > 0); + System.out.println( + " ,@t=" + System.currentTimeMillis() + + " ChronicleStampedLock tryWriterLock() PROCEEDING " + + " ," + ); + long t = System.currentTimeMillis(); + offHeapLock.setEntryLockState(-t); //negative ==> Writer holds StampedLock + lastWriterT.setEntryLockState(t); + chm.put("Stamp ", offHeapLock); + chm.put("LastWriterTime ", lastWriterT); + System.out.println( + " ,@t=" + t + + " ChronicleStampedLock tryWriteLock() returned stamp=" + + offHeapLock.getEntryLockState() + + "," + ); + return (offHeapLock.getEntryLockState()); + } + + @Override + public long readLock() { + long l = 0L; + + offHeapLock = chm.get("Stamp "); + readLockHolderCount = chmR.get("ReaderCount "); + + do { + System.out.println( + " ,@t=" + System.currentTimeMillis() + + " ChronicleStampedLock readLock() ?WAITING on Writer.unlock(" + + offHeapLock.getEntryLockState() + + ") ," + ); + l = (offHeapLock = chm.get("Stamp ")).getEntryLockState(); + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } while (l < 0L); + + System.out.println( + " ,@t=" + System.currentTimeMillis() + + " ChronicleStampedLock readLock() PROCEEDING " + + //" readerCount=[" + Count.getReaderCount() + "]" + + " readerCount=[" + + (readLockHolderCount = chmR.get("ReaderCount ")).getVolatileValue() + "]" + + " BEFORE addAtomic(1) " + + "," + ); + + readLockHolderCount.addAtomicValue(1); // INCREMENT the cardinality of the Reader set + chmR.put("ReaderCount ", readLockHolderCount); // and make it IPC visible + + offHeapLock.setEntryLockState( + readLockHolderCount.getVolatileValue() + ); // assign the Lock to most-recent Reader + + chm.put("Stamp ", offHeapLock); // make it IPC visible + + System.out.println( + " ,@t=" + System.currentTimeMillis() + + " ChronicleStampedLock readLock() returned stamp=" + + offHeapLock.getEntryLockState() + + " readerCount=[" + readLockHolderCount.getVolatileValue() + "]" + + " AFTER addAtomic(1) " + + "," + ); + return (offHeapLock.getEntryLockState()); + } + + @Override + public void unlock(long stamp) { + if (stamp < 0L) { + unlockWrite(stamp); + } else if (stamp > 0L) { + unlockRead(stamp); + } else { + ;// lock available + } + } + @Override public void unlockRead(long stamp) { offHeapLock = chm.get("Stamp "); - readLockHolderCount = chmR.get("ReaderCount "); + readLockHolderCount = chmR.get("ReaderCount "); System.out.println( " ,@t=" + System.currentTimeMillis() + " ChronicleStampedLock unlockRead(" + stamp + ") unlocking.." + "ReaderCount=[" + - (readLockHolderCount = chmR.get("ReaderCount ")).getVolatileValue() + "]" + - " BEFORE addAtomic(-1) "+ + (readLockHolderCount = chmR.get("ReaderCount ")).getVolatileValue() + "]" + + " BEFORE addAtomic(-1) " + "," ); readLockHolderCount.addAtomicValue(-1); // DECREMENT the cardinality of the Reader set @@ -207,12 +324,12 @@ public class ChronicleStampedLock extends StampedLock { " ,@t=" + System.currentTimeMillis() + " ChronicleStampedLock unlockRead(" + stamp + ") unlocking.." + "ReaderCount=[" + - (readLockHolderCount = chmR.get("ReaderCount ")).getVolatileValue() + "]" + - " AFTER addAtomic(-1) "+ + (readLockHolderCount = chmR.get("ReaderCount ")).getVolatileValue() + "]" + + " AFTER addAtomic(-1) " + "," ); offHeapLock.setEntryLockState( - (readLockHolderCount = chmR.get("ReaderCount ")).getVolatileValue() + (readLockHolderCount = chmR.get("ReaderCount ")).getVolatileValue() ); System.out.println( " ,@t=" + System.currentTimeMillis() + @@ -241,6 +358,27 @@ public class ChronicleStampedLock extends StampedLock { ); } + @Override + public int getReadLockCount() { + return ((int) chmR.get("ReaderCount ").getVolatileValue()); + } + + @Override + public boolean isReadLocked() { + if (this.getReadLockCount() > 0) + return (Boolean.TRUE); + else + return (Boolean.FALSE); + } + + @Override + public boolean isWriteLocked() { + if (this.getReadLockCount() < 0) + return (Boolean.TRUE); + else + return (Boolean.FALSE); + } + static ChronicleMap offHeapLock(String operand) throws IOException { diff --git a/src/test/java/net/openhft/chronicle/map/fromdocs/acid/revelations/DirtyReadIntolerant.java b/src/test/java/net/openhft/chronicle/map/fromdocs/acid/revelations/DirtyReadIntolerant.java index fb9fa1393..ae24c3ec5 100644 --- a/src/test/java/net/openhft/chronicle/map/fromdocs/acid/revelations/DirtyReadIntolerant.java +++ b/src/test/java/net/openhft/chronicle/map/fromdocs/acid/revelations/DirtyReadIntolerant.java @@ -39,7 +39,7 @@ public class DirtyReadIntolerant { " DirtyReadIntolerant sleeping " + sleepMock + " seconds" ); Thread.sleep(sleepMock * 1_000); - while ((stamp = offHeapLock.tryReadLock()) < 0) { + while ((stamp = offHeapLock.readLock()) < 0) { ; } System.out.println( diff --git a/src/test/java/net/openhft/chronicle/map/fromdocs/acid/revelations/DirtyReadOffender.java b/src/test/java/net/openhft/chronicle/map/fromdocs/acid/revelations/DirtyReadOffender.java index b423875f7..0790e4cb4 100644 --- a/src/test/java/net/openhft/chronicle/map/fromdocs/acid/revelations/DirtyReadOffender.java +++ b/src/test/java/net/openhft/chronicle/map/fromdocs/acid/revelations/DirtyReadOffender.java @@ -56,7 +56,7 @@ public class DirtyReadOffender { " @t=" + System.currentTimeMillis() + " DirtyReadOffender ACQUIRING offHeapLock.writeLock();" ); - while ((stamp = offHeapLock.tryWriteLock()) == 0) { + while ((stamp = offHeapLock.writeLock()) == 0) { ; } System.out.println(