http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/lib/licenses/ohc-0.4.4.txt ---------------------------------------------------------------------- diff --git a/lib/licenses/ohc-0.4.4.txt b/lib/licenses/ohc-0.4.4.txt deleted file mode 100644 index eb6b5d3..0000000 --- a/lib/licenses/ohc-0.4.4.txt +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2014 Robert Stupp, Koeln, Germany, robert-stupp.de - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.
http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/lib/licenses/ohc-0.5.1.txt ---------------------------------------------------------------------- diff --git a/lib/licenses/ohc-0.5.1.txt b/lib/licenses/ohc-0.5.1.txt new file mode 100644 index 0000000..eb6b5d3 --- /dev/null +++ b/lib/licenses/ohc-0.5.1.txt @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2014 Robert Stupp, Koeln, Germany, robert-stupp.de + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/lib/ohc-core-0.4.4.jar ---------------------------------------------------------------------- diff --git a/lib/ohc-core-0.4.4.jar b/lib/ohc-core-0.4.4.jar deleted file mode 100644 index 6d0f558..0000000 Binary files a/lib/ohc-core-0.4.4.jar and /dev/null differ http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/lib/ohc-core-0.5.1.jar ---------------------------------------------------------------------- diff --git a/lib/ohc-core-0.5.1.jar b/lib/ohc-core-0.5.1.jar new file mode 100644 index 0000000..20f535f Binary files /dev/null and b/lib/ohc-core-0.5.1.jar differ http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/lib/ohc-core-j8-0.4.4.jar ---------------------------------------------------------------------- diff --git a/lib/ohc-core-j8-0.4.4.jar b/lib/ohc-core-j8-0.4.4.jar deleted file mode 100644 index f0f9452..0000000 Binary files a/lib/ohc-core-j8-0.4.4.jar and /dev/null differ http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/lib/ohc-core-j8-0.5.1.jar ---------------------------------------------------------------------- diff --git a/lib/ohc-core-j8-0.5.1.jar b/lib/ohc-core-j8-0.5.1.jar new file mode 100644 index 0000000..566cfb2 Binary files /dev/null and b/lib/ohc-core-j8-0.5.1.jar differ http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/redhat/cassandra.in.sh ---------------------------------------------------------------------- diff --git a/redhat/cassandra.in.sh b/redhat/cassandra.in.sh index ca71782..ecca949 100644 --- a/redhat/cassandra.in.sh +++ b/redhat/cassandra.in.sh @@ -23,8 +23,84 @@ CLASSPATH="$CLASSPATH:$EXTRA_CLASSPATH" # set JVM javaagent opts to avoid warnings/errors -if [ "$JVM_VENDOR" != "OpenJDK" -o "$JVM_VERSION" \> "1.6.0" ] \ - || [ "$JVM_VERSION" = "1.6.0" -a "$JVM_PATCH_VERSION" -ge 23 ] -then - JAVA_AGENT="$JAVA_AGENT -javaagent:$CASSANDRA_HOME/lib/jamm-0.3.0.jar" +JAVA_AGENT="$JAVA_AGENT -javaagent:$CASSANDRA_HOME/lib/jamm-0.3.2.jar" + + +# +# Java executable and per-Java version JVM settings +# + +# Use JAVA_HOME if set, otherwise look for java in PATH +if [ -n "$JAVA_HOME" ]; then + # Why we can't have nice things: Solaris combines x86 and x86_64 + # installations in the same tree, using an unconventional path for the + # 64bit JVM. Since we prefer 64bit, search the alternate path first, + # (see https://issues.apache.org/jira/browse/CASSANDRA-4638). + for java in "$JAVA_HOME"/bin/amd64/java "$JAVA_HOME"/bin/java; do + if [ -x "$java" ]; then + JAVA="$java" + break + fi + done +else + JAVA=java fi + +if [ -z $JAVA ] ; then + echo Unable to find java executable. Check JAVA_HOME and PATH environment variables. >&2 + exit 1; +fi + +# Determine the sort of JVM we'll be running on. +java_ver_output=`"${JAVA:-java}" -version 2>&1` +jvmver=`echo "$java_ver_output" | grep '[openjdk|java] version' | awk -F'"' 'NR==1 {print $2}' | cut -d\- -f1` +JVM_VERSION=${jvmver%_*} + +JAVA_VERSION=11 +if [ "$JVM_VERSION" = "1.8.0" ] ; then + JVM_PATCH_VERSION=${jvmver#*_} + if [ "$JVM_VERSION" \< "1.8" ] || [ "$JVM_VERSION" \> "1.8.2" ] ; then + echo "Cassandra 4.0 requires either Java 8 (update 151 or newer) or Java 11 (or newer). Java $JVM_VERSION is not supported." + exit 1; + fi + if [ "$JVM_PATCH_VERSION" -lt 151 ] ; then + echo "Cassandra 4.0 requires either Java 8 (update 151 or newer) or Java 11 (or newer). Java 8 update $JVM_PATCH_VERSION is not supported." + exit 1; + fi + JAVA_VERSION=8 +elif [ "$JVM_VERSION" \< "11" ] ; then + echo "Cassandra 4.0 requires either Java 8 (update 151 or newer) or Java 11 (or newer)." + exit 1; +fi + +jvm=`echo "$java_ver_output" | grep -A 1 '[openjdk|java] version' | awk 'NR==2 {print $1}'` +case "$jvm" in + OpenJDK) + JVM_VENDOR=OpenJDK + # this will be "64-Bit" or "32-Bit" + JVM_ARCH=`echo "$java_ver_output" | awk 'NR==3 {print $2}'` + ;; + "Java(TM)") + JVM_VENDOR=Oracle + # this will be "64-Bit" or "32-Bit" + JVM_ARCH=`echo "$java_ver_output" | awk 'NR==3 {print $3}'` + ;; + *) + # Help fill in other JVM values + JVM_VENDOR=other + JVM_ARCH=unknown + ;; +esac + +# Read user-defined JVM options from jvm-server.options file +JVM_OPTS_FILE=$CASSANDRA_CONF/jvm${jvmoptions_variant:--clients}.options +if [ $JAVA_VERSION -ge 11 ] ; then + JVM_DEP_OPTS_FILE=$CASSANDRA_CONF/jvm11${jvmoptions_variant:--clients}.options +else + JVM_DEP_OPTS_FILE=$CASSANDRA_CONF/jvm8${jvmoptions_variant:--clients}.options +fi + +for opt in `grep "^-" $JVM_OPTS_FILE` `grep "^-" $JVM_DEP_OPTS_FILE` +do + JVM_OPTS="$JVM_OPTS $opt" +done http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/src/java/org/apache/cassandra/cache/SerializingCache.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/cache/SerializingCache.java b/src/java/org/apache/cassandra/cache/SerializingCache.java index 320bb15..55c20ec 100644 --- a/src/java/org/apache/cassandra/cache/SerializingCache.java +++ b/src/java/org/apache/cassandra/cache/SerializingCache.java @@ -76,6 +76,7 @@ public class SerializingCache<K, V> implements ICache<K, V> }, serializer); } + @SuppressWarnings("resource") private V deserialize(RefCountedMemory mem) { try @@ -89,6 +90,7 @@ public class SerializingCache<K, V> implements ICache<K, V> } } + @SuppressWarnings("resource") private RefCountedMemory serialize(V value) { long serializedSize = serializer.serializedSize(value); http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/src/java/org/apache/cassandra/config/DatabaseDescriptor.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java index 2dc3737..6301ab0 100644 --- a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java +++ b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java @@ -73,6 +73,12 @@ import static org.apache.cassandra.io.util.FileUtils.ONE_GB; public class DatabaseDescriptor { + static + { + // This static block covers most usages + FBUtilities.preventIllegalAccessWarnings(); + } + private static final Logger logger = LoggerFactory.getLogger(DatabaseDescriptor.class); /** http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/src/java/org/apache/cassandra/cql3/functions/JavaBasedUDFunction.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/cql3/functions/JavaBasedUDFunction.java b/src/java/org/apache/cassandra/cql3/functions/JavaBasedUDFunction.java index feb17e3..71b9b89 100644 --- a/src/java/org/apache/cassandra/cql3/functions/JavaBasedUDFunction.java +++ b/src/java/org/apache/cassandra/cql3/functions/JavaBasedUDFunction.java @@ -70,7 +70,7 @@ public final class JavaBasedUDFunction extends UDFunction private static final Pattern JAVA_LANG_PREFIX = Pattern.compile("\\bjava\\.lang\\."); - static final Logger logger = LoggerFactory.getLogger(JavaBasedUDFunction.class); + private static final Logger logger = LoggerFactory.getLogger(JavaBasedUDFunction.class); private static final AtomicInteger classSequence = new AtomicInteger(); @@ -257,10 +257,10 @@ public final class JavaBasedUDFunction extends UDFunction EcjCompilationUnit compilationUnit = new EcjCompilationUnit(javaSource, targetClassName); Compiler compiler = new Compiler(compilationUnit, - errorHandlingPolicy, - compilerOptions, - compilationUnit, - problemFactory); + errorHandlingPolicy, + compilerOptions, + compilationUnit, + problemFactory); compiler.compile(new ICompilationUnit[]{ compilationUnit }); if (compilationUnit.problemList != null && !compilationUnit.problemList.isEmpty()) @@ -582,6 +582,7 @@ public final class JavaBasedUDFunction extends UDFunction return findType(result.toString()); } + @SuppressWarnings("resource") private NameEnvironmentAnswer findType(String className) { if (className.equals(this.className)) http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/src/java/org/apache/cassandra/cql3/functions/ScriptBasedUDFunction.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/cql3/functions/ScriptBasedUDFunction.java b/src/java/org/apache/cassandra/cql3/functions/ScriptBasedUDFunction.java index 7e8b149..08d832c 100644 --- a/src/java/org/apache/cassandra/cql3/functions/ScriptBasedUDFunction.java +++ b/src/java/org/apache/cassandra/cql3/functions/ScriptBasedUDFunction.java @@ -73,6 +73,14 @@ final class ScriptBasedUDFunction extends UDFunction "jdk.internal.org.objectweb.asm.commons", "jdk.nashorn.internal.runtime", "jdk.nashorn.internal.runtime.linker", + // Nashorn / Java 11 + "java.lang.ref", + "java.io", + "java.util.function", + "jdk.dynalink.linker", + "jdk.internal.org.objectweb.asm", + "jdk.internal.reflect", + "jdk.nashorn.internal.scripts", // following required by Java Driver "java.math", "java.nio", http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/src/java/org/apache/cassandra/db/Memtable.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/Memtable.java b/src/java/org/apache/cassandra/db/Memtable.java index c6158b5..c162697 100644 --- a/src/java/org/apache/cassandra/db/Memtable.java +++ b/src/java/org/apache/cassandra/db/Memtable.java @@ -77,10 +77,6 @@ public class Memtable implements Comparable<Memtable> case heap_buffers: return new SlabPool(heapLimit, 0, DatabaseDescriptor.getMemtableCleanupThreshold(), new ColumnFamilyStore.FlushLargestColumnFamily()); case offheap_buffers: - if (!FileUtils.isCleanerAvailable) - { - throw new IllegalStateException("Could not free direct byte buffer: offheap_buffers is not a safe memtable_allocation_type without this ability, please adjust your config. This feature is only guaranteed to work on an Oracle JVM. Refusing to start."); - } return new SlabPool(heapLimit, offHeapLimit, DatabaseDescriptor.getMemtableCleanupThreshold(), new ColumnFamilyStore.FlushLargestColumnFamily()); case offheap_objects: return new NativePool(heapLimit, offHeapLimit, DatabaseDescriptor.getMemtableCleanupThreshold(), new ColumnFamilyStore.FlushLargestColumnFamily()); http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/src/java/org/apache/cassandra/db/RangeTombstoneList.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/RangeTombstoneList.java b/src/java/org/apache/cassandra/db/RangeTombstoneList.java index 716213d..401ff7b 100644 --- a/src/java/org/apache/cassandra/db/RangeTombstoneList.java +++ b/src/java/org/apache/cassandra/db/RangeTombstoneList.java @@ -344,6 +344,7 @@ public class RangeTombstoneList implements Iterable<RangeTombstone>, IMeasurable return iterator(false); } + @SuppressWarnings("resource") public Iterator<RangeTombstone> iterator(boolean reversed) { return reversed http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/src/java/org/apache/cassandra/db/ReadCommand.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/ReadCommand.java b/src/java/org/apache/cassandra/db/ReadCommand.java index 7b554a7..82ca054 100644 --- a/src/java/org/apache/cassandra/db/ReadCommand.java +++ b/src/java/org/apache/cassandra/db/ReadCommand.java @@ -214,6 +214,7 @@ public abstract class ReadCommand extends AbstractReadQuery protected abstract int oldestUnrepairedTombstone(); + @SuppressWarnings("resource") public ReadResponse createResponse(UnfilteredPartitionIterator iterator) { // validate that the sequence of RT markers is correct: open is followed by close, deletion times for both http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/src/java/org/apache/cassandra/db/SinglePartitionReadCommand.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/SinglePartitionReadCommand.java b/src/java/org/apache/cassandra/db/SinglePartitionReadCommand.java index 7214106..c091bf1 100644 --- a/src/java/org/apache/cassandra/db/SinglePartitionReadCommand.java +++ b/src/java/org/apache/cassandra/db/SinglePartitionReadCommand.java @@ -388,6 +388,7 @@ public class SinglePartitionReadCommand extends ReadCommand implements SinglePar * If the partition is is not cached, we figure out what filter is "biggest", read * that from disk, then filter the result and either cache that or return it. */ + @SuppressWarnings("resource") private UnfilteredRowIterator getThroughCache(ColumnFamilyStore cfs, ReadExecutionController executionController) { assert !cfs.isIndex(); // CASSANDRA-5732 @@ -710,6 +711,7 @@ public class SinglePartitionReadCommand extends ReadCommand implements SinglePar * Note that we cannot use the Transformations framework because they greedily get the static row, which * would cause all iterators to be initialized and hence all sstables to be accessed. */ + @SuppressWarnings("resource") private UnfilteredRowIterator withSSTablesIterated(List<UnfilteredRowIterator> iterators, TableMetrics metrics, SSTableReadMetricsCollector metricsCollector) http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/src/java/org/apache/cassandra/db/VirtualTableReadQuery.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/VirtualTableReadQuery.java b/src/java/org/apache/cassandra/db/VirtualTableReadQuery.java index f2c9a49..ad22a58 100644 --- a/src/java/org/apache/cassandra/db/VirtualTableReadQuery.java +++ b/src/java/org/apache/cassandra/db/VirtualTableReadQuery.java @@ -55,6 +55,7 @@ public abstract class VirtualTableReadQuery extends AbstractReadQuery } @Override + @SuppressWarnings("resource") public UnfilteredPartitionIterator executeLocally(ReadExecutionController executionController) { UnfilteredPartitionIterator resultIterator = queryVirtualTable(); http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/src/java/org/apache/cassandra/db/commitlog/MemoryMappedSegment.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/commitlog/MemoryMappedSegment.java b/src/java/org/apache/cassandra/db/commitlog/MemoryMappedSegment.java index e79278d..6ecdbd3 100644 --- a/src/java/org/apache/cassandra/db/commitlog/MemoryMappedSegment.java +++ b/src/java/org/apache/cassandra/db/commitlog/MemoryMappedSegment.java @@ -102,8 +102,7 @@ public class MemoryMappedSegment extends CommitLogSegment @Override protected void internalClose() { - if (FileUtils.isCleanerAvailable) - FileUtils.clean(buffer); + FileUtils.clean(buffer); super.internalClose(); } } http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/src/java/org/apache/cassandra/db/compaction/Scrubber.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/compaction/Scrubber.java b/src/java/org/apache/cassandra/db/compaction/Scrubber.java index ce749f4..8a7c53b 100644 --- a/src/java/org/apache/cassandra/db/compaction/Scrubber.java +++ b/src/java/org/apache/cassandra/db/compaction/Scrubber.java @@ -355,6 +355,7 @@ public class Scrubber implements Closeable * Only wrap with {@link FixNegativeLocalDeletionTimeIterator} if {@link #reinsertOverflowedTTLRows} option * is specified */ + @SuppressWarnings("resource") private UnfilteredRowIterator getIterator(DecoratedKey key) { RowMergingSSTableIterator rowMergingIterator = new RowMergingSSTableIterator(SSTableIdentityIterator.create(sstable, dataFile, key)); http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/src/java/org/apache/cassandra/db/filter/RowFilter.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/filter/RowFilter.java b/src/java/org/apache/cassandra/db/filter/RowFilter.java index baafe8b..90ce73b 100644 --- a/src/java/org/apache/cassandra/db/filter/RowFilter.java +++ b/src/java/org/apache/cassandra/db/filter/RowFilter.java @@ -279,6 +279,8 @@ public abstract class RowFilter implements Iterable<RowFilter.Expression> class IsSatisfiedFilter extends Transformation<UnfilteredRowIterator> { DecoratedKey pk; + + @SuppressWarnings("resource") public UnfilteredRowIterator applyToPartition(UnfilteredRowIterator partition) { pk = partition.partitionKey(); http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/src/java/org/apache/cassandra/db/partitions/AtomicBTreePartition.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/partitions/AtomicBTreePartition.java b/src/java/org/apache/cassandra/db/partitions/AtomicBTreePartition.java index ee94963..6adebfd 100644 --- a/src/java/org/apache/cassandra/db/partitions/AtomicBTreePartition.java +++ b/src/java/org/apache/cassandra/db/partitions/AtomicBTreePartition.java @@ -36,7 +36,6 @@ import org.apache.cassandra.utils.ObjectSizes; import org.apache.cassandra.utils.SearchIterator; import org.apache.cassandra.utils.btree.BTree; import org.apache.cassandra.utils.btree.UpdateFunction; -import org.apache.cassandra.utils.concurrent.Locks; import org.apache.cassandra.utils.concurrent.OpOrder; import org.apache.cassandra.utils.memory.HeapAllocator; import org.apache.cassandra.utils.memory.MemtableAllocator; @@ -49,7 +48,7 @@ import org.apache.cassandra.utils.memory.MemtableAllocator; * other thread can see the state where only parts but not all rows have * been added. */ -public class AtomicBTreePartition extends AbstractBTreePartition +public final class AtomicBTreePartition extends AtomicBTreePartitionBase { public static final long EMPTY_SIZE = ObjectSizes.measure(new AtomicBTreePartition(null, DatabaseDescriptor.getPartitioner().decorateKey(ByteBuffer.allocate(1)), @@ -125,7 +124,7 @@ public class AtomicBTreePartition extends AbstractBTreePartition { if (usePessimisticLocking()) { - Locks.monitorEnterUnsafe(this); + acquireLock(); monitorOwned = true; } @@ -179,7 +178,7 @@ public class AtomicBTreePartition extends AbstractBTreePartition } if (shouldLock) { - Locks.monitorEnterUnsafe(this); + acquireLock(); monitorOwned = true; } } @@ -189,7 +188,7 @@ public class AtomicBTreePartition extends AbstractBTreePartition { indexer.commit(); if (monitorOwned) - Locks.monitorExitUnsafe(this); + releaseLock(); } } http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/src/java/org/apache/cassandra/db/partitions/PartitionUpdate.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/partitions/PartitionUpdate.java b/src/java/org/apache/cassandra/db/partitions/PartitionUpdate.java index b793420..99220ca 100644 --- a/src/java/org/apache/cassandra/db/partitions/PartitionUpdate.java +++ b/src/java/org/apache/cassandra/db/partitions/PartitionUpdate.java @@ -178,6 +178,7 @@ public class PartitionUpdate extends AbstractBTreePartition * Warning: this method does not close the provided iterator, it is up to * the caller to close it. */ + @SuppressWarnings("resource") public static PartitionUpdate fromIterator(UnfilteredRowIterator iterator, ColumnFilter filter) { iterator = UnfilteredRowIterators.withOnlyQueriedData(iterator, filter); @@ -197,6 +198,7 @@ public class PartitionUpdate extends AbstractBTreePartition * Warning: this method does not close the provided iterator, it is up to * the caller to close it. */ + @SuppressWarnings("resource") public static PartitionUpdate fromIterator(RowIterator iterator, ColumnFilter filter) { iterator = RowIterators.withOnlyQueriedData(iterator, filter); @@ -218,6 +220,7 @@ public class PartitionUpdate extends AbstractBTreePartition * * @return the deserialized update or {@code null} if {@code bytes == null}. */ + @SuppressWarnings("resource") public static PartitionUpdate fromBytes(ByteBuffer bytes, int version) { if (bytes == null) http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/src/java/org/apache/cassandra/db/partitions/PurgeFunction.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/partitions/PurgeFunction.java b/src/java/org/apache/cassandra/db/partitions/PurgeFunction.java index 19289d4..8dcd359 100644 --- a/src/java/org/apache/cassandra/db/partitions/PurgeFunction.java +++ b/src/java/org/apache/cassandra/db/partitions/PurgeFunction.java @@ -61,6 +61,7 @@ public abstract class PurgeFunction extends Transformation<UnfilteredRowIterator } @Override + @SuppressWarnings("resource") protected UnfilteredRowIterator applyToPartition(UnfilteredRowIterator partition) { onNewPartition(partition.partitionKey()); http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/src/java/org/apache/cassandra/db/partitions/UnfilteredPartitionIterators.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/partitions/UnfilteredPartitionIterators.java b/src/java/org/apache/cassandra/db/partitions/UnfilteredPartitionIterators.java index f3c965a..7b1259c 100644 --- a/src/java/org/apache/cassandra/db/partitions/UnfilteredPartitionIterators.java +++ b/src/java/org/apache/cassandra/db/partitions/UnfilteredPartitionIterators.java @@ -111,6 +111,7 @@ public abstract class UnfilteredPartitionIterators return FilteredPartitions.filter(iterator, nowInSec); } + @SuppressWarnings("resource") public static UnfilteredPartitionIterator merge(final List<? extends UnfilteredPartitionIterator> iterators, final int nowInSec, final MergeListener listener) { assert listener != null; @@ -135,6 +136,7 @@ public abstract class UnfilteredPartitionIterators toMerge.set(idx, current); } + @SuppressWarnings("resource") protected UnfilteredRowIterator getReduced() { UnfilteredRowIterators.MergeListener rowListener = listener.getRowMergeListener(partitionKey, toMerge); @@ -190,6 +192,7 @@ public abstract class UnfilteredPartitionIterators }; } + @SuppressWarnings("resource") public static UnfilteredPartitionIterator mergeLazily(final List<? extends UnfilteredPartitionIterator> iterators, final int nowInSec) { assert !iterators.isEmpty(); http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/src/java/org/apache/cassandra/db/rows/Row.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/rows/Row.java b/src/java/org/apache/cassandra/db/rows/Row.java index f922ffb..f35272a 100644 --- a/src/java/org/apache/cassandra/db/rows/Row.java +++ b/src/java/org/apache/cassandra/db/rows/Row.java @@ -645,6 +645,7 @@ public interface Row extends Unfiltered, Collection<ColumnData> lastRowSet = i; } + @SuppressWarnings("resource") public Row merge(DeletionTime activeDeletion) { // If for this clustering we have only one row version and have no activeDeletion (i.e. nothing to filter out), @@ -756,6 +757,7 @@ public interface Row extends Unfiltered, Collection<ColumnData> return AbstractTypeVersionComparator.INSTANCE.compare(column.type, dataColumn.type) < 0; } + @SuppressWarnings("resource") protected ColumnData getReduced() { if (column.isSimple()) http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/src/java/org/apache/cassandra/db/rows/Rows.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/rows/Rows.java b/src/java/org/apache/cassandra/db/rows/Rows.java index 79c46d0..8c18c82 100644 --- a/src/java/org/apache/cassandra/db/rows/Rows.java +++ b/src/java/org/apache/cassandra/db/rows/Rows.java @@ -131,6 +131,7 @@ public abstract class Rows * @param merged the result of merging {@code inputs}. * @param inputs the inputs whose merge yielded {@code merged}. */ + @SuppressWarnings("resource") public static void diff(RowDiffListener diffListener, Row merged, Row...inputs) { Clustering clustering = merged.clustering(); http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/src/java/org/apache/cassandra/db/transform/BasePartitions.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/transform/BasePartitions.java b/src/java/org/apache/cassandra/db/transform/BasePartitions.java index 2f76452..7b0f56c 100644 --- a/src/java/org/apache/cassandra/db/transform/BasePartitions.java +++ b/src/java/org/apache/cassandra/db/transform/BasePartitions.java @@ -77,6 +77,7 @@ implements BasePartitionIterator<R> return fail; } + @SuppressWarnings("resource") public final boolean hasNext() { BaseRowIterator<?> next = null; http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/src/java/org/apache/cassandra/db/transform/Filter.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/transform/Filter.java b/src/java/org/apache/cassandra/db/transform/Filter.java index 48a1634..0bd3eab 100644 --- a/src/java/org/apache/cassandra/db/transform/Filter.java +++ b/src/java/org/apache/cassandra/db/transform/Filter.java @@ -35,6 +35,7 @@ public final class Filter extends Transformation } @Override + @SuppressWarnings("resource") protected RowIterator applyToPartition(BaseRowIterator iterator) { return iterator instanceof UnfilteredRows http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/src/java/org/apache/cassandra/db/transform/FilteredPartitions.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/transform/FilteredPartitions.java b/src/java/org/apache/cassandra/db/transform/FilteredPartitions.java index 6a19f76..a1b8571 100644 --- a/src/java/org/apache/cassandra/db/transform/FilteredPartitions.java +++ b/src/java/org/apache/cassandra/db/transform/FilteredPartitions.java @@ -50,12 +50,14 @@ public final class FilteredPartitions extends BasePartitions<RowIterator, BasePa /** * Filter any RangeTombstoneMarker from the iterator's iterators, transforming it into a PartitionIterator. */ + @SuppressWarnings("resource") public static FilteredPartitions filter(UnfilteredPartitionIterator iterator, int nowInSecs) { FilteredPartitions filtered = filter(iterator, new Filter(nowInSecs, iterator.metadata().enforceStrictLiveness())); return (FilteredPartitions) Transformation.apply(filtered, new EmptyPartitionsDiscarder()); } + @SuppressWarnings("resource") public static FilteredPartitions filter(UnfilteredPartitionIterator iterator, Filter filter) { return iterator instanceof UnfilteredPartitions http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/src/java/org/apache/cassandra/db/view/ViewBuilderTask.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/view/ViewBuilderTask.java b/src/java/org/apache/cassandra/db/view/ViewBuilderTask.java index 453cb62..db78a54 100644 --- a/src/java/org/apache/cassandra/db/view/ViewBuilderTask.java +++ b/src/java/org/apache/cassandra/db/view/ViewBuilderTask.java @@ -86,6 +86,7 @@ public class ViewBuilderTask extends CompactionInfo.Holder implements Callable<L this.keysBuilt = keysBuilt; } + @SuppressWarnings("resource") private void buildKey(DecoratedKey key) { ReadQuery selectQuery = view.getReadQuery(); http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/src/java/org/apache/cassandra/db/virtual/AbstractVirtualTable.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/virtual/AbstractVirtualTable.java b/src/java/org/apache/cassandra/db/virtual/AbstractVirtualTable.java index a776d01..2998b77 100644 --- a/src/java/org/apache/cassandra/db/virtual/AbstractVirtualTable.java +++ b/src/java/org/apache/cassandra/db/virtual/AbstractVirtualTable.java @@ -72,6 +72,7 @@ public abstract class AbstractVirtualTable implements VirtualTable } @Override + @SuppressWarnings("resource") public final UnfilteredPartitionIterator select(DecoratedKey partitionKey, ClusteringIndexFilter clusteringIndexFilter, ColumnFilter columnFilter) { Partition partition = data(partitionKey).getPartition(partitionKey); http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/src/java/org/apache/cassandra/index/Index.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/index/Index.java b/src/java/org/apache/cassandra/index/Index.java index adfe08c..7019038 100644 --- a/src/java/org/apache/cassandra/index/Index.java +++ b/src/java/org/apache/cassandra/index/Index.java @@ -156,6 +156,7 @@ public interface Index */ public static class CollatedViewIndexBuildingSupport implements IndexBuildingSupport { + @SuppressWarnings("resource") public SecondaryIndexBuilder getIndexBuildTask(ColumnFamilyStore cfs, Set<Index> indexes, Collection<SSTableReader> sstables) { return new CollatedViewIndexBuilder(cfs, indexes, new ReducingKeyIterator(sstables)); http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/src/java/org/apache/cassandra/index/internal/CassandraIndex.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/index/internal/CassandraIndex.java b/src/java/org/apache/cassandra/index/internal/CassandraIndex.java index 76b7543..abe2460 100644 --- a/src/java/org/apache/cassandra/index/internal/CassandraIndex.java +++ b/src/java/org/apache/cassandra/index/internal/CassandraIndex.java @@ -686,6 +686,7 @@ public abstract class CassandraIndex implements Index }; } + @SuppressWarnings("resource") private void buildBlocking() { baseCfs.forceBlockingFlush(); http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/src/java/org/apache/cassandra/index/internal/composites/CompositesSearcher.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/index/internal/composites/CompositesSearcher.java b/src/java/org/apache/cassandra/index/internal/composites/CompositesSearcher.java index 9045b3b..e0f0a8b 100644 --- a/src/java/org/apache/cassandra/index/internal/composites/CompositesSearcher.java +++ b/src/java/org/apache/cassandra/index/internal/composites/CompositesSearcher.java @@ -208,6 +208,7 @@ public class CompositesSearcher extends CassandraIndexSearcher } // We assume all rows in dataIter belong to the same partition. + @SuppressWarnings("resource") private UnfilteredRowIterator filterStaleEntries(UnfilteredRowIterator dataIter, final ByteBuffer indexValue, final List<IndexEntry> entries, http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/src/java/org/apache/cassandra/index/sasi/utils/MappedBuffer.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/index/sasi/utils/MappedBuffer.java b/src/java/org/apache/cassandra/index/sasi/utils/MappedBuffer.java index efabe7b..0899be6 100644 --- a/src/java/org/apache/cassandra/index/sasi/utils/MappedBuffer.java +++ b/src/java/org/apache/cassandra/index/sasi/utils/MappedBuffer.java @@ -217,9 +217,6 @@ public class MappedBuffer implements Closeable public void close() { - if (!FileUtils.isCleanerAvailable) - return; - /* * Try forcing the unmapping of pages using undocumented unsafe sun APIs. * If this fails (non Sun JVM), we'll have to wait for the GC to finalize the mapping. http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/src/java/org/apache/cassandra/io/sstable/format/big/BigTableReader.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/io/sstable/format/big/BigTableReader.java b/src/java/org/apache/cassandra/io/sstable/format/big/BigTableReader.java index 1b6a299..a4787a2 100644 --- a/src/java/org/apache/cassandra/io/sstable/format/big/BigTableReader.java +++ b/src/java/org/apache/cassandra/io/sstable/format/big/BigTableReader.java @@ -69,6 +69,7 @@ public class BigTableReader extends SSTableReader return iterator(null, key, rie, slices, selectedColumns, reversed); } + @SuppressWarnings("resource") public UnfilteredRowIterator iterator(FileDataInput file, DecoratedKey key, RowIndexEntry indexEntry, Slices slices, ColumnFilter selectedColumns, boolean reversed) { if (indexEntry == null) http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/src/java/org/apache/cassandra/io/util/FileUtils.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/io/util/FileUtils.java b/src/java/org/apache/cassandra/io/util/FileUtils.java index a085813..10c12e2 100644 --- a/src/java/org/apache/cassandra/io/util/FileUtils.java +++ b/src/java/org/apache/cassandra/io/util/FileUtils.java @@ -18,6 +18,9 @@ package org.apache.cassandra.io.util; import java.io.*; +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.reflect.Method; import java.nio.ByteBuffer; import java.nio.channels.Channels; import java.nio.channels.FileChannel; @@ -34,13 +37,13 @@ import java.util.HashSet; import java.util.List; import java.util.Optional; import java.util.Set; +import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.AtomicReference; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.cassandra.utils.SyncUtil; -import sun.nio.ch.DirectBuffer; import org.apache.cassandra.concurrent.ScheduledExecutors; import org.apache.cassandra.io.FSError; @@ -49,6 +52,7 @@ import org.apache.cassandra.io.FSReadError; import org.apache.cassandra.io.FSWriteError; import org.apache.cassandra.io.sstable.CorruptSSTableException; import org.apache.cassandra.utils.JVMStabilityInspector; +import org.apache.cassandra.utils.memory.MemoryUtil; import static org.apache.cassandra.utils.Throwables.maybeFail; import static org.apache.cassandra.utils.Throwables.merge; @@ -64,24 +68,31 @@ public final class FileUtils public static final long ONE_TB = 1024 * ONE_GB; private static final DecimalFormat df = new DecimalFormat("#.##"); - public static final boolean isCleanerAvailable; private static final AtomicReference<Optional<FSErrorHandler>> fsErrorHandler = new AtomicReference<>(Optional.empty()); + private static Class clsDirectBuffer; + private static MethodHandle mhDirectBufferCleaner; + private static MethodHandle mhCleanerClean; + static { - boolean canClean = false; try { + clsDirectBuffer = Class.forName("sun.nio.ch.DirectBuffer"); + Method mDirectBufferCleaner = clsDirectBuffer.getMethod("cleaner"); + mhDirectBufferCleaner = MethodHandles.lookup().unreflect(mDirectBufferCleaner); + Method mCleanerClean = mDirectBufferCleaner.getReturnType().getMethod("clean"); + mhCleanerClean = MethodHandles.lookup().unreflect(mCleanerClean); + ByteBuffer buf = ByteBuffer.allocateDirect(1); - ((DirectBuffer) buf).cleaner().clean(); - canClean = true; + clean(buf); } catch (Throwable t) { + logger.error("FATAL: Cannot initialize optimized memory deallocator. Some data, both in-memory and on-disk, may live longer due to garbage collection."); JVMStabilityInspector.inspectThrowable(t); - logger.info("Cannot initialize un-mmaper. (Are you using a non-Oracle JVM?) Compacted data files will not be removed promptly. Consider using an Oracle JVM or using standard disk access mode"); + throw new RuntimeException(t); } - isCleanerAvailable = canClean; } public static void createHardLink(String from, String to) @@ -106,11 +117,44 @@ public final class FileUtils } } + private static final File tempDir = new File(System.getProperty("java.io.tmpdir")); + private static final AtomicLong tempFileNum = new AtomicLong(); + + public static File getTempDir() + { + return tempDir; + } + + /** + * Pretty much like {@link File#createTempFile(String, String, File)}, but with + * the guarantee that the "random" part of the generated file name between + * {@code prefix} and {@code suffix} is a positive, increasing {@code long} value. + */ public static File createTempFile(String prefix, String suffix, File directory) { try { - return File.createTempFile(prefix, suffix, directory); + // Do not use java.io.File.createTempFile(), because some tests rely on the + // behavior that the "random" part in the temp file name is a positive 'long'. + // However, at least since Java 9 the code to generate the "random" part + // uses an _unsigned_ random long generated like this: + // Long.toUnsignedString(new java.util.Random.nextLong()) + + while (true) + { + // The contract of File.createTempFile() says, that it must not return + // the same file name again. We do that here in a very simple way, + // that probably doesn't cover all edge cases. Just rely on system + // wall clock and return strictly increasing values from that. + long num = tempFileNum.getAndIncrement(); + + // We have a positive long here, which is safe to use for example + // for CommitLogTest. + String fileName = prefix + Long.toString(num) + suffix; + File candidate = new File(directory, fileName); + if (candidate.createNewFile()) + return candidate; + } } catch (IOException e) { @@ -120,12 +164,12 @@ public final class FileUtils public static File createTempFile(String prefix, String suffix) { - return createTempFile(prefix, suffix, new File(System.getProperty("java.io.tmpdir"))); + return createTempFile(prefix, suffix, tempDir); } public static File createDeletableTempFile(String prefix, String suffix) { - File f = createTempFile(prefix, suffix, new File(System.getProperty("java.io.tmpdir"))); + File f = createTempFile(prefix, suffix, getTempDir()); f.deleteOnExit(); return f; } @@ -350,13 +394,29 @@ public final class FileUtils public static void clean(ByteBuffer buffer) { - if (buffer == null) + if (buffer == null || !buffer.isDirect()) return; - if (isCleanerAvailable && buffer.isDirect()) + + // TODO Once we can get rid of Java 8, it's simpler to call sun.misc.Unsafe.invokeCleaner(ByteBuffer), + // but need to take care of the attachment handling (i.e. whether 'buf' is a duplicate or slice) - that + // is different in sun.misc.Unsafe.invokeCleaner and this implementation. + + try { - DirectBuffer db = (DirectBuffer) buffer; - if (db.cleaner() != null) - db.cleaner().clean(); + Object cleaner = mhDirectBufferCleaner.bindTo(buffer).invoke(); + if (cleaner != null) + { + // ((DirectBuffer) buf).cleaner().clean(); + mhCleanerClean.bindTo(cleaner).invoke(); + } + } + catch (RuntimeException e) + { + throw e; + } + catch (Throwable e) + { + throw new RuntimeException(e); } } http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/src/java/org/apache/cassandra/io/util/Memory.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/io/util/Memory.java b/src/java/org/apache/cassandra/io/util/Memory.java index 431f73d..0ca6aa2 100644 --- a/src/java/org/apache/cassandra/io/util/Memory.java +++ b/src/java/org/apache/cassandra/io/util/Memory.java @@ -28,7 +28,6 @@ import org.apache.cassandra.utils.FastByteOperations; import org.apache.cassandra.utils.concurrent.Ref; import org.apache.cassandra.utils.memory.MemoryUtil; import sun.misc.Unsafe; -import sun.nio.ch.DirectBuffer; /** * An off-heap region of memory that must be manually free'd when no longer needed. @@ -213,9 +212,9 @@ public class Memory implements AutoCloseable { setBytes(memoryOffset, buffer.array(), buffer.arrayOffset() + buffer.position(), buffer.remaining()); } - else if (buffer instanceof DirectBuffer) + else if (buffer.isDirect()) { - unsafe.copyMemory(((DirectBuffer) buffer).address() + buffer.position(), peer + memoryOffset, buffer.remaining()); + unsafe.copyMemory(MemoryUtil.getAddress(buffer) + buffer.position(), peer + memoryOffset, buffer.remaining()); } else throw new IllegalStateException(); http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/src/java/org/apache/cassandra/io/util/MmappedRegions.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/io/util/MmappedRegions.java b/src/java/org/apache/cassandra/io/util/MmappedRegions.java index 13b476a..0b7dd39 100644 --- a/src/java/org/apache/cassandra/io/util/MmappedRegions.java +++ b/src/java/org/apache/cassandra/io/util/MmappedRegions.java @@ -325,14 +325,6 @@ public class MmappedRegions extends SharedCloseableImpl { accumulate = channel.close(accumulate); - /* - * Try forcing the unmapping of segments using undocumented unsafe sun APIs. - * If this fails (non Sun JVM), we'll have to wait for the GC to finalize the mapping. - * If this works and a thread tries to access any segment, hell will unleash on earth. - */ - if (!FileUtils.isCleanerAvailable) - return accumulate; - return perform(accumulate, channel.filePath(), Throwables.FileOpType.READ, of(buffers) .map((buffer) -> http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/src/java/org/apache/cassandra/security/ThreadAwareSecurityManager.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/security/ThreadAwareSecurityManager.java b/src/java/org/apache/cassandra/security/ThreadAwareSecurityManager.java index c9402f1..6500c8f 100644 --- a/src/java/org/apache/cassandra/security/ThreadAwareSecurityManager.java +++ b/src/java/org/apache/cassandra/security/ThreadAwareSecurityManager.java @@ -18,6 +18,7 @@ package org.apache.cassandra.security; +import java.lang.reflect.ReflectPermission; import java.security.AccessControlException; import java.security.AllPermission; import java.security.CodeSource; @@ -66,6 +67,12 @@ public final class ThreadAwareSecurityManager extends SecurityManager private static final RuntimePermission MODIFY_THREAD_PERMISSION = new RuntimePermission("modifyThread"); private static final RuntimePermission MODIFY_THREADGROUP_PERMISSION = new RuntimePermission("modifyThreadGroup"); + // Nashorn / Java 11 + private static final RuntimePermission NASHORN_GLOBAL_PERMISSION = new RuntimePermission("nashorn.createGlobal"); + private static final ReflectPermission SUPPRESS_ACCESS_CHECKS_PERMISSION = new ReflectPermission("suppressAccessChecks"); + private static final RuntimePermission DYNALINK_LOOKUP_PERMISSION = new RuntimePermission("dynalink.getLookup"); + private static final RuntimePermission GET_CLASSLOADER_PERMISSION = new RuntimePermission("getClassLoader"); + private static volatile boolean installed; public static void install() @@ -189,6 +196,16 @@ public final class ThreadAwareSecurityManager extends SecurityManager if (CHECK_MEMBER_ACCESS_PERMISSION.equals(perm)) return; + // Nashorn / Java 11 + if (NASHORN_GLOBAL_PERMISSION.equals(perm)) + return; + if (SUPPRESS_ACCESS_CHECKS_PERMISSION.equals(perm)) + return; + if (DYNALINK_LOOKUP_PERMISSION.equals(perm)) + return; + if (GET_CLASSLOADER_PERMISSION.equals(perm)) + return; + super.checkPermission(perm); } @@ -208,7 +225,5 @@ public final class ThreadAwareSecurityManager extends SecurityManager RuntimePermission perm = new RuntimePermission("accessClassInPackage." + pkg); throw new AccessControlException("access denied: " + perm, perm); } - - super.checkPackageAccess(pkg); } } http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/src/java/org/apache/cassandra/service/reads/DataResolver.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/service/reads/DataResolver.java b/src/java/org/apache/cassandra/service/reads/DataResolver.java index ebf6a6f..76e9633 100644 --- a/src/java/org/apache/cassandra/service/reads/DataResolver.java +++ b/src/java/org/apache/cassandra/service/reads/DataResolver.java @@ -58,6 +58,7 @@ public class DataResolver extends ResponseResolver return !responses.isEmpty(); } + @SuppressWarnings("resource") public PartitionIterator resolve() { // We could get more responses while this method runs, which is ok (we're happy to ignore any response not here http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/src/java/org/apache/cassandra/service/reads/ShortReadProtection.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/service/reads/ShortReadProtection.java b/src/java/org/apache/cassandra/service/reads/ShortReadProtection.java index 93c02e0..f603e9b 100644 --- a/src/java/org/apache/cassandra/service/reads/ShortReadProtection.java +++ b/src/java/org/apache/cassandra/service/reads/ShortReadProtection.java @@ -39,6 +39,7 @@ import org.apache.cassandra.locator.InetAddressAndPort; */ public class ShortReadProtection { + @SuppressWarnings("resource") public static UnfilteredPartitionIterator extend(InetAddressAndPort source, UnfilteredPartitionIterator partitions, ReadCommand command, DataLimits.Counter mergedResultCounter, long queryStartNanoTime, boolean enforceStrictLiveness) http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/src/java/org/apache/cassandra/tools/NodeTool.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/tools/NodeTool.java b/src/java/org/apache/cassandra/tools/NodeTool.java index b1d01d5..0c53bef 100644 --- a/src/java/org/apache/cassandra/tools/NodeTool.java +++ b/src/java/org/apache/cassandra/tools/NodeTool.java @@ -44,6 +44,11 @@ import static org.apache.commons.lang3.StringUtils.*; public class NodeTool { + static + { + FBUtilities.preventIllegalAccessWarnings(); + } + private static final String HISTORYFILE = "nodetool.history"; public static void main(String... args) http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/src/java/org/apache/cassandra/tools/SSTableExport.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/tools/SSTableExport.java b/src/java/org/apache/cassandra/tools/SSTableExport.java index 4079ee7..394f4b6 100644 --- a/src/java/org/apache/cassandra/tools/SSTableExport.java +++ b/src/java/org/apache/cassandra/tools/SSTableExport.java @@ -56,6 +56,10 @@ import org.apache.cassandra.utils.FBUtilities; */ public class SSTableExport { + static + { + FBUtilities.preventIllegalAccessWarnings(); + } private static final String KEY_OPTION = "k"; private static final String DEBUG_OUTPUT_OPTION = "d"; @@ -102,6 +106,7 @@ public class SSTableExport * @throws ConfigurationException * on configuration failure (wrong params given) */ + @SuppressWarnings("resource") public static void main(String[] args) throws ConfigurationException { CommandLineParser parser = new PosixParser(); http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/src/java/org/apache/cassandra/triggers/CustomClassLoader.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/triggers/CustomClassLoader.java b/src/java/org/apache/cassandra/triggers/CustomClassLoader.java index 32a987f..cb0918c 100644 --- a/src/java/org/apache/cassandra/triggers/CustomClassLoader.java +++ b/src/java/org/apache/cassandra/triggers/CustomClassLoader.java @@ -35,6 +35,8 @@ import org.slf4j.LoggerFactory; import com.google.common.io.Files; +import org.apache.cassandra.io.util.FileUtils; + /** * Custom class loader will load the classes from the class path, CCL will load * the classes from the the URL first, if it cannot find the required class it @@ -76,7 +78,7 @@ public class CustomClassLoader extends URLClassLoader }; for (File inputJar : dir.listFiles(filter)) { - File lib = new File(System.getProperty("java.io.tmpdir"), "lib"); + File lib = new File(FileUtils.getTempDir(), "lib"); if (!lib.exists()) { lib.mkdir(); @@ -84,7 +86,7 @@ public class CustomClassLoader extends URLClassLoader } try { - File out = File.createTempFile("cassandra-", ".jar", lib); + File out = FileUtils.createTempFile("cassandra-", ".jar", lib); out.deleteOnExit(); logger.info("Loading new jar {}", inputJar.getAbsolutePath()); Files.copy(inputJar, out); http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/src/java/org/apache/cassandra/utils/CoalescingStrategies.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/utils/CoalescingStrategies.java b/src/java/org/apache/cassandra/utils/CoalescingStrategies.java index 6ff91e3..2f9e5bb 100644 --- a/src/java/org/apache/cassandra/utils/CoalescingStrategies.java +++ b/src/java/org/apache/cassandra/utils/CoalescingStrategies.java @@ -144,7 +144,7 @@ public class CoalescingStrategies ScheduledExecutors.scheduledFastTasks.scheduleWithFixedDelay(() -> shouldLogAverage = true, 5, 5, TimeUnit.SECONDS); try { - File outFile = File.createTempFile("coalescing_" + this.displayName + "_", ".log", new File(DEBUG_COALESCING_PATH)); + File outFile = FileUtils.createTempFile("coalescing_" + this.displayName + "_", ".log", new File(DEBUG_COALESCING_PATH)); rasTemp = new RandomAccessFile(outFile, "rw"); logBufferTemp = ras.getChannel().map(MapMode.READ_WRITE, 0, Integer.MAX_VALUE); logBufferTemp.putLong(0); http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/src/java/org/apache/cassandra/utils/FBUtilities.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/utils/FBUtilities.java b/src/java/org/apache/cassandra/utils/FBUtilities.java index 4da2245..4e7ee8e 100644 --- a/src/java/org/apache/cassandra/utils/FBUtilities.java +++ b/src/java/org/apache/cassandra/utils/FBUtilities.java @@ -952,4 +952,28 @@ public class FBUtilities broadcastInetAddressAndPort = null; broadcastNativeAddress = null; } + + /** + * Hack to prevent the ugly "illegal access" warnings in Java 11+ like the following. + */ + public static void preventIllegalAccessWarnings() + { + // Example "annoying" trace: + // WARNING: An illegal reflective access operation has occurred + // WARNING: Illegal reflective access by io.netty.util.internal.ReflectionUtil (file:...) + // WARNING: Please consider reporting this to the maintainers of io.netty.util.internal.ReflectionUtil + // WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations + // WARNING: All illegal access operations will be denied in a future release + try + { + Class<?> c = Class.forName("jdk.internal.module.IllegalAccessLogger"); + Field f = c.getDeclaredField("logger"); + f.setAccessible(true); + f.set(null, null); + } + catch (Exception e) + { + // ignore + } + } } http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/src/java/org/apache/cassandra/utils/JMXServerUtils.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/utils/JMXServerUtils.java b/src/java/org/apache/cassandra/utils/JMXServerUtils.java index f913baf..c8f4464 100644 --- a/src/java/org/apache/cassandra/utils/JMXServerUtils.java +++ b/src/java/org/apache/cassandra/utils/JMXServerUtils.java @@ -19,7 +19,10 @@ package org.apache.cassandra.utils; import java.io.IOException; +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; import java.lang.management.ManagementFactory; +import java.lang.reflect.Constructor; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Proxy; import java.net.Inet6Address; @@ -44,7 +47,6 @@ import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.sun.jmx.remote.security.JMXPluggableAuthenticator; import org.apache.cassandra.auth.jmx.AuthenticationProxy; public class JMXServerUtils @@ -261,6 +263,21 @@ public class JMXServerUtils private static class JMXPluggableAuthenticatorWrapper implements JMXAuthenticator { + private static final MethodHandle ctorHandle; + static + { + try + { + Class c = Class.forName("com.sun.jmx.remote.security.JMXPluggableAuthenticator"); + Constructor ctor = c.getDeclaredConstructor(Map.class); + ctorHandle = MethodHandles.lookup().unreflectConstructor(ctor); + } + catch (Exception e) + { + throw new RuntimeException(e); + } + } + final Map<?, ?> env; private JMXPluggableAuthenticatorWrapper(Map<?, ?> env) { @@ -269,8 +286,15 @@ public class JMXServerUtils public Subject authenticate(Object credentials) { - JMXPluggableAuthenticator authenticator = new JMXPluggableAuthenticator(env); - return authenticator.authenticate(credentials); + try + { + JMXAuthenticator authenticator = (JMXAuthenticator) ctorHandle.invoke(env); + return authenticator.authenticate(credentials); + } + catch (Throwable e) + { + throw new RuntimeException(e); + } } } } http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/src/java/org/apache/cassandra/utils/MergeIterator.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/utils/MergeIterator.java b/src/java/org/apache/cassandra/utils/MergeIterator.java index c9e445b..1f196fb 100644 --- a/src/java/org/apache/cassandra/utils/MergeIterator.java +++ b/src/java/org/apache/cassandra/utils/MergeIterator.java @@ -31,6 +31,7 @@ public abstract class MergeIterator<In,Out> extends AbstractIterator<Out> implem this.reducer = reducer; } + @SuppressWarnings("resource") public static <In, Out> MergeIterator<In, Out> get(List<? extends Iterator<In>> sources, Comparator<? super In> comparator, Reducer<In, Out> reducer) http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/src/java/org/apache/cassandra/utils/NativeLibrary.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/utils/NativeLibrary.java b/src/java/org/apache/cassandra/utils/NativeLibrary.java index 7d54791..c02c612 100644 --- a/src/java/org/apache/cassandra/utils/NativeLibrary.java +++ b/src/java/org/apache/cassandra/utils/NativeLibrary.java @@ -29,7 +29,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.sun.jna.LastErrorException; -import sun.nio.ch.FileChannelImpl; import static org.apache.cassandra.utils.NativeLibrary.OSType.LINUX; import static org.apache.cassandra.utils.NativeLibrary.OSType.MAC; @@ -78,7 +77,14 @@ public final class NativeLibrary static { FILE_DESCRIPTOR_FD_FIELD = FBUtilities.getProtectedField(FileDescriptor.class, "fd"); - FILE_CHANNEL_FD_FIELD = FBUtilities.getProtectedField(FileChannelImpl.class, "fd"); + try + { + FILE_CHANNEL_FD_FIELD = FBUtilities.getProtectedField(Class.forName("sun.nio.ch.FileChannelImpl"), "fd"); + } + catch (ClassNotFoundException e) + { + throw new RuntimeException(e); + } // detect the OS type the JVM is running on and then set the CLibraryWrapper // instance to a compatable implementation of CLibraryWrapper for that OS type http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/src/java/org/apache/cassandra/utils/ObjectSizes.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/utils/ObjectSizes.java b/src/java/org/apache/cassandra/utils/ObjectSizes.java index 10dad05..fa02ba7 100644 --- a/src/java/org/apache/cassandra/utils/ObjectSizes.java +++ b/src/java/org/apache/cassandra/utils/ObjectSizes.java @@ -138,7 +138,7 @@ public class ObjectSizes * @param str String to calculate memory size of * @return Total in-memory size of the String */ - //@TODO hard coding this to 2 isn't necessarily correct in Java 9 + //@TODO hard coding this to 2 isn't necessarily correct in Java 11 public static long sizeOf(String str) { return STRING_EMPTY_SIZE + sizeOfArray(str.length(), 2); http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/src/java/org/apache/cassandra/utils/Throwables.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/utils/Throwables.java b/src/java/org/apache/cassandra/utils/Throwables.java index 5ad9686..ec4e5c8 100644 --- a/src/java/org/apache/cassandra/utils/Throwables.java +++ b/src/java/org/apache/cassandra/utils/Throwables.java @@ -77,7 +77,7 @@ public final class Throwables @SafeVarargs public static <E extends Exception> void perform(DiscreteAction<? extends E> ... actions) throws E { - perform(Stream.of(actions)); + Throwables.<E>perform(Stream.of(actions)); } public static <E extends Exception> void perform(Stream<? extends DiscreteAction<? extends E>> stream, DiscreteAction<? extends E> ... extra) throws E http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/src/java/org/apache/cassandra/utils/concurrent/Locks.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/utils/concurrent/Locks.java b/src/java/org/apache/cassandra/utils/concurrent/Locks.java deleted file mode 100644 index dcbfe63..0000000 --- a/src/java/org/apache/cassandra/utils/concurrent/Locks.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.cassandra.utils.concurrent; - -import sun.misc.Unsafe; - -import java.lang.reflect.Field; - -public class Locks -{ - static final Unsafe unsafe; - - static - { - try - { - Field field = sun.misc.Unsafe.class.getDeclaredField("theUnsafe"); - field.setAccessible(true); - unsafe = (sun.misc.Unsafe) field.get(null); - } - catch (Exception e) - { - throw new AssertionError(e); - } - } - - // enters the object's monitor IF UNSAFE IS PRESENT. If it isn't, this is a no-op. - public static void monitorEnterUnsafe(Object object) - { - if (unsafe != null) - unsafe.monitorEnter(object); - } - - public static void monitorExitUnsafe(Object object) - { - if (unsafe != null) - unsafe.monitorExit(object); - } -} http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/src/java/org/apache/cassandra/utils/memory/MemoryUtil.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/utils/memory/MemoryUtil.java b/src/java/org/apache/cassandra/utils/memory/MemoryUtil.java index 6c2e6fd..998cbbf 100644 --- a/src/java/org/apache/cassandra/utils/memory/MemoryUtil.java +++ b/src/java/org/apache/cassandra/utils/memory/MemoryUtil.java @@ -27,7 +27,6 @@ import com.sun.jna.Native; import org.apache.cassandra.utils.Architecture; import sun.misc.Unsafe; -import sun.nio.ch.DirectBuffer; public abstract class MemoryUtil { @@ -337,7 +336,7 @@ public abstract class MemoryUtil return; if (buffer.isDirect()) - setBytes(((DirectBuffer)buffer).address() + start, address, count); + setBytes(getAddress(buffer) + start, address, count); else setBytes(address, buffer.array(), buffer.arrayOffset() + start, count); } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org