Skip to content

Latest commit

 

History

History
198 lines (139 loc) · 10.4 KB

CHANGELOG.md

File metadata and controls

198 lines (139 loc) · 10.4 KB

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

0.8.0 (2023-08-26)

0.7.3...0.8.0

Added

  • feat: Implement VersionedKeyValueStore<K, V> #21

0.7.3 (2023-08-20)

0.7.2...0.7.3

Added

  • Ops: GitHub action step to trigger a publication to Sonatype OSS for main branch and tags
  • Ops: New GitHub action for triggering 'gradle release' from repo with automatic semver

0.7.2 (2023-07-24)

0.7.1...0.7.2

Polishing & Cleanup

  • chore: example/*-restapi enable datastax-java-driver RequestLogger
  • chore: example/partitioned-store-restapi use ScyllaDB
  • chore: example/partitioned-store-restapi fix main class + application.id
  • chore: polishing, more javadoc+comments, validateIsRunningOrRebalancing()

0.7.1 (2023-07-23)

0.7.0...0.7.1

Changed

  • Class is renamed to be more explicit (CassandraReadOnlyKeyValueStore -> CassandraPartitionedReadOnlyKeyValueStore)

0.7.0 (2023-07-23)

0.6.0...0.7.0

Added

  • Advanced, optimised, efficient, custom implementation of ReadOnlyKeyValueStore for 'Interactive Queries' with for 'partitioned' type CassandraKeyValueStore
    • Offered by CassandraStateStore static methods, for an example please check the README
      • CassandraStateStore#readOnlyPartitionedKeyValueStore(KafkaStreams, String, CqlSession, String, boolean, String, Serde, Serde)
      • CassandraStateStore#readOnlyPartitionedKeyValueStore(KafkaStreams, String, CqlSession, String, boolean, String, Serde, Serde, Function, StreamPartitioner)
  • New example 'processor-api-all-range-prefix-count' featuring the new CassandraPartitionedReadOnlyKeyValueStore
    • Implements a REST API with endpoints for all available 'Interactive Query' methods to play with hands-on

Changed

  • Integration test is renamed WordCountGlobalStoreTest -> WordCountGlobalKeyValueStoreTest
    • test + assertions added for ReadOnlyKeyValueStore.all()

Removed

  • First impl. of CassandraStateStore#readOnlyPartitionedKeyValueStore(KafkaStreams, String) was removed and replaced by the more complex methods that return an instance of CassandraPartitionedReadOnlyKeyValueStore (already mentioned above)

0.6.0 (2023-07-11)

0.5.0...0.6.0

Changed

  • to have an explicit naming of store types, it was decided to rename CassandraStores.keyValueStore to CassandraStores.partitionedKeyValueStore
  • the renamed partitionedKeyValueStore is no longer recommended as the default choice

0.5.0 (2023-07-09)

0.4.0...0.5.0

Added

  • Interface CassandraStateStore #19 #20
    • implemented by all the libraries custom StateStore solutions (only CassandraKeyValueStore yet)
    • provides static helper methods to get ReadOnly stores for interactive queries (see docs)

Changed

  • dependency updates, incl. kafka-streams 3.5.0 #22
    Reminder: the library itself does not have any transitive dependencies. All dependencies are compileOnly or for tests.

0.4.0 (2023-05-30)

0.3.2...0.4.0

Added

  • feat: Add builder config option - opt-in to enable count for approximateNumEntries #10
  • feat: Add builder config option - allow setting execution profiles (for DDL; DML) #11
  • feat: Add builder config option - opt-out to avoid tables to be auto-created #9
  • feat: add Quarkus examples app as GraalVM native image #7

Changed

  • store size via approximateNumEntries is now by default disabled - opt-in option has been added to builder - ref #10

Fixed

  • bug: cassandra concurrent schema updates (initial concurrent table auto-creation) #12
  • small fix: example 'processor-api-all-range-prefix-count' not runnable

Other

  • documentation improved

0.3.2 (2023-04-17)

0.3.1...0.3.2

Changed

  • fix: small refactoring to allow better reuse of AbstractCassandraKeyValueStoreRepository

Changed (documentation only)

  • feat: improve documentation for recommended kafka streams config
  • feat: add documentation on 'Cassandra table partitioning' (avoiding large partitions)

0.3.1 (2023-03-09)

0.3.0...0.3.1

(Added)

  • Adds a first set of integration tests with testcontainers
    • Covering
      • WordCountTest testing the kafka streams 'Hello world!' app to work with CassandraKeyValueStore
      • WordCountInteractiveQueriesTest testing interactive queries incl. methods all, range, prefixScan, approximateNumEntries
      • WordCountGlobalStoreTest testing CassandraStores.globalKeyValueStore() and store access via interactive queries
    • Using
      • Cassandra 4.1
      • Redpanda

Changed / Removed

  • Simplified overly complex class name to GlobalCassandraKeyValueStoreRepository.

0.3.0 (2023-02-26)

0.2.0...0.3.0

Added

  • approximateNumEntries was added using SELECT COUNT(*) with WARN log & request timeout of 5s

Changed / Removed

  • keyValueStore now supports org.apache.kafka.streams.state.ReadOnlyKeyValueStore#prefixScan(Object, Serializer)
    • Implements a solution using range on BLOB type key using ((Bytes) from).increment(), identically to RocksDB + InMemory KV Stores
    • The solution now works for all CQL databases, replacing the ScyllaDB specific solution (see right below)
  • adapts, enhances example 'processor-api-all-range-prefix-count' (previously 'processor-api-prefixscan')
    • added additional description to example README
    • added/fixed JavaDoc for WordCountProcessor
    • now also runs approximateNumEntries

Removed

  • stringKeyValueStore was removed with all belonging code (PartitionedStringKeyScyllaKeyValueStoreRepository, ...)
    • This removes the special implementation of org.apache.kafka.streams.state.ReadOnlyKeyValueStore#prefixScan(Object, Serializer) for ScyllaDB backed stores with String keys. (The implementation was based on ScyllaDB LIKE operator query on TEXT type clustering key)
    • This is longer required since replaced with generic solution implemented for keyValueStore (see right above)

Security

  • successfully tested the library against 'CQL injection' via withTableOptions(..) => tried to add compaction = { 'class' : 'LeveledCompactionStrategy' };DROP TABLE xyz which fails due to wrong syntax in Cassandra 3.11/4.1 & ScyllaDB 5.1

0.2.0 (2023-02-12)

0.1.0...0.2.0

Added

  • feat: implements StateStore.query
  • improved javadoc
  • adds documentation on
    • store types + operations
    • builder & options
    • link to examples
    • known limitations
    • cassandra specifics

Fixed

  • for any bug fixes

0.1.0 (2023-01-08)

First public release

Template x.y.z (yyyy-mm-dd)

a.b.c...x.y.z

Added

  • for new features

Changed

  • for changes in existing functionality

Deprecated

  • for soon-to-be removed features

Removed

  • for now removed features

Fixed

  • for any bug fixes

Security

  • in case of vulnerabilities