dengzhhu653 commented on code in PR #6269:
URL: https://github.com/apache/hive/pull/6269#discussion_r2702945307
##########
standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/handler/AbstractRequestHandler.java:
##########
@@ -35,65 +37,64 @@
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicLong;
+import org.apache.commons.lang3.StringUtils;
import org.apache.hadoop.hive.metastore.IHMSHandler;
-import org.apache.hadoop.hive.metastore.api.AddPartitionsRequest;
import org.apache.hadoop.hive.metastore.api.AsyncOperationResp;
-import org.apache.hadoop.hive.metastore.api.DropDatabaseRequest;
-import org.apache.hadoop.hive.metastore.api.DropPartitionsRequest;
-import org.apache.hadoop.hive.metastore.api.DropTableRequest;
import org.apache.hadoop.hive.metastore.api.MetaException;
import org.apache.hadoop.hive.metastore.conf.MetastoreConf;
import org.apache.hadoop.hive.metastore.metrics.Metrics;
import org.apache.hadoop.hive.metastore.metrics.MetricsConstants;
import org.apache.thrift.TBase;
import org.apache.thrift.TException;
+import org.reflections.Reflections;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static
org.apache.hadoop.hive.metastore.ExceptionHandler.handleException;
import static
org.apache.hadoop.hive.metastore.conf.MetastoreConf.ConfVars.HIVE_IN_TEST;
-
-public abstract class AbstractOperationHandler<T extends TBase, A extends
AbstractOperationHandler.Result> {
-
- private static final Logger LOG =
LoggerFactory.getLogger(AbstractOperationHandler.class);
- private static final Map<String, AbstractOperationHandler> OPID_TO_HANDLER =
new ConcurrentHashMap<>();
- private static final ScheduledExecutorService OPID_CLEANER =
Executors.newScheduledThreadPool(1, r -> {
+import static org.apache.hadoop.hive.metastore.utils.JavaUtils.getField;
+import static org.apache.hadoop.hive.metastore.utils.JavaUtils.newInstance;
+
+public abstract class AbstractRequestHandler<T extends TBase, A extends
AbstractRequestHandler.Result> {
+ private static final Logger LOG =
LoggerFactory.getLogger(AbstractRequestHandler.class);
+ private static final Map<String, AbstractRequestHandler> ID_TO_HANDLER = new
ConcurrentHashMap<>();
+ private static final AtomicLong ID_GEN = new AtomicLong(0);
+ private static final ScheduledExecutorService REQUEST_CLEANER =
Executors.newScheduledThreadPool(1, r -> {
Thread thread = new Thread(r);
thread.setDaemon(true);
- thread.setName("OperationHandler-Cleaner");
+ thread.setName("RequestHandler-Cleaner");
return thread;
});
private static final Map<Class<? extends TBase>, HandlerFactory>
REQ_FACTORIES = new ConcurrentHashMap<>();
static {
- REQ_FACTORIES.put(DropTableRequest.class, (base, request) -> {
- DropTableRequest req = (DropTableRequest) request;
- AbstractOperationHandler opHandler = ofCache(req.getId(),
req.isCancel());
- if (opHandler == null) {
- opHandler = new DropTableHandler(base, req);
+ Set<Class<? extends AbstractRequestHandler>> handlerClasses =
+ new
Reflections("org.apache.hadoop.hive.metastore.handler").getSubTypesOf(AbstractRequestHandler.class);
+ for (Class<? extends AbstractRequestHandler> clz : handlerClasses) {
+ if (Modifier.isAbstract(clz.getModifiers())) {
+ continue;
}
- return opHandler;
- });
-
- REQ_FACTORIES.put(DropDatabaseRequest.class, (base, request) -> {
- DropDatabaseRequest req = (DropDatabaseRequest) request;
- AbstractOperationHandler opHandler = ofCache(req.getId(),
req.isCancel());
- if (opHandler == null) {
- opHandler = new DropDatabaseHandler(base, req);
+ RequestHandler handler = clz.getAnnotation(RequestHandler.class);
+ Class<? extends TBase> requestBody;
+ if (handler == null || (requestBody = handler.requestBody()) == null) {
+ continue;
Review Comment:
ack
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]