CASSANDRASC-38 Add endpoint to list snapshot files

This commit adds two new endpoints to allow listing snapshot files.

The first endpoint takes a snapshot name as a path parameter, and searches for
all the snapshots matching the provided name. The result lists all the snapshot
files for all matching snapshots. Additionally, secondary index files can be
included in the response by providing the query param
`includeSecondaryIndexFiles=true`.

```
/api/v1/snapshots/:snapshot
```

The second endpoint takes a keyspace, table name, and snapshot name and searches
for a unique snapshot matching the provided snapshot name in the given keyspace
and table name. The results lists the snapshot files matching the given keyspace,
table name, and snapshot name. Similarly to the first endpoint, secondary index
files can be included in the response by providing the query param
`includeSecondaryIndexFiles=true`.

```
/api/v1/keyspace/:keyspace/table/:table/snapshots/:snapshot
```
45 files changed
tree: d497625b1eece2e0e0b9ac42ade0f79304f08891
  1. .circleci/
  2. cassandra-integration-tests/
  3. cassandra40/
  4. common/
  5. containers/
  6. docs/
  7. gradle/
  8. ide/
  9. scripts/
  10. src/
  11. .gitignore
  12. build.gradle
  13. CHANGES.txt
  14. checkstyle.xml
  15. CONTRIBUTING.md
  16. gradle.properties
  17. gradlew
  18. gradlew.bat
  19. LICENSE.txt
  20. README.md
  21. settings.gradle
  22. spotbugs-exclude.xml
README.md

Apache Cassandra Sidecar [WIP]

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 >= 1.8 (OpenJDK or Oracle), or Java 11
  2. Apache Cassandra 4.0. We depend on virtual tables which is a 4.0 only feature.
  3. A Kubernetes cluster for running integration tests. MiniKube can be used to run Kubernetes locally.

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

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

We rely on Kubernetes for creating docker containers for integration tests.

The easiest way to get started locally is by installing Minikube.

Start minikube with a command similar to the following. Use a netmask appropriate for your local network, and allow minikube to use as much RAM as you can afford to:

minikube start --insecure-registry "192.168.0.0/16" --addons registry --memory 8G --cpus=4

This will create a MiniKube cluster using the default driver. On OSX, this is hyperkit.

Enabling the tunnel is required in certain environments for tests to connect to the instances.

In a separate tab (or background process) run the following:

minikube tunnel

Check the dashboard to ensure your installation is working as expected:

minikube dashboard

Set the environment property for the Minikube container (we recommend you do this as part of your system profile):

You can use an existing Kubernetes environment by setting the appropriate project properties either through environment variables

export SIDECAR_DOCKER_REGISTRY="http://$(minikube ip):5000"

Gradle will register the required test containers with the local docker registry. You can enable this after setting up Minikube by doing the following:

Note: If using MiniKube, the Docker daemon will need to be configured to push to your Minikube repo insecurely.
This should be added to the daemon.json config, usually found in /etc/docker, or in the Docker Engine section of the docker preferences:

  "insecure-registries": [
    "192.168.64.14:5000"
  ]

You can use build, test to build & test the project.

Please see the developer documentation in docs/src/development.adoc for more information.

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?