diff --git a/databases/Makefile b/databases/Makefile index 072b892765c7..6dfd8a5fbad4 100644 --- a/databases/Makefile +++ b/databases/Makefile @@ -32,6 +32,7 @@ SUBDIR += c3p0 SUBDIR += cassandra-cpp-driver SUBDIR += cassandra3 + SUBDIR += cassandra4 SUBDIR += casstcl SUBDIR += cayley SUBDIR += cdb diff --git a/databases/cassandra3/Makefile b/databases/cassandra3/Makefile index 5edb66d7c762..f3b0fc91b98a 100644 --- a/databases/cassandra3/Makefile +++ b/databases/cassandra3/Makefile @@ -26,6 +26,8 @@ USE_JAVA= yes USE_ANT= yes USE_RC_SUBR= cassandra +CONFLICTS= cassandra4 + JAVA_VERSION= 1.8 JAVA_VENDOR= openjdk diff --git a/databases/cassandra4/Makefile b/databases/cassandra4/Makefile new file mode 100644 index 000000000000..29345d305ef4 --- /dev/null +++ b/databases/cassandra4/Makefile @@ -0,0 +1,160 @@ +# $FreeBSD$ + +PORTNAME= cassandra +DISTVERSION= 4.0-alpha4 +CATEGORIES= databases java +MASTER_SITES= APACHE/cassandra/${DISTVERSION}:apache \ + https://repo1.maven.org/maven2/com/github/luben/zstd-jni/1.4.4-9/:maven \ + LOCAL/pi:repo +PKGNAMESUFFIX= 4 +DISTNAME= apache-${PORTNAME}-${DISTVERSION}-src +DISTFILES= ${DISTNAME}.tar.gz:apache \ + zstd-jni-1.4.4-9-freebsd_amd64.jar:maven \ + apache-${PORTNAME}-${DISTVERSION}-repo.tar.gz:repo +EXTRACT_ONLY= ${DISTNAME}.tar.gz \ + apache-${PORTNAME}-${DISTVERSION}-repo.tar.gz + +MAINTAINER= language.devel@gmail.com +COMMENT= Highly scalable distributed database + +LICENSE= APACHE20 +LICENSE_FILE= ${WRKSRC}/LICENSE.txt + +RUN_DEPENDS= snappyjava>=0:archivers/snappy-java \ + netty>0:java/netty + +USES= python:3.7 +USE_JAVA= yes +USE_ANT= yes +USE_RC_SUBR= cassandra +TEST_TARGET= test + +CONFLICTS= cassandra3 + +JAVA_VERSION= 8 11 +JAVA_VENDOR= openjdk + +REINPLACE_ARGS= -i '' +SUB_LIST= JAVA_HOME=${JAVA_HOME} + +USERS= cassandra +GROUPS= cassandra + +DATADIR= ${JAVASHAREDIR}/${PORTNAME} +BUILD_DIST_DIR= ${WRKSRC}/build/dist +REPO_DIR= ${WRKDIR}/repository + +CONFIG_FILES= cassandra-env.sh \ + cassandra-jaas.config \ + cassandra-rackdc.properties \ + cassandra-topology.properties \ + cassandra.yaml \ + commitlog_archiving.properties \ + hotspot_compiler \ + logback-tools.xml \ + logback.xml \ + jvm8-clients.options \ + jvm8-server.options \ + jvm11-clients.options \ + jvm11-server.options \ + jvm-clients.options \ + jvm-server.options + +SCRIPT_FILES= cassandra \ + nodetool \ + sstableloader \ + sstablescrub \ + sstableupgrade \ + sstableutil \ + sstableverify + +PLIST_SUB= DISTVERSION=${DISTVERSION} + +OPTIONS_DEFINE= SIGAR DOCS +OPTIONS_DEFAULT= SIGAR +OPTIONS_SUB= yes + +SIGAR_DESC= Use SIGAR to collect system information +SIGAR_RUN_DEPENDS= java-sigar>=1.6.4:java/sigar + +DOCS_BUILD_DEPENDS= ${PYTHON_PKGNAMEPREFIX}sphinx>0:textproc/py-sphinx@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}sphinx_rtd_theme>0:textproc/py-sphinx_rtd_theme@${PY_FLAVOR} + +PORTDOCS= * + +do-build: + @${DO_NADA} # Do nothing: Prevent USE_ANT from running a default build target. + +do-build-DOCS-on: + cd ${WRKSRC} && ${SETENV} CASSANDRA_LOG_DIR=${WRKDIR}/gen-doc-log ${ANT} -Dmaven.repo.local=${REPO_DIR} -Dlocalm2=${REPO_DIR} ${USEJDK11} -Dpycmd=${PYTHON_CMD} -Dpyver=${PYTHON_VER} freebsd-stage-doc + +do-build-DOCS-off: + cd ${WRKSRC} && ${ANT} -Dmaven.repo.local=${REPO_DIR} -Dlocalm2=${REPO_DIR} ${USEJDK11} freebsd-stage + +post-build: +.for f in ${SCRIPT_FILES} + @${REINPLACE_CMD} -e 's|/usr/share/cassandra|${DATADIR}/bin|' ${BUILD_DIST_DIR}/bin/${f} +.endfor + @${REINPLACE_CMD} -e 's|\`dirname "\$$\0"\`/..|${DATADIR}|' ${BUILD_DIST_DIR}/bin/cassandra.in.sh + @${REINPLACE_CMD} -e 's|\$$\CASSANDRA_HOME/lib/sigar-bin|${JAVAJARDIR}|' ${BUILD_DIST_DIR}/bin/cassandra.in.sh + @${REINPLACE_CMD} -e 's|\$$\CASSANDRA_HOME/lib/sigar-bin|${JAVAJARDIR}|' ${BUILD_DIST_DIR}/conf/cassandra-env.sh + @${REINPLACE_CMD} -e 's|\$$\CASSANDRA_HOME/conf|${ETCDIR}|' ${BUILD_DIST_DIR}/bin/cassandra.in.sh +.for f in ${CONFIG_FILES} + @${MV} ${BUILD_DIST_DIR}/conf/${f} ${BUILD_DIST_DIR}/conf/${f}.sample +.endfor + @${RM} ${BUILD_DIST_DIR}/lib/licenses/sigar* + @${RMDIR} ${BUILD_DIST_DIR}/lib/sigar-bin + @${RM} ${BUILD_DIST_DIR}/lib/zstd-jni* + @${RM} ${BUILD_DIST_DIR}/lib/licenses/zstd-jni* + +do-install: + ${MKDIR} ${STAGEDIR}${DATADIR} +.for f in CHANGES LICENSE NEWS NOTICE + cd ${BUILD_DIST_DIR} && ${INSTALL_DATA} ${f}.txt ${STAGEDIR}${DATADIR}/ +.endfor +.for d in lib pylib tools + cd ${BUILD_DIST_DIR} && ${COPYTREE_SHARE} ${d} ${STAGEDIR}${DATADIR}/ "! -path '*/bin/*'" +.endfor + ${MKDIR} ${STAGEDIR}${ETCDIR} + cd ${BUILD_DIST_DIR}/conf && ${COPYTREE_SHARE} . ${STAGEDIR}${ETCDIR}/ + cd ${BUILD_DIST_DIR} && ${COPYTREE_BIN} bin ${STAGEDIR}${DATADIR} + cd ${BUILD_DIST_DIR} && ${INSTALL_DATA} bin/cassandra.in.sh ${STAGEDIR}${DATADIR}/bin/ + cd ${BUILD_DIST_DIR} && ${COPYTREE_BIN} tools/bin ${STAGEDIR}${DATADIR}/ + cd ${BUILD_DIST_DIR} && ${INSTALL_DATA} tools/bin/cassandra.in.sh ${STAGEDIR}${DATADIR}/tools/bin/ +.for f in ${SCRIPT_FILES} + ${RLN} ${STAGEDIR}${DATADIR}/bin/${f} ${STAGEDIR}${PREFIX}/bin/${f} +.endfor + ${RLN} ${STAGEDIR}${DATADIR}/bin/cqlsh ${STAGEDIR}${PREFIX}/bin/cqlsh + ${LN} -s ${JAVAJARDIR}/snappy-java.jar ${STAGEDIR}${DATADIR}/lib/snappy-java.jar + +do-test: + @cd ${WRKSRC} && ${ANT} -Dmaven.repo.local=${REPO_DIR} -Dlocalm2=${REPO_DIR} ${USEJDK11} -Dstagedlib=${STAGEDIR}${DATADIR}/lib test + +.include + +.if ${JAVA_PORT_VERSION} == 11 +USEJDK11= -Duse.jdk11=true +.endif + +.if ${ARCH} == amd64 +PLIST_SUB+= AMD64ONLY="" +.else +PLIST_SUB+= AMD64ONLY="@comment " +.endif + +post-install: + ${LN} -s ${JAVAJARDIR}/netty.jar ${STAGEDIR}${DATADIR}/lib/netty.jar +.if ${ARCH} == amd64 + ${CP} ${DISTDIR}/zstd-jni-1.4.4-9-freebsd_amd64.jar ${STAGEDIR}${DATADIR}/lib/ +.endif + +post-install-DOCS-on: + ${MKDIR} ${STAGEDIR}${DOCSDIR} +.for d in doc javadoc + cd ${BUILD_DIST_DIR} && ${COPYTREE_SHARE} ${d} ${STAGEDIR}${DOCSDIR}/ +.endfor + +post-install-SIGAR-on: + ${LN} -s ${JAVAJARDIR}/sigar.jar ${STAGEDIR}${DATADIR}/lib/sigar.jar + +.include diff --git a/databases/cassandra4/distinfo b/databases/cassandra4/distinfo new file mode 100644 index 000000000000..511df62ee2fb --- /dev/null +++ b/databases/cassandra4/distinfo @@ -0,0 +1,7 @@ +TIMESTAMP = 1587819246 +SHA256 (apache-cassandra-4.0-alpha4-src.tar.gz) = 8f62238ac1f19fc2ab91c1f88981a46ded3b5e30ed7421266682cf81942b5856 +SIZE (apache-cassandra-4.0-alpha4-src.tar.gz) = 45311406 +SHA256 (zstd-jni-1.4.4-9-freebsd_amd64.jar) = 97d20ae4ad56aad81d0f11cc4da21f6036bedc26f9908e4c2cc5998aa2dfcf4d +SIZE (zstd-jni-1.4.4-9-freebsd_amd64.jar) = 521330 +SHA256 (apache-cassandra-4.0-alpha4-repo.tar.gz) = 6becab355e49fcddcd8b35e61febf39105d7a42574488ea91775bbd0b34d750b +SIZE (apache-cassandra-4.0-alpha4-repo.tar.gz) = 74348796 diff --git a/databases/cassandra4/files/cassandra.in b/databases/cassandra4/files/cassandra.in new file mode 100644 index 000000000000..7e174e8a2d82 --- /dev/null +++ b/databases/cassandra4/files/cassandra.in @@ -0,0 +1,42 @@ +#!/bin/sh +# +# $FreeBSD$ +# +# PROVIDE: cassandra +# REQUIRE: LOGIN +# KEYWORD: shutdown +# +# Be sure to configure full settings in %%ETCDIR%% prior to enabling daemon. +# +# Add the following lines to /etc/rc.conf or /etc/.conf.local to +# enable the Cassandra daemon: +# cassandra_enable: Set to "YES" to enable the daemon. +# cassandra_user: The user under which to run the daemon. +# Defaults to "cassandra". + +. /etc/rc.subr + +name=cassandra +rcvar=cassandra_enable +desc="Cassandra daemon" + +load_rc_config $name + +: ${cassandra_enable:=NO} +: ${cassandra_user:=cassandra} + +command=%%PREFIX%%/bin/cassandra +command_args="-p /var/run/cassandra/cassandra.pid >/dev/null 2>/dev/null" +start_precmd="${name}_prestart" + +procname=%%JAVA_HOME%%/bin/java +pidfile=/var/run/cassandra/cassandra.pid + +cassandra_prestart() +{ + export JAVA_HOME=%%JAVA_HOME%% + install -d -o ${cassandra_user} /var/run/cassandra + install -d -o ${cassandra_user} /var/log/cassandra +} + +run_rc_command "$1" diff --git a/databases/cassandra4/files/patch-bin_cassandra b/databases/cassandra4/files/patch-bin_cassandra new file mode 100644 index 000000000000..40ea8dcd46d8 --- /dev/null +++ b/databases/cassandra4/files/patch-bin_cassandra @@ -0,0 +1,20 @@ +--- bin/cassandra.orig 2020-04-10 22:29:25 UTC ++++ bin/cassandra +@@ -31,7 +31,7 @@ + # JVM_OPTS -- Additional arguments to the JVM for heap size, etc + # JVM_ON_OUT_OF_MEMORY_ERROR_OPT -- The OnOutOfMemoryError JVM option if specified + # CASSANDRA_CONF -- Directory containing Cassandra configuration files. +-# CASSANDRA_LOG_DIR -- Directory containing logs(default: $CASSANDRA_HOME/logs). ++# CASSANDRA_LOG_DIR -- Directory containing logs(default: /var/log/cassandra). + # + # As a convenience, a fragment of shell is sourced in order to set one or + # more of these variables. This so-called `include' can be placed in a +@@ -116,7 +116,7 @@ if [ -f "$CASSANDRA_CONF/cassandra-env.sh" ]; then + fi + + if [ -z "$CASSANDRA_LOG_DIR" ]; then +- CASSANDRA_LOG_DIR=$CASSANDRA_HOME/logs ++ CASSANDRA_LOG_DIR=/var/log/cassandra + fi + + # Special-case path variables. diff --git a/databases/cassandra4/files/patch-build.xml b/databases/cassandra4/files/patch-build.xml new file mode 100644 index 000000000000..27dcfdd59da6 --- /dev/null +++ b/databases/cassandra4/files/patch-build.xml @@ -0,0 +1,222 @@ +--- build.xml.orig 2020-04-10 22:29:25 UTC ++++ build.xml +@@ -23,6 +23,7 @@ + + + ++ + + + +@@ -75,14 +76,14 @@ + + + +- ++ + + + + + +- ++ + + +@@ -241,7 +242,7 @@ + + + +- ++ + + + +@@ -262,6 +263,7 @@ + bottom="Copyright &copy; 2009-2020 The Apache Software Foundation" + useexternalfile="yes" encoding="UTF-8" + maxmemory="256m"> ++ + + + +@@ -379,8 +381,7 @@ + + + +- +- ++ + + + +@@ -393,6 +394,8 @@ + + + ++ ++ + + + +@@ -435,10 +438,6 @@ + description="Initialize Maven ANT Tasks"> + + +- +- +- +- + + + +@@ -842,16 +841,14 @@ + filesetId="build-dependency-jars" + cacheDependencyRefs="true" + dependencyRefsBuildFile="${build.dir}/build-dependencies.xml"> +- +- ++ + + + +- +- ++ + + + +@@ -864,7 +861,7 @@ + + +- ++ + + + +@@ -893,8 +890,7 @@ + sourcesFilesetId="test-dependency-sources" + cacheDependencyRefs="true" + dependencyRefsBuildFile="${build.dir}/test-dependencies.xml"> +- +- ++ + + + +@@ -1217,6 +1213,86 @@ + + + ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + +@@ -1923,8 +1999,8 @@ + + + +- +- ++ ++ + + + +@@ -1944,6 +2020,11 @@ + + + ++ ++ ++ ++ ++ + + + diff --git a/databases/cassandra4/files/patch-conf_cassandra-env.sh b/databases/cassandra4/files/patch-conf_cassandra-env.sh new file mode 100644 index 000000000000..729beb6c99c6 --- /dev/null +++ b/databases/cassandra4/files/patch-conf_cassandra-env.sh @@ -0,0 +1,11 @@ +--- conf/cassandra-env.sh.orig 2020-01-30 17:34:31 UTC ++++ conf/cassandra-env.sh +@@ -88,7 +88,7 @@ calculate_heap_sizes() + + # Sets the path where logback and GC logs are written. + if [ "x$CASSANDRA_LOG_DIR" = "x" ] ; then +- CASSANDRA_LOG_DIR="$CASSANDRA_HOME/logs" ++ CASSANDRA_LOG_DIR="/var/log/cassandra" + fi + + #GC log path has to be defined here because it needs to access CASSANDRA_HOME diff --git a/databases/cassandra4/files/patch-conf_cassandra.yaml b/databases/cassandra4/files/patch-conf_cassandra.yaml new file mode 100644 index 000000000000..38a298b7ecdc --- /dev/null +++ b/databases/cassandra4/files/patch-conf_cassandra.yaml @@ -0,0 +1,68 @@ +--- conf/cassandra.yaml.orig 2020-01-30 17:34:31 UTC ++++ conf/cassandra.yaml +@@ -76,7 +76,7 @@ max_hints_delivery_threads: 2 + + # Directory where Cassandra should store hints. + # If not set, the default directory is $CASSANDRA_HOME/data/hints. +-# hints_directory: /var/lib/cassandra/hints ++hints_directory: /var/db/cassandra/hints + + # How often hints should be flushed from the internal buffers to disk. + # Will *not* trigger fsync. +@@ -203,13 +203,13 @@ partitioner: org.apache.cassandra.dht.Murmur3Partition + # directories are specified, Cassandra will spread data evenly across + # them by partitioning the token ranges. + # If not set, the default directory is $CASSANDRA_HOME/data/data. +-# data_file_directories: +-# - /var/lib/cassandra/data ++data_file_directories: ++ - /var/db/cassandra/data + + # commit log. when running on magnetic HDD, this should be a + # separate spindle than the data directories. + # If not set, the default directory is $CASSANDRA_HOME/data/commitlog. +-# commitlog_directory: /var/lib/cassandra/commitlog ++commitlog_directory: /var/db/cassandra/commitlog + + # Enable / disable CDC functionality on a per-node basis. This modifies the logic used + # for write path allocation rejection (standard: never reject. cdc: reject Mutation +@@ -220,7 +220,7 @@ cdc_enabled: false + # segment contains mutations for a CDC-enabled table. This should be placed on a + # separate spindle than the data directories. If not set, the default directory is + # $CASSANDRA_HOME/data/cdc_raw. +-# cdc_raw_directory: /var/lib/cassandra/cdc_raw ++cdc_raw_directory: /var/db/cassandra/cdc_raw + + # Policy for data disk failures: + # +@@ -312,20 +312,12 @@ key_cache_save_period: 14400 + + # Row cache implementation class name. Available implementations: + # +-# org.apache.cassandra.cache.OHCProvider +-# Fully off-heap row cache implementation (default). +-# + # org.apache.cassandra.cache.SerializingCacheProvider + # This is the row cache implementation availabile + # in previous releases of Cassandra. +-# row_cache_class_name: org.apache.cassandra.cache.OHCProvider ++# row_cache_class_name: org.apache.cassandra.cache.SerializingCacheProvider + + # Maximum size of the row cache in memory. +-# Please note that OHC cache implementation requires some additional off-heap memory to manage +-# the map structures and some in-flight memory during operations before/after cache entries can be +-# accounted against the cache capacity. This overhead is usually small compared to the whole capacity. +-# Do not specify more memory that the system can afford in the worst usual situation and leave some +-# headroom for OS block level cache. Do never allow your system to swap. + # + # Default value is 0, to disable row caching. + row_cache_size_in_mb: 0 +@@ -372,7 +364,7 @@ counter_cache_save_period: 7200 + + # saved caches + # If not set, the default directory is $CASSANDRA_HOME/data/saved_caches. +-# saved_caches_directory: /var/lib/cassandra/saved_caches ++saved_caches_directory: /var/db/cassandra/saved_caches + + # commitlog_sync may be either "periodic", "group", or "batch." + # diff --git a/databases/cassandra4/files/patch-doc_Makefile b/databases/cassandra4/files/patch-doc_Makefile new file mode 100644 index 000000000000..b47ccff34712 --- /dev/null +++ b/databases/cassandra4/files/patch-doc_Makefile @@ -0,0 +1,23 @@ +--- doc/Makefile.orig 2020-01-30 17:34:31 UTC ++++ doc/Makefile +@@ -3,7 +3,7 @@ + + # You can set these variables from the command line. + SPHINXOPTS = +-SPHINXBUILD = sphinx-build ++SPHINXBUILD = sphinx-build-${PYTHON_VER} + PAPER = + BUILDDIR = build + +@@ -17,9 +17,9 @@ I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) s + YAML_DOC_INPUT=../conf/cassandra.yaml + YAML_DOC_OUTPUT=source/configuration/cassandra_config_file.rst + +-MAKE_CASSANDRA_YAML = python convert_yaml_to_rst.py $(YAML_DOC_INPUT) $(YAML_DOC_OUTPUT) ++MAKE_CASSANDRA_YAML = ${PYTHON_CMD} convert_yaml_to_rst.py $(YAML_DOC_INPUT) $(YAML_DOC_OUTPUT) + +-GENERATE_NODETOOL_DOCS = python gen-nodetool-docs.py ++GENERATE_NODETOOL_DOCS = ${PYTHON_CMD} gen-nodetool-docs.py + + WEB_SITE_PRESENCE_FILE='source/.build_for_website' + diff --git a/databases/cassandra4/files/patch-doc_gen-nodetool-docs.py b/databases/cassandra4/files/patch-doc_gen-nodetool-docs.py new file mode 100644 index 000000000000..4a07e5d17672 --- /dev/null +++ b/databases/cassandra4/files/patch-doc_gen-nodetool-docs.py @@ -0,0 +1,20 @@ +--- doc/gen-nodetool-docs.py.orig 2020-04-10 22:29:25 UTC ++++ doc/gen-nodetool-docs.py +@@ -57,7 +57,7 @@ def create_rst(command): + cmdName = command.group(0).strip() + cmdFilename = outdir + "/" + cmdName + ".txt" + rstFilename = outdir + "/" + cmdName + ".rst" +- with open(cmdFilename, "w+") as cmdFile: ++ with open(cmdFilename, "w+b") as cmdFile: + proc = Popen([nodetool, "help", cmdName], stdin=PIPE, stdout=PIPE) + (out, err) = proc.communicate() + cmdFile.write(out) +@@ -76,7 +76,7 @@ with open(outdir + "/nodetool.rst", "w+") as output: + output.write(command) + + # create the command usage pages +-with open(helpfilename, "rw+") as helpfile: ++with open(helpfilename, "r+") as helpfile: + for commandLine in helpfile: + command = command_re.match(commandLine) + create_rst(command) diff --git a/databases/cassandra4/files/patch-src_java_org_apache_cassandra_config_Config.java b/databases/cassandra4/files/patch-src_java_org_apache_cassandra_config_Config.java new file mode 100644 index 000000000000..371b489d73ad --- /dev/null +++ b/databases/cassandra4/files/patch-src_java_org_apache_cassandra_config_Config.java @@ -0,0 +1,11 @@ +--- src/java/org/apache/cassandra/config/Config.java.orig 2020-01-30 17:34:32 UTC ++++ src/java/org/apache/cassandra/config/Config.java +@@ -289,7 +289,7 @@ public class Config + public volatile int key_cache_save_period = 14400; + public volatile int key_cache_keys_to_save = Integer.MAX_VALUE; + +- public String row_cache_class_name = "org.apache.cassandra.cache.OHCProvider"; ++ public String row_cache_class_name = "org.apache.cassandra.cache.SerializingCacheProvider"; + public long row_cache_size_in_mb = 0; + public volatile int row_cache_save_period = 0; + public volatile int row_cache_keys_to_save = Integer.MAX_VALUE; diff --git a/databases/cassandra4/files/patch-src_java_org_apache_cassandra_db_commitlog_MemoryMappedSegment.java b/databases/cassandra4/files/patch-src_java_org_apache_cassandra_db_commitlog_MemoryMappedSegment.java new file mode 100644 index 000000000000..f70f7674b3ae --- /dev/null +++ b/databases/cassandra4/files/patch-src_java_org_apache_cassandra_db_commitlog_MemoryMappedSegment.java @@ -0,0 +1,11 @@ +--- src/java/org/apache/cassandra/db/commitlog/MemoryMappedSegment.java.orig 2019-10-24 16:42:10 UTC ++++ src/java/org/apache/cassandra/db/commitlog/MemoryMappedSegment.java +@@ -90,7 +90,7 @@ public class MemoryMappedSegment extends CommitLogSegm + { + throw new FSWriteError(e, getPath()); + } +- NativeLibrary.trySkipCache(fd, startMarker, nextMarker, logFile.getAbsolutePath()); ++// NativeLibrary.trySkipCache(fd, startMarker, nextMarker, logFile.getAbsolutePath()); + } + + @Override diff --git a/databases/cassandra4/files/patch-src_java_org_apache_cassandra_service_NativeTransportService.java b/databases/cassandra4/files/patch-src_java_org_apache_cassandra_service_NativeTransportService.java new file mode 100644 index 000000000000..ddc683881057 --- /dev/null +++ b/databases/cassandra4/files/patch-src_java_org_apache_cassandra_service_NativeTransportService.java @@ -0,0 +1,18 @@ +--- src/java/org/apache/cassandra/service/NativeTransportService.java.orig 2020-04-01 19:54:51 UTC ++++ src/java/org/apache/cassandra/service/NativeTransportService.java +@@ -143,12 +143,15 @@ public class NativeTransportService + */ + public static boolean useEpoll() + { ++ /* + final boolean enableEpoll = Boolean.parseBoolean(System.getProperty("cassandra.native.epoll.enabled", "true")); + + if (enableEpoll && !Epoll.isAvailable() && NativeLibrary.osType == NativeLibrary.OSType.LINUX) + logger.warn("epoll not available", Epoll.unavailabilityCause()); + + return enableEpoll && Epoll.isAvailable(); ++ */ ++ return false; // Epoll is only available for Linux. Prevent warning given that we otherwise pass ourselves off as Linux. + } + + /** diff --git a/databases/cassandra4/files/patch-src_java_org_apache_cassandra_service_StartupChecks.java b/databases/cassandra4/files/patch-src_java_org_apache_cassandra_service_StartupChecks.java new file mode 100644 index 000000000000..20617d41048a --- /dev/null +++ b/databases/cassandra4/files/patch-src_java_org_apache_cassandra_service_StartupChecks.java @@ -0,0 +1,18 @@ +--- src/java/org/apache/cassandra/service/StartupChecks.java.orig 2020-01-30 17:34:32 UTC ++++ src/java/org/apache/cassandra/service/StartupChecks.java +@@ -262,7 +262,14 @@ public class StartupChecks + { + public void execute() + { +- SigarLibrary.instance.warnIfRunningInDegradedMode(); ++ try { ++ @SuppressWarnings("unused") ++ Class loadMe = org.hyperic.sigar.SigarException.class; ++ ++ SigarLibrary.instance.warnIfRunningInDegradedMode(); ++ } catch (NoClassDefFoundError e) { ++ logger.info("Could not initialize SIGAR library: SIGAR option not selected during install or jar no longer available."); ++ } + } + }; + diff --git a/databases/cassandra4/files/patch-src_java_org_apache_cassandra_utils_FastByteOperations.java b/databases/cassandra4/files/patch-src_java_org_apache_cassandra_utils_FastByteOperations.java new file mode 100644 index 000000000000..8ccde2695304 --- /dev/null +++ b/databases/cassandra4/files/patch-src_java_org_apache_cassandra_utils_FastByteOperations.java @@ -0,0 +1,108 @@ +--- src/java/org/apache/cassandra/utils/FastByteOperations.java.orig 2020-03-30 16:37:37 UTC ++++ src/java/org/apache/cassandra/utils/FastByteOperations.java +@@ -191,6 +191,20 @@ public class FastByteOperations + + static final boolean BIG_ENDIAN = ByteOrder.nativeOrder().equals(ByteOrder.BIG_ENDIAN); + ++ private static byte unsafeGetByte(Object o, long offset) ++ { ++ return o == null ++ ? theUnsafe.getByte(offset) ++ : theUnsafe.getByte(o, offset); ++ } ++ ++ private static long unsafeGetLong(Object o, long offset) ++ { ++ return o == null ++ ? theUnsafe.getLong(offset) ++ : theUnsafe.getLong(o, offset); ++ } ++ + public int compare(byte[] buffer1, int offset1, int length1, byte[] buffer2, int offset2, int length2) + { + return compareTo(buffer1, BYTE_ARRAY_BASE_OFFSET + offset1, length1, +@@ -214,7 +228,7 @@ public class FastByteOperations + else + { + obj1 = null; +- offset1 = theUnsafe.getLong(buffer1, DIRECT_BUFFER_ADDRESS_OFFSET) + position1; ++ offset1 = unsafeGetLong(buffer1, DIRECT_BUFFER_ADDRESS_OFFSET) + position1; + } + + return compareTo(obj1, offset1, length1, buffer2, BYTE_ARRAY_BASE_OFFSET + offset2, length2); +@@ -230,7 +244,7 @@ public class FastByteOperations + if (src.hasArray()) + System.arraycopy(src.array(), src.arrayOffset() + srcPosition, trg, trgPosition, length); + else +- copy(null, srcPosition + theUnsafe.getLong(src, DIRECT_BUFFER_ADDRESS_OFFSET), trg, trgPosition, length); ++ copy(null, srcPosition + unsafeGetLong(src, DIRECT_BUFFER_ADDRESS_OFFSET), trg, trgPosition, length); + } + + public void copy(ByteBuffer srcBuf, int srcPosition, ByteBuffer trgBuf, int trgPosition, int length) +@@ -245,7 +259,7 @@ public class FastByteOperations + else + { + src = null; +- srcOffset = theUnsafe.getLong(srcBuf, DIRECT_BUFFER_ADDRESS_OFFSET); ++ srcOffset = unsafeGetLong(srcBuf, DIRECT_BUFFER_ADDRESS_OFFSET); + } + copy(src, srcOffset + srcPosition, trgBuf, trgPosition, length); + } +@@ -255,7 +269,7 @@ public class FastByteOperations + if (trgBuf.hasArray()) + copy(src, srcOffset, trgBuf.array(), trgBuf.arrayOffset() + trgPosition, length); + else +- copy(src, srcOffset, null, trgPosition + theUnsafe.getLong(trgBuf, DIRECT_BUFFER_ADDRESS_OFFSET), length); ++ copy(src, srcOffset, null, trgPosition + unsafeGetLong(trgBuf, DIRECT_BUFFER_ADDRESS_OFFSET), length); + } + + public static void copy(Object src, long srcOffset, byte[] trg, int trgPosition, int length) +@@ -263,7 +277,7 @@ public class FastByteOperations + if (length <= MIN_COPY_THRESHOLD) + { + for (int i = 0 ; i < length ; i++) +- trg[trgPosition + i] = theUnsafe.getByte(src, srcOffset + i); ++ trg[trgPosition + i] = unsafeGetByte(src, srcOffset + i); + } + else + { +@@ -302,7 +316,7 @@ public class FastByteOperations + else + { + obj1 = null; +- offset1 = theUnsafe.getLong(buffer1, DIRECT_BUFFER_ADDRESS_OFFSET); ++ offset1 = unsafeGetLong(buffer1, DIRECT_BUFFER_ADDRESS_OFFSET); + } + offset1 += buffer1.position(); + length1 = buffer1.remaining(); +@@ -325,7 +339,7 @@ public class FastByteOperations + else + { + obj2 = null; +- offset2 = theUnsafe.getLong(buffer, DIRECT_BUFFER_ADDRESS_OFFSET); ++ offset2 = unsafeGetLong(buffer, DIRECT_BUFFER_ADDRESS_OFFSET); + } + int length2 = limit - position; + offset2 += position; +@@ -358,8 +372,8 @@ public class FastByteOperations + int wordComparisons = minLength & ~7; + for (int i = 0; i < wordComparisons ; i += Longs.BYTES) + { +- long lw = theUnsafe.getLong(buffer1, memoryOffset1 + i); +- long rw = theUnsafe.getLong(buffer2, memoryOffset2 + i); ++ long lw = unsafeGetLong(buffer1, memoryOffset1 + i); ++ long rw = unsafeGetLong(buffer2, memoryOffset2 + i); + + if (lw != rw) + { +@@ -372,8 +386,8 @@ public class FastByteOperations + + for (int i = wordComparisons ; i < minLength ; i++) + { +- int b1 = theUnsafe.getByte(buffer1, memoryOffset1 + i) & 0xFF; +- int b2 = theUnsafe.getByte(buffer2, memoryOffset2 + i) & 0xFF; ++ int b1 = unsafeGetByte(buffer1, memoryOffset1 + i) & 0xFF; ++ int b2 = unsafeGetByte(buffer2, memoryOffset2 + i) & 0xFF; + if (b1 != b2) + return b1 - b2; + } diff --git a/databases/cassandra4/files/patch-src_java_org_apache_cassandra_utils_NativeLibrary.java b/databases/cassandra4/files/patch-src_java_org_apache_cassandra_utils_NativeLibrary.java new file mode 100644 index 000000000000..ae94061399e2 --- /dev/null +++ b/databases/cassandra4/files/patch-src_java_org_apache_cassandra_utils_NativeLibrary.java @@ -0,0 +1,14 @@ +--- src/java/org/apache/cassandra/utils/NativeLibrary.java.orig 2020-01-30 17:34:32 UTC ++++ src/java/org/apache/cassandra/utils/NativeLibrary.java +@@ -141,7 +141,10 @@ public final class NativeLibrary + else if (osName.contains("windows")) + return WINDOWS; + +- logger.warn("the current operating system, {}, is unsupported by cassandra", osName); ++ if (osName.contains("bsd")) ++ logger.warn("the current operating system, {}, is fantastic, though not officially supported by cassandra", osName); ++ else ++ logger.warn("the current operating system, {}, is unsupported by cassandra", osName); + if (osName.contains("aix")) + return AIX; + else diff --git a/databases/cassandra4/files/patch-test_conf_cassandra.yaml b/databases/cassandra4/files/patch-test_conf_cassandra.yaml new file mode 100644 index 000000000000..8cdaf3180e12 --- /dev/null +++ b/databases/cassandra4/files/patch-test_conf_cassandra.yaml @@ -0,0 +1,10 @@ +--- test/conf/cassandra.yaml.orig 2018-03-06 21:24:02 UTC ++++ test/conf/cassandra.yaml +@@ -40,7 +40,6 @@ server_encryption_options: + incremental_backups: true + concurrent_compactors: 4 + compaction_throughput_mb_per_sec: 0 +-row_cache_class_name: org.apache.cassandra.cache.OHCProvider + row_cache_size_in_mb: 16 + enable_user_defined_functions: true + enable_scripted_user_defined_functions: true diff --git a/databases/cassandra4/pkg-descr b/databases/cassandra4/pkg-descr new file mode 100644 index 000000000000..b2767ece8c58 --- /dev/null +++ b/databases/cassandra4/pkg-descr @@ -0,0 +1,16 @@ +Apache Cassandra is a free and open-source distributed database. +It is a Java-based, highly scalable, eventually consistent, wide +column store. Cassandra database clusters are masterless with no +single point of failure. Replication can be configured across +multiple data centers. + +Originally influenced by Dynamo and BigTable, Cassandra was initially +developed at and open sourced by Facebook before becoming a top-level +Apache project. + +The CQL query language offers SQL-like data access and management. +Drivers are available for a number of languages. + +This is an ALPHA version! It is not intended for production use. + +WWW: https://cassandra.apache.org/ diff --git a/databases/cassandra4/pkg-message b/databases/cassandra4/pkg-message new file mode 100644 index 000000000000..37224b063199 --- /dev/null +++ b/databases/cassandra4/pkg-message @@ -0,0 +1,12 @@ +[ +{ type: install + message: <