All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.datastax.oss.driver.internal.core.channel.ResponseCallback Maven / Gradle / Ivy

The newest version!
/*
 * 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.internal.core.channel;

import com.datastax.oss.protocol.internal.Frame;

/**
 * The outcome of a request sent to a Cassandra node.
 *
 * 

This comes into play after the request has been successfully written to the channel. * *

Due to internal implementation constraints, different instances of this type must not be equal * to each other (they are stored in a {@code BiMap} in {@link InFlightHandler}); reference equality * should be appropriate in all cases. */ public interface ResponseCallback { /** * Invoked when the server replies (note that the response frame might contain an error message). */ void onResponse(Frame responseFrame); /** * Invoked if we couldn't get the response. * *

This can be triggered in two cases: * *

    *
  • the connection was closed (for example, because of a heartbeat failure) before the * response was received; *
  • the response was received but there was an error while decoding it. *
*/ void onFailure(Throwable error); /** * Reports the stream id used for the request on the current connection. * *

This is called every time the request is written successfully to a connection (and therefore * might multiple times in case of retries). It is guaranteed to be invoked before any response to * the request on that connection is processed. * *

The default implementation does nothing. This only needs to be overridden for specialized * requests that hold the stream id across multiple responses. * * @see #isLastResponse(Frame) */ default void onStreamIdAssigned(int streamId) { // nothing to do } /** * Whether the given frame is the last response to this request. * *

This is invoked for each response received by this callback; if it returns {@code true}, the * driver assumes that the server is no longer using this stream id, and that it can be safely * reused to send another request. * *

The default implementation always returns {@code true}: regular CQL requests only have one * response, and we can reuse the stream id as soon as we've received it. This only needs to be * overridden for specialized requests that hold the stream id across multiple responses. */ default boolean isLastResponse(Frame responseFrame) { return true; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy