nsivabalan commented on code in PR #19033:
URL: https://github.com/apache/hudi/pull/19033#discussion_r3737161425


##########
hudi-sync/hudi-hive-sync/src/main/java/org/apache/hudi/hive/util/HiveMetaStoreClientPool.java:
##########
@@ -0,0 +1,262 @@
+/*
+ * 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.hudi.hive.util;
+
+import org.apache.hudi.exception.HoodieException;
+import org.apache.hudi.hive.HiveSyncConfig;
+
+import org.apache.hadoop.hive.conf.HiveConf;
+import org.apache.hadoop.hive.metastore.IMetaStoreClient;
+import org.apache.hadoop.hive.metastore.RetryingMetaStoreClient;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.ArrayBlockingQueue;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ThreadFactory;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * Pool of {@link IMetaStoreClient} instances for parallel partition sync.
+ *
+ * <p>Each pooled client wraps an independent Thrift connection to the Hive 
Metastore.
+ * Callers borrow a client via {@link #run(ClientAction)}, which blocks until 
a client
+ * is available, executes the action, and returns the client to the pool. A 
worker
+ * thread pool of the same size is exposed via {@link #executor()} so callers 
can fan
+ * out their batches to match the number of available clients.
+ *
+ * <p><b>Usage contract:</b> pool clients must be used <i>only</i> for 
partition-row
+ * operations — {@code add_partitions}, {@code alter_partitions}, {@code 
dropPartition},
+ * {@code getPartition}. Table-row operations ({@code createTable}, {@code 
alter_table},
+ * {@code getTable} used as the read half of a read-modify-write of table 
parameters)
+ * must continue to go through the session client held by
+ * {@code HoodieHiveSyncClient.client} on the sync driver thread. Mixing the 
two would
+ * risk lost updates on table parameters such as the last-commit-time-synced 
marker.
+ *
+ * <p>The pool is gated behind {@code 
hoodie.datasource.hive_sync.batching.enabled} and
+ * is constructed for sync mode HIVEQL, where it backs the DROP path only. 
DROP goes
+ * through {@code IMetaStoreClient.dropPartition} (Thrift), whereas 
ADD/UPDATE/TOUCH go
+ * through the thread-bound Hive {@code Driver} and use {@code HiveDriverPool} 
instead.

Review Comment:
   Done in 4d0ac71 — renamed to `HiveMetaStoreClientPool`.
   
   Agreed on the reasoning: with `IMetaStoreClient` (a genuine interface) 
imported in the same files, the `I` prefix on a concrete pool class is actively 
misleading. The class is introduced by this PR and has no callers outside it, 
so there is no deprecation path to worry about — free to do now, awkward after 
merge.
   
   Left the log and exception strings that read "IMetaStoreClient pool" as they 
were: those describe a pool *of* `IMetaStoreClient` instances, which is still 
accurate. Renaming them would have made them less correct, not more.
   
   Test class renamed to `TestHiveMetaStoreClientPool` alongside it. Git 
recorded both as renames, so the diff should stay readable.



##########
hudi-sync/hudi-hive-sync/src/main/java/org/apache/hudi/hive/util/HiveMetaStoreClientPool.java:
##########
@@ -0,0 +1,262 @@
+/*
+ * 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.hudi.hive.util;
+
+import org.apache.hudi.exception.HoodieException;
+import org.apache.hudi.hive.HiveSyncConfig;
+
+import org.apache.hadoop.hive.conf.HiveConf;
+import org.apache.hadoop.hive.metastore.IMetaStoreClient;
+import org.apache.hadoop.hive.metastore.RetryingMetaStoreClient;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.ArrayBlockingQueue;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ThreadFactory;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * Pool of {@link IMetaStoreClient} instances for parallel partition sync.
+ *
+ * <p>Each pooled client wraps an independent Thrift connection to the Hive 
Metastore.
+ * Callers borrow a client via {@link #run(ClientAction)}, which blocks until 
a client
+ * is available, executes the action, and returns the client to the pool. A 
worker
+ * thread pool of the same size is exposed via {@link #executor()} so callers 
can fan
+ * out their batches to match the number of available clients.
+ *
+ * <p><b>Usage contract:</b> pool clients must be used <i>only</i> for 
partition-row
+ * operations — {@code add_partitions}, {@code alter_partitions}, {@code 
dropPartition},
+ * {@code getPartition}. Table-row operations ({@code createTable}, {@code 
alter_table},
+ * {@code getTable} used as the read half of a read-modify-write of table 
parameters)
+ * must continue to go through the session client held by
+ * {@code HoodieHiveSyncClient.client} on the sync driver thread. Mixing the 
two would
+ * risk lost updates on table parameters such as the last-commit-time-synced 
marker.
+ *
+ * <p>The pool is gated behind {@code 
hoodie.datasource.hive_sync.batching.enabled} and
+ * is constructed for sync mode HIVEQL, where it backs the DROP path only. 
DROP goes
+ * through {@code IMetaStoreClient.dropPartition} (Thrift), whereas 
ADD/UPDATE/TOUCH go
+ * through the thread-bound Hive {@code Driver} and use {@code HiveDriverPool} 
instead.

Review Comment:
   Done in 4d0ac71 — renamed to `HiveMetaStoreClientPool`.
   
   Agreed on the reasoning: with `IMetaStoreClient` (a genuine interface) 
imported in the same files, the `I` prefix on a concrete pool class is actively 
misleading. The class is introduced by this PR and has no callers outside it, 
so there is no deprecation path to worry about — free to do now, awkward after 
merge.
   
   Left the log and exception strings that read "IMetaStoreClient pool" as they 
were: those describe a pool *of* `IMetaStoreClient` instances, which is still 
accurate. Renaming them would have made them less correct, not more.
   
   Test class renamed to `TestHiveMetaStoreClientPool` alongside it. Git 
recorded both as renames, so the diff should stay readable.



-- 
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]

Reply via email to