From e3853407f703831544d8f8134aa9a8337b15b68e Mon Sep 17 00:00:00 2001 From: Svyatoslav Markeyev Date: Mon, 16 May 2016 14:18:34 -0700 Subject: [PATCH] Handle CallQueueTooBigException as a RecoverableException --- Makefile | 1 + src/CallQueueTooBigException.java | 66 +++++++++++++++++++++++++++++++ src/RegionClient.java | 2 + 3 files changed, 69 insertions(+) create mode 100644 src/CallQueueTooBigException.java diff --git a/Makefile b/Makefile index e4929c1a..bb736836 100644 --- a/Makefile +++ b/Makefile @@ -100,6 +100,7 @@ asynchbase_SOURCES := \ src/PleaseThrottleException.java \ src/PutRequest.java \ src/QualifierFilter.java \ + src/CallQueueTooBigException.java \ src/RecoverableException.java \ src/RegexStringComparator.java \ src/RegionClient.java \ diff --git a/src/CallQueueTooBigException.java b/src/CallQueueTooBigException.java new file mode 100644 index 00000000..7c00c337 --- /dev/null +++ b/src/CallQueueTooBigException.java @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2010-2012 The Async HBase Authors. All rights reserved. + * This file is part of Async HBase. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * - Neither the name of the StumbleUpon nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ +package org.hbase.async; + +/** + * Exception thrown when we try to use an invalid or expired scanner ID. + */ +public final class CallQueueTooBigException extends RecoverableException +implements HasFailedRpcException { + + static final String REMOTE_CLASS = + "org.apache.hadoop.hbase.CallQueueTooBigException"; + + final HBaseRpc failed_rpc; + + /** + * Constructor. + * @param msg The message of the exception, potentially with a stack trace. + * @param failed_rpc The RPC that caused this exception, if known, or null. + */ + CallQueueTooBigException(final String msg, final HBaseRpc failed_rpc) { + super(msg + "\nCaused by RPC: " + failed_rpc); + this.failed_rpc = failed_rpc; + } + + public HBaseRpc getFailedRpc() { + return failed_rpc; + } + + @Override + CallQueueTooBigException make(final Object msg, final HBaseRpc rpc) { + if (msg == this || msg instanceof CallQueueTooBigException) { + final CallQueueTooBigException e = (CallQueueTooBigException) msg; + return new CallQueueTooBigException(e.getMessage(), rpc); + } + return new CallQueueTooBigException(msg.toString(), rpc); + } + + private static final long serialVersionUID = -8367228239893289543L; + +} + diff --git a/src/RegionClient.java b/src/RegionClient.java index 287d54f3..5990253f 100644 --- a/src/RegionClient.java +++ b/src/RegionClient.java @@ -107,6 +107,8 @@ final class RegionClient extends ReplayingDecoder { new UnknownRowLockException(null, null)); REMOTE_EXCEPTION_TYPES.put(VersionMismatchException.REMOTE_CLASS, new VersionMismatchException(null, null)); + REMOTE_EXCEPTION_TYPES.put(CallQueueTooBigException.REMOTE_CLASS, + new CallQueueTooBigException(null, null)); } /** We don't know the RPC protocol version of the server yet. */