Fixed - a new attempt should be made on WAIT error during failover. #4822

pull/4843/head
Nikita Koksharov 2 years ago
parent c42b997014
commit 38c74cd8e7

@ -0,0 +1,31 @@
/**
* Copyright (c) 2013-2022 Nikita Koksharov
*
* Licensed 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 org.redisson.client;
/**
* This error occurs when Redis server is busy.
*
* @author Nikita Koksharov
*
*/
public class RedisWaitException extends RedisException{
private static final long serialVersionUID = -5658453331593019251L;
public RedisWaitException(String message) {
super(message);
}
}

@ -372,6 +372,9 @@ public class CommandDecoder extends ReplayingDecoder<State> {
} else if (error.startsWith("BUSY")) { } else if (error.startsWith("BUSY")) {
data.tryFailure(new RedisBusyException(error data.tryFailure(new RedisBusyException(error
+ ". channel: " + channel + " data: " + data)); + ". channel: " + channel + " data: " + data));
} else if (error.startsWith("WAIT")) {
data.tryFailure(new RedisWaitException(error
+ ". channel: " + channel + " data: " + data));
}else { }else {
if (data != null) { if (data != null) {
data.tryFailure(new RedisException(error + ". channel: " + channel + " command: " + LogHelper.toString(data))); data.tryFailure(new RedisException(error + ". channel: " + channel + " command: " + LogHelper.toString(data)));

@ -523,7 +523,8 @@ public class RedisExecutor<V, R> {
if (cause instanceof RedisLoadingException if (cause instanceof RedisLoadingException
|| cause instanceof RedisTryAgainException || cause instanceof RedisTryAgainException
|| cause instanceof RedisClusterDownException || cause instanceof RedisClusterDownException
|| cause instanceof RedisBusyException) { || cause instanceof RedisBusyException
|| cause instanceof RedisWaitException) {
if (attempt < attempts) { if (attempt < attempts) {
onException(); onException();
connectionManager.newTimeout(timeout -> { connectionManager.newTimeout(timeout -> {

Loading…
Cancel
Save