Skip to content
Closed
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/*
* 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 org.apache.hadoop.hbase.rest;

import java.io.IOException;
import org.apache.yetus.audience.InterfaceAudience;

@InterfaceAudience.Private
public class ServiceUnavailableException extends IOException {
public ServiceUnavailableException(final String msg) {
super(msg);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@
@InterfaceAudience.Private
public class TableResource extends ResourceBase {

String table;
private final String table;
private static final Logger LOG = LoggerFactory.getLogger(TableResource.class);

private static final Decoder base64Urldecoder = java.util.Base64.getUrlDecoder();
Expand Down Expand Up @@ -139,6 +139,9 @@ public TableScanResource getScanResource(final @PathParam("scanspec") String sca
@DefaultValue("true") @QueryParam(Constants.SCAN_INCLUDE_START_ROW) boolean includeStartRow,
@DefaultValue("false") @QueryParam(Constants.SCAN_INCLUDE_STOP_ROW) boolean includeStopRow) {
try {
if (servlet.getAdmin().isTableDisabled(TableName.valueOf(this.table))) {
throw new ServiceUnavailableException("Table disabled.");

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To be completely honest I'm not 100% sure if this is the best way to solve this.
This newly created ServiceUnavailableException class extends IOException so that it will be caught and handled in the catch block below (also incrementing failed requests metrics).
What do you think?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am worried that this explicit check may cause some extra network traffic.

Can we catch whatever exception HBase throws in this case, and process that ?

Also, the same check applies to most operations, so we should probably check this on all non-metadata endpoints.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Many thanks for the feedback. 👍

Good point, performance is very important. I'll look into it.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I checked that the TableNotEnabledException is coming via TableScanResource.CellSetModelStream here: https://github.com/apache/hbase/blob/master/hbase-rest/src/main/java/org/apache/hadoop/hbase/rest/TableScanResource.java#L77

This code is actually called by JAXB / Jackson (for XML / JSON respectively).

The problem is that even if we catch the TableNotEnabledException in the Iterator.hasNext() implementation we cannot throw any checked Exceptions from there or return REST response.

Here is the full stacktrace:

2024-12-05T11:21:47,001 WARN  [qtp485475507-43 {}] server.HttpChannel: handleException /test/* org.apache.hadoop.hbase.TableNotEnabledException: test
2024-12-05T11:21:47,001 WARN  [qtp485475507-43 {}] server.HttpChannelState: unhandled due to prior sendError
javax.servlet.ServletException: java.io.UncheckedIOException: org.apache.hadoop.hbase.TableNotEnabledException: test
	at org.apache.hbase.thirdparty.org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:412) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:349) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:379) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:312) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:205) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1656) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hadoop.hbase.http.SecurityHeadersFilter.doFilter(SecurityHeadersFilter.java:66) ~[hbase-http-4.0.0-alpha-1-SNAPSHOT.jar:4.0.0-alpha-1-SNAPSHOT]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hadoop.hbase.http.ClickjackingPreventionFilter.doFilter(ClickjackingPreventionFilter.java:49) ~[hbase-http-4.0.0-alpha-1-SNAPSHOT.jar:4.0.0-alpha-1-SNAPSHOT]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hadoop.hbase.rest.filter.GzipFilter.doFilter(GzipFilter.java:73) ~[hbase-rest-4.0.0-alpha-1-SNAPSHOT.jar:4.0.0-alpha-1-SNAPSHOT]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:552) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:600) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:505) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.server.Server.handle(Server.java:516) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.produce(EatWhatYouKill.java:137) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at java.lang.Thread.run(Thread.java:840) ~[?:?]
Caused by: java.io.UncheckedIOException: org.apache.hadoop.hbase.TableNotEnabledException: test
	at org.apache.hadoop.hbase.client.ResultScanner$1.hasNext(ResultScanner.java:53) ~[hbase-client-4.0.0-alpha-1-SNAPSHOT.jar:4.0.0-alpha-1-SNAPSHOT]
	at org.apache.hadoop.hbase.rest.TableScanResource$1$1.hasNext(TableScanResource.java:77) ~[hbase-rest-4.0.0-alpha-1-SNAPSHOT.jar:4.0.0-alpha-1-SNAPSHOT]
	at com.sun.xml.bind.v2.runtime.reflect.Lister$CollectionLister$1.hasNext(Lister.java:285) ~[jaxb-impl-2.2.3-1.jar:2.2.3]
	at com.sun.xml.bind.v2.runtime.property.ArrayElementProperty.serializeListBody(ArrayElementProperty.java:137) ~[jaxb-impl-2.2.3-1.jar:2.2.3]
	at com.sun.xml.bind.v2.runtime.property.ArrayERProperty.serializeBody(ArrayERProperty.java:159) ~[jaxb-impl-2.2.3-1.jar:2.2.3]
	at com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:344) ~[jaxb-impl-2.2.3-1.jar:2.2.3]
	at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsSoleContent(XMLSerializer.java:597) ~[jaxb-impl-2.2.3-1.jar:2.2.3]
	at com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeRoot(ClassBeanInfoImpl.java:328) ~[jaxb-impl-2.2.3-1.jar:2.2.3]
	at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsRoot(XMLSerializer.java:498) ~[jaxb-impl-2.2.3-1.jar:2.2.3]
	at com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:320) ~[jaxb-impl-2.2.3-1.jar:2.2.3]
	at com.sun.xml.bind.v2.runtime.MarshallerImpl.marshal(MarshallerImpl.java:249) ~[jaxb-impl-2.2.3-1.jar:2.2.3]
	at javax.xml.bind.helpers.AbstractMarshallerImpl.marshal(AbstractMarshallerImpl.java:110) ~[jaxb-api-2.3.1.jar:2.3.0]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.jaxb.internal.AbstractRootElementJaxbProvider.writeTo(AbstractRootElementJaxbProvider.java:181) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.jaxb.internal.AbstractRootElementJaxbProvider.writeTo(AbstractRootElementJaxbProvider.java:160) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.invokeWriteTo(WriterInterceptorExecutor.java:242) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.aroundWriteTo(WriterInterceptorExecutor.java:227) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:139) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.server.internal.JsonWithPaddingInterceptor.aroundWriteTo(JsonWithPaddingInterceptor.java:85) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:139) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.server.internal.MappableExceptionWrapperInterceptor.aroundWriteTo(MappableExceptionWrapperInterceptor.java:61) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:139) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.message.internal.MessageBodyFactory.writeTo(MessageBodyFactory.java:1116) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.server.ServerRuntime$Responder.writeResponse(ServerRuntime.java:649) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.server.ServerRuntime$Responder.processResponse(ServerRuntime.java:380) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.server.ServerRuntime$Responder.process(ServerRuntime.java:370) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:259) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.internal.Errors$1.call(Errors.java:248) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.internal.Errors$1.call(Errors.java:244) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.internal.Errors.process(Errors.java:292) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.internal.Errors.process(Errors.java:274) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.internal.Errors.process(Errors.java:244) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:265) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:235) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:684) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:397) ~[hbase-shaded-jersey-4.1.9.jar:?]
	... 45 more
Caused by: org.apache.hadoop.hbase.TableNotEnabledException: test
	at java.lang.Thread.getStackTrace(Thread.java:1619) ~[?:?]
	at org.apache.hadoop.hbase.util.FutureUtils.setStackTrace(FutureUtils.java:144) ~[hbase-common-4.0.0-alpha-1-SNAPSHOT.jar:4.0.0-alpha-1-SNAPSHOT]
	at org.apache.hadoop.hbase.util.FutureUtils.rethrow(FutureUtils.java:163) ~[hbase-common-4.0.0-alpha-1-SNAPSHOT.jar:4.0.0-alpha-1-SNAPSHOT]
	at org.apache.hadoop.hbase.client.AsyncTableResultScanner.next(AsyncTableResultScanner.java:173) ~[hbase-client-4.0.0-alpha-1-SNAPSHOT.jar:4.0.0-alpha-1-SNAPSHOT]
	at org.apache.hadoop.hbase.client.ResultScanner$1.hasNext(ResultScanner.java:51) ~[hbase-client-4.0.0-alpha-1-SNAPSHOT.jar:4.0.0-alpha-1-SNAPSHOT]
	at org.apache.hadoop.hbase.rest.TableScanResource$1$1.hasNext(TableScanResource.java:77) ~[hbase-rest-4.0.0-alpha-1-SNAPSHOT.jar:4.0.0-alpha-1-SNAPSHOT]
	at com.sun.xml.bind.v2.runtime.reflect.Lister$CollectionLister$1.hasNext(Lister.java:285) ~[jaxb-impl-2.2.3-1.jar:2.2.3]
	at com.sun.xml.bind.v2.runtime.property.ArrayElementProperty.serializeListBody(ArrayElementProperty.java:137) ~[jaxb-impl-2.2.3-1.jar:2.2.3]
	at com.sun.xml.bind.v2.runtime.property.ArrayERProperty.serializeBody(ArrayERProperty.java:159) ~[jaxb-impl-2.2.3-1.jar:2.2.3]
	at com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:344) ~[jaxb-impl-2.2.3-1.jar:2.2.3]
	at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsSoleContent(XMLSerializer.java:597) ~[jaxb-impl-2.2.3-1.jar:2.2.3]
	at com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeRoot(ClassBeanInfoImpl.java:328) ~[jaxb-impl-2.2.3-1.jar:2.2.3]
	at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsRoot(XMLSerializer.java:498) ~[jaxb-impl-2.2.3-1.jar:2.2.3]
	at com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:320) ~[jaxb-impl-2.2.3-1.jar:2.2.3]
	at com.sun.xml.bind.v2.runtime.MarshallerImpl.marshal(MarshallerImpl.java:249) ~[jaxb-impl-2.2.3-1.jar:2.2.3]
	at javax.xml.bind.helpers.AbstractMarshallerImpl.marshal(AbstractMarshallerImpl.java:110) ~[jaxb-api-2.3.1.jar:2.3.0]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.jaxb.internal.AbstractRootElementJaxbProvider.writeTo(AbstractRootElementJaxbProvider.java:181) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.jaxb.internal.AbstractRootElementJaxbProvider.writeTo(AbstractRootElementJaxbProvider.java:160) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.invokeWriteTo(WriterInterceptorExecutor.java:242) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.aroundWriteTo(WriterInterceptorExecutor.java:227) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:139) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.server.internal.JsonWithPaddingInterceptor.aroundWriteTo(JsonWithPaddingInterceptor.java:85) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:139) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.server.internal.MappableExceptionWrapperInterceptor.aroundWriteTo(MappableExceptionWrapperInterceptor.java:61) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:139) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.message.internal.MessageBodyFactory.writeTo(MessageBodyFactory.java:1116) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.server.ServerRuntime$Responder.writeResponse(ServerRuntime.java:649) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.server.ServerRuntime$Responder.processResponse(ServerRuntime.java:380) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.server.ServerRuntime$Responder.process(ServerRuntime.java:370) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:259) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.internal.Errors$1.call(Errors.java:248) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.internal.Errors$1.call(Errors.java:244) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.internal.Errors.process(Errors.java:292) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.internal.Errors.process(Errors.java:274) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.internal.Errors.process(Errors.java:244) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:265) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:235) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:684) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:397) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:349) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:379) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:312) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:205) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1656) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hadoop.hbase.http.SecurityHeadersFilter.doFilter(SecurityHeadersFilter.java:66) ~[hbase-http-4.0.0-alpha-1-SNAPSHOT.jar:4.0.0-alpha-1-SNAPSHOT]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hadoop.hbase.http.ClickjackingPreventionFilter.doFilter(ClickjackingPreventionFilter.java:49) ~[hbase-http-4.0.0-alpha-1-SNAPSHOT.jar:4.0.0-alpha-1-SNAPSHOT]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hadoop.hbase.rest.filter.GzipFilter.doFilter(GzipFilter.java:73) ~[hbase-rest-4.0.0-alpha-1-SNAPSHOT.jar:4.0.0-alpha-1-SNAPSHOT]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:552) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:600) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:505) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.server.Server.handle(Server.java:516) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.produce(EatWhatYouKill.java:137) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034) ~[hbase-shaded-jetty-4.1.9.jar:?]
	at java.lang.Thread.run(Thread.java:840) ~[?:?]
	at --------Future.get--------(Unknown Source) ~[?:?]
	at org.apache.hadoop.hbase.client.AsyncRpcRetryingCaller.lambda$onError$2(AsyncRpcRetryingCaller.java:206) ~[hbase-client-4.0.0-alpha-1-SNAPSHOT.jar:4.0.0-alpha-1-SNAPSHOT]
	at org.apache.hadoop.hbase.util.FutureUtils.lambda$addListener$0(FutureUtils.java:71) ~[hbase-common-4.0.0-alpha-1-SNAPSHOT.jar:4.0.0-alpha-1-SNAPSHOT]
	at java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:863) ~[?:?]
	at java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:841) ~[?:?]
	at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510) ~[?:?]
	at java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2147) ~[?:?]
	at org.apache.hadoop.hbase.client.RawAsyncHBaseAdmin.completeCheckTableState(RawAsyncHBaseAdmin.java:767) ~[hbase-client-4.0.0-alpha-1-SNAPSHOT.jar:4.0.0-alpha-1-SNAPSHOT]
	at org.apache.hadoop.hbase.client.RawAsyncHBaseAdmin.lambda$isTableDisabled$40(RawAsyncHBaseAdmin.java:797) ~[hbase-client-4.0.0-alpha-1-SNAPSHOT.jar:4.0.0-alpha-1-SNAPSHOT]
	at org.apache.hadoop.hbase.util.FutureUtils.lambda$addListener$0(FutureUtils.java:71) ~[hbase-common-4.0.0-alpha-1-SNAPSHOT.jar:4.0.0-alpha-1-SNAPSHOT]
	at java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:863) ~[?:?]
	at java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:841) ~[?:?]
	at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510) ~[?:?]
	at java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2147) ~[?:?]
	at org.apache.hadoop.hbase.ClientMetaTableAccessor.lambda$getTableState$0(ClientMetaTableAccessor.java:96) ~[hbase-client-4.0.0-alpha-1-SNAPSHOT.jar:4.0.0-alpha-1-SNAPSHOT]
	at org.apache.hadoop.hbase.util.FutureUtils.lambda$addListener$0(FutureUtils.java:71) ~[hbase-common-4.0.0-alpha-1-SNAPSHOT.jar:4.0.0-alpha-1-SNAPSHOT]
	at java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:863) ~[?:?]
	at java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:841) ~[?:?]
	at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510) ~[?:?]
	at java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2147) ~[?:?]
	at org.apache.hadoop.hbase.client.AsyncSingleRequestRpcRetryingCaller.lambda$call$4(AsyncSingleRequestRpcRetryingCaller.java:92) ~[hbase-client-4.0.0-alpha-1-SNAPSHOT.jar:4.0.0-alpha-1-SNAPSHOT]
	at org.apache.hadoop.hbase.util.FutureUtils.lambda$addListener$0(FutureUtils.java:71) ~[hbase-common-4.0.0-alpha-1-SNAPSHOT.jar:4.0.0-alpha-1-SNAPSHOT]
	at java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:863) ~[?:?]
	at java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:841) ~[?:?]
	at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510) ~[?:?]
	at java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2147) ~[?:?]
	at org.apache.hadoop.hbase.client.ConnectionUtils$2.run(ConnectionUtils.java:628) ~[hbase-client-4.0.0-alpha-1-SNAPSHOT.jar:4.0.0-alpha-1-SNAPSHOT]
	at org.apache.hbase.thirdparty.com.google.protobuf.RpcUtil$1.run(RpcUtil.java:56) ~[hbase-shaded-protobuf-4.1.9.jar:4.1.9]
	at org.apache.hbase.thirdparty.com.google.protobuf.RpcUtil$1.run(RpcUtil.java:47) ~[hbase-shaded-protobuf-4.1.9.jar:4.1.9]
	at org.apache.hadoop.hbase.ipc.AbstractRpcClient.onCallFinished(AbstractRpcClient.java:400) ~[hbase-client-4.0.0-alpha-1-SNAPSHOT.jar:4.0.0-alpha-1-SNAPSHOT]
	at org.apache.hadoop.hbase.ipc.AbstractRpcClient$3.run(AbstractRpcClient.java:430) ~[hbase-client-4.0.0-alpha-1-SNAPSHOT.jar:4.0.0-alpha-1-SNAPSHOT]
	at org.apache.hadoop.hbase.ipc.AbstractRpcClient$3.run(AbstractRpcClient.java:425) ~[hbase-client-4.0.0-alpha-1-SNAPSHOT.jar:4.0.0-alpha-1-SNAPSHOT]
	at org.apache.hadoop.hbase.ipc.Call.callComplete(Call.java:117) ~[hbase-client-4.0.0-alpha-1-SNAPSHOT.jar:4.0.0-alpha-1-SNAPSHOT]
	at org.apache.hadoop.hbase.ipc.Call.setResponse(Call.java:149) ~[hbase-client-4.0.0-alpha-1-SNAPSHOT.jar:4.0.0-alpha-1-SNAPSHOT]
	at org.apache.hadoop.hbase.ipc.RpcConnection.finishCall(RpcConnection.java:396) ~[hbase-client-4.0.0-alpha-1-SNAPSHOT.jar:4.0.0-alpha-1-SNAPSHOT]
	at org.apache.hadoop.hbase.ipc.RpcConnection.readResponse(RpcConnection.java:461) ~[hbase-client-4.0.0-alpha-1-SNAPSHOT.jar:4.0.0-alpha-1-SNAPSHOT]
	at org.apache.hadoop.hbase.ipc.NettyRpcDuplexHandler.readResponse(NettyRpcDuplexHandler.java:125) ~[hbase-client-4.0.0-alpha-1-SNAPSHOT.jar:4.0.0-alpha-1-SNAPSHOT]
	at org.apache.hadoop.hbase.ipc.NettyRpcDuplexHandler.channelRead(NettyRpcDuplexHandler.java:140) ~[hbase-client-4.0.0-alpha-1-SNAPSHOT.jar:4.0.0-alpha-1-SNAPSHOT]
	at org.apache.hbase.thirdparty.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) ~[hbase-shaded-netty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[hbase-shaded-netty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) ~[hbase-shaded-netty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:346) ~[hbase-shaded-netty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:318) ~[hbase-shaded-netty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444) ~[hbase-shaded-netty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[hbase-shaded-netty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) ~[hbase-shaded-netty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:289) ~[hbase-shaded-netty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) ~[hbase-shaded-netty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[hbase-shaded-netty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) ~[hbase-shaded-netty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) ~[hbase-shaded-netty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) ~[hbase-shaded-netty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[hbase-shaded-netty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) ~[hbase-shaded-netty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) ~[hbase-shaded-netty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788) ~[hbase-shaded-netty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) ~[hbase-shaded-netty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) ~[hbase-shaded-netty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) ~[hbase-shaded-netty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) ~[hbase-shaded-netty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[hbase-shaded-netty-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[hbase-shaded-netty-4.1.9.jar:?]
	... 1 more

Do you maybe have any idea how to solve this? 🤔

@stoty stoty Dec 5, 2024

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The other endpoints have this code for that:

I think that would work here as well.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Of course we should add a new case for the not enabled case to the exception handler.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Many thanks for the suggestion but it will not work this particular case as the linked source is from the protobuf implementation which is very different: it uses the ProtobufStreamingOutput class and it does not uses the CellSetModelStream and that custom iterator implementation.

I did the change but the test will fail.

Here you can see why it will not work:

public CellSetModelStream get(final @Context UriInfo uriInfo) {
    if (LOG.isTraceEnabled()) {
      LOG.trace("GET " + uriInfo.getAbsolutePath());
    }
    servlet.getMetrics().incrementRequests(1);
    try {
      final int rowsToSend = userRequestedLimit;
      servlet.getMetrics().incrementSucessfulScanRequests(1);
      final Iterator<Result> itr = results.iterator();
      return new CellSetModelStream(new ArrayList<RowModel>() {
        @Override
        public Iterator<RowModel> iterator() {
          return new Iterator<RowModel>() {
            int count = rowsToSend;

            @Override
            public boolean hasNext() {
              return count > 0 && itr.hasNext(); // <-- Exception is thrown here (JAXB / Jackson calls this later)
            }

            @Override
            public RowModel next() {
              Result rs = itr.next();
              if ((rs == null) || (count <= 0)) {
                return null;
              }
              RowModel rModel = RestUtil.createRowModelFromResult(rs);
              count--;
              if (count == 0) {
                results.close();
              }
              return rModel;
            }
          };
        }
      });
    } catch (Exception exp) {  // <-- Exception will not be caught here as "problematic" code is called later by JAXB / Jackson when serializing the response
      servlet.getMetrics().incrementFailedScanRequests(1);
      processException(exp);
      LOG.warn(exp.toString(), exp);
      return null;
    }
  }

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actually this Exception also happening in the protobuf case. There ProtobufStreamingOutput.write() is invoked by Jersey because it is using a streaming output feature

Caused by: org.apache.hadoop.hbase.TableNotEnabledException: test
	at java.lang.Thread.getStackTrace(Thread.java:1619) ~[?:?]
	at org.apache.hadoop.hbase.util.FutureUtils.setStackTrace(FutureUtils.java:144) ~[hbase-common-4.0.0-alpha-1-SNAPSHOT.jar:4.0.0-alpha-1-SNAPSHOT]
	at org.apache.hadoop.hbase.util.FutureUtils.rethrow(FutureUtils.java:163) ~[hbase-common-4.0.0-alpha-1-SNAPSHOT.jar:4.0.0-alpha-1-SNAPSHOT]
	at org.apache.hadoop.hbase.client.AsyncTableResultScanner.next(AsyncTableResultScanner.java:173) ~[hbase-client-4.0.0-alpha-1-SNAPSHOT.jar:4.0.0-alpha-1-SNAPSHOT]
	at org.apache.hadoop.hbase.client.ResultScanner.next(ResultScanner.java:94) ~[hbase-client-4.0.0-alpha-1-SNAPSHOT.jar:4.0.0-alpha-1-SNAPSHOT]
	at org.apache.hadoop.hbase.rest.ProtobufStreamingOutput.write(ProtobufStreamingOutput.java:65) ~[hbase-rest-4.0.0-alpha-1-SNAPSHOT.jar:4.0.0-alpha-1-SNAPSHOT]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.message.internal.StreamingOutputProvider.writeTo(StreamingOutputProvider.java:55) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.message.internal.StreamingOutputProvider.writeTo(StreamingOutputProvider.java:37) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.invokeWriteTo(WriterInterceptorExecutor.java:242) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.aroundWriteTo(WriterInterceptorExecutor.java:227) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:139) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.server.internal.JsonWithPaddingInterceptor.aroundWriteTo(JsonWithPaddingInterceptor.java:85) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:139) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.server.internal.MappableExceptionWrapperInterceptor.aroundWriteTo(MappableExceptionWrapperInterceptor.java:61) ~[hbase-shaded-jersey-4.1.9.jar:?]
	at org.apache.hbase.thirdparty.org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:139) ~[hbase-shaded-jersey-4.1.9.jar:?]

...

}
Filter prefixFilter = null;
Scan tableScan = new Scan();
if (scanSpec.indexOf('*') > 0) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,8 @@ public class TestTableResource {
private static final String COLUMN_FAMILY = "test";
private static final String COLUMN = COLUMN_FAMILY + ":qualifier";
private static final int NUM_REGIONS = 4;
private static final String DISABLED_TABLE_NAME = "disabled";
private static final TableName DISABLED_TABLE = TableName.valueOf(DISABLED_TABLE_NAME);
private static List<HRegionLocation> regionMap;

private static final HBaseTestingUtil TEST_UTIL = new HBaseTestingUtil();
Expand Down Expand Up @@ -117,6 +119,10 @@ public static void setUpBeforeClass() throws Exception {
regionMap = m;
LOG.error("regions: " + regionMap);
regionLocator.close();

TEST_UTIL.createTable(DISABLED_TABLE, "cf");
TEST_UTIL.getAdmin().disableTable(DISABLED_TABLE);
TEST_UTIL.waitTableDisabled(DISABLED_TABLE, 30);
}

@AfterClass
Expand Down Expand Up @@ -262,4 +268,10 @@ public void testTableNotFound() throws IOException {
assertEquals(404, response2.getCode());
}

@Test
public void testDisabledTableScan() throws IOException {
Response response = client.get("/" + DISABLED_TABLE_NAME + "/*", Constants.MIMETYPE_JSON);
assertEquals(503, response.getCode());
assertTrue(Bytes.toString(response.getBody()).contains("Table disabled."));
}
}