diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ConstantFoldingRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ConstantFoldingRule.java
index d8fa3d6..176a678 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ConstantFoldingRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ConstantFoldingRule.java
@@ -137,7 +137,7 @@
     private static final IOperatorSchema[] _emptySchemas = new IOperatorSchema[] {};
 
     public ConstantFoldingRule(ICcApplicationContext appCtx) {
-        MetadataProvider metadataProvider = new MetadataProvider(appCtx, null);
+        MetadataProvider metadataProvider = MetadataProvider.create(appCtx, null);
         jobGenCtx = new JobGenContext(null, metadataProvider, appCtx, SerializerDeserializerProvider.INSTANCE,
                 BinaryHashFunctionFactoryProvider.INSTANCE, BinaryHashFunctionFamilyProvider.INSTANCE,
                 BinaryComparatorFactoryProvider.INSTANCE, TypeTraitProvider.INSTANCE, BinaryBooleanInspector.FACTORY,
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ConnectorApiServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ConnectorApiServlet.java
index 2a08511..2fafcfc 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ConnectorApiServlet.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ConnectorApiServlet.java
@@ -93,7 +93,7 @@
             MetadataManager.INSTANCE.init();
             MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
             // Retrieves file splits of the dataset.
-            MetadataProvider metadataProvider = new MetadataProvider(appCtx, null);
+            MetadataProvider metadataProvider = MetadataProvider.create(appCtx, null);
             try {
                 metadataProvider.setMetadataTxnContext(mdTxnCtx);
                 Dataset dataset = metadataProvider.findDataset(dataverseName, datasetName);
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/RebalanceApiServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/RebalanceApiServlet.java
index 02d75f9..62b96bc 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/RebalanceApiServlet.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/RebalanceApiServlet.java
@@ -246,7 +246,7 @@
     private void rebalanceDataset(DataverseName dataverseName, String datasetName, String[] targetNodes)
             throws Exception {
         IHyracksClientConnection hcc = (IHyracksClientConnection) ctx.get(HYRACKS_CONNECTION_ATTR);
-        MetadataProvider metadataProvider = new MetadataProvider(appCtx, null);
+        MetadataProvider metadataProvider = MetadataProvider.create(appCtx, null);
         try {
             ActiveNotificationHandler activeNotificationHandler =
                     (ActiveNotificationHandler) appCtx.getActiveNotificationHandler();
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveEntityEventsListener.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveEntityEventsListener.java
index 882afc5..55022f9 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveEntityEventsListener.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveEntityEventsListener.java
@@ -113,7 +113,7 @@
         this.statementExecutor = statementExecutor;
         this.appCtx = appCtx;
         this.clusterStateManager = appCtx.getClusterStateManager();
-        this.metadataProvider = new MetadataProvider(appCtx, null);
+        this.metadataProvider = MetadataProvider.create(appCtx, null);
         this.hcc = hcc;
         this.entityId = entityId;
         this.datasets = datasets;
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/RecoveryTask.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/RecoveryTask.java
index 6efda9f..0ee41cd 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/RecoveryTask.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/RecoveryTask.java
@@ -52,7 +52,7 @@
             IRetryPolicyFactory retryPolicyFactory) {
         this.listener = listener;
         this.retryPolicyFactory = retryPolicyFactory;
-        this.metadataProvider = new MetadataProvider(appCtx, null);
+        this.metadataProvider = MetadataProvider.create(appCtx, null);
         this.clusterStateManager = appCtx.getClusterStateManager();
     }
 
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/cc/CCExtensionManager.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/cc/CCExtensionManager.java
index 7f632f0..e3c177e 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/cc/CCExtensionManager.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/cc/CCExtensionManager.java
@@ -22,6 +22,7 @@
 import java.util.List;
 import java.util.Set;
 import java.util.concurrent.ExecutorService;
+import java.util.function.Function;
 
 import org.apache.asterix.algebra.base.ILangExtension;
 import org.apache.asterix.algebra.base.ILangExtension.Language;
@@ -31,19 +32,22 @@
 import org.apache.asterix.common.cluster.IGlobalRecoveryManager;
 import org.apache.asterix.common.config.AsterixExtension;
 import org.apache.asterix.common.context.IStorageComponentProvider;
+import org.apache.asterix.common.dataflow.ICcApplicationContext;
 import org.apache.asterix.common.exceptions.ErrorCode;
 import org.apache.asterix.common.exceptions.RuntimeDataException;
 import org.apache.asterix.compiler.provider.AqlCompilationProvider;
 import org.apache.asterix.compiler.provider.ILangCompilationProvider;
 import org.apache.asterix.compiler.provider.SqlppCompilationProvider;
 import org.apache.asterix.hyracks.bootstrap.GlobalRecoveryManager;
-import org.apache.asterix.om.functions.IFunctionExtensionManager;
+import org.apache.asterix.metadata.api.ICCExtensionManager;
+import org.apache.asterix.metadata.api.IMetadataExtension;
 import org.apache.asterix.om.functions.IFunctionManager;
 import org.apache.asterix.runtime.functions.FunctionCollection;
 import org.apache.asterix.runtime.functions.FunctionManager;
 import org.apache.asterix.translator.IStatementExecutorFactory;
 import org.apache.asterix.utils.ExtensionUtil;
 import org.apache.hyracks.algebricks.common.utils.Pair;
+import org.apache.hyracks.algebricks.core.algebra.metadata.IMetadataProvider;
 import org.apache.hyracks.api.application.ICCServiceContext;
 import org.apache.hyracks.api.client.IHyracksClientConnection;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
@@ -52,14 +56,15 @@
  * AsterixDB's implementation of {@code IAlgebraExtensionManager} and {@code IFunctionExtensionManager}
  * which takes care of initializing extensions for App and Compilation purposes
  */
-public class CCExtensionManager implements IFunctionExtensionManager {
+public class CCExtensionManager implements ICCExtensionManager {
 
     private final IStatementExecutorExtension statementExecutorExtension;
     private final ILangCompilationProvider aqlCompilationProvider;
     private final ILangCompilationProvider sqlppCompilationProvider;
     private final IFunctionManager functionManager;
     private final IGlobalRecoveryExtension globalRecoveryExtension;
-    private transient IStatementExecutorFactory statementExecutorFactory;
+    private final Function<ICcApplicationContext, IMetadataProvider<?, ?>> metadataProviderFactory;
+    private IStatementExecutorFactory statementExecutorFactory;
 
     /**
      * Initialize {@link org.apache.asterix.app.cc.CCExtensionManager} from configuration
@@ -78,6 +83,7 @@
         Pair<ExtensionId, IFunctionManager> fm = null;
         IStatementExecutorExtension see = null;
         IGlobalRecoveryExtension gre = null;
+        IMetadataExtension mpfe = null;
         if (list != null) {
             Set<ExtensionId> extensionIds = new HashSet<>();
             for (AsterixExtension extensionConf : list) {
@@ -99,7 +105,9 @@
                     case RECOVERY:
                         gre = (IGlobalRecoveryExtension) extension;
                         break;
-                    default:
+                    case METADATA:
+                        IMetadataExtension mde = (IMetadataExtension) extension;
+                        mpfe = ExtensionUtil.extendMetadataProviderFactory(mpfe, mde);
                         break;
                 }
             }
@@ -110,6 +118,7 @@
         this.functionManager =
                 fm == null ? new FunctionManager(FunctionCollection.createDefaultFunctionCollection()) : fm.second;
         this.globalRecoveryExtension = gre;
+        this.metadataProviderFactory = mpfe != null ? mpfe.getMetadataProviderFactory() : null;
     }
 
     /** @deprecated use getStatementExecutorFactory instead */
@@ -150,4 +159,9 @@
     public IFunctionManager getFunctionManager() {
         return functionManager;
     }
-}
+
+    @Override
+    public Function<ICcApplicationContext, IMetadataProvider<?, ?>> getMetadataProviderFactory() {
+        return metadataProviderFactory;
+    }
+}
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
index 6351d0d..64a9a63 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
@@ -298,7 +298,7 @@
                     sessionOutput.out().println(ApiServlet.HTML_STATEMENT_SEPARATOR);
                 }
                 validateOperation(appCtx, activeDataverse, stmt);
-                MetadataProvider metadataProvider = new MetadataProvider(appCtx, activeDataverse);
+                MetadataProvider metadataProvider = MetadataProvider.create(appCtx, activeDataverse);
                 metadataProvider.getConfig().putAll(config);
                 metadataProvider.setWriterFactory(writerFactory);
                 metadataProvider.setResultSerializerFactoryProvider(resultSerializerFactoryProvider);
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/GlobalRecoveryManager.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/GlobalRecoveryManager.java
index 5fc5c57..8165316 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/GlobalRecoveryManager.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/GlobalRecoveryManager.java
@@ -143,7 +143,7 @@
     private MetadataTransactionContext recoverDatasets(ICcApplicationContext appCtx,
             MetadataTransactionContext mdTxnCtx, Dataverse dataverse) throws Exception {
         if (!dataverse.getDataverseName().equals(MetadataConstants.METADATA_DATAVERSE_NAME)) {
-            MetadataProvider metadataProvider = new MetadataProvider(appCtx, dataverse);
+            MetadataProvider metadataProvider = MetadataProvider.create(appCtx, dataverse);
             try {
                 List<Dataset> datasets =
                         MetadataManager.INSTANCE.getDataverseDatasets(mdTxnCtx, dataverse.getDataverseName());
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/utils/ExtensionUtil.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/utils/ExtensionUtil.java
index 380c5a9..c3d1ac5 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/utils/ExtensionUtil.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/utils/ExtensionUtil.java
@@ -103,7 +103,7 @@
     }
 
     /**
-     * Validate no extension conflict and extends tuple translator provider
+     * Validates no extension conflict and extends tuple translator provider
      *
      * @param metadataExtension
      *            place holder for tuple translator provider extension
@@ -121,4 +121,24 @@
         }
         return mde.getMetadataTupleTranslatorProvider() == null ? null : mde;
     }
+
+    /**
+     * Validates no extension conflict and extends metadata provider factory
+     *
+     * @param metadataExtension
+     *            place holder for metadata provider factory
+     * @param mde
+     *            user defined metadata extension
+     * @return the metadata extension if the extension defines a metadata provider factory, null otherwise
+     * @throws RuntimeDataException
+     *             if an extension conflict was detected
+     */
+    public static IMetadataExtension extendMetadataProviderFactory(IMetadataExtension metadataExtension,
+            IMetadataExtension mde) throws RuntimeDataException {
+        if (metadataExtension != null) {
+            throw new RuntimeDataException(ErrorCode.EXTENSION_COMPONENT_CONFLICT, metadataExtension.getId(),
+                    mde.getId(), IMetadataExtension.class.getSimpleName());
+        }
+        return mde.getMetadataProviderFactory() == null ? null : mde;
+    }
 }
diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/api/http/servlet/ConnectorApiServletTest.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/api/http/servlet/ConnectorApiServletTest.java
index 5c6f0b6..a4ffab5 100644
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/api/http/servlet/ConnectorApiServletTest.java
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/api/http/servlet/ConnectorApiServletTest.java
@@ -181,8 +181,8 @@
     private ARecordType getMetadataRecordType(DataverseName dataverseName, String datasetName) throws Exception {
         MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
         // Retrieves file splits of the dataset.
-        MetadataProvider metadataProvider = new MetadataProvider(
-                (ICcApplicationContext) ExecutionTestUtil.integrationUtil.cc.getApplicationContext(), null);
+        MetadataProvider metadataProvider = MetadataProvider
+                .create((ICcApplicationContext) ExecutionTestUtil.integrationUtil.cc.getApplicationContext(), null);
         try {
             metadataProvider.setMetadataTxnContext(mdTxnCtx);
             Dataset dataset = metadataProvider.findDataset(dataverseName, datasetName);
diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/app/bootstrap/TestNodeController.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/app/bootstrap/TestNodeController.java
index ccbf5ec..9f37c9b 100644
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/app/bootstrap/TestNodeController.java
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/app/bootstrap/TestNodeController.java
@@ -223,7 +223,7 @@
             throws AlgebricksException, HyracksDataException, RemoteException, ACIDException {
         CcApplicationContext appCtx =
                 (CcApplicationContext) ExecutionTestUtil.integrationUtil.cc.getApplicationContext();
-        MetadataProvider mdProvider = new MetadataProvider(appCtx, null);
+        MetadataProvider mdProvider = MetadataProvider.create(appCtx, null);
         try {
             MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
             org.apache.hyracks.algebricks.common.utils.Pair<ILSMMergePolicyFactory, Map<String, String>> mergePolicy =
@@ -330,7 +330,7 @@
             throws AlgebricksException, HyracksDataException, RemoteException, ACIDException {
         CcApplicationContext appCtx =
                 (CcApplicationContext) ExecutionTestUtil.integrationUtil.cc.getApplicationContext();
-        MetadataProvider mdProvider = new MetadataProvider(appCtx, null);
+        MetadataProvider mdProvider = MetadataProvider.create(appCtx, null);
         try {
             MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
             org.apache.hyracks.algebricks.common.utils.Pair<ILSMMergePolicyFactory, Map<String, String>> mergePolicy =
@@ -458,7 +458,7 @@
         Index index = primaryIndexInfo.getIndex();
         CcApplicationContext appCtx =
                 (CcApplicationContext) ExecutionTestUtil.integrationUtil.cc.getApplicationContext();
-        MetadataProvider mdProvider = new MetadataProvider(appCtx, dataverse);
+        MetadataProvider mdProvider = MetadataProvider.create(appCtx, dataverse);
         try {
             return dataset.getResourceFactory(mdProvider, index, primaryIndexInfo.recordType, primaryIndexInfo.metaType,
                     primaryIndexInfo.mergePolicyFactory, primaryIndexInfo.mergePolicyProperties);
@@ -479,7 +479,7 @@
                 mergePolicy.first, mergePolicy.second, filterFields, primaryKeyIndexes, primaryKeyIndicators);
         Dataverse dataverse = new Dataverse(dataset.getDataverseName(), NonTaggedDataFormat.class.getName(),
                 MetadataUtil.PENDING_NO_OP);
-        MetadataProvider mdProvider = new MetadataProvider(
+        MetadataProvider mdProvider = MetadataProvider.create(
                 (ICcApplicationContext) ExecutionTestUtil.integrationUtil.cc.getApplicationContext(), dataverse);
         try {
             IResourceFactory resourceFactory = dataset.getResourceFactory(mdProvider, primaryIndexInfo.index,
@@ -505,7 +505,7 @@
         MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
         Dataverse dataverse = new Dataverse(primaryIndexInfo.dataset.getDataverseName(),
                 NonTaggedDataFormat.class.getName(), MetadataUtil.PENDING_NO_OP);
-        MetadataProvider mdProvider = new MetadataProvider(
+        MetadataProvider mdProvider = MetadataProvider.create(
                 (ICcApplicationContext) ExecutionTestUtil.integrationUtil.cc.getApplicationContext(), dataverse);
         SecondaryIndexInfo secondaryIndexInfo = new SecondaryIndexInfo(primaryIndexInfo, secondaryIndex);
         try {
@@ -780,7 +780,7 @@
             int[] keyIndexes, List<Integer> keyIndicators, StorageComponentProvider storageComponentProvider,
             IFrameOperationCallbackFactory frameOpCallbackFactory, boolean hasSecondaries) throws Exception {
         MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
-        MetadataProvider mdProvider = new MetadataProvider(
+        MetadataProvider mdProvider = MetadataProvider.create(
                 (ICcApplicationContext) ExecutionTestUtil.integrationUtil.cc.getApplicationContext(),
                 MetadataBuiltinEntities.DEFAULT_DATAVERSE);
         org.apache.hyracks.algebricks.common.utils.Pair<ILSMMergePolicyFactory, Map<String, String>> mergePolicy =
diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/common/TestDataUtil.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/common/TestDataUtil.java
index b184053..dfe696f 100644
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/common/TestDataUtil.java
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/common/TestDataUtil.java
@@ -158,7 +158,7 @@
             String datasetName, String[] targetNodes) throws Exception {
         ICcApplicationContext ccAppCtx =
                 (ICcApplicationContext) integrationUtil.getClusterControllerService().getApplicationContext();
-        MetadataProvider metadataProvider = new MetadataProvider(ccAppCtx, null);
+        MetadataProvider metadataProvider = MetadataProvider.create(ccAppCtx, null);
         try {
             ActiveNotificationHandler activeNotificationHandler =
                     (ActiveNotificationHandler) ccAppCtx.getActiveNotificationHandler();
@@ -190,7 +190,7 @@
             throws AlgebricksException, RemoteException {
         final ICcApplicationContext appCtx =
                 (ICcApplicationContext) integrationUtil.getClusterControllerService().getApplicationContext();
-        final MetadataProvider metadataProvider = new MetadataProvider(appCtx, null);
+        final MetadataProvider metadataProvider = MetadataProvider.create(appCtx, null);
         final MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
         metadataProvider.setMetadataTxnContext(mdTxnCtx);
         Dataset dataset;
diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/active/ActiveEventsListenerTest.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/active/ActiveEventsListenerTest.java
index bc38254..21b364f 100644
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/active/ActiveEventsListenerTest.java
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/active/ActiveEventsListenerTest.java
@@ -43,12 +43,12 @@
 import org.apache.asterix.common.metadata.DataverseName;
 import org.apache.asterix.external.feed.watch.WaitForStateSubscriber;
 import org.apache.asterix.file.StorageComponentProvider;
+import org.apache.asterix.metadata.api.ICCExtensionManager;
 import org.apache.asterix.metadata.bootstrap.MetadataBuiltinEntities;
 import org.apache.asterix.metadata.declared.MetadataProvider;
 import org.apache.asterix.metadata.entities.Dataset;
 import org.apache.asterix.metadata.entities.Feed;
 import org.apache.asterix.metadata.lock.MetadataLockManager;
-import org.apache.asterix.om.functions.IFunctionExtensionManager;
 import org.apache.asterix.runtime.functions.FunctionCollection;
 import org.apache.asterix.runtime.functions.FunctionManager;
 import org.apache.asterix.runtime.utils.CcApplicationContext;
@@ -89,7 +89,7 @@
     static CcApplicationContext appCtx;
     static IStatementExecutor statementExecutor;
     static IHyracksClientConnection hcc;
-    static IFunctionExtensionManager functionExtensionManager;
+    static ICCExtensionManager ccExtensionManager;
     static MetadataProvider metadataProvider;
     static IStorageComponentProvider componentProvider;
     static JobIdFactory jobIdFactory;
@@ -130,11 +130,11 @@
         Mockito.when(ccServiceCtx.getControllerService()).thenReturn(ccService);
         Mockito.when(ccService.getExecutor()).thenReturn(executor);
         locations = new AlgebricksAbsolutePartitionConstraint(nodes);
-        functionExtensionManager = Mockito.mock(IFunctionExtensionManager.class);
-        Mockito.when(functionExtensionManager.getFunctionManager())
+        ccExtensionManager = Mockito.mock(ICCExtensionManager.class);
+        Mockito.when(ccExtensionManager.getFunctionManager())
                 .thenReturn(new FunctionManager(FunctionCollection.createDefaultFunctionCollection()));
-        Mockito.when(appCtx.getExtensionManager()).thenReturn(functionExtensionManager);
-        metadataProvider = new MetadataProvider(appCtx, null);
+        Mockito.when(appCtx.getExtensionManager()).thenReturn(ccExtensionManager);
+        metadataProvider = MetadataProvider.create(appCtx, null);
         clusterController = new TestClusterControllerActor("CC", handler, allDatasets);
         nodeControllers = new TestNodeControllerActor[2];
         nodeControllers[0] = new TestNodeControllerActor(nodes[0], clusterController);
@@ -149,7 +149,7 @@
     }
 
     TestUserActor newUser(String name, CcApplicationContext appCtx) {
-        MetadataProvider actorMdProvider = new MetadataProvider(appCtx, null);
+        MetadataProvider actorMdProvider = MetadataProvider.create(appCtx, null);
         return new TestUserActor("User: " + name, actorMdProvider, clusterController);
     }
 
@@ -1522,10 +1522,10 @@
             CcApplicationContext ccAppCtx = Mockito.mock(CcApplicationContext.class);
             IStatementExecutor statementExecutor = Mockito.mock(IStatementExecutor.class);
             IHyracksClientConnection hcc = Mockito.mock(IHyracksClientConnection.class);
-            IFunctionExtensionManager functionExtensionManager = Mockito.mock(IFunctionExtensionManager.class);
-            Mockito.when(functionExtensionManager.getFunctionManager())
+            ICCExtensionManager ccExtensionManager = Mockito.mock(ICCExtensionManager.class);
+            Mockito.when(ccExtensionManager.getFunctionManager())
                     .thenReturn(new FunctionManager(FunctionCollection.createDefaultFunctionCollection()));
-            Mockito.when(ccAppCtx.getExtensionManager()).thenReturn(functionExtensionManager);
+            Mockito.when(ccAppCtx.getExtensionManager()).thenReturn(ccExtensionManager);
             Mockito.when(ccAppCtx.getActiveNotificationHandler()).thenReturn(handler);
             Mockito.when(ccAppCtx.getMetadataLockManager()).thenReturn(lockManager);
             Mockito.when(ccAppCtx.getServiceContext()).thenReturn(ccServiceCtx);
diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/active/ActiveStatsTest.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/active/ActiveStatsTest.java
index bc40304..963ba7c 100644
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/active/ActiveStatsTest.java
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/active/ActiveStatsTest.java
@@ -103,7 +103,7 @@
                 .create(appCtx, Collections.emptyList(), sessionOutput,
                         extensionManager.getCompilationProvider(Language.SQLPP), appCtx.getStorageComponentProvider(),
                         new ResponsePrinter(sessionOutput));
-        MetadataProvider mdProvider = new MetadataProvider(appCtx, null);
+        MetadataProvider mdProvider = MetadataProvider.create(appCtx, null);
         // Add event listener
         ActiveEntityEventsListener eventsListener = new DummyFeedEventsListener(statementExecutor, appCtx, null,
                 entityId, datasetList, partitionConstraint, FeedIntakeOperatorNodePushable.class.getSimpleName(),
diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/ddl/SecondaryBTreeOperationsHelperTest.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/ddl/SecondaryBTreeOperationsHelperTest.java
index 726a1bf..5a78ea8 100644
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/ddl/SecondaryBTreeOperationsHelperTest.java
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/ddl/SecondaryBTreeOperationsHelperTest.java
@@ -63,7 +63,7 @@
     public void createPrimaryIndex() throws Exception {
         ICcApplicationContext appCtx =
                 (ICcApplicationContext) integrationUtil.getClusterControllerService().getApplicationContext();
-        final MetadataProvider metadataProvider = new MetadataProvider(appCtx, null);
+        final MetadataProvider metadataProvider = MetadataProvider.create(appCtx, null);
         MetadataTransactionContext mdTxn = MetadataManager.INSTANCE.beginTransaction();
         metadataProvider.setMetadataTxnContext(mdTxn);
         try {
diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/metadata/MetadataTxnTest.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/metadata/MetadataTxnTest.java
index a758511..d4cb04f 100644
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/metadata/MetadataTxnTest.java
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/metadata/MetadataTxnTest.java
@@ -77,7 +77,7 @@
     public void abortMetadataTxn() throws Exception {
         ICcApplicationContext appCtx =
                 (ICcApplicationContext) integrationUtil.getClusterControllerService().getApplicationContext();
-        final MetadataProvider metadataProvider = new MetadataProvider(appCtx, null);
+        final MetadataProvider metadataProvider = MetadataProvider.create(appCtx, null);
         final MetadataTransactionContext mdTxn = MetadataManager.INSTANCE.beginTransaction();
         metadataProvider.setMetadataTxnContext(mdTxn);
         final String nodeGroupName = "ng";
@@ -116,7 +116,7 @@
                 "CREATE DATASET " + datasetName + "(KeyType) PRIMARY KEY id on " + nodeGroup + ";", format);
         // find source dataset
         Dataset sourceDataset;
-        MetadataProvider metadataProvider = new MetadataProvider(appCtx, null);
+        MetadataProvider metadataProvider = MetadataProvider.create(appCtx, null);
         final MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
         metadataProvider.setMetadataTxnContext(mdTxnCtx);
         try {
@@ -127,7 +127,7 @@
         }
 
         // create rebalance metadata provider and metadata txn
-        metadataProvider = new MetadataProvider(appCtx, null);
+        metadataProvider = MetadataProvider.create(appCtx, null);
         final MetadataTransactionContext rebalanceTxn = MetadataManager.INSTANCE.beginTransaction();
         metadataProvider.setMetadataTxnContext(rebalanceTxn);
         try {
@@ -165,7 +165,7 @@
         // get created dataset
         ICcApplicationContext appCtx =
                 (ICcApplicationContext) integrationUtil.getClusterControllerService().getApplicationContext();
-        MetadataProvider metadataProvider = new MetadataProvider(appCtx, null);
+        MetadataProvider metadataProvider = MetadataProvider.create(appCtx, null);
         final MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
         metadataProvider.setMetadataTxnContext(mdTxnCtx);
         Dataset sourceDataset;
@@ -224,7 +224,7 @@
     public void surviveInterruptOnMetadataTxnCommit() throws Exception {
         ICcApplicationContext appCtx =
                 (ICcApplicationContext) integrationUtil.getClusterControllerService().getApplicationContext();
-        final MetadataProvider metadataProvider = new MetadataProvider(appCtx, null);
+        final MetadataProvider metadataProvider = MetadataProvider.create(appCtx, null);
         final MetadataTransactionContext mdTxn = MetadataManager.INSTANCE.beginTransaction();
         metadataProvider.setMetadataTxnContext(mdTxn);
         final String nodeGroupName = "ng";
@@ -256,7 +256,7 @@
     public void failedFlushOnUncommittedMetadataTxn() throws Exception {
         ICcApplicationContext ccAppCtx =
                 (ICcApplicationContext) integrationUtil.getClusterControllerService().getApplicationContext();
-        final MetadataProvider metadataProvider = new MetadataProvider(ccAppCtx, null);
+        final MetadataProvider metadataProvider = MetadataProvider.create(ccAppCtx, null);
         final MetadataTransactionContext mdTxn = MetadataManager.INSTANCE.beginTransaction();
         metadataProvider.setMetadataTxnContext(mdTxn);
         final String nodeGroupName = "ng";
@@ -322,7 +322,7 @@
         Dataset dataset = new Dataset(source.getDataverseName(), "ds_" + datasetPostfix, source.getDataverseName(),
                 source.getDatasetType().name(), source.getNodeGroupName(), NoMergePolicyFactory.NAME, null,
                 source.getDatasetDetails(), source.getHints(), DatasetConfig.DatasetType.INTERNAL, datasetPostfix, 0);
-        MetadataProvider metadataProvider = new MetadataProvider(appCtx, null);
+        MetadataProvider metadataProvider = MetadataProvider.create(appCtx, null);
         final MetadataTransactionContext writeTxn = MetadataManager.INSTANCE.beginTransaction();
         metadataProvider.setMetadataTxnContext(writeTxn);
         try {
diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/storage/IndexDropOperatorNodePushableTest.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/storage/IndexDropOperatorNodePushableTest.java
index aea32f57..f7f7207 100644
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/storage/IndexDropOperatorNodePushableTest.java
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/storage/IndexDropOperatorNodePushableTest.java
@@ -147,7 +147,7 @@
             final MetadataTransactionContext mdTxn = MetadataManager.INSTANCE.beginTransaction();
             ICcApplicationContext appCtx = (ICcApplicationContext) ExecutionTestUtil.integrationUtil
                     .getClusterControllerService().getApplicationContext();
-            MetadataProvider metadataProver = new MetadataProvider(appCtx, null);
+            MetadataProvider metadataProver = MetadataProvider.create(appCtx, null);
             metadataProver.setMetadataTxnContext(mdTxn);
             final DataverseName defaultDv = MetadataBuiltinEntities.DEFAULT_DATAVERSE.getDataverseName();
             final Dataset dataset = MetadataManager.INSTANCE.getDataset(mdTxn, defaultDv, datasetName);
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/async-deferred/AsyncDeferredQueries.xml b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/async-deferred/AsyncDeferredQueries.xml
index ff75720..47eb4395 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/async-deferred/AsyncDeferredQueries.xml
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/async-deferred/AsyncDeferredQueries.xml
@@ -19,40 +19,40 @@
 <test-group name="async-deferred">
     <test-case FilePath="async-deferred">
         <compilation-unit name="async-failed">
-            <output-dir compare="Text">async-failed</output-dir>
+            <output-dir compare="Clean-JSON">async-failed</output-dir>
             <expected-error>Injected failure in inject-failure</expected-error>
         </compilation-unit>
     </test-case>
     <test-case FilePath="async-deferred">
         <compilation-unit name="async-compilation-failed">
-            <output-dir compare="Text">async-compilation-failed</output-dir>
+            <output-dir compare="Clean-JSON">async-compilation-failed</output-dir>
             <expected-error>Cannot find dataset gargel</expected-error>
         </compilation-unit>
     </test-case>
     <test-case FilePath="async-deferred">
         <compilation-unit name="deferred">
-            <output-dir compare="Text">deferred</output-dir>
+            <output-dir compare="Clean-JSON">deferred</output-dir>
         </compilation-unit>
     </test-case>
     <test-case FilePath="async-deferred">
         <compilation-unit name="async">
-            <output-dir compare="Text">async</output-dir>
+            <output-dir compare="Clean-JSON">async</output-dir>
         </compilation-unit>
     </test-case>
     <test-case FilePath="async-deferred">
         <compilation-unit name="async-repeated">
-            <output-dir compare="Text">async-repeated</output-dir>
+            <output-dir compare="Clean-JSON">async-repeated</output-dir>
         </compilation-unit>
     </test-case>
     <test-case FilePath="async-deferred">
         <compilation-unit name="async-running">
-            <output-dir compare="Text">async-running</output-dir>
+            <output-dir compare="Clean-JSON">async-running</output-dir>
         </compilation-unit>
     </test-case>
     <test-case FilePath="async-deferred">
         <compilation-unit name="async-exhausted-result">
-            <output-dir compare="Text">async-exhausted-result</output-dir>
-            <expected-error>HYR0093</expected-error>
+            <output-dir compare="Clean-JSON">async-exhausted-result</output-dir>
+            <expected-error>Premature end of chunk</expected-error> <!--TODO:REVISIT -->
             <source-location>false</source-location>
         </compilation-unit>
     </test-case>
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/async-deferred/async-exhausted-result/async-exhausted-result.3.json b/asterixdb/asterix-app/src/test/resources/runtimets/results/async-deferred/async-exhausted-result/async-exhausted-result.3.json
deleted file mode 100644
index 09e86cc..0000000
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/async-deferred/async-exhausted-result/async-exhausted-result.3.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{ "i": 1, "i2": 1 }
-{ "i": 2, "i2": 4 }
-{ "i": 3, "i2": 9 }
-{ "i": 4, "i2": 16 }
-{ "i": 5, "i2": 25 }
-{ "i": 6, "i2": 36 }
-{ "i": 7, "i2": 49 }
-{ "i": 8, "i2": 64 }
-{ "i": 9, "i2": 81 }
-{ "i": 10, "i2": 100 }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/async-deferred/async-exhausted-result/async-exhausted-result.3.regexjson b/asterixdb/asterix-app/src/test/resources/runtimets/results/async-deferred/async-exhausted-result/async-exhausted-result.3.regexjson
new file mode 100644
index 0000000..df5177b
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/async-deferred/async-exhausted-result/async-exhausted-result.3.regexjson
@@ -0,0 +1,15 @@
+{
+	"results": [
+	  { "i": 1, "i2": 1 },
+	  { "i": 2, "i2": 4 },
+	  { "i": 3, "i2": 9 },
+	  { "i": 4, "i2": 16 },
+	  { "i": 5, "i2": 25 },
+	  { "i": 6, "i2": 36 },
+	  { "i": 7, "i2": 49 },
+	  { "i": 8, "i2": 64 },
+	  { "i": 9, "i2": 81 },
+	  { "i": 10, "i2": 100 }
+  ],
+  "metrics": "R{.*}"
+}
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/async-deferred/async-repeated/async-repeated.3.json b/asterixdb/asterix-app/src/test/resources/runtimets/results/async-deferred/async-repeated/async-repeated.3.json
deleted file mode 100644
index 09e86cc..0000000
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/async-deferred/async-repeated/async-repeated.3.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{ "i": 1, "i2": 1 }
-{ "i": 2, "i2": 4 }
-{ "i": 3, "i2": 9 }
-{ "i": 4, "i2": 16 }
-{ "i": 5, "i2": 25 }
-{ "i": 6, "i2": 36 }
-{ "i": 7, "i2": 49 }
-{ "i": 8, "i2": 64 }
-{ "i": 9, "i2": 81 }
-{ "i": 10, "i2": 100 }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/async-deferred/async-repeated/async-repeated.3.regexjson b/asterixdb/asterix-app/src/test/resources/runtimets/results/async-deferred/async-repeated/async-repeated.3.regexjson
new file mode 100644
index 0000000..df5177b
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/async-deferred/async-repeated/async-repeated.3.regexjson
@@ -0,0 +1,15 @@
+{
+	"results": [
+	  { "i": 1, "i2": 1 },
+	  { "i": 2, "i2": 4 },
+	  { "i": 3, "i2": 9 },
+	  { "i": 4, "i2": 16 },
+	  { "i": 5, "i2": 25 },
+	  { "i": 6, "i2": 36 },
+	  { "i": 7, "i2": 49 },
+	  { "i": 8, "i2": 64 },
+	  { "i": 9, "i2": 81 },
+	  { "i": 10, "i2": 100 }
+  ],
+  "metrics": "R{.*}"
+}
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/async-deferred/async-repeated/async-repeated.4.json b/asterixdb/asterix-app/src/test/resources/runtimets/results/async-deferred/async-repeated/async-repeated.4.json
deleted file mode 100644
index 09e86cc..0000000
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/async-deferred/async-repeated/async-repeated.4.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{ "i": 1, "i2": 1 }
-{ "i": 2, "i2": 4 }
-{ "i": 3, "i2": 9 }
-{ "i": 4, "i2": 16 }
-{ "i": 5, "i2": 25 }
-{ "i": 6, "i2": 36 }
-{ "i": 7, "i2": 49 }
-{ "i": 8, "i2": 64 }
-{ "i": 9, "i2": 81 }
-{ "i": 10, "i2": 100 }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/async-deferred/async-repeated/async-repeated.4.regexjson b/asterixdb/asterix-app/src/test/resources/runtimets/results/async-deferred/async-repeated/async-repeated.4.regexjson
new file mode 100644
index 0000000..df5177b
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/async-deferred/async-repeated/async-repeated.4.regexjson
@@ -0,0 +1,15 @@
+{
+	"results": [
+	  { "i": 1, "i2": 1 },
+	  { "i": 2, "i2": 4 },
+	  { "i": 3, "i2": 9 },
+	  { "i": 4, "i2": 16 },
+	  { "i": 5, "i2": 25 },
+	  { "i": 6, "i2": 36 },
+	  { "i": 7, "i2": 49 },
+	  { "i": 8, "i2": 64 },
+	  { "i": 9, "i2": 81 },
+	  { "i": 10, "i2": 100 }
+  ],
+  "metrics": "R{.*}"
+}
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/async-deferred/async-running/async-running.4.json b/asterixdb/asterix-app/src/test/resources/runtimets/results/async-deferred/async-running/async-running.4.json
deleted file mode 100644
index 859d906..0000000
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/async-deferred/async-running/async-running.4.json
+++ /dev/null
@@ -1 +0,0 @@
-"result"
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/async-deferred/async-running/async-running.4.regexjson b/asterixdb/asterix-app/src/test/resources/runtimets/results/async-deferred/async-running/async-running.4.regexjson
new file mode 100644
index 0000000..a2a5f0a8
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/async-deferred/async-running/async-running.4.regexjson
@@ -0,0 +1,6 @@
+{
+	"results": [
+	  "result"
+  ],
+  "metrics": "R{.*}"
+}
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/async-deferred/async/async.3.json b/asterixdb/asterix-app/src/test/resources/runtimets/results/async-deferred/async/async.3.json
deleted file mode 100644
index 09e86cc..0000000
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/async-deferred/async/async.3.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{ "i": 1, "i2": 1 }
-{ "i": 2, "i2": 4 }
-{ "i": 3, "i2": 9 }
-{ "i": 4, "i2": 16 }
-{ "i": 5, "i2": 25 }
-{ "i": 6, "i2": 36 }
-{ "i": 7, "i2": 49 }
-{ "i": 8, "i2": 64 }
-{ "i": 9, "i2": 81 }
-{ "i": 10, "i2": 100 }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/async-deferred/async/async.3.regexjson b/asterixdb/asterix-app/src/test/resources/runtimets/results/async-deferred/async/async.3.regexjson
new file mode 100644
index 0000000..df5177b
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/async-deferred/async/async.3.regexjson
@@ -0,0 +1,15 @@
+{
+	"results": [
+	  { "i": 1, "i2": 1 },
+	  { "i": 2, "i2": 4 },
+	  { "i": 3, "i2": 9 },
+	  { "i": 4, "i2": 16 },
+	  { "i": 5, "i2": 25 },
+	  { "i": 6, "i2": 36 },
+	  { "i": 7, "i2": 49 },
+	  { "i": 8, "i2": 64 },
+	  { "i": 9, "i2": 81 },
+	  { "i": 10, "i2": 100 }
+  ],
+  "metrics": "R{.*}"
+}
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/async-deferred/deferred/deferred.2.json b/asterixdb/asterix-app/src/test/resources/runtimets/results/async-deferred/deferred/deferred.2.json
deleted file mode 100644
index 09e86cc..0000000
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/async-deferred/deferred/deferred.2.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{ "i": 1, "i2": 1 }
-{ "i": 2, "i2": 4 }
-{ "i": 3, "i2": 9 }
-{ "i": 4, "i2": 16 }
-{ "i": 5, "i2": 25 }
-{ "i": 6, "i2": 36 }
-{ "i": 7, "i2": 49 }
-{ "i": 8, "i2": 64 }
-{ "i": 9, "i2": 81 }
-{ "i": 10, "i2": 100 }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/async-deferred/deferred/deferred.2.regexjson b/asterixdb/asterix-app/src/test/resources/runtimets/results/async-deferred/deferred/deferred.2.regexjson
new file mode 100644
index 0000000..df5177b
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/async-deferred/deferred/deferred.2.regexjson
@@ -0,0 +1,15 @@
+{
+	"results": [
+	  { "i": 1, "i2": 1 },
+	  { "i": 2, "i2": 4 },
+	  { "i": 3, "i2": 9 },
+	  { "i": 4, "i2": 16 },
+	  { "i": 5, "i2": 25 },
+	  { "i": 6, "i2": 36 },
+	  { "i": 7, "i2": 49 },
+	  { "i": 8, "i2": 64 },
+	  { "i": 9, "i2": 81 },
+	  { "i": 10, "i2": 100 }
+  ],
+  "metrics": "R{.*}"
+}
\ No newline at end of file
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/ICCExtensionManager.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/ICCExtensionManager.java
new file mode 100644
index 0000000..072dfce
--- /dev/null
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/ICCExtensionManager.java
@@ -0,0 +1,34 @@
+/*
+ * 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.asterix.metadata.api;
+
+import java.util.function.Function;
+
+import org.apache.asterix.common.dataflow.ICcApplicationContext;
+import org.apache.asterix.om.functions.IFunctionExtensionManager;
+import org.apache.hyracks.algebricks.core.algebra.metadata.IMetadataProvider;
+
+public interface ICCExtensionManager extends IFunctionExtensionManager {
+    /**
+     * Returns a factory for {@link org.apache.asterix.metadata.declared.MetadataProvider}
+     * or {@code null} if the default implementation should be used.
+     */
+    Function<ICcApplicationContext, IMetadataProvider<?, ?>> getMetadataProviderFactory();
+}
\ No newline at end of file
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataExtension.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataExtension.java
index ef624ed..fe7e441 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataExtension.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataExtension.java
@@ -21,10 +21,13 @@
 
 import java.rmi.RemoteException;
 import java.util.List;
+import java.util.function.Function;
 
 import org.apache.asterix.common.api.IExtension;
+import org.apache.asterix.common.dataflow.ICcApplicationContext;
 import org.apache.asterix.common.exceptions.ACIDException;
 import org.apache.asterix.metadata.entitytupletranslators.MetadataTupleTranslatorProvider;
+import org.apache.hyracks.algebricks.core.algebra.metadata.IMetadataProvider;
 import org.apache.hyracks.api.application.INCServiceContext;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 
@@ -59,4 +62,11 @@
      */
     void initializeMetadata(INCServiceContext ncServiceCtx) throws HyracksDataException, RemoteException, ACIDException;
 
+    /**
+     * Returns a factory for {@link org.apache.asterix.metadata.declared.MetadataProvider},
+     * or {@code null} if this extension doesn't define this factory.
+     */
+    default Function<ICcApplicationContext, IMetadataProvider<?, ?>> getMetadataProviderFactory() {
+        return null;
+    }
 }
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/INCExtensionManager.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/INCExtensionManager.java
index 62c4273..18b2ac6 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/INCExtensionManager.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/INCExtensionManager.java
@@ -20,9 +20,7 @@
 
 import org.apache.asterix.metadata.entitytupletranslators.MetadataTupleTranslatorProvider;
 
-@FunctionalInterface
 public interface INCExtensionManager {
-
     /**
      * @return the metadata tuple translator provider
      */
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/MetadataProvider.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/MetadataProvider.java
index 6f54a0c..5eff20b 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/MetadataProvider.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/MetadataProvider.java
@@ -29,6 +29,7 @@
 import java.util.Map;
 import java.util.Optional;
 import java.util.Set;
+import java.util.function.Function;
 
 import org.apache.asterix.common.cluster.IClusterStateManager;
 import org.apache.asterix.common.config.DatasetConfig.DatasetType;
@@ -69,6 +70,7 @@
 import org.apache.asterix.formats.nontagged.TypeTraitProvider;
 import org.apache.asterix.metadata.MetadataManager;
 import org.apache.asterix.metadata.MetadataTransactionContext;
+import org.apache.asterix.metadata.api.ICCExtensionManager;
 import org.apache.asterix.metadata.bootstrap.MetadataBuiltinEntities;
 import org.apache.asterix.metadata.dataset.hints.DatasetHints.DatasetCardinalityHint;
 import org.apache.asterix.metadata.entities.Dataset;
@@ -173,9 +175,16 @@
     private Map<String, Integer> externalDataLocks;
     private boolean blockingOperatorDisabled = false;
 
-    public MetadataProvider(ICcApplicationContext appCtx, Dataverse defaultDataverse) {
+    public static MetadataProvider create(ICcApplicationContext appCtx, Dataverse defaultDataverse) {
+        Function<ICcApplicationContext, IMetadataProvider<?, ?>> factory =
+                ((ICCExtensionManager) appCtx.getExtensionManager()).getMetadataProviderFactory();
+        MetadataProvider mp = factory != null ? (MetadataProvider) factory.apply(appCtx) : new MetadataProvider(appCtx);
+        mp.setDefaultDataverse(defaultDataverse);
+        return mp;
+    }
+
+    protected MetadataProvider(ICcApplicationContext appCtx) {
         this.appCtx = appCtx;
-        setDefaultDataverse(defaultDataverse);
         this.storageComponentProvider = appCtx.getStorageComponentProvider();
         storageProperties = appCtx.getStorageProperties();
         functionManager = ((IFunctionExtensionManager) appCtx.getExtensionManager()).getFunctionManager();
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/utils/AdmNodeUtils.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/utils/AdmNodeUtils.java
index 03ec540..f24bce0 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/utils/AdmNodeUtils.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/utils/AdmNodeUtils.java
@@ -22,6 +22,7 @@
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.function.Function;
 
 import org.apache.asterix.object.base.AdmArrayNode;
 import org.apache.asterix.object.base.AdmBigIntNode;
@@ -250,4 +251,16 @@
         pointable.set(listPointable.getByteArray(), offset, len);
         return getAsAdmNode(pointable);
     }
+
+    public static String toString(AdmArrayNode nodeList, Function<IAdmNode, String> nodeToStringFunction,
+            String separator) {
+        StringBuilder sb = new StringBuilder();
+        for (int i = 0, ln = nodeList.size(); i < ln; i++) {
+            if (i > 0) {
+                sb.append(separator);
+            }
+            sb.append(nodeToStringFunction.apply(nodeList.get(i)));
+        }
+        return sb.toString();
+    }
 }
diff --git a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/NetworkUtil.java b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/NetworkUtil.java
index 763319f..228fd91 100644
--- a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/NetworkUtil.java
+++ b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/NetworkUtil.java
@@ -27,6 +27,7 @@
 import java.nio.ByteBuffer;
 import java.nio.channels.SocketChannel;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 import javax.net.ssl.SSLEngine;
@@ -67,6 +68,17 @@
         return builderFrom(host).setPath(path).build();
     }
 
+    public static URI appendUriPath(URI uri, String... pathSegments) throws URISyntaxException {
+        URIBuilder builder = new URIBuilder(uri);
+        List<String> path = builder.getPathSegments();
+        if (path.isEmpty()) {
+            path = new ArrayList<>(pathSegments.length);
+        }
+        Collections.addAll(path, pathSegments);
+        builder.setPathSegments(path);
+        return builder.build();
+    }
+
     public static URIBuilder builderFrom(HttpHost host) {
         return new URIBuilder().setHost(host.getHostName()).setPort(host.getPort()).setScheme(host.getSchemeName());
     }
