Skip to content
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

Drop-in replacement for gocql #296

Draft
wants to merge 17 commits into
base: main
Choose a base branch
from
Draft

Drop-in replacement for gocql #296

wants to merge 17 commits into from

Conversation

Kulezi
Copy link
Contributor

@Kulezi Kulezi commented Sep 26, 2022

GoCQL drop-in replacement

The goal of this pull request is to provide a gocql module inside the scylla-go-driver repository that could be used as a drop-in
replacement for gocql, just by using a replace directive in go.mod like this:
replace github.com/gocql/gocql => github.com/scylladb/scylla-go-driver/gocql <version/commit>

Benefits

Features: ORM, query building and migrations support can be used just by replacing GoCQL with the new driver in https://github.com/scylladb/gocqlx
Tests: Existing integration tests for GoCQLX, Scylla Manager, Scylla Operator, etc. can be used to test drivers correctness and safety.

Tests

New gocql package was tested against GocqlX and Scylla Manager tests.
GocqlX and Scylla Manager tests pass with exceptions:

  • Scylla Manager repair & backup integration tests.
  • GocqlX schemagen - due to metadata inconsistencies in scylladb/gocql metadata_scylla.go and metadata_cassandra.go
    I added a workflow to run the already passed tests on GitHub Actions, if you want to run them please refer to this action.

To pass the Scylla Manager tests its also needed to add two lines of code to the manager tests as gocql and the new driver return different error messages on unauthorised errors.

Changes

This PR makes many small changes mostly to the driver's API so it can provide a gocql compatible API in the gocql package,
those chages include:

  • Allowing to check if session is closed
  • Allowing per-query retry policy setting
  • More getters/setters for Query and Iter
  • Configuring coalescing wait time
  • Transforming a query to a prepared one straight from query level
  • Allowing binding query arguments using Serializable interface
  • Exporting UDT fields in frame package
  • Falling back to random shard discovery when shard-aware port is missing/misbehaving

gocql package

This PR features a new gocql package, wrapping Session, Query and Iter in structs exporting gocql API methods.
Base functionality is here, some missing gocql features are:

  • Conviction policy
  • Client-side timeouts
  • HostDialer
  • Observers
  • Address Translation
  • Tracer

@Kulezi Kulezi changed the title Pp/gocql gocql: drop-in replacement for gocql Sep 26, 2022
@Kulezi Kulezi changed the title gocql: drop-in replacement for gocql Drop-in replacement for gocql Sep 26, 2022
@Kulezi Kulezi force-pushed the pp/gocql branch 2 times, most recently from fd9f968 to e006683 Compare September 26, 2022 17:25
@Kulezi Kulezi force-pushed the pp/gocql branch 7 times, most recently from d838445 to 13c98c4 Compare September 27, 2022 11:36
@Kulezi Kulezi force-pushed the pp/gocql branch 5 times, most recently from cef9091 to 6bca510 Compare September 27, 2022 15:19
@Kulezi Kulezi force-pushed the pp/gocql branch 13 times, most recently from 4870c2f to eb99068 Compare September 29, 2022 13:39
@viggin543
Copy link

can't wait to try it :)

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.

2 participants