From a7404fb865c3e7ede2b5e74dd9ebce71a266a746 Mon Sep 17 00:00:00 2001 From: Kurt Jaeger Date: Sat, 2 May 2020 19:48:32 +0000 Subject: [PATCH] New port: databases/cassandra4: Highly scalable distributed database 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/ PR: 246081 Submitted by: Angelo Polo Reviewed by: yuri --- databases/Makefile | 1 + databases/cassandra3/Makefile | 2 + databases/cassandra4/Makefile | 160 +++++++++++++ databases/cassandra4/distinfo | 7 + databases/cassandra4/files/cassandra.in | 42 ++++ .../cassandra4/files/patch-bin_cassandra | 20 ++ databases/cassandra4/files/patch-build.xml | 222 ++++++++++++++++++ .../files/patch-conf_cassandra-env.sh | 11 + .../files/patch-conf_cassandra.yaml | 68 ++++++ databases/cassandra4/files/patch-doc_Makefile | 23 ++ .../files/patch-doc_gen-nodetool-docs.py | 20 ++ ...va_org_apache_cassandra_config_Config.java | 11 + ...ndra_db_commitlog_MemoryMappedSegment.java | 11 + ...sandra_service_NativeTransportService.java | 18 ++ ...pache_cassandra_service_StartupChecks.java | 18 ++ ...he_cassandra_utils_FastByteOperations.java | 108 +++++++++ ..._apache_cassandra_utils_NativeLibrary.java | 14 ++ .../files/patch-test_conf_cassandra.yaml | 10 + databases/cassandra4/pkg-descr | 16 ++ databases/cassandra4/pkg-message | 12 + databases/cassandra4/pkg-plist | 214 +++++++++++++++++ 21 files changed, 1008 insertions(+) create mode 100644 databases/cassandra4/Makefile create mode 100644 databases/cassandra4/distinfo create mode 100644 databases/cassandra4/files/cassandra.in create mode 100644 databases/cassandra4/files/patch-bin_cassandra create mode 100644 databases/cassandra4/files/patch-build.xml create mode 100644 databases/cassandra4/files/patch-conf_cassandra-env.sh create mode 100644 databases/cassandra4/files/patch-conf_cassandra.yaml create mode 100644 databases/cassandra4/files/patch-doc_Makefile create mode 100644 databases/cassandra4/files/patch-doc_gen-nodetool-docs.py create mode 100644 databases/cassandra4/files/patch-src_java_org_apache_cassandra_config_Config.java create mode 100644 databases/cassandra4/files/patch-src_java_org_apache_cassandra_db_commitlog_MemoryMappedSegment.java create mode 100644 databases/cassandra4/files/patch-src_java_org_apache_cassandra_service_NativeTransportService.java create mode 100644 databases/cassandra4/files/patch-src_java_org_apache_cassandra_service_StartupChecks.java create mode 100644 databases/cassandra4/files/patch-src_java_org_apache_cassandra_utils_FastByteOperations.java create mode 100644 databases/cassandra4/files/patch-src_java_org_apache_cassandra_utils_NativeLibrary.java create mode 100644 databases/cassandra4/files/patch-test_conf_cassandra.yaml create mode 100644 databases/cassandra4/pkg-descr create mode 100644 databases/cassandra4/pkg-message create mode 100644 databases/cassandra4/pkg-plist 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: <