Sidecar for Apache Cassandra®

Clone this repo:
  1. 2cd024c CASSSIDECAR-359: Avoid resuming stream early during SSTable upload (#271) by Francisco Guerrero · 2 days ago trunk
  2. a745842 CASSSIDECAR-357: Add cache for Authorization layer (#270) by Saranya Krishnakumar · 5 days ago
  3. fec7c06 ninja fix: amend CHANGES.txt for CASSSIDECAR-355 by Francisco Guerrero · 2 weeks ago
  4. b646bc8 CASSSIDECAR-355: Avoid creating objects in the CassandraAdapter implementation (#269) by Francisco Guerrero · 2 weeks ago
  5. ea54b14 CASSSIDECAR-351: Code refactoring for some configuration classes and migrate RoleBasedAuthorizationIntegrationTest to integration-tests (#268) by Francisco Guerrero · 3 weeks ago

Apache Cassandra Sidecar

This is a Sidecar for the highly scalable Apache Cassandra database. For more information, see the Apache Cassandra web site and CIP-1.

This is project is still WIP.

Requirements

  1. Java >= 111 (OpenJDK or Oracle)
  2. Apache Cassandra 4.0. We depend on virtual tables which is a 4.0 only feature.
  3. Docker for running integration tests.

Build Prerequisites

We depend on the Cassandra in-jvm dtest framework for testing. Because these jars are not published, you must manually build the dtest jars before you can build the project.

./scripts/build-dtest-jars.sh

The build script supports two parameters:

  • REPO - the Cassandra git repository to use for the source files. This is helpful if you need to test with a fork of the Cassandra codebase.
    • default: git@github.com:apache/cassandra.git
  • BRANCHES - a space-delimited list of branches to build. -default: "cassandra-4.1 trunk"

Remove any versions you may not want to test with. We recommend at least the latest (released) 4.X series and trunk. See Testing for more details on how to choose which Cassandra versions to use while testing.

For multi-node in-jvm dtests, network aliases will need to be setup for each Cassandra node. The tests assume each node's ip address is 127.0.0.x, where x is the node id.

For example if you populated your cluster with 3 nodes, create interfaces for 127.0.0.2 and 127.0.0.3 (the first node of course uses 127.0.0.1).

macOS network aliases

To get up and running, create a temporary alias for every node except the first:

 for i in {2..20}; do sudo ifconfig lo0 alias "127.0.0.${i}"; done

Getting started: Running The Sidecar

After you clone the git repo, you can use the gradle wrapper to build and run the project. Make sure you have Apache Cassandra running on the host & port specified in conf/sidecar.yaml.

$ ./gradlew run

Alternatively, you can run against a local CCM cluster. Cassandra Sidecar provides a configuration for a 3-node CCM cluster named sidecardemo. You can use the gradle wrapper to run the project connected to a 3-node CCM cluster as follows:

$ ./gradlew run -Dsidecar.config=file:///$PWD/examples/conf/sidecar-ccm.yaml

Please see samples for details.

Configuring Cassandra Instance

While setting up cassandra instance, make sure the data directories of cassandra are in the path stored in sidecar.yaml file, else modify data directories path to point to the correct directories for stream APIs to work.

Testing

The test framework is set up to run 4.1 and 5.1 (Trunk) tests (see TestVersionSupplier.java) by default. You can change this via the Java property cassandra.sidecar.versions_to_test by supplying a comma-delimited string. For example, -Dcassandra.sidecar.versions_to_test=4.0,4.1,5.1.

CircleCI Testing

You will need to use the “Add Projects” function of CircleCI to set up CircleCI on your fork. When promoted to create a branch, do not replace the CircleCI config, choose the option to do it manually. CircleCI will pick up the in project configuration.

Contributing

We warmly welcome and appreciate contributions from the community. Please see CONTRIBUTING.md if you wish to submit pull requests.

Wondering where to go from here?

Notes

1 The Sidecar Client offers Java 1.8 compatibility, and produces artifacts for both Java 1.8 and Java 11.