com.datastax.oss.driver.api.core.UnsupportedProtocolVersionException Maven / Gradle / Ivy
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.datastax.oss.driver.api.core;
import com.datastax.oss.driver.api.core.cql.ExecutionInfo;
import com.datastax.oss.driver.api.core.metadata.EndPoint;
import com.datastax.oss.driver.shaded.guava.common.collect.ImmutableList;
import edu.umd.cs.findbugs.annotations.NonNull;
import edu.umd.cs.findbugs.annotations.Nullable;
import java.util.Collections;
import java.util.List;
/**
* Indicates that we've attempted to connect to a Cassandra node with a protocol version that it
* cannot handle (e.g., connecting to a C* 2.1 node with protocol version 4).
*
* The only time when this is returned directly to the client (wrapped in a {@link
* AllNodesFailedException}) is at initialization. If it happens later when the driver is already
* connected, it is just logged an the corresponding node is forced down.
*/
public class UnsupportedProtocolVersionException extends DriverException {
private static final long serialVersionUID = 0;
private final EndPoint endPoint;
private final List attemptedVersions;
@NonNull
public static UnsupportedProtocolVersionException forSingleAttempt(
@NonNull EndPoint endPoint, @NonNull ProtocolVersion attemptedVersion) {
String message =
String.format("[%s] Host does not support protocol version %s", endPoint, attemptedVersion);
return new UnsupportedProtocolVersionException(
endPoint, message, Collections.singletonList(attemptedVersion), null);
}
@NonNull
public static UnsupportedProtocolVersionException forNegotiation(
@NonNull EndPoint endPoint, @NonNull List attemptedVersions) {
String message =
String.format(
"[%s] Protocol negotiation failed: could not find a common version (attempted: %s). "
+ "Note that the driver does not support Cassandra 2.0 or lower.",
endPoint, attemptedVersions);
return new UnsupportedProtocolVersionException(
endPoint, message, ImmutableList.copyOf(attemptedVersions), null);
}
public UnsupportedProtocolVersionException(
@Nullable EndPoint endPoint, // technically nullable, but should never be in real life
@NonNull String message,
@NonNull List attemptedVersions) {
this(endPoint, message, attemptedVersions, null);
}
private UnsupportedProtocolVersionException(
EndPoint endPoint,
String message,
List attemptedVersions,
ExecutionInfo executionInfo) {
super(message, executionInfo, null, true);
this.endPoint = endPoint;
this.attemptedVersions = attemptedVersions;
}
/** The address of the node that threw the error. */
@Nullable
public EndPoint getEndPoint() {
return endPoint;
}
/** The versions that were attempted. */
@NonNull
public List getAttemptedVersions() {
return attemptedVersions;
}
@NonNull
@Override
public DriverException copy() {
return new UnsupportedProtocolVersionException(
endPoint, getMessage(), attemptedVersions, getExecutionInfo());
}
}