diff --git standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
index 94698e6771..c546a70df7 100644
--- standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
+++ standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
@@ -66,6 +66,7 @@
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
+import java.util.function.Supplier;
import java.util.regex.Pattern;
import javax.jdo.JDOException;
@@ -4979,14 +4980,19 @@ public Partition get_partition(final String db_name, final String tbl_name,
private void fireReadTablePreEvent(String catName, String dbName, String tblName)
throws MetaException, NoSuchObjectException {
if(preListeners.size() > 0) {
- // do this only if there is a pre event listener registered (avoid unnecessary
- // metastore api call)
- Table t = getMS().getTable(catName, dbName, tblName);
- if (t == null) {
- throw new NoSuchObjectException(TableName.getQualified(catName, dbName, tblName)
- + " table not found");
- }
- firePreEvent(new PreReadTableEvent(t, this));
+ Supplier
tableSupplier = () -> {
+ try {
+ Table t = getMS().getTable(catName, dbName, tblName);
+ if (t == null) {
+ throw new NoSuchObjectException(TableName.getQualified(catName, dbName, tblName)
+ + " table not found");
+ }
+ return t;
+ } catch(MetaException | NoSuchObjectException e) {
+ throw new RuntimeException(e);
+ }
+ };
+ firePreEvent(new PreReadTableEvent(tableSupplier, this));
}
}
diff --git standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/events/PreReadTableEvent.java standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/events/PreReadTableEvent.java
index beec72bc12..688ec3ad70 100644
--- standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/events/PreReadTableEvent.java
+++ standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/events/PreReadTableEvent.java
@@ -23,6 +23,8 @@
import org.apache.hadoop.hive.metastore.IHMSHandler;
import org.apache.hadoop.hive.metastore.api.Table;
+import java.util.function.Supplier;
+
/**
* Table read event
*/
@@ -30,18 +32,23 @@
@InterfaceStability.Stable
public class PreReadTableEvent extends PreEventContext {
- private final Table table;
+ private final Supplier tableSupplier;
public PreReadTableEvent(Table table, IHMSHandler handler) {
super(PreEventType.READ_TABLE, handler);
- this.table = table;
+ this.tableSupplier = () -> table;
+ }
+
+ public PreReadTableEvent(Supplier tableSupplier, IHMSHandler handler) {
+ super(PreEventType.READ_TABLE, handler);
+ this.tableSupplier = tableSupplier;
}
/**
* @return the table
*/
public Table getTable() {
- return table;
+ return tableSupplier.get();
}
}