That's an immense amount of incredibly useful feedback Johnny. Thanks for taking the time and energy to write all this up.
I work with some of the engineers who authored these changes in the driver and have brought this thread to their attention. The authors have offered the driver as a CEP donation to the C* project so we will have one in tree which should give a clear path to fixing some of these API issues as well as the loss of functionality on a major. On Thu, Oct 29, 2020 at 8:37 AM, Johnny Miller <joh...@digitalis.io> wrote: > Hi Everybody, > > > We wanted to reach out to the community around the v4 changes in the > DataStax Java driver and gauge people's opinions on some of the changes. > DataStax have done a tremendous job over the years on the Cassandra drivers > and contributing to this community. However, we are currently struggling to > adopt the latest driver due to these changes. > > > We have been working on a project to upgrade an application from v3 to > v4.9 of the driver and have encountered major changes between these > versions. > > > We have observed the latest version of the driver contains many more > DataStax Enterprise (DSE) specific code, and this is not surprising as > DataStax have been generous to build it for the Cassandra community. > > > From our understanding, the DSE specific code must be included even if you > are unable to use it or require it. For example, in CqlSessionBuilder class > which is the main entry point into the driver, there are APIs relating > directly to DataStax Enterprise non-OSS functionality, their cloud DBaaS > etc.. e.g. > > > - withApplicationName (https://docs.datastax.com/en/drivers/java/4.9/com/ > datastax/oss/driver/api/core/session/SessionBuilder. > html#withApplicationName-java.lang.String-) > > - withApplicationVersion (https://docs.datastax.com/en/drivers/java/4.9/ > com/datastax/oss/driver/api/core/session/SessionBuilder. > html#withApplicationVersion-java.lang.String-) > > - withCloudProxyAddress (https://docs.datastax.com/en/drivers/java/4.9/ > com/datastax/oss/driver/api/core/session/SessionBuilder. > html#withCloudProxyAddress-java.net.InetSocketAddress-) > > - withCloudProxyAddress (https://docs.datastax.com/en/drivers/java/4.9/ > com/datastax/oss/driver/api/core/session/SessionBuilder. > html#withCloudSecureConnectBundle-java.io.InputStream-) > > > plus more. > > > All of these are sitting under the com.datastax.oss package - not the > com.datastax.dse package. > > > Additionally the reference.conf for the default driver settings contains a > large number of DSE specific options: > > https://github.com/datastax/java-driver/blob/4.9.0/core/src/main/ > resources/reference.conf > > > We would like to have seen this implemented in a subclass of the > CqlSessionBuilder eg. DataStaxCqlSessionBuilder and the conf split into two > separate config files. > > > Additionally, the structure of the library is such that it is bundling all > of the DSE driver code with the non-DSE driver code eg. graph, search etc. > We would also like to have seen DataStax to have implemented it as separate > libs and use a dependency on an OSS only lib in the datastax specific lib > for the shared functionality. > > > It would be great to be able to only take in the dependencies and code > needed for Apache Cassandra and not the commercial products around it. > > > However, the above observations are trivial compared to the two core > features of the driver that seem to have been deprecated and we would like > your opinion. > > > 1 - No more failovers to remote-DC > > Previous versions of the driver allowed the driver to failover to a remote > DC (if you wanted) in the event of losing access to the local DC. This is > no longer the case. > > > See: https://docs.datastax.com/en/developer/java-driver/4.9/manual/core/ > load_balancing/#default-policy > > > What this means is either: > > a - re-implement this - not trivial > > b - initialise multiple instances of the driver in your JVM - not > recommended by DataStax and we have observed some issues when you do this > > c - Address the problem via infra e.g load balancer fronting a local > service connecting to local Cassandra DC along side a passive local service > connecting to the remote Cassandra DC > > d - stop the entire applications/Cassandra stack in the DC if Cassandra > becomes unavailable to the applications in this DC for any reason. > > > Not a trivial change to take on, and in our humble opinion undermines one > of the greatest benefits of Apache Cassandra where your applications "just > keep working". We have seen many situations where this has been one of the > core architecture principles for adopting Cassandra and forms part of the > signed off and agreed operational acceptance testing on platforms. > > > The latest driver will not be able to retain this architecture and it will > be difficult for certain organisations to adopt and be current with the > latest driver. > > > https://docs.datastax.com/en/developer/java-driver/4.9/manual/core/ > load_balancing/ > > vs > > https://docs.datastax.com/en/developer/java-driver/3.9/manual/ > load_balancing/ > > > 2 - No more changing consistency on retries > > Although this has been a controversial feature, we know quite a few users > of this feature. > > > Removing this in v4.9 of the driver essentially breaks those applications > and it is not possible to implement this through a custom retry policy as > the driver RetryDecision is now a String enum (https://docs.datastax.com/ > en/drivers/java/4.9/com/datastax/oss/driver/api/core/retry/RetryDecision. > html) vs v3.9 (https://docs.datastax.com/en/drivers/java/3.9/com/datastax/ > driver/core/policies/RetryPolicy.RetryDecision.html) where more complex > choices could be bubbled up to the driver around the consistency to retry > on. We looked into how we could simulate the old retry behaviour using the > latest driver and it would require non-trivial code updates within the > client application - particularly if the asynchronous features are > leveraged. > > > Also, the default settings for the driver has remote connections set to 1 > - https://docs.datastax.com/en/developer/java-driver/4.9/manual/core/ > pooling/#configuration We are not quite certain the reason or think of a > scenario when this is utilised as local connections are only possible? > > > https://docs.datastax.com/en/developer/java-driver/4.9/faq/ > #where-is-downgrading-consistency-retry-policy > > > We look after many DataStax / Cassandra clusters and these changes in the > latest driver changes have left us scratching our heads. > > > We would be interested in hearing your thoughts on these observations. > > > Thanks, > > > Johnny > > > > > -- > > Johnny Miller > > Co-Founder & CTO > > https://digitalis.io <http://digitalis.io/> | Work: +44 20805023721| > Mobile: +352 621159920 > > > -- > > The information contained in this electronic message and any attachments > to this message are intended for the exclusive use of the addressee(s) and > may contain proprietary, confidential or privileged information. If you are > not the intended recipient, you should not disseminate, distribute or copy > this e-mail. Please notify the sender immediately and destroy all copies of > this message and any attachments. WARNING: Computer viruses can be > transmitted via email. The recipient should check this email and any > attachments for the presence of viruses. The company accepts no liability > for any damage caused by any virus transmitted by this email. www. > digitalis.io >