Skip to content

Dapr state store clickhouse #3675

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 30 commits into
base: main
Choose a base branch
from

Conversation

middt
Copy link

@middt middt commented Feb 23, 2025

Description

This PR adds a new state store component for ClickHouse, a column-oriented database management system. The ClickHouse state store component provides the following features:

  • Basic CRUD operations for state management
  • Support for TTL (Time-To-Live)
  • ETag support for optimistic concurrency
  • Bulk operations support
  • Username/password authentication
  • Uses ReplacingMergeTree engine for efficient updates

Key implementation details:

  • Uses the official ClickHouse Go driver
  • Implements the full state.Store interface
  • Handles connection management and cleanup
  • Includes comprehensive integration tests
  • Follows Dapr's component development guidelines

Implementation Details

The component includes:

  1. State store implementation (clickhouse.go)

    • Full CRUD operations
    • Bulk operations
    • TTL support
    • ETag support
    • Authentication support
  2. Tests (clickhouse_test.go)

    • Integration tests for CRUD operations
    • Metadata validation tests
    • Authentication tests
    • Cleanup handling
  3. Configuration options:

    apiVersion: dapr.io/v1alpha1
    kind: Component
    metadata:
      name: statestore
      namespace: default
    spec:
      type: state.clickhouse
      version: v1
      metadata:
      - name: clickhouseURL
        value: "tcp://localhost:9000"
      - name: databaseName
        value: "dapr_state"
      - name: tableName
        value: "state_store"
      - name: username
        value: "default"
      - name: password
        value: ""

Checklist

Testing Done

  1. Unit tests for metadata validation
  2. Integration tests for:
    • Basic CRUD operations
    • TTL functionality
    • ETag support
    • Bulk operations
    • Authentication
    • Error handling

Tests were run against ClickHouse v23.8 using the official Go driver.

Additional Notes

  • The component uses ReplacingMergeTree engine for better update performance
  • Includes proper cleanup in tests to avoid test pollution
  • Follows ClickHouse best practices for table design
  • Implements proper connection management and cleanup

@middt middt requested review from a team as code owners February 23, 2025 04:10
@JoshVanL
Copy link
Contributor

Thanks @middt, implementation generally looks good to me!

Would it be possible to add conformance tests for this too? It seems like we should be able to spin up a click house docker compose.

@middt middt force-pushed the dapr-state-store-clickhouse branch from 1b2a8de to 2c8934c Compare March 14, 2025 07:02
@middt
Copy link
Author

middt commented Mar 14, 2025

Thank you for the feedback! @JoshVanL I've implemented the conformance tests for the ClickHouse state store in this PR:

  1. Created a Docker Compose setup in /tests/certification/state/clickhouse/docker-compose.yml that spins up a ClickHouse server with proper configuration
  2. Added a conformance test file in /tests/certification/state/clickhouse/clickhouse_test.go that verifies all state store operations
  3. Created configuration files in /tests/config/state/clickhouse/clickhouse.yml for the test environment
  4. Added ClickHouse to the state store tests configuration in /tests/config/state/tests.yml

The tests verify all the key functionality including:

  • Basic CRUD operations
  • ETag support for optimistic concurrency
  • Error handling for empty and non-existent keys
  • Feature reporting

I've also addressed authentication issues by properly configuring username and password in both the Docker Compose setup and the state store implementation.

All unit tests are now passing, confirming that the implementation works correctly with the ClickHouse server.

@JoshVanL
Copy link
Contributor

JoshVanL commented Apr 9, 2025

Thanks @middt, I think the only thing left is to do a go mod tidy and it should be good to go 🙂

Appreciate the work on this!

@middt
Copy link
Author

middt commented Apr 10, 2025

Done :) ! Just ran go mod tidy and pushed the changes. Thanks for the review and guidance! 👍

@JoshVanL

JoshVanL
JoshVanL previously approved these changes Apr 29, 2025
@cicoyle
Copy link
Contributor

cicoyle commented May 22, 2025

@middt - mind resolving the conflicts with go.mod & go.sum?

@middt middt force-pushed the dapr-state-store-clickhouse branch from 46a191c to fb148f1 Compare May 22, 2025 15:14
@middt
Copy link
Author

middt commented May 22, 2025

Hi @cicoyle,

I've resolved the conflicts in go.mod and go.sum by accepting the changes from the main branch, which includes the latest dependency updates. The changes have been pushed to the branch.

The main updates include:

  • Updated OpenTelemetry dependencies to their latest versions
  • Updated Google Cloud dependencies
  • Added new indirect dependencies required by the latest versions

All tests are passing and the implementation remains unchanged. The PR should now be ready for review.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants