Hi,

For those not following the Java driver mailing list, I would like to point
out that we just released driver 4.10.0.

My message to that mailing list has all the details:

https://groups.google.com/a/lists.datastax.com/g/java-driver-user/c/CN2UBLoXLtY/m/JE6sqdF1DQAJ

In short, as promised, in this release we are delivering cross-datacenter
failover and consistency downgrading retries, alongside bug fixes and other
new features.

Thanks,
Alex Dutra

On Thu, Dec 10, 2020 at 1:32 PM Alexandre Dutra <
alexandre.du...@datastax.com> wrote:

> Hi,
>
> To clarify, partly because of recent discussions in this mailing list,
> and partly because of constant demand from both the community and
> customers, we (DataStax) decided recently to re-introduce driver-level
> cross-dc failover and driver-level downgrading retries in driver 4, to
> be released in driver 4.10.0.
>
> These are equivalent to what DCAwareRoundRobinPolicy and
> DowngradingConsistencyRetryPolicy used to offer in driver 3.
>
> We still believe that these features have better alternatives, e.g.
> application-level variants thereof. But we don't want to be as
> prescriptive as we used to be. Hence the 2 tickets mentioned,
> JAVA-2899 and JAVA-2900:
>
> https://datastax-oss.atlassian.net/browse/JAVA-2899
> https://datastax-oss.atlassian.net/browse/JAVA-2900
>
> While we are happy to bring these long-awaited features back to driver
> 4, we also urge users to carefully consider the alternatives when
> migrating from driver 3 to driver 4.
>
> And speaking of alternatives, we have examples of application-level
> failover and retries that we encourage users to study:
>
> 1) Cross-DC failover:
>
> https://github.com/datastax/java-driver/blob/java2899/examples/src/main/java/com/datastax/oss/driver/examples/failover/CrossDatacenterFailover.java
>
> (This example is not merged yet, it is part of my work for JAVA-2899,
> but can be used with any version of driver 4.)
>
> 2) Downgrading retries:
>
> https://github.com/datastax/java-driver/blob/4.x/examples/src/main/java/com/datastax/oss/driver/examples/retry/DowngradingRetry.java
>
> Still on the cross-DC failover topic, we also published a white paper
> a while ago that takes a different (infrastructure-based) approach:
>
>
> https://www.datastax.com/sites/default/files/content/whitepaper/files/2019-09/Designing-Fault-Tolerant-Applications-DataStax.pdf
>
> Thanks,
>
> Alex Dutra
>
>
> On Wed, Dec 9, 2020 at 10:18 PM Johnny Miller <joh...@digitalis.io> wrote:
> >
> > If you haven’t seen it the failover to remote DCs  is being added to
> 4.10 of the java driver (
> >
> https://datastax-oss.atlassian.net/plugins/servlet/mobile?originPath=%2Fbrowse%2FJAVA-2899#issue/JAVA-2899
> and
> >
> https://github.com/datastax/java-driver/commit/f4f6da04fd7871eb0e42933fe368a1e4285c710c)
> and more powerful API around retries (including change the CL) is being
> discussed here
> >
> https://datastax-oss.atlassian.net/plugins/servlet/mobile?originPath=%2Fbrowse%2FJAVA-2900
> >
> > This should hopefully make the driver upgrade easier if your using these.
> >
> > On Sat, 31 Oct 2020 at 12:53, Cédrick Lunven <
> cedrick.lun...@datastax.com> wrote:
> >>
> >>
> >> 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 | 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
> >>>>>>
> >>>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>>> --
> >>>>>
> >>>>> 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
> >>
> >>
> >>
> >> --
> >> Cedrick Lunven
> >> e. cedrick.lun...@datastax.com
> >> w. www.datastax.com
> >>
> > --
> > Sent from my iPhone, apologies for any typos
> >
> >
> > --
> >
> > 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
>
>
>
> --
> Alexandre Dutra
> e. alexandre.du...@datastax.com
> w. www.datastax.com
>


-- 
Alexandre Dutra
e. alexandre.du...@datastax.com
w. www.datastax.com

Reply via email to