1.0.0
-----
 * Allow for JmxClient to be extensible (CASSANDRASC-116)
 * Improve observability in Sidecar (CASSANDRASC-111)
 * Improve logging for slice restore task (CASSANDRASC-107)
 * Add restore task watcher to report long running tasks (CASSANDRASC-106)
 * RestoreSliceTask could be stuck due to missing exception handling (CASSANDRASC-105)
 * Make hash algorithm implementation pluggable (CASSANDRASC-114)
 * Fix ClosedChannelException when downloading from S3 (CASSANDRASC-112)
 * Fix NPE thrown when getting StorageClient from pool (CASSANDRASC-110)
 * Relocate Sidecar common classes in vertx-client-shaded (CASSANDRASC-104)
 * Automated yaml type binding for deserialization (CASSANDRASC-103)
 * Upgrade Vert.x version in Sidecar to 4.5 (CASSANDRASC-101)
 * Break restore job into stage and import phases and persist restore slice status on phase completion (CASSANDRASC-99)
 * Improve logging for traffic shaping / rate limiting configuration (CASSANDRASC-98)
 * Startup Validation Failures when Checking Sidecar Connectivity (CASSANDRASC-86)
 * Add support for additional digest validation during SSTable upload (CASSANDRASC-97)
 * Add sidecar client changes for restore from S3 (CASSANDRASC-95)
 * Add restore SSTables from S3 into Cassandra feature to Cassandra Sidecar (CASSANDRASC-92)
 * Define routing order for http routes (CASSANDRASC-93)
 * AbstractHandler is handling the request even when it fails to extract params (CASSANDRASC-91)
 * Fix Sidecar TokenRangeReplicas endpoint to unwrap the token-range by partitioner's range for a single node clusters (CASSANDRASC-90)
 * Expose TTL option for the create snapshot endpoint (CASSANDRASC-85)
 * Allow DriverUtils to be pluggable (CASSANDRASC-88)
 * Add JMX health checks during the periodic health checks (CASSANDRASC-87)
 * Sidecar should be able to load metadata even if the local instance is unavailable (CASSANDRASC-79)
 * Expose additional SSL configuration options for the Sidecar Service (CASSANDRASC-82)
 * Expose additional node settings (CASSANDRASC-84)
 * Sidecar does not handle keyspaces and table names with mixed case (CASSANDRASC-76)
 * Require gossip to be enabled for ring and token ranges mapping endpoints (CASSANDRASC-83)
 * Improve TokenRangeReplicasResponse payload (CASSANDRASC-81)
 * HealthCheckPeriodicTask execute never completes the promise when instances are empty (CASSANDRASC-80)
 * Fix token-ranges endpoint to handle gossip-info responses without 'status' (CASSANDRASC-78)
 * Upgrade vertx to version 4.4.6 to bring hot reloading and traffic shaping options (CASSANDRASC-77)
 * Fix unable to stream secondary index files (CASSANDRASC-74)
 * Updates token-ranges endpoint to return additional instance metadata (CASSANDRASC-73)
 * Shade Jackson completely to prevent incompatibility issues (CASSANDRASC-75)
 * Adds endpoint to serve read/write replica-sets by token-ranges (CASSANDRASC-60)
 * Split unit tests and integration tests in CircleCI config (CASSANDRASC-72)
 * Allow configuring permissions for uploaded SSTables (CASSANDRASC-71)
 * Refactor Sidecar configuration (CASSANDRASC-69)
 * Add Client Methods for Obtaining Sidecar and Cassandra Health (CASSANDRASC-70)
 * Publish bytes streamed and written metrics (CASSANDRASC-68)
 * Extract the in-jvm dtest template for use in other projects (CASSANDRASC-55)
 * Fix relocation of native libraries for vertx-client-shaded (CASSANDRASC-67)
 * Enrich RetriesExhaustedException to have more information for better visibility (CASSANDRASC-65)
 * Fix failing unit tests in Apache CI (CASSANDRASC-66)
 * Support credential rotation in JmxClient (CASSANDRASC-63)
 * File descriptor is not being closed on MD5 checksum (CASSANDRASC-64)
 * Expose JMX host and port from JMXClient (CASSANDRASC-59)
 * Support retries in Sidecar Client on Invalid Checksum (CASSANDRASC-58)
 * Ignore unknown properties during Sidecar client deserialization (CASSANDRASC-53)
 * Create staging directory if it doesn't exists (CASSANDRASC-56)
 * Remove RESTEasy (CASSANDRASC-57)
 * Use in-jvm dtest framework for integration tests (CASSANDRASC-51)
 * Sidecar returns own version in node settings (CASSANDRASC-52)
 * Deprecate the sidecar cassandra health endpoint containing instance segment (CASSANDRASC-50)
 * Add an endpoint that gives information about the release version & partitioner name of a node (CASSANDRASC-48)
 * Introduce JMX foundation in Sidecar (CASSANDRASC-47)
 * Delegate methods to the RateLimiter (CASSANDRASC-45)
 * Add Schema API (CASSANDRASC-43)
 * Refactor health check to use vertx timer (CASSANDRASC-44)
 * Migrate minikube to testcontainers for integration tests (CASSANDRASC-46)
 * Refactor range and add toString (CASSANDRASC-41)
 * Fix search in list snapshot endpoint (CASSANDRASC-40)
 * Allow Cassandra input validation to be configurable (CASSANDRAC-39)
 * Add endpoint to list snapshot files (CASSANDRASC-38)
 * Optimize file path builder and have separate handler for streaming file (CASSANDRASC-37)
 * Support for ErrorHandler in Sidecar (CASSANDRASC-36)
 * Allow injecting a LoggerHandler to vertxRouter (CASSANDRASC-34)
 * Optionally support multiple cassandra instances in Sidecar (CASSANDRASC-33)
 * Call the start method of CassandraAdaptorDelegate to start periodic health check (CASSANDRASC-32)
 * Avoid having sidecar's health response code depend on Cassandra's health information (CASSANDRASC-29)
 * Add Stream SSTable API to Sidecar to stream SSTable components through zero copy streaming (CASSANDRASC-28)
 * Fix broken sidecar gradle configuration due to Cassandra 40 version (CASSANDRASC-31)
 * Support multiple Cassandra versions with integration tests using Kubernetes (CASSANDRA-23)
 * RESTEasy integration with dynamically generated Swagger OpenAPI, Swagger UI and JAX-RS (CASSANDRASC-22)
 * Set up asciidoc based documentation (CASSANDRASC-15)
 * Gradle can now generate Deb packages, RPMs and Docker containers (CASSANDRASC-14)
 * Security patch to fix incorrect usage of yaml configuration (CASSANDRASC-12)
 * Build and Test with both Java 8 & 11 in Circle CI (CASSANDRA-15611)
 * Upgraded Gradle and replaced FindBugs with SpotBugs (CASSANDRA-15610)
 * Improving local HealthCheckTest reliability (CASSANDRA-15615)
 * Read sidecar.yaml from sidecar.config System Property instead of classpath (CASSANDRA-15288)
 * Add integration tests task (CASSANDRA-15031)
 * Add support for SSL and bindable address (CASSANDRA-15030)
 * Autogenerate API docs for sidecar (CASSANDRA-15028)
 * C* Management process (CASSANDRA-14395)
