I wrote this, it might help people. https://github.com/DataStax-Examples/java-cassandra-driver-from3x-to4x
*Full disclosure I am NOT part of the driver team. *I was not particularly happy with new version either: required new parameter 'localDC', missing load balancing policy, new application.conf file, new public interface, immutable things enforcing you to do statement = statement.doSomething() or it is not used, custom codec not there, file with some billions keys some hardly been overridden with Programmatic configuration. My2c On Fri, Oct 30, 2020 at 11:09 AM Angelo Polo <language.de...@gmail.com> wrote: > Execution profiles are a brilliant new feature of the 4.x drivers. But > configuring them was a challenge. Programmatic configuration offers few > advantages over the file-based one because options can still only be > specified by name for later injection. When runtime settings are to be > applied, one would like to be able to provide an instantiated object for a > given property (e.g. load balancer). Instead, one must confect a class with > bytecode manipulation, or some other means, and/or push information through > the DriverContext later and have to deal with timing and mutability issues. > It's easy to find oneself deep in the "internal" tree, overriding > components far removed from the original target of the customization. > > Best, > Angelo > > On Fri, Oct 30, 2020 at 4:18 AM Jonathan Koppenhofer <j...@koppedomain.com> > wrote: > >> We actually feel the same where we have edge cases where downgrading CL >> was useful. We did end up writing this in application logic as our code was >> pretty well abstracted and centralized to do so. >> >> I will also agree the driver seems overly prescriptive now with limited >> ability to override. Good for protecting users from themselves, but bad for >> edge cases. >> >> Generally, we work with alot of application teams, and most of them are >> putting off the inevitable of the changes required to implement 4.x. In a >> reasonably well written moderately complex app, it took one of our best >> developers 2 weeks make the changes, and we were finding bugs for a couple >> releases after that. Not positive experience. >> >> We now are done with the migration, and things are working reasonably >> well. >> >> >> On Thu, Oct 29, 2020, 9:06 AM Johnny Miller <joh...@digitalis.io> wrote: >> >>> Joshua - thanks for the update, I have found the ASF slack channel >>> (#cassandra-cep-drivers-donation) and google doc ( >>> https://docs.google.com/document/d/1e0SsZxjeTabzrMv99pCz9zIkkgWjUd4KL5Yp0GFzNnY/edit#). >>> Will be watching it closely. >>> >>> In terms of the functional changes brought into the driver with 4.x the >>> downgrading CL has always been a controversial feature, but the failover to >>> remote DC being removed - I am curious to understand why? >>> >>> Thanks, >>> >>> Johnny >>> >>> On Thu, 29 Oct 2020 at 13:53, Joshua McKenzie <jmcken...@apache.org> >>> wrote: >>> >>>> 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 >>>>> <https://urldefense.proofpoint.com/v2/url?u=http-3A__digitalis.io_&d=DwMFaQ&c=adz96Xi0w1RHqtPMowiL2g&r=CRDTby7ZKMKOJuR7qj8hGNHMqiMtY_3sbc8FBSZtTdo&m=SbjlNK32WNTSbKmszA9g1RNfF-8qJMzwFQIeKJlvAK8&s=wyOKNUxu-__ODwiGCMpfLzJEvGKVCDs5VJ5YqNu8y1Q&e=> >>>>> | >>>>> 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 >>>>> <https://urldefense.proofpoint.com/v2/url?u=http-3A__www.digitalis.io&d=DwMFaQ&c=adz96Xi0w1RHqtPMowiL2g&r=CRDTby7ZKMKOJuR7qj8hGNHMqiMtY_3sbc8FBSZtTdo&m=SbjlNK32WNTSbKmszA9g1RNfF-8qJMzwFQIeKJlvAK8&s=KQnoR-TFsGz9Ln6x1k1pIo7JO1fbpjwZ03JwN19ONtQ&e=> >>>>> >>>> >>>> >>> >>> >>> -- >>> >>> 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 >>> <https://urldefense.proofpoint.com/v2/url?u=http-3A__www.digitalis.io&d=DwMFaQ&c=adz96Xi0w1RHqtPMowiL2g&r=CRDTby7ZKMKOJuR7qj8hGNHMqiMtY_3sbc8FBSZtTdo&m=SbjlNK32WNTSbKmszA9g1RNfF-8qJMzwFQIeKJlvAK8&s=KQnoR-TFsGz9Ln6x1k1pIo7JO1fbpjwZ03JwN19ONtQ&e=> >>> >> -- Cedrick Lunven e. cedrick.lun...@datastax.com w. www.datastax.com