diff --git a/presto-delta/src/main/java/com/facebook/presto/delta/DeltaMetadata.java b/presto-delta/src/main/java/com/facebook/presto/delta/DeltaMetadata.java index 5fed25e71b62..e5729a2d37bd 100644 --- a/presto-delta/src/main/java/com/facebook/presto/delta/DeltaMetadata.java +++ b/presto-delta/src/main/java/com/facebook/presto/delta/DeltaMetadata.java @@ -368,6 +368,7 @@ private MetastoreContext metastoreContext(ConnectorSession session) session.getIdentity(), session.getQueryId(), session.getClientInfo(), + session.getClientTags(), session.getSource(), Optional.empty(), false, diff --git a/presto-hive-metastore/src/main/java/com/facebook/presto/hive/metastore/InMemoryCachingHiveMetastore.java b/presto-hive-metastore/src/main/java/com/facebook/presto/hive/metastore/InMemoryCachingHiveMetastore.java index 46f29a0574b9..0fb6a1161648 100644 --- a/presto-hive-metastore/src/main/java/com/facebook/presto/hive/metastore/InMemoryCachingHiveMetastore.java +++ b/presto-hive-metastore/src/main/java/com/facebook/presto/hive/metastore/InMemoryCachingHiveMetastore.java @@ -865,6 +865,7 @@ private KeyAndContext getCachingKey(MetastoreContext context, T key) context.getUsername(), context.getQueryId(), context.getClientInfo(), + context.getClientTags(), context.getSource(), true, context.getMetastoreHeaders(), diff --git a/presto-hive-metastore/src/main/java/com/facebook/presto/hive/metastore/MetastoreContext.java b/presto-hive-metastore/src/main/java/com/facebook/presto/hive/metastore/MetastoreContext.java index a2e10faf0f8f..8347dd06e47a 100644 --- a/presto-hive-metastore/src/main/java/com/facebook/presto/hive/metastore/MetastoreContext.java +++ b/presto-hive-metastore/src/main/java/com/facebook/presto/hive/metastore/MetastoreContext.java @@ -22,6 +22,7 @@ import java.util.Objects; import java.util.Optional; +import java.util.Set; import static com.google.common.base.MoreObjects.toStringHelper; import static java.util.Objects.requireNonNull; @@ -31,6 +32,7 @@ public class MetastoreContext private final String username; private final String queryId; private final Optional clientInfo; + private final Set clientTags; private final Optional source; private final boolean impersonationEnabled; private final Optional metastoreHeaders; @@ -47,6 +49,7 @@ public MetastoreContext( ConnectorIdentity identity, String queryId, Optional clientInfo, + Set clientTags, Optional source, Optional metastoreHeaders, boolean userDefinedTypeEncodingEnabled, @@ -54,13 +57,14 @@ public MetastoreContext( WarningCollector warningCollector, RuntimeStats runtimeStats) { - this(requireNonNull(identity, "identity is null").getUser(), queryId, clientInfo, source, metastoreHeaders, userDefinedTypeEncodingEnabled, columnConverterProvider, warningCollector, runtimeStats); + this(requireNonNull(identity, "identity is null").getUser(), queryId, clientInfo, clientTags, source, metastoreHeaders, userDefinedTypeEncodingEnabled, columnConverterProvider, warningCollector, runtimeStats); } public MetastoreContext( String username, String queryId, Optional clientInfo, + Set clientTags, Optional source, Optional metastoreHeaders, boolean userDefinedTypeEncodingEnabled, @@ -68,13 +72,14 @@ public MetastoreContext( WarningCollector warningCollector, RuntimeStats runtimeStats) { - this(username, queryId, clientInfo, source, false, metastoreHeaders, userDefinedTypeEncodingEnabled, columnConverterProvider, warningCollector, runtimeStats); + this(username, queryId, clientInfo, clientTags, source, false, metastoreHeaders, userDefinedTypeEncodingEnabled, columnConverterProvider, warningCollector, runtimeStats); } public MetastoreContext( String username, String queryId, Optional clientInfo, + Set clientTags, Optional source, boolean impersonationEnabled, Optional metastoreHeaders, @@ -86,6 +91,7 @@ public MetastoreContext( this.username = requireNonNull(username, "username is null"); this.queryId = requireNonNull(queryId, "queryId is null"); this.clientInfo = requireNonNull(clientInfo, "clientInfo is null"); + this.clientTags = requireNonNull(clientTags, "clientTags is null"); this.source = requireNonNull(source, "source is null"); this.columnConverterProvider = requireNonNull(columnConverterProvider, "columnConverterProvider is null"); this.impersonationEnabled = impersonationEnabled; @@ -126,6 +132,11 @@ public Optional getClientInfo() return clientInfo; } + public Set getClientTags() + { + return clientTags; + } + public Optional getSource() { return source; @@ -163,6 +174,7 @@ public String toString() .add("username", username) .add("queryId", queryId) .add("clientInfo", clientInfo.orElse("")) + .add("clientTags", clientTags) .add("source", source.orElse("")) .add("impersonationEnabled", Boolean.toString(impersonationEnabled)) .add("userDefinedTypeEncodingEnabled", Boolean.toString(userDefinedTypeEncodingEnabled)) diff --git a/presto-hive-metastore/src/main/java/com/facebook/presto/hive/metastore/SemiTransactionalHiveMetastore.java b/presto-hive-metastore/src/main/java/com/facebook/presto/hive/metastore/SemiTransactionalHiveMetastore.java index e1f29cab963c..7fdba94529ac 100644 --- a/presto-hive-metastore/src/main/java/com/facebook/presto/hive/metastore/SemiTransactionalHiveMetastore.java +++ b/presto-hive-metastore/src/main/java/com/facebook/presto/hive/metastore/SemiTransactionalHiveMetastore.java @@ -58,6 +58,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -516,7 +517,17 @@ public synchronized void finishInsertIntoExistingTable( setShared(); SchemaTableName schemaTableName = new SchemaTableName(databaseName, tableName); Action oldTableAction = tableActions.get(schemaTableName); - MetastoreContext metastoreContext = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getSource(), getMetastoreHeaders(session), isUserDefinedTypeEncodingEnabled(session), columnConverterProvider, session.getWarningCollector(), session.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext( + session.getIdentity(), + session.getQueryId(), + session.getClientInfo(), + session.getClientTags(), + session.getSource(), + getMetastoreHeaders(session), + isUserDefinedTypeEncodingEnabled(session), + columnConverterProvider, + session.getWarningCollector(), + session.getRuntimeStats()); if (oldTableAction == null || oldTableAction.getData().getTable().getTableType().equals(TEMPORARY_TABLE)) { Table table = getTable(metastoreContext, databaseName, tableName) .orElseThrow(() -> new TableNotFoundException(schemaTableName)); @@ -560,6 +571,7 @@ public synchronized void truncateUnpartitionedTable(ConnectorSession session, St session.getIdentity(), session.getQueryId(), session.getClientInfo(), + session.getClientTags(), session.getSource(), getMetastoreHeaders(session), isUserDefinedTypeEncodingEnabled(session), @@ -909,7 +921,17 @@ public synchronized void finishInsertIntoExistingPartition( SchemaTableName schemaTableName = new SchemaTableName(databaseName, tableName); Map, Action> partitionActionsOfTable = partitionActions.computeIfAbsent(schemaTableName, k -> new HashMap<>()); Action oldPartitionAction = partitionActionsOfTable.get(partitionValues); - MetastoreContext metastoreContext = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getSource(), getMetastoreHeaders(session), isUserDefinedTypeEncodingEnabled(session), columnConverterProvider, session.getWarningCollector(), session.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext( + session.getIdentity(), + session.getQueryId(), + session.getClientInfo(), + session.getClientTags(), + session.getSource(), + getMetastoreHeaders(session), + isUserDefinedTypeEncodingEnabled(session), + columnConverterProvider, + session.getWarningCollector(), + session.getRuntimeStats()); if (oldPartitionAction == null) { Partition partition = delegate.getPartition(metastoreContext, databaseName, tableName, partitionValues) @@ -1149,6 +1171,7 @@ private ConnectorCommitHandle commitShared() hdfsContext.getIdentity(), hdfsContext.getQueryId().orElse(""), hdfsContext.getClientInfo(), + hdfsContext.getClientTags().orElse(Collections.emptySet()), hdfsContext.getSource(), hdfsContext.getSession().flatMap(MetastoreUtil::getMetastoreHeaders), hdfsContext.getSession().map(MetastoreUtil::isUserDefinedTypeEncodingEnabled).orElse(false), @@ -1182,6 +1205,7 @@ private ConnectorCommitHandle commitShared() hdfsContext.getIdentity(), hdfsContext.getQueryId().orElse(""), hdfsContext.getClientInfo(), + hdfsContext.getClientTags().orElse(Collections.emptySet()), hdfsContext.getSource(), hdfsContext.getSession().flatMap(MetastoreUtil::getMetastoreHeaders), hdfsContext.getSession().map(MetastoreUtil::isUserDefinedTypeEncodingEnabled).orElse(false), diff --git a/presto-hive-metastore/src/test/java/com/facebook/presto/hive/metastore/thrift/MockHiveMetastoreClient.java b/presto-hive-metastore/src/test/java/com/facebook/presto/hive/metastore/thrift/MockHiveMetastoreClient.java index 409861923c29..d76118d55e7b 100644 --- a/presto-hive-metastore/src/test/java/com/facebook/presto/hive/metastore/thrift/MockHiveMetastoreClient.java +++ b/presto-hive-metastore/src/test/java/com/facebook/presto/hive/metastore/thrift/MockHiveMetastoreClient.java @@ -53,6 +53,7 @@ import org.apache.hadoop.hive.metastore.api.UnlockRequest; import org.apache.thrift.TException; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Optional; @@ -75,7 +76,7 @@ public class MockHiveMetastoreClient public static final List TEST_UNIQUE_CONSTRAINT = ImmutableList.of(new SQLUniqueConstraint("", TEST_DATABASE, TEST_TABLE_WITH_CONSTRAINTS, "c2", 1, "uk", true, false, true)); public static final List TEST_NOT_NULL_CONSTRAINT = ImmutableList.of(new SQLNotNullConstraint("", TEST_DATABASE, TEST_TABLE_WITH_CONSTRAINTS, "c3", "nn", true, true, true)); public static final String TEST_TOKEN = "token"; - public static final MetastoreContext TEST_METASTORE_CONTEXT = new MetastoreContext("test_user", "test_queryId", Optional.empty(), Optional.empty(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, WarningCollector.NOOP, new RuntimeStats()); + public static final MetastoreContext TEST_METASTORE_CONTEXT = new MetastoreContext("test_user", "test_queryId", Optional.empty(), Collections.emptySet(), Optional.empty(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, WarningCollector.NOOP, new RuntimeStats()); public static final String TEST_PARTITION1 = "key=testpartition1"; public static final String TEST_PARTITION2 = "key=testpartition2"; public static final List TEST_PARTITION_VALUES1 = ImmutableList.of("testpartition1"); diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/CreateEmptyPartitionProcedure.java b/presto-hive/src/main/java/com/facebook/presto/hive/CreateEmptyPartitionProcedure.java index 4a4e5517afcd..7e967e2b97f2 100644 --- a/presto-hive/src/main/java/com/facebook/presto/hive/CreateEmptyPartitionProcedure.java +++ b/presto-hive/src/main/java/com/facebook/presto/hive/CreateEmptyPartitionProcedure.java @@ -119,7 +119,20 @@ private void doCreateEmptyPartition(ConnectorSession session, String schema, Str .map(String.class::cast) .collect(toImmutableList()); - if (metastore.getPartition(new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getSource(), getMetastoreHeaders(session), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, session.getWarningCollector(), session.getRuntimeStats()), schema, table, partitionStringValues).isPresent()) { + if (metastore.getPartition(new MetastoreContext( + session.getIdentity(), + session.getQueryId(), + session.getClientInfo(), + session.getClientTags(), + session.getSource(), + getMetastoreHeaders(session), + false, + HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, + session.getWarningCollector(), + session.getRuntimeStats()), + schema, + table, + partitionStringValues).isPresent()) { throw new PrestoException(ALREADY_EXISTS, "Partition already exists"); } String partitionName = FileUtils.makePartName(actualPartitionColumnNames, partitionStringValues); diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/HiveMetadata.java b/presto-hive/src/main/java/com/facebook/presto/hive/HiveMetadata.java index 636ea4cffe09..a9cc0de7434a 100644 --- a/presto-hive/src/main/java/com/facebook/presto/hive/HiveMetadata.java +++ b/presto-hive/src/main/java/com/facebook/presto/hive/HiveMetadata.java @@ -1773,7 +1773,17 @@ public static boolean shouldCreateFilesForMissingBuckets(Table table, ConnectorS private MetastoreContext getMetastoreContext(ConnectorSession session) { - return new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getSource(), getMetastoreHeaders(session), isUserDefinedTypeEncodingEnabled(session), metastore.getColumnConverterProvider(), session.getWarningCollector(), session.getRuntimeStats()); + return new MetastoreContext( + session.getIdentity(), + session.getQueryId(), + session.getClientInfo(), + session.getClientTags(), + session.getSource(), + getMetastoreHeaders(session), + isUserDefinedTypeEncodingEnabled(session), + metastore.getColumnConverterProvider(), + session.getWarningCollector(), + session.getRuntimeStats()); } private Column columnHandleToColumn(ConnectorSession session, HiveColumnHandle handle) diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/HivePageSinkProvider.java b/presto-hive/src/main/java/com/facebook/presto/hive/HivePageSinkProvider.java index 8fbdd0d8e686..6b11ce79318a 100644 --- a/presto-hive/src/main/java/com/facebook/presto/hive/HivePageSinkProvider.java +++ b/presto-hive/src/main/java/com/facebook/presto/hive/HivePageSinkProvider.java @@ -179,7 +179,7 @@ private ConnectorPageSink createPageSink(HiveWritableTableHandle handle, boolean new HivePageSinkMetadataProvider( handle.getPageSinkMetadata(), memoizeMetastore(metastore, metastoreImpersonationEnabled, perTransactionMetastoreCacheMaximumSize, metastorePartitionCacheMaxColumnCount), - new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getSource(), getMetastoreHeaders(session), isUserDefinedTypeEncodingEnabled(session), columnConverterProvider, session.getWarningCollector(), session.getRuntimeStats())), + new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getClientTags(), session.getSource(), getMetastoreHeaders(session), isUserDefinedTypeEncodingEnabled(session), columnConverterProvider, session.getWarningCollector(), session.getRuntimeStats())), typeManager, hdfsEnvironment, pageSorter, diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/HivePartitionManager.java b/presto-hive/src/main/java/com/facebook/presto/hive/HivePartitionManager.java index 538c7f64d08c..38976d812dad 100644 --- a/presto-hive/src/main/java/com/facebook/presto/hive/HivePartitionManager.java +++ b/presto-hive/src/main/java/com/facebook/presto/hive/HivePartitionManager.java @@ -217,7 +217,7 @@ private Map createPartitionPredicates( if (domains.isPresent()) { Map columnHandleDomainMap = domains.get(); ImmutableMap.Builder partitionPredicateBuilder = ImmutableMap.builder(); - MetastoreContext metastoreContext = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getSource(), getMetastoreHeaders(session), isUserDefinedTypeEncodingEnabled(session), metastore.getColumnConverterProvider(), session.getWarningCollector(), session.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getClientTags(), session.getSource(), getMetastoreHeaders(session), isUserDefinedTypeEncodingEnabled(session), metastore.getColumnConverterProvider(), session.getWarningCollector(), session.getRuntimeStats()); for (HiveColumnHandle partitionColumn : partitionColumns) { Column key = new Column( partitionColumn.getName(), @@ -422,7 +422,7 @@ private Optional parseValuesAndFilterPartition( private Table getTable(ConnectorSession session, SemiTransactionalHiveMetastore metastore, HiveTableHandle hiveTableHandle, boolean offlineDataDebugModeEnabled) { - MetastoreContext context = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getSource(), getMetastoreHeaders(session), isUserDefinedTypeEncodingEnabled(session), metastore.getColumnConverterProvider(), session.getWarningCollector(), session.getRuntimeStats()); + MetastoreContext context = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getClientTags(), session.getSource(), getMetastoreHeaders(session), isUserDefinedTypeEncodingEnabled(session), metastore.getColumnConverterProvider(), session.getWarningCollector(), session.getRuntimeStats()); Optional target = metastore.getTable(context, hiveTableHandle); if (!target.isPresent()) { throw new TableNotFoundException(hiveTableHandle.getSchemaTableName()); @@ -442,7 +442,7 @@ private List getFilteredPartitionNames(ConnectorSessio return ImmutableList.of(); } - MetastoreContext context = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getSource(), getMetastoreHeaders(session), isUserDefinedTypeEncodingEnabled(session), metastore.getColumnConverterProvider(), session.getWarningCollector(), session.getRuntimeStats()); + MetastoreContext context = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getClientTags(), session.getSource(), getMetastoreHeaders(session), isUserDefinedTypeEncodingEnabled(session), metastore.getColumnConverterProvider(), session.getWarningCollector(), session.getRuntimeStats()); // fetch the partition names return metastore.getPartitionNamesByFilter(context, hiveTableHandle, partitionPredicates) .orElseThrow(() -> new TableNotFoundException(hiveTableHandle.getSchemaTableName())); @@ -454,7 +454,7 @@ private List getAllPartitionNames(ConnectorSession ses return ImmutableList.of(); } // fetch the partition names - MetastoreContext context = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getSource(), getMetastoreHeaders(session), isUserDefinedTypeEncodingEnabled(session), metastore.getColumnConverterProvider(), session.getWarningCollector(), session.getRuntimeStats()); + MetastoreContext context = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getClientTags(), session.getSource(), getMetastoreHeaders(session), isUserDefinedTypeEncodingEnabled(session), metastore.getColumnConverterProvider(), session.getWarningCollector(), session.getRuntimeStats()); return metastore.getPartitionNames(context, hiveTableHandle) .orElseThrow(() -> new TableNotFoundException(hiveTableHandle.getSchemaTableName())); } diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/HiveSplitManager.java b/presto-hive/src/main/java/com/facebook/presto/hive/HiveSplitManager.java index 1667a0ccb966..ef70233ec116 100644 --- a/presto-hive/src/main/java/com/facebook/presto/hive/HiveSplitManager.java +++ b/presto-hive/src/main/java/com/facebook/presto/hive/HiveSplitManager.java @@ -236,7 +236,17 @@ public ConnectorSplitSource getSplits( throw new PrestoException(HIVE_TRANSACTION_NOT_FOUND, format("Transaction not found: %s", transaction)); } SemiTransactionalHiveMetastore metastore = metadata.getMetastore(); - MetastoreContext metastoreContext = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getSource(), getMetastoreHeaders(session), isUserDefinedTypeEncodingEnabled(session), metastore.getColumnConverterProvider(), session.getWarningCollector(), session.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext( + session.getIdentity(), + session.getQueryId(), + session.getClientInfo(), + session.getClientTags(), + session.getSource(), + getMetastoreHeaders(session), + isUserDefinedTypeEncodingEnabled(session), + metastore.getColumnConverterProvider(), + session.getWarningCollector(), + session.getRuntimeStats()); Table table = layout.getTable(metastore, metastoreContext); if (!isOfflineDataDebugModeEnabled(session)) { @@ -732,7 +742,17 @@ private Map getPartitionSplitInfo( Map predicateColumns, Optional> domains) { - MetastoreContext metastoreContext = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getSource(), getMetastoreHeaders(session), isUserDefinedTypeEncodingEnabled(session), metastore.getColumnConverterProvider(), session.getWarningCollector(), session.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext( + session.getIdentity(), + session.getQueryId(), + session.getClientInfo(), + session.getClientTags(), + session.getSource(), + getMetastoreHeaders(session), + isUserDefinedTypeEncodingEnabled(session), + metastore.getColumnConverterProvider(), + session.getWarningCollector(), + session.getRuntimeStats()); Map> partitions = metastore.getPartitionsByNames( metastoreContext, tableName.getSchemaName(), diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/HiveWriteUtils.java b/presto-hive/src/main/java/com/facebook/presto/hive/HiveWriteUtils.java index b8336b9690e4..9d0ddf258196 100644 --- a/presto-hive/src/main/java/com/facebook/presto/hive/HiveWriteUtils.java +++ b/presto-hive/src/main/java/com/facebook/presto/hive/HiveWriteUtils.java @@ -333,7 +333,17 @@ public static void checkWritable( public static Path getTableDefaultLocation(ConnectorSession session, SemiTransactionalHiveMetastore metastore, HdfsEnvironment hdfsEnvironment, String schemaName, String tableName) { - MetastoreContext metastoreContext = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getSource(), getMetastoreHeaders(session), isUserDefinedTypeEncodingEnabled(session), metastore.getColumnConverterProvider(), session.getWarningCollector(), session.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext( + session.getIdentity(), + session.getQueryId(), + session.getClientInfo(), + session.getClientTags(), + session.getSource(), + getMetastoreHeaders(session), + isUserDefinedTypeEncodingEnabled(session), + metastore.getColumnConverterProvider(), + session.getWarningCollector(), + session.getRuntimeStats()); Optional location = getDatabase(session.getIdentity(), metastoreContext, metastore, schemaName).getLocation(); if (!location.isPresent() || location.get().isEmpty()) { throw new PrestoException(HIVE_DATABASE_LOCATION_ERROR, format("Database '%s' location is not set", schemaName)); diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/SyncPartitionMetadataProcedure.java b/presto-hive/src/main/java/com/facebook/presto/hive/SyncPartitionMetadataProcedure.java index 0dcd682821d8..67f6b59d0f92 100644 --- a/presto-hive/src/main/java/com/facebook/presto/hive/SyncPartitionMetadataProcedure.java +++ b/presto-hive/src/main/java/com/facebook/presto/hive/SyncPartitionMetadataProcedure.java @@ -123,6 +123,7 @@ private void doSyncPartitionMetadata(ConnectorSession session, String schemaName session.getIdentity(), session.getQueryId(), session.getClientInfo(), + session.getClientTags(), session.getSource(), getMetastoreHeaders(session), isUserDefinedTypeEncodingEnabled(session), diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/rule/HiveFilterPushdown.java b/presto-hive/src/main/java/com/facebook/presto/hive/rule/HiveFilterPushdown.java index d6beadd721c3..8d73f18ac48f 100644 --- a/presto-hive/src/main/java/com/facebook/presto/hive/rule/HiveFilterPushdown.java +++ b/presto-hive/src/main/java/com/facebook/presto/hive/rule/HiveFilterPushdown.java @@ -156,7 +156,16 @@ public ConnectorPushdownFilterResult getConnectorPushdownFilterResult( SemiTransactionalHiveMetastore metastore = ((HiveMetadata) metadata).getMetastore(); - MetastoreContext context = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getSource(), getMetastoreHeaders(session), isUserDefinedTypeEncodingEnabled(session), metastore.getColumnConverterProvider(), session.getWarningCollector(), session.getRuntimeStats()); + MetastoreContext context = new MetastoreContext( + session.getIdentity(), + session.getQueryId(), + session.getClientInfo(), + session.getClientTags(), + session.getSource(), + getMetastoreHeaders(session), + isUserDefinedTypeEncodingEnabled(session), + metastore.getColumnConverterProvider(), + session.getWarningCollector(), session.getRuntimeStats()); Table table = metastore.getTable(context, hiveTableHandle) .orElseThrow(() -> new TableNotFoundException(tableName)); diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/security/LegacyAccessControl.java b/presto-hive/src/main/java/com/facebook/presto/hive/security/LegacyAccessControl.java index e8495d434c59..a4a971ab2d69 100644 --- a/presto-hive/src/main/java/com/facebook/presto/hive/security/LegacyAccessControl.java +++ b/presto-hive/src/main/java/com/facebook/presto/hive/security/LegacyAccessControl.java @@ -110,7 +110,7 @@ public void checkCanDropTable(ConnectorTransactionHandle transaction, ConnectorI TransactionalMetadata metadata = hiveTransactionManager.get(transaction); // TODO: Refactor code to inject metastore headers using AccessControlContext instead of empty() - MetastoreContext metastoreContext = new MetastoreContext(identity, context.getQueryId().getId(), context.getClientInfo(), context.getSource(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, context.getWarningCollector(), context.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext(identity, context.getQueryId().getId(), context.getClientInfo(), context.getClientTags(), context.getSource(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, context.getWarningCollector(), context.getRuntimeStats()); Optional
target = metadata.getMetastore().getTable(metastoreContext, tableName.getSchemaName(), tableName.getTableName()); if (!target.isPresent()) { diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/security/SqlStandardAccessControl.java b/presto-hive/src/main/java/com/facebook/presto/hive/security/SqlStandardAccessControl.java index 9ef0aa54ca7c..44447422f154 100644 --- a/presto-hive/src/main/java/com/facebook/presto/hive/security/SqlStandardAccessControl.java +++ b/presto-hive/src/main/java/com/facebook/presto/hive/security/SqlStandardAccessControl.java @@ -106,7 +106,16 @@ public SqlStandardAccessControl( public void checkCanCreateSchema(ConnectorTransactionHandle transaction, ConnectorIdentity identity, AccessControlContext context, String schemaName) { // TODO: Refactor code to inject metastore headers using AccessControlContext instead of empty() - MetastoreContext metastoreContext = new MetastoreContext(identity, context.getQueryId().getId(), context.getClientInfo(), context.getSource(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, context.getWarningCollector(), context.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext( + identity, context.getQueryId().getId(), + context.getClientInfo(), + context.getClientTags(), + context.getSource(), + Optional.empty(), + false, + HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, + context.getWarningCollector(), + context.getRuntimeStats()); if (!isAdmin(transaction, identity, metastoreContext)) { denyCreateSchema(schemaName); } @@ -115,7 +124,16 @@ public void checkCanCreateSchema(ConnectorTransactionHandle transaction, Connect @Override public void checkCanDropSchema(ConnectorTransactionHandle transaction, ConnectorIdentity identity, AccessControlContext context, String schemaName) { - MetastoreContext metastoreContext = new MetastoreContext(identity, context.getQueryId().getId(), context.getClientInfo(), context.getSource(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, context.getWarningCollector(), context.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext( + identity, context.getQueryId().getId(), + context.getClientInfo(), + context.getClientTags(), + context.getSource(), + Optional.empty(), + false, + HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, + context.getWarningCollector(), + context.getRuntimeStats()); if (!isDatabaseOwner(transaction, identity, metastoreContext, schemaName)) { denyDropSchema(schemaName); } @@ -124,7 +142,16 @@ public void checkCanDropSchema(ConnectorTransactionHandle transaction, Connector @Override public void checkCanRenameSchema(ConnectorTransactionHandle transaction, ConnectorIdentity identity, AccessControlContext context, String schemaName, String newSchemaName) { - MetastoreContext metastoreContext = new MetastoreContext(identity, context.getQueryId().getId(), context.getClientInfo(), context.getSource(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, context.getWarningCollector(), context.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext( + identity, context.getQueryId().getId(), + context.getClientInfo(), + context.getClientTags(), + context.getSource(), + Optional.empty(), + false, + HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, + context.getWarningCollector(), + context.getRuntimeStats()); if (!isDatabaseOwner(transaction, identity, metastoreContext, schemaName)) { denyRenameSchema(schemaName, newSchemaName); } @@ -144,7 +171,16 @@ public Set filterSchemas(ConnectorTransactionHandle transactionHandle, C @Override public void checkCanCreateTable(ConnectorTransactionHandle transaction, ConnectorIdentity identity, AccessControlContext context, SchemaTableName tableName) { - MetastoreContext metastoreContext = new MetastoreContext(identity, context.getQueryId().getId(), context.getClientInfo(), context.getSource(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, context.getWarningCollector(), context.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext( + identity, context.getQueryId().getId(), + context.getClientInfo(), + context.getClientTags(), + context.getSource(), + Optional.empty(), + false, + HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, + context.getWarningCollector(), + context.getRuntimeStats()); if (!isDatabaseOwner(transaction, identity, metastoreContext, tableName.getSchemaName())) { denyCreateTable(tableName.toString()); } @@ -153,7 +189,16 @@ public void checkCanCreateTable(ConnectorTransactionHandle transaction, Connecto @Override public void checkCanDropTable(ConnectorTransactionHandle transaction, ConnectorIdentity identity, AccessControlContext context, SchemaTableName tableName) { - MetastoreContext metastoreContext = new MetastoreContext(identity, context.getQueryId().getId(), context.getClientInfo(), context.getSource(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, context.getWarningCollector(), context.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext( + identity, context.getQueryId().getId(), + context.getClientInfo(), + context.getClientTags(), + context.getSource(), + Optional.empty(), + false, + HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, + context.getWarningCollector(), + context.getRuntimeStats()); if (!isTableOwner(transaction, identity, metastoreContext, tableName)) { denyDropTable(tableName.toString()); } @@ -162,7 +207,16 @@ public void checkCanDropTable(ConnectorTransactionHandle transaction, ConnectorI @Override public void checkCanRenameTable(ConnectorTransactionHandle transaction, ConnectorIdentity identity, AccessControlContext context, SchemaTableName tableName, SchemaTableName newTableName) { - MetastoreContext metastoreContext = new MetastoreContext(identity, context.getQueryId().getId(), context.getClientInfo(), context.getSource(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, context.getWarningCollector(), context.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext( + identity, context.getQueryId().getId(), + context.getClientInfo(), + context.getClientTags(), + context.getSource(), + Optional.empty(), + false, + HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, + context.getWarningCollector(), + context.getRuntimeStats()); if (!isTableOwner(transaction, identity, metastoreContext, tableName)) { denyRenameTable(tableName.toString(), newTableName.toString()); } @@ -182,7 +236,16 @@ public Set filterTables(ConnectorTransactionHandle transactionH @Override public void checkCanAddColumn(ConnectorTransactionHandle transaction, ConnectorIdentity identity, AccessControlContext context, SchemaTableName tableName) { - MetastoreContext metastoreContext = new MetastoreContext(identity, context.getQueryId().getId(), context.getClientInfo(), context.getSource(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, context.getWarningCollector(), context.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext( + identity, context.getQueryId().getId(), + context.getClientInfo(), + context.getClientTags(), + context.getSource(), + Optional.empty(), + false, + HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, + context.getWarningCollector(), + context.getRuntimeStats()); if (!isTableOwner(transaction, identity, metastoreContext, tableName)) { denyAddColumn(tableName.toString()); } @@ -191,7 +254,16 @@ public void checkCanAddColumn(ConnectorTransactionHandle transaction, ConnectorI @Override public void checkCanDropColumn(ConnectorTransactionHandle transaction, ConnectorIdentity identity, AccessControlContext context, SchemaTableName tableName) { - MetastoreContext metastoreContext = new MetastoreContext(identity, context.getQueryId().getId(), context.getClientInfo(), context.getSource(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, context.getWarningCollector(), context.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext( + identity, context.getQueryId().getId(), + context.getClientInfo(), + context.getClientTags(), + context.getSource(), + Optional.empty(), + false, + HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, + context.getWarningCollector(), + context.getRuntimeStats()); if (!isTableOwner(transaction, identity, metastoreContext, tableName)) { denyDropColumn(tableName.toString()); } @@ -200,7 +272,16 @@ public void checkCanDropColumn(ConnectorTransactionHandle transaction, Connector @Override public void checkCanDropConstraint(ConnectorTransactionHandle transaction, ConnectorIdentity identity, AccessControlContext context, SchemaTableName tableName) { - MetastoreContext metastoreContext = new MetastoreContext(identity, context.getQueryId().getId(), context.getClientInfo(), context.getSource(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, context.getWarningCollector(), context.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext( + identity, context.getQueryId().getId(), + context.getClientInfo(), + context.getClientTags(), + context.getSource(), + Optional.empty(), + false, + HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, + context.getWarningCollector(), + context.getRuntimeStats()); if (!isTableOwner(transaction, identity, metastoreContext, tableName)) { denyDropConstraint(tableName.toString()); } @@ -209,7 +290,16 @@ public void checkCanDropConstraint(ConnectorTransactionHandle transaction, Conne @Override public void checkCanAddConstraint(ConnectorTransactionHandle transaction, ConnectorIdentity identity, AccessControlContext context, SchemaTableName tableName) { - MetastoreContext metastoreContext = new MetastoreContext(identity, context.getQueryId().getId(), context.getClientInfo(), context.getSource(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, context.getWarningCollector(), context.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext( + identity, context.getQueryId().getId(), + context.getClientInfo(), + context.getClientTags(), + context.getSource(), + Optional.empty(), + false, + HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, + context.getWarningCollector(), + context.getRuntimeStats()); if (!isTableOwner(transaction, identity, metastoreContext, tableName)) { denyAddConstraint(tableName.toString()); } @@ -218,7 +308,16 @@ public void checkCanAddConstraint(ConnectorTransactionHandle transaction, Connec @Override public void checkCanRenameColumn(ConnectorTransactionHandle transaction, ConnectorIdentity identity, AccessControlContext context, SchemaTableName tableName) { - MetastoreContext metastoreContext = new MetastoreContext(identity, context.getQueryId().getId(), context.getClientInfo(), context.getSource(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, context.getWarningCollector(), context.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext( + identity, context.getQueryId().getId(), + context.getClientInfo(), + context.getClientTags(), + context.getSource(), + Optional.empty(), + false, + HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, + context.getWarningCollector(), + context.getRuntimeStats()); if (!isTableOwner(transaction, identity, metastoreContext, tableName)) { denyRenameColumn(tableName.toString()); } @@ -227,8 +326,16 @@ public void checkCanRenameColumn(ConnectorTransactionHandle transaction, Connect @Override public void checkCanSelectFromColumns(ConnectorTransactionHandle transaction, ConnectorIdentity identity, AccessControlContext context, SchemaTableName tableName, Set columnOrSubfieldNames) { - MetastoreContext metastoreContext = new MetastoreContext(identity, context.getQueryId().getId(), context.getClientInfo(), context.getSource(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, context.getWarningCollector(), context.getRuntimeStats()); - // TODO: Implement column level access control + MetastoreContext metastoreContext = new MetastoreContext( + identity, context.getQueryId().getId(), + context.getClientInfo(), + context.getClientTags(), + context.getSource(), + Optional.empty(), + false, + HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, + context.getWarningCollector(), + context.getRuntimeStats()); // TODO: Implement column level access control if (!checkTablePermission(transaction, identity, metastoreContext, tableName, SELECT, false)) { denySelectTable(tableName.toString()); } @@ -237,7 +344,16 @@ public void checkCanSelectFromColumns(ConnectorTransactionHandle transaction, Co @Override public void checkCanInsertIntoTable(ConnectorTransactionHandle transaction, ConnectorIdentity identity, AccessControlContext context, SchemaTableName tableName) { - MetastoreContext metastoreContext = new MetastoreContext(identity, context.getQueryId().getId(), context.getClientInfo(), context.getSource(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, context.getWarningCollector(), context.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext( + identity, context.getQueryId().getId(), + context.getClientInfo(), + context.getClientTags(), + context.getSource(), + Optional.empty(), + false, + HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, + context.getWarningCollector(), + context.getRuntimeStats()); if (!checkTablePermission(transaction, identity, metastoreContext, tableName, INSERT, false)) { denyInsertTable(tableName.toString()); } @@ -246,7 +362,16 @@ public void checkCanInsertIntoTable(ConnectorTransactionHandle transaction, Conn @Override public void checkCanDeleteFromTable(ConnectorTransactionHandle transaction, ConnectorIdentity identity, AccessControlContext context, SchemaTableName tableName) { - MetastoreContext metastoreContext = new MetastoreContext(identity, context.getQueryId().getId(), context.getClientInfo(), context.getSource(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, context.getWarningCollector(), context.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext( + identity, context.getQueryId().getId(), + context.getClientInfo(), + context.getClientTags(), + context.getSource(), + Optional.empty(), + false, + HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, + context.getWarningCollector(), + context.getRuntimeStats()); if (!checkTablePermission(transaction, identity, metastoreContext, tableName, DELETE, false)) { denyDeleteTable(tableName.toString()); } @@ -255,7 +380,16 @@ public void checkCanDeleteFromTable(ConnectorTransactionHandle transaction, Conn @Override public void checkCanTruncateTable(ConnectorTransactionHandle transaction, ConnectorIdentity identity, AccessControlContext context, SchemaTableName tableName) { - MetastoreContext metastoreContext = new MetastoreContext(identity, context.getQueryId().getId(), context.getClientInfo(), context.getSource(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, context.getWarningCollector(), context.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext( + identity, context.getQueryId().getId(), + context.getClientInfo(), + context.getClientTags(), + context.getSource(), + Optional.empty(), + false, + HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, + context.getWarningCollector(), + context.getRuntimeStats()); if (!checkTablePermission(transaction, identity, metastoreContext, tableName, DELETE, false)) { denyTruncateTable(tableName.toString()); } @@ -264,7 +398,16 @@ public void checkCanTruncateTable(ConnectorTransactionHandle transaction, Connec @Override public void checkCanUpdateTableColumns(ConnectorTransactionHandle transaction, ConnectorIdentity identity, AccessControlContext context, SchemaTableName tableName, Set updatedColumns) { - MetastoreContext metastoreContext = new MetastoreContext(identity, context.getQueryId().getId(), context.getClientInfo(), context.getSource(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, context.getWarningCollector(), context.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext( + identity, context.getQueryId().getId(), + context.getClientInfo(), + context.getClientTags(), + context.getSource(), + Optional.empty(), + false, + HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, + context.getWarningCollector(), + context.getRuntimeStats()); if (!checkTablePermission(transaction, identity, metastoreContext, tableName, UPDATE, false)) { denyUpdateTableColumns(tableName.toString(), updatedColumns); } @@ -273,7 +416,16 @@ public void checkCanUpdateTableColumns(ConnectorTransactionHandle transaction, C @Override public void checkCanCreateView(ConnectorTransactionHandle transaction, ConnectorIdentity identity, AccessControlContext context, SchemaTableName viewName) { - MetastoreContext metastoreContext = new MetastoreContext(identity, context.getQueryId().getId(), context.getClientInfo(), context.getSource(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, context.getWarningCollector(), context.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext( + identity, context.getQueryId().getId(), + context.getClientInfo(), + context.getClientTags(), + context.getSource(), + Optional.empty(), + false, + HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, + context.getWarningCollector(), + context.getRuntimeStats()); if (!isDatabaseOwner(transaction, identity, metastoreContext, viewName.getSchemaName())) { denyCreateView(viewName.toString()); } @@ -282,7 +434,16 @@ public void checkCanCreateView(ConnectorTransactionHandle transaction, Connector @Override public void checkCanDropView(ConnectorTransactionHandle transaction, ConnectorIdentity identity, AccessControlContext context, SchemaTableName viewName) { - MetastoreContext metastoreContext = new MetastoreContext(identity, context.getQueryId().getId(), context.getClientInfo(), context.getSource(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, context.getWarningCollector(), context.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext( + identity, context.getQueryId().getId(), + context.getClientInfo(), + context.getClientTags(), + context.getSource(), + Optional.empty(), + false, + HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, + context.getWarningCollector(), + context.getRuntimeStats()); if (!isTableOwner(transaction, identity, metastoreContext, viewName)) { denyDropView(viewName.toString()); } @@ -292,8 +453,16 @@ public void checkCanDropView(ConnectorTransactionHandle transaction, ConnectorId public void checkCanCreateViewWithSelectFromColumns(ConnectorTransactionHandle transaction, ConnectorIdentity identity, AccessControlContext context, SchemaTableName tableName, Set columnNames) { checkCanSelectFromColumns(transaction, identity, context, tableName, columnNames.stream().map(column -> new Subfield(column)).collect(toImmutableSet())); - MetastoreContext metastoreContext = new MetastoreContext(identity, context.getQueryId().getId(), context.getClientInfo(), context.getSource(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, context.getWarningCollector(), context.getRuntimeStats()); - // TODO implement column level access control + MetastoreContext metastoreContext = new MetastoreContext( + identity, context.getQueryId().getId(), + context.getClientInfo(), + context.getClientTags(), + context.getSource(), + Optional.empty(), + false, + HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, + context.getWarningCollector(), + context.getRuntimeStats()); // TODO implement column level access control if (!checkTablePermission(transaction, identity, metastoreContext, tableName, SELECT, true)) { denyCreateViewWithSelect(tableName.toString(), identity); } @@ -302,7 +471,16 @@ public void checkCanCreateViewWithSelectFromColumns(ConnectorTransactionHandle t @Override public void checkCanSetCatalogSessionProperty(ConnectorTransactionHandle transaction, ConnectorIdentity identity, AccessControlContext context, String propertyName) { - MetastoreContext metastoreContext = new MetastoreContext(identity, context.getQueryId().getId(), context.getClientInfo(), context.getSource(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, context.getWarningCollector(), context.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext( + identity, context.getQueryId().getId(), + context.getClientInfo(), + context.getClientTags(), + context.getSource(), + Optional.empty(), + false, + HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, + context.getWarningCollector(), + context.getRuntimeStats()); if (!isAdmin(transaction, identity, metastoreContext)) { denySetCatalogSessionProperty(connectorId, propertyName); } @@ -311,7 +489,16 @@ public void checkCanSetCatalogSessionProperty(ConnectorTransactionHandle transac @Override public void checkCanGrantTablePrivilege(ConnectorTransactionHandle transaction, ConnectorIdentity identity, AccessControlContext context, Privilege privilege, SchemaTableName tableName, PrestoPrincipal grantee, boolean withGrantOption) { - MetastoreContext metastoreContext = new MetastoreContext(identity, context.getQueryId().getId(), context.getClientInfo(), context.getSource(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, context.getWarningCollector(), context.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext( + identity, context.getQueryId().getId(), + context.getClientInfo(), + context.getClientTags(), + context.getSource(), + Optional.empty(), + false, + HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, + context.getWarningCollector(), + context.getRuntimeStats()); if (isTableOwner(transaction, identity, metastoreContext, tableName)) { return; } @@ -324,7 +511,16 @@ public void checkCanGrantTablePrivilege(ConnectorTransactionHandle transaction, @Override public void checkCanRevokeTablePrivilege(ConnectorTransactionHandle transaction, ConnectorIdentity identity, AccessControlContext context, Privilege privilege, SchemaTableName tableName, PrestoPrincipal revokee, boolean grantOptionFor) { - MetastoreContext metastoreContext = new MetastoreContext(identity, context.getQueryId().getId(), context.getClientInfo(), context.getSource(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, context.getWarningCollector(), context.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext( + identity, context.getQueryId().getId(), + context.getClientInfo(), + context.getClientTags(), + context.getSource(), + Optional.empty(), + false, + HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, + context.getWarningCollector(), + context.getRuntimeStats()); if (isTableOwner(transaction, identity, metastoreContext, tableName)) { return; } @@ -341,7 +537,16 @@ public void checkCanCreateRole(ConnectorTransactionHandle transactionHandle, Con if (grantor.isPresent()) { throw new AccessDeniedException("Hive Connector does not support WITH ADMIN statement"); } - MetastoreContext metastoreContext = new MetastoreContext(identity, context.getQueryId().getId(), context.getClientInfo(), context.getSource(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, context.getWarningCollector(), context.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext( + identity, context.getQueryId().getId(), + context.getClientInfo(), + context.getClientTags(), + context.getSource(), + Optional.empty(), + false, + HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, + context.getWarningCollector(), + context.getRuntimeStats()); if (!isAdmin(transactionHandle, identity, metastoreContext)) { denyCreateRole(role); } @@ -350,7 +555,16 @@ public void checkCanCreateRole(ConnectorTransactionHandle transactionHandle, Con @Override public void checkCanDropRole(ConnectorTransactionHandle transactionHandle, ConnectorIdentity identity, AccessControlContext context, String role) { - MetastoreContext metastoreContext = new MetastoreContext(identity, context.getQueryId().getId(), context.getClientInfo(), context.getSource(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, context.getWarningCollector(), context.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext( + identity, context.getQueryId().getId(), + context.getClientInfo(), + context.getClientTags(), + context.getSource(), + Optional.empty(), + false, + HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, + context.getWarningCollector(), + context.getRuntimeStats()); if (!isAdmin(transactionHandle, identity, metastoreContext)) { denyDropRole(role); } @@ -363,7 +577,16 @@ public void checkCanGrantRoles(ConnectorTransactionHandle transactionHandle, Con if (grantor.isPresent()) { throw new AccessDeniedException("Hive Connector does not support GRANTED BY statement"); } - MetastoreContext metastoreContext = new MetastoreContext(identity, context.getQueryId().getId(), context.getClientInfo(), context.getSource(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, context.getWarningCollector(), context.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext( + identity, context.getQueryId().getId(), + context.getClientInfo(), + context.getClientTags(), + context.getSource(), + Optional.empty(), + false, + HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, + context.getWarningCollector(), + context.getRuntimeStats()); if (!hasAdminOptionForRoles(transactionHandle, identity, metastoreContext, roles)) { denyGrantRoles(roles, grantees); } @@ -376,7 +599,16 @@ public void checkCanRevokeRoles(ConnectorTransactionHandle transactionHandle, Co if (grantor.isPresent()) { throw new AccessDeniedException("Hive Connector does not support GRANTED BY statement"); } - MetastoreContext metastoreContext = new MetastoreContext(identity, context.getQueryId().getId(), context.getClientInfo(), context.getSource(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, context.getWarningCollector(), context.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext( + identity, context.getQueryId().getId(), + context.getClientInfo(), + context.getClientTags(), + context.getSource(), + Optional.empty(), + false, + HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, + context.getWarningCollector(), + context.getRuntimeStats()); if (!hasAdminOptionForRoles(transactionHandle, identity, metastoreContext, roles)) { denyRevokeRoles(roles, grantees); } @@ -386,7 +618,16 @@ public void checkCanRevokeRoles(ConnectorTransactionHandle transactionHandle, Co public void checkCanSetRole(ConnectorTransactionHandle transaction, ConnectorIdentity identity, AccessControlContext context, String role, String catalogName) { SemiTransactionalHiveMetastore metastore = getMetastore(transaction); - MetastoreContext metastoreContext = new MetastoreContext(identity, context.getQueryId().getId(), context.getClientInfo(), context.getSource(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, context.getWarningCollector(), context.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext( + identity, context.getQueryId().getId(), + context.getClientInfo(), + context.getClientTags(), + context.getSource(), + Optional.empty(), + false, + HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, + context.getWarningCollector(), + context.getRuntimeStats()); if (!isRoleApplicable(metastore, identity, new PrestoPrincipal(USER, identity.getUser()), metastoreContext, role)) { denySetRole(role); } @@ -395,7 +636,16 @@ public void checkCanSetRole(ConnectorTransactionHandle transaction, ConnectorIde @Override public void checkCanShowRoles(ConnectorTransactionHandle transactionHandle, ConnectorIdentity identity, AccessControlContext context, String catalogName) { - MetastoreContext metastoreContext = new MetastoreContext(identity, context.getQueryId().getId(), context.getClientInfo(), context.getSource(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, context.getWarningCollector(), context.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext( + identity, context.getQueryId().getId(), + context.getClientInfo(), + context.getClientTags(), + context.getSource(), + Optional.empty(), + false, + HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, + context.getWarningCollector(), + context.getRuntimeStats()); if (!isAdmin(transactionHandle, identity, metastoreContext)) { denyShowRoles(catalogName); } diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/statistics/MetastoreHiveStatisticsProvider.java b/presto-hive/src/main/java/com/facebook/presto/hive/statistics/MetastoreHiveStatisticsProvider.java index 0b6550cda2ff..ae7bd73f8c46 100644 --- a/presto-hive/src/main/java/com/facebook/presto/hive/statistics/MetastoreHiveStatisticsProvider.java +++ b/presto-hive/src/main/java/com/facebook/presto/hive/statistics/MetastoreHiveStatisticsProvider.java @@ -123,7 +123,17 @@ private Map getPartitionsStatistics(ConnectorSessio return ImmutableMap.of(); } boolean unpartitioned = hivePartitions.stream().anyMatch(partition -> partition.getPartitionId().equals(UNPARTITIONED_ID)); - MetastoreContext metastoreContext = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getSource(), getMetastoreHeaders(session), isUserDefinedTypeEncodingEnabled(session), metastore.getColumnConverterProvider(), session.getWarningCollector(), session.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext( + session.getIdentity(), + session.getQueryId(), + session.getClientInfo(), + session.getClientTags(), + session.getSource(), + getMetastoreHeaders(session), + isUserDefinedTypeEncodingEnabled(session), + metastore.getColumnConverterProvider(), + session.getWarningCollector(), + session.getRuntimeStats()); if (unpartitioned) { checkArgument(hivePartitions.size() == 1, "expected only one hive partition"); PartitionStatistics tableStatistics = metastore.getTableStatistics(metastoreContext, table.getSchemaName(), table.getTableName()); diff --git a/presto-hive/src/test/java/com/facebook/presto/hive/AbstractTestHiveClient.java b/presto-hive/src/test/java/com/facebook/presto/hive/AbstractTestHiveClient.java index 473b7a92e0ee..8ccf7a5632fd 100644 --- a/presto-hive/src/test/java/com/facebook/presto/hive/AbstractTestHiveClient.java +++ b/presto-hive/src/test/java/com/facebook/presto/hive/AbstractTestHiveClient.java @@ -1510,7 +1510,17 @@ protected void doTestMismatchSchemaTable( // alter the table schema try (Transaction transaction = newTransaction()) { ConnectorSession session = newSession(); - MetastoreContext metastoreContext = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getSource(), getMetastoreHeaders(session), false, DEFAULT_COLUMN_CONVERTER_PROVIDER, session.getWarningCollector(), session.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext( + session.getIdentity(), + session.getQueryId(), + session.getClientInfo(), + session.getClientTags(), + session.getSource(), + getMetastoreHeaders(session), + false, + DEFAULT_COLUMN_CONVERTER_PROVIDER, + session.getWarningCollector(), + session.getRuntimeStats()); PrincipalPrivileges principalPrivileges = testingPrincipalPrivilege(session); Table oldTable = transaction.getMetastore().getTable(metastoreContext, schemaName, tableName).get(); HiveTypeTranslator hiveTypeTranslator = new HiveTypeTranslator(); @@ -2775,7 +2785,7 @@ private void assertEmptyFile(HiveStorageFormat format) ConnectorTableHandle tableHandle = getTableHandle(metadata, tableName); List columnHandles = filterNonHiddenColumnHandles(metadata.getColumnHandles(session, tableHandle).values()); - MetastoreContext metastoreContext = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getSource(), getMetastoreHeaders(session), false, DEFAULT_COLUMN_CONVERTER_PROVIDER, session.getWarningCollector(), session.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getClientTags(), session.getSource(), getMetastoreHeaders(session), false, DEFAULT_COLUMN_CONVERTER_PROVIDER, session.getWarningCollector(), session.getRuntimeStats()); Table table = transaction.getMetastore() .getTable(metastoreContext, tableName.getSchemaName(), tableName.getTableName()) .orElseThrow(AssertionError::new); @@ -2949,7 +2959,7 @@ public void testTableCreationIgnoreExisting() Table table = createSimpleTable(schemaTableName, columns, session, targetPath, "q1"); transaction.getMetastore() .createTable(session, table, privileges, Optional.empty(), false, EMPTY_TABLE_STATISTICS, emptyList()); - MetastoreContext metastoreContext = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getSource(), getMetastoreHeaders(session), false, DEFAULT_COLUMN_CONVERTER_PROVIDER, session.getWarningCollector(), session.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getClientTags(), session.getSource(), getMetastoreHeaders(session), false, DEFAULT_COLUMN_CONVERTER_PROVIDER, session.getWarningCollector(), session.getRuntimeStats()); Optional
tableHandle = transaction.getMetastore().getTable(metastoreContext, schemaName, tableName); assertTrue(tableHandle.isPresent()); transaction.commit(); @@ -3902,7 +3912,7 @@ protected String partitionTargetPath(SchemaTableName schemaTableName, String par ConnectorSession session = newSession(); SemiTransactionalHiveMetastore metastore = transaction.getMetastore(); LocationService locationService = getLocationService(); - Table table = metastore.getTable(new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getSource(), getMetastoreHeaders(session), false, DEFAULT_COLUMN_CONVERTER_PROVIDER, session.getWarningCollector(), session.getRuntimeStats()), schemaTableName.getSchemaName(), schemaTableName.getTableName()).get(); + Table table = metastore.getTable(new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getClientTags(), session.getSource(), getMetastoreHeaders(session), false, DEFAULT_COLUMN_CONVERTER_PROVIDER, session.getWarningCollector(), session.getRuntimeStats()), schemaTableName.getSchemaName(), schemaTableName.getTableName()).get(); LocationHandle handle = locationService.forExistingTable(metastore, session, table, false); return locationService.getPartitionWriteInfo(handle, Optional.empty(), partitionName).getTargetPath().toString(); } @@ -4099,7 +4109,7 @@ protected void doCreateTable(SchemaTableName tableName, HiveStorageFormat storag try (Transaction transaction = newTransaction()) { ConnectorSession session = newSession(); ConnectorMetadata metadata = transaction.getMetadata(); - MetastoreContext metastoreContext = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getSource(), getMetastoreHeaders(session), false, DEFAULT_COLUMN_CONVERTER_PROVIDER, session.getWarningCollector(), session.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getClientTags(), session.getSource(), getMetastoreHeaders(session), false, DEFAULT_COLUMN_CONVERTER_PROVIDER, session.getWarningCollector(), session.getRuntimeStats()); // load the new table ConnectorTableHandle tableHandle = getTableHandle(metadata, tableName); @@ -4155,7 +4165,7 @@ protected void doCreateEmptyTable(SchemaTableName tableName, HiveStorageFormat s try (Transaction transaction = newTransaction()) { ConnectorSession session = newSession(); ConnectorMetadata metadata = transaction.getMetadata(); - MetastoreContext metastoreContext = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getSource(), getMetastoreHeaders(session), false, DEFAULT_COLUMN_CONVERTER_PROVIDER, session.getWarningCollector(), session.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getClientTags(), session.getSource(), getMetastoreHeaders(session), false, DEFAULT_COLUMN_CONVERTER_PROVIDER, session.getWarningCollector(), session.getRuntimeStats()); // load the new table ConnectorTableHandle tableHandle = getTableHandle(metadata, tableName); @@ -4215,7 +4225,7 @@ private void doInsert(HiveStorageFormat storageFormat, SchemaTableName tableName try (Transaction transaction = newTransaction()) { ConnectorSession session = newSession(); ConnectorMetadata metadata = transaction.getMetadata(); - MetastoreContext metastoreContext = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getSource(), getMetastoreHeaders(session), false, DEFAULT_COLUMN_CONVERTER_PROVIDER, session.getWarningCollector(), session.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getClientTags(), session.getSource(), getMetastoreHeaders(session), false, DEFAULT_COLUMN_CONVERTER_PROVIDER, session.getWarningCollector(), session.getRuntimeStats()); // load the new table ConnectorTableHandle tableHandle = getTableHandle(metadata, tableName); @@ -4242,7 +4252,7 @@ private void doInsert(HiveStorageFormat storageFormat, SchemaTableName tableName Set existingFiles; try (Transaction transaction = newTransaction()) { ConnectorSession session = newSession(); - MetastoreContext metastoreContext = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getSource(), getMetastoreHeaders(session), false, DEFAULT_COLUMN_CONVERTER_PROVIDER, session.getWarningCollector(), session.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getClientTags(), session.getSource(), getMetastoreHeaders(session), false, DEFAULT_COLUMN_CONVERTER_PROVIDER, session.getWarningCollector(), session.getRuntimeStats()); existingFiles = listAllDataFiles(metastoreContext, transaction, tableName.getSchemaName(), tableName.getTableName()); assertFalse(existingFiles.isEmpty()); } @@ -4254,7 +4264,17 @@ private void doInsert(HiveStorageFormat storageFormat, SchemaTableName tableName ConnectorTableHandle tableHandle = getTableHandle(metadata, tableName); - MetastoreContext metastoreContext = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getSource(), getMetastoreHeaders(session), false, DEFAULT_COLUMN_CONVERTER_PROVIDER, session.getWarningCollector(), session.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext( + session.getIdentity(), + session.getQueryId(), + session.getClientInfo(), + session.getClientTags(), + session.getSource(), + getMetastoreHeaders(session), + false, + DEFAULT_COLUMN_CONVERTER_PROVIDER, + session.getWarningCollector(), + session.getRuntimeStats()); // "stage" insert data HiveInsertTableHandle insertTableHandle = (HiveInsertTableHandle) metadata.beginInsert(session, tableHandle); @@ -4308,7 +4328,17 @@ private void doInsert(HiveStorageFormat storageFormat, SchemaTableName tableName try (Transaction transaction = newTransaction()) { ConnectorSession session = newSession(); ConnectorMetadata metadata = transaction.getMetadata(); - MetastoreContext metastoreContext = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getSource(), getMetastoreHeaders(session), false, DEFAULT_COLUMN_CONVERTER_PROVIDER, session.getWarningCollector(), session.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext( + session.getIdentity(), + session.getQueryId(), + session.getClientInfo(), + session.getClientTags(), + session.getSource(), + getMetastoreHeaders(session), + false, + DEFAULT_COLUMN_CONVERTER_PROVIDER, + session.getWarningCollector(), + session.getRuntimeStats()); ConnectorTableHandle tableHandle = getTableHandle(metadata, tableName); List columnHandles = filterNonHiddenColumnHandles(metadata.getColumnHandles(session, tableHandle).values()); @@ -4322,7 +4352,17 @@ private void doInsert(HiveStorageFormat storageFormat, SchemaTableName tableName // verify statistics unchanged try (Transaction transaction = newTransaction()) { ConnectorSession session = newSession(); - MetastoreContext metastoreContext = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getSource(), getMetastoreHeaders(session), false, DEFAULT_COLUMN_CONVERTER_PROVIDER, session.getWarningCollector(), session.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext( + session.getIdentity(), + session.getQueryId(), + session.getClientInfo(), + session.getClientTags(), + session.getSource(), + getMetastoreHeaders(session), + false, + DEFAULT_COLUMN_CONVERTER_PROVIDER, + session.getWarningCollector(), + session.getRuntimeStats()); HiveBasicStatistics statistics = getBasicStatisticsForTable(metastoreContext, transaction, tableName); assertEquals(statistics.getRowCount().getAsLong(), CREATE_TABLE_DATA.getRowCount() * 3L); assertEquals(statistics.getFileCount().getAsLong(), 3L); @@ -4432,7 +4472,7 @@ private void doInsertIntoNewPartition(HiveStorageFormat storageFormat, SchemaTab Set existingFiles; try (Transaction transaction = newTransaction()) { ConnectorSession session = newSession(); - MetastoreContext metastoreContext = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getSource(), getMetastoreHeaders(session), false, DEFAULT_COLUMN_CONVERTER_PROVIDER, session.getWarningCollector(), session.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getClientTags(), session.getSource(), getMetastoreHeaders(session), false, DEFAULT_COLUMN_CONVERTER_PROVIDER, session.getWarningCollector(), session.getRuntimeStats()); // verify partitions were created List partitionNamesWithVersion = transaction.getMetastore().getPartitionNames(metastoreContext, tableName.getSchemaName(), tableName.getTableName()) .orElseThrow(() -> new AssertionError("Table does not exist: " + tableName)); @@ -4518,7 +4558,7 @@ private void doInsertIntoNewPartition(HiveStorageFormat storageFormat, SchemaTab assertEqualsIgnoreOrder(result.getMaterializedRows(), CREATE_TABLE_PARTITIONED_DATA.getMaterializedRows()); // verify we did not modify the table directory - MetastoreContext metastoreContext = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getSource(), getMetastoreHeaders(session), false, DEFAULT_COLUMN_CONVERTER_PROVIDER, session.getWarningCollector(), session.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getClientTags(), session.getSource(), getMetastoreHeaders(session), false, DEFAULT_COLUMN_CONVERTER_PROVIDER, session.getWarningCollector(), session.getRuntimeStats()); assertEquals(listAllDataFiles(metastoreContext, transaction, tableName.getSchemaName(), tableName.getTableName()), existingFiles); // verify temp directory is empty @@ -4563,7 +4603,7 @@ private void doInsertIntoExistingPartition(HiveStorageFormat storageFormat, Sche ConnectorSession session = newSession(); ConnectorMetadata metadata = transaction.getMetadata(); ConnectorTableHandle tableHandle = getTableHandle(metadata, tableName); - MetastoreContext metastoreContext = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getSource(), getMetastoreHeaders(session), false, DEFAULT_COLUMN_CONVERTER_PROVIDER, session.getWarningCollector(), session.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getClientTags(), session.getSource(), getMetastoreHeaders(session), false, DEFAULT_COLUMN_CONVERTER_PROVIDER, session.getWarningCollector(), session.getRuntimeStats()); // verify partitions were created List partitionsNameWithVersion = transaction.getMetastore().getPartitionNames(metastoreContext, tableName.getSchemaName(), tableName.getTableName()) @@ -4598,7 +4638,7 @@ private void doInsertIntoExistingPartition(HiveStorageFormat storageFormat, Sche ConnectorMetadata metadata = transaction.getMetadata(); ConnectorSession session = newSession(); - MetastoreContext metastoreContext = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getSource(), getMetastoreHeaders(session), false, DEFAULT_COLUMN_CONVERTER_PROVIDER, session.getWarningCollector(), session.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getClientTags(), session.getSource(), getMetastoreHeaders(session), false, DEFAULT_COLUMN_CONVERTER_PROVIDER, session.getWarningCollector(), session.getRuntimeStats()); existingFiles = listAllDataFiles(metastoreContext, transaction, tableName.getSchemaName(), tableName.getTableName()); assertFalse(existingFiles.isEmpty()); @@ -4648,7 +4688,7 @@ private void doInsertIntoExistingPartition(HiveStorageFormat storageFormat, Sche ConnectorSession session = newSession(); ConnectorTableHandle tableHandle = getTableHandle(metadata, tableName); List columnHandles = filterNonHiddenColumnHandles(metadata.getColumnHandles(session, tableHandle).values()); - MetastoreContext metastoreContext = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getSource(), getMetastoreHeaders(session), false, DEFAULT_COLUMN_CONVERTER_PROVIDER, session.getWarningCollector(), session.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getClientTags(), session.getSource(), getMetastoreHeaders(session), false, DEFAULT_COLUMN_CONVERTER_PROVIDER, session.getWarningCollector(), session.getRuntimeStats()); // verify the data is unchanged MaterializedResult result = readTable(transaction, tableHandle, columnHandles, newSession(), TupleDomain.all(), OptionalInt.empty(), Optional.empty()); @@ -4692,11 +4732,11 @@ private void doInsertIntoExistingPartitionEmptyStatistics(HiveStorageFormat stor insertData(tableName, CREATE_TABLE_PARTITIONED_DATA); ConnectorSession session = newSession(); try (Transaction transaction = newTransaction()) { - List partitionNamesWithVersion = transaction.getMetastore().getPartitionNames(new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getSource(), getMetastoreHeaders(session), false, DEFAULT_COLUMN_CONVERTER_PROVIDER, session.getWarningCollector(), session.getRuntimeStats()), tableName.getSchemaName(), tableName.getTableName()) + List partitionNamesWithVersion = transaction.getMetastore().getPartitionNames(new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getClientTags(), session.getSource(), getMetastoreHeaders(session), false, DEFAULT_COLUMN_CONVERTER_PROVIDER, session.getWarningCollector(), session.getRuntimeStats()), tableName.getSchemaName(), tableName.getTableName()) .orElseThrow(() -> new AssertionError("Table does not exist: " + tableName)); for (PartitionNameWithVersion partitionNameWithVersion : partitionNamesWithVersion) { - HiveBasicStatistics statistics = getBasicStatisticsForPartition(new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getSource(), getMetastoreHeaders(session), false, DEFAULT_COLUMN_CONVERTER_PROVIDER, session.getWarningCollector(), session.getRuntimeStats()), transaction, tableName, partitionNameWithVersion.getPartitionName()); + HiveBasicStatistics statistics = getBasicStatisticsForPartition(new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getClientTags(), session.getSource(), getMetastoreHeaders(session), false, DEFAULT_COLUMN_CONVERTER_PROVIDER, session.getWarningCollector(), session.getRuntimeStats()), transaction, tableName, partitionNameWithVersion.getPartitionName()); assertThat(statistics.getRowCount()).isNotPresent(); assertThat(statistics.getInMemoryDataSizeInBytes()).isNotPresent(); // fileCount and rawSize statistics are computed on the fly by the metastore, thus cannot be erased @@ -4815,7 +4855,7 @@ private void doTestMetadataDelete(HiveStorageFormat storageFormat, SchemaTableNa try (Transaction transaction = newTransaction()) { ConnectorSession session = newSession(); ConnectorMetadata metadata = transaction.getMetadata(); - MetastoreContext metastoreContext = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getSource(), getMetastoreHeaders(session), false, DEFAULT_COLUMN_CONVERTER_PROVIDER, session.getWarningCollector(), session.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getClientTags(), session.getSource(), getMetastoreHeaders(session), false, DEFAULT_COLUMN_CONVERTER_PROVIDER, session.getWarningCollector(), session.getRuntimeStats()); // verify partitions were created List partitionNamesWithVersion = transaction.getMetastore().getPartitionNames(metastoreContext, tableName.getSchemaName(), tableName.getTableName()) @@ -4899,7 +4939,7 @@ private void doTestMetadataDelete(HiveStorageFormat storageFormat, SchemaTableNa assertEqualsIgnoreOrder(actualAfterDelete2.getMaterializedRows(), ImmutableList.of()); // verify table directory is empty - MetastoreContext metastoreContext = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getSource(), getMetastoreHeaders(session), false, DEFAULT_COLUMN_CONVERTER_PROVIDER, session.getWarningCollector(), session.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getClientTags(), session.getSource(), getMetastoreHeaders(session), false, DEFAULT_COLUMN_CONVERTER_PROVIDER, session.getWarningCollector(), session.getRuntimeStats()); Set filesAfterDelete = listAllDataFiles(metastoreContext, transaction, tableName.getSchemaName(), tableName.getTableName()); assertTrue(filesAfterDelete.isEmpty()); } @@ -5521,7 +5561,7 @@ protected Table createEmptyTable(SchemaTableName schemaTableName, HiveStorageFor try (Transaction transaction = newTransaction()) { ConnectorSession session = newSession(); - MetastoreContext metastoreContext = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getSource(), getMetastoreHeaders(session), false, DEFAULT_COLUMN_CONVERTER_PROVIDER, session.getWarningCollector(), session.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getClientTags(), session.getSource(), getMetastoreHeaders(session), false, DEFAULT_COLUMN_CONVERTER_PROVIDER, session.getWarningCollector(), session.getRuntimeStats()); return transaction.getMetastore().getTable(metastoreContext, schemaTableName.getSchemaName(), schemaTableName.getTableName()).get(); } } @@ -5534,7 +5574,7 @@ private void alterBucketProperty(SchemaTableName schemaTableName, Optional table = transaction.getMetastore().getTable(metastoreContext, schemaName, tableName); Table.Builder tableBuilder = Table.builder(table.get()); tableBuilder.getStorageBuilder().setBucketProperty(bucketProperty); @@ -5755,7 +5795,7 @@ private void doTestTransactionDeleteInsert( try (Transaction transaction = newTransaction()) { ConnectorSession session = newSession(); - MetastoreContext metastoreContext = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getSource(), getMetastoreHeaders(session), false, DEFAULT_COLUMN_CONVERTER_PROVIDER, session.getWarningCollector(), session.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getClientTags(), session.getSource(), getMetastoreHeaders(session), false, DEFAULT_COLUMN_CONVERTER_PROVIDER, session.getWarningCollector(), session.getRuntimeStats()); // verify partitions List partitionNamesWithVersion = transaction.getMetastore() .getPartitionNames(metastoreContext, tableName.getSchemaName(), tableName.getTableName()) @@ -5800,7 +5840,7 @@ protected Set getSupportedCreateTableHiveStorageFormats() private List> getTableConstraints(SchemaTableName tableName) { ConnectorSession session = newSession(); - MetastoreContext metastoreContext = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getSource(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, session.getWarningCollector(), session.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getClientTags(), session.getSource(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, session.getWarningCollector(), session.getRuntimeStats()); return metastoreClient.getTableConstraints(metastoreContext, tableName.getSchemaName(), tableName.getTableName()); } @@ -5915,7 +5955,7 @@ public void triggerConflict(ConnectorSession session, SchemaTableName tableName, // This method bypasses transaction interface because this method is inherently hacky and doesn't work well with the transaction abstraction. // Additionally, this method is not part of a test. Its purpose is to set up an environment for another test. ExtendedHiveMetastore metastoreClient = getMetastoreClient(); - MetastoreContext metastoreContext = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getSource(), getMetastoreHeaders(session), false, DEFAULT_COLUMN_CONVERTER_PROVIDER, session.getWarningCollector(), session.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getClientTags(), session.getSource(), getMetastoreHeaders(session), false, DEFAULT_COLUMN_CONVERTER_PROVIDER, session.getWarningCollector(), session.getRuntimeStats()); Optional partition = metastoreClient.getPartition(metastoreContext, tableName.getSchemaName(), tableName.getTableName(), copyPartitionFrom); conflictPartition = Partition.builder(partition.get()) .setValues(toPartitionValues(partitionNameToConflict)) diff --git a/presto-hive/src/test/java/com/facebook/presto/hive/HiveQueryRunner.java b/presto-hive/src/test/java/com/facebook/presto/hive/HiveQueryRunner.java index e363f2ecd061..a6e842b29b62 100644 --- a/presto-hive/src/test/java/com/facebook/presto/hive/HiveQueryRunner.java +++ b/presto-hive/src/test/java/com/facebook/presto/hive/HiveQueryRunner.java @@ -46,6 +46,7 @@ import java.net.URI; import java.nio.file.Path; import java.nio.file.Paths; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -80,7 +81,7 @@ private HiveQueryRunner() public static final String TPCH_BUCKETED_SCHEMA = "tpch_bucketed"; public static final String TPCDS_SCHEMA = "tpcds"; public static final String TPCDS_BUCKETED_SCHEMA = "tpcds_bucketed"; - public static final MetastoreContext METASTORE_CONTEXT = new MetastoreContext("test_user", "test_queryId", Optional.empty(), Optional.empty(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, WarningCollector.NOOP, new RuntimeStats()); + public static final MetastoreContext METASTORE_CONTEXT = new MetastoreContext("test_user", "test_queryId", Optional.empty(), Collections.emptySet(), Optional.empty(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, WarningCollector.NOOP, new RuntimeStats()); private static final String TEMPORARY_TABLE_SCHEMA = "__temporary_tables__"; private static final DateTimeZone TIME_ZONE = DateTimeZone.forID("America/Bahia_Banderas"); diff --git a/presto-hive/src/test/java/com/facebook/presto/hive/TestHiveCommitHandleOutput.java b/presto-hive/src/test/java/com/facebook/presto/hive/TestHiveCommitHandleOutput.java index 8e37e02b6926..0e1da1b900ff 100644 --- a/presto-hive/src/test/java/com/facebook/presto/hive/TestHiveCommitHandleOutput.java +++ b/presto-hive/src/test/java/com/facebook/presto/hive/TestHiveCommitHandleOutput.java @@ -46,6 +46,7 @@ import java.io.IOException; import java.net.URI; +import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -185,6 +186,7 @@ public void testCommitOutputForPartitions() connectorSession.getUser(), connectorSession.getQueryId(), Optional.empty(), + Collections.emptySet(), Optional.empty(), Optional.empty(), false, diff --git a/presto-hive/src/test/java/com/facebook/presto/hive/TestHiveLogicalPlanner.java b/presto-hive/src/test/java/com/facebook/presto/hive/TestHiveLogicalPlanner.java index 68e2a82af010..c6499696293b 100644 --- a/presto-hive/src/test/java/com/facebook/presto/hive/TestHiveLogicalPlanner.java +++ b/presto-hive/src/test/java/com/facebook/presto/hive/TestHiveLogicalPlanner.java @@ -70,6 +70,7 @@ import java.net.URI; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Objects; @@ -595,7 +596,7 @@ public void testMetadataAggregationFoldingWithEmptyPartitions() "CREATE TABLE test_metadata_aggregation_folding_with_empty_partitions WITH (partitioned_by = ARRAY['ds']) AS " + "SELECT orderkey, CAST(to_iso8601(date_add('DAY', orderkey % 2, date('2020-07-01'))) AS VARCHAR) AS ds FROM orders WHERE orderkey < 1000"); ExtendedHiveMetastore metastore = replicateHiveMetastore((DistributedQueryRunner) queryRunner); - MetastoreContext metastoreContext = new MetastoreContext(getSession().getUser(), getSession().getQueryId().getId(), Optional.empty(), Optional.empty(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, getSession().getWarningCollector(), getSession().getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext(getSession().getUser(), getSession().getQueryId().getId(), Optional.empty(), Collections.emptySet(), Optional.empty(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, getSession().getWarningCollector(), getSession().getRuntimeStats()); Table table = metastore.getTable(metastoreContext, getSession().getSchema().get(), "test_metadata_aggregation_folding_with_empty_partitions").get(); // Add one partition with no statistics. @@ -739,7 +740,7 @@ public void testMetadataAggregationFoldingWithEmptyPartitionsAndMetastoreThresho "CREATE TABLE test_metadata_aggregation_folding_with_empty_partitions_with_threshold WITH (partitioned_by = ARRAY['ds']) AS " + "SELECT orderkey, CAST(to_iso8601(date_add('DAY', orderkey % 2, date('2020-07-01'))) AS VARCHAR) AS ds FROM orders WHERE orderkey < 1000"); ExtendedHiveMetastore metastore = replicateHiveMetastore((DistributedQueryRunner) queryRunner); - MetastoreContext metastoreContext = new MetastoreContext(getSession().getUser(), getSession().getQueryId().getId(), Optional.empty(), Optional.empty(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, getSession().getWarningCollector(), getSession().getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext(getSession().getUser(), getSession().getQueryId().getId(), Optional.empty(), Collections.emptySet(), Optional.empty(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, getSession().getWarningCollector(), getSession().getRuntimeStats()); Table table = metastore.getTable(metastoreContext, getSession().getSchema().get(), "test_metadata_aggregation_folding_with_empty_partitions_with_threshold").get(); // Add one partition with no statistics. @@ -813,7 +814,7 @@ public void testMetadataAggregationFoldingWithTwoPartitionColumns() "SELECT orderkey, CAST(to_iso8601(date_add('DAY', orderkey % 2, date('2020-07-01'))) AS VARCHAR) AS ds, IF(orderkey % 2 = 1, 'A', 'B') status " + "FROM orders WHERE orderkey < 1000"); ExtendedHiveMetastore metastore = replicateHiveMetastore((DistributedQueryRunner) queryRunner); - MetastoreContext metastoreContext = new MetastoreContext(getSession().getUser(), getSession().getQueryId().getId(), Optional.empty(), Optional.empty(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, getSession().getWarningCollector(), getSession().getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext(getSession().getUser(), getSession().getQueryId().getId(), Optional.empty(), Collections.emptySet(), Optional.empty(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, getSession().getWarningCollector(), getSession().getRuntimeStats()); Table table = metastore.getTable(metastoreContext, getSession().getSchema().get(), "test_metadata_aggregation_folding_with_two_partitions_columns").get(); // Add one partition with no statistics. diff --git a/presto-hive/src/test/java/com/facebook/presto/hive/TestHiveMaterializedViewLogicalPlanner.java b/presto-hive/src/test/java/com/facebook/presto/hive/TestHiveMaterializedViewLogicalPlanner.java index 84e736e4c8b0..5d423606df0e 100644 --- a/presto-hive/src/test/java/com/facebook/presto/hive/TestHiveMaterializedViewLogicalPlanner.java +++ b/presto-hive/src/test/java/com/facebook/presto/hive/TestHiveMaterializedViewLogicalPlanner.java @@ -34,6 +34,7 @@ import com.google.common.collect.ImmutableMultimap; import org.testng.annotations.Test; +import java.util.Collections; import java.util.List; import java.util.Optional; import java.util.function.Consumer; @@ -2734,7 +2735,7 @@ private void setReferencedMaterializedViews(DistributedQueryRunner queryRunner, private void appendTableParameter(ExtendedHiveMetastore metastore, String tableName, String parameterKey, String parameterValue) { - MetastoreContext metastoreContext = new MetastoreContext(getSession().getUser(), getSession().getQueryId().getId(), Optional.empty(), Optional.empty(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, getSession().getWarningCollector(), getSession().getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext(getSession().getUser(), getSession().getQueryId().getId(), Optional.empty(), Collections.emptySet(), Optional.empty(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, getSession().getWarningCollector(), getSession().getRuntimeStats()); Optional
table = metastore.getTable(metastoreContext, getSession().getSchema().get(), tableName); if (table.isPresent()) { Table originalTable = table.get(); diff --git a/presto-hive/src/test/java/com/facebook/presto/hive/TestHiveMaterializedViewUtils.java b/presto-hive/src/test/java/com/facebook/presto/hive/TestHiveMaterializedViewUtils.java index f07d4ed2c29f..37a9a0455f94 100644 --- a/presto-hive/src/test/java/com/facebook/presto/hive/TestHiveMaterializedViewUtils.java +++ b/presto-hive/src/test/java/com/facebook/presto/hive/TestHiveMaterializedViewUtils.java @@ -35,6 +35,7 @@ import org.joda.time.DateTimeZone; import org.testng.annotations.Test; +import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -64,7 +65,7 @@ public class TestHiveMaterializedViewUtils private static final String SQL = "sql"; private final LiteralEncoder literalEncoder = new LiteralEncoder(new TestingBlockEncodingSerde()); - private final MetastoreContext metastoreContext = new MetastoreContext(USER_NAME, QUERY_ID, Optional.empty(), Optional.empty(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, WarningCollector.NOOP, new RuntimeStats()); + private final MetastoreContext metastoreContext = new MetastoreContext(USER_NAME, QUERY_ID, Optional.empty(), Collections.emptySet(), Optional.empty(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, WarningCollector.NOOP, new RuntimeStats()); @Test public void testMaterializedDataPredicates() diff --git a/presto-hive/src/test/java/com/facebook/presto/hive/geospatial/TestSpatialJoins.java b/presto-hive/src/test/java/com/facebook/presto/hive/geospatial/TestSpatialJoins.java index 4b68c62b9eaf..122ec5f93beb 100644 --- a/presto-hive/src/test/java/com/facebook/presto/hive/geospatial/TestSpatialJoins.java +++ b/presto-hive/src/test/java/com/facebook/presto/hive/geospatial/TestSpatialJoins.java @@ -38,6 +38,7 @@ import org.testng.internal.collections.Pair; import java.io.File; +import java.util.Collections; import java.util.List; import java.util.Optional; @@ -106,7 +107,7 @@ protected QueryRunner createQueryRunner() FileHiveMetastore metastore = new FileHiveMetastore(hdfsEnvironment, dataDirectory.toURI().toString(), "test"); ColumnConverterProvider columnConverterProvider = HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER; - metastore.createDatabase(new MetastoreContext("test_user", "test_queryId", Optional.empty(), Optional.empty(), Optional.empty(), false, columnConverterProvider, WarningCollector.NOOP, new RuntimeStats()), Database.builder() + metastore.createDatabase(new MetastoreContext("test_user", "test_queryId", Optional.empty(), Collections.emptySet(), Optional.empty(), Optional.empty(), false, columnConverterProvider, WarningCollector.NOOP, new RuntimeStats()), Database.builder() .setDatabaseName("default") .setOwnerName("public") .setOwnerType(PrincipalType.ROLE) diff --git a/presto-hive/src/test/java/com/facebook/presto/hive/hudi/HudiTestingDataGenerator.java b/presto-hive/src/test/java/com/facebook/presto/hive/hudi/HudiTestingDataGenerator.java index 773a8fb84eae..512125b8e2ea 100644 --- a/presto-hive/src/test/java/com/facebook/presto/hive/hudi/HudiTestingDataGenerator.java +++ b/presto-hive/src/test/java/com/facebook/presto/hive/hudi/HudiTestingDataGenerator.java @@ -48,6 +48,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Optional; import java.util.function.Consumer; @@ -70,7 +71,7 @@ public class HudiTestingDataGenerator { private static final String OWNER_PUBLIC = "public"; - private static final MetastoreContext METASTORE_CONTEXT = new MetastoreContext("test_user", "test_queryId", Optional.empty(), Optional.empty(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, WarningCollector.NOOP, new RuntimeStats()); + private static final MetastoreContext METASTORE_CONTEXT = new MetastoreContext("test_user", "test_queryId", Optional.empty(), Collections.emptySet(), Optional.empty(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, WarningCollector.NOOP, new RuntimeStats()); private static final PrincipalPrivileges PRINCIPAL_PRIVILEGES = new PrincipalPrivileges(ImmutableMultimap.of(), ImmutableMultimap.of()); private static final StorageFormat STORAGE_FORMAT_COPY_ON_WRITE = StorageFormat.create( diff --git a/presto-hive/src/test/java/com/facebook/presto/hive/metastore/glue/TestHiveClientGlueMetastore.java b/presto-hive/src/test/java/com/facebook/presto/hive/metastore/glue/TestHiveClientGlueMetastore.java index eca3e474b9ad..a2454f17859a 100644 --- a/presto-hive/src/test/java/com/facebook/presto/hive/metastore/glue/TestHiveClientGlueMetastore.java +++ b/presto-hive/src/test/java/com/facebook/presto/hive/metastore/glue/TestHiveClientGlueMetastore.java @@ -272,6 +272,7 @@ public void testTableWithoutStorageDescriptor() session.getIdentity(), session.getQueryId(), session.getClientInfo(), + session.getClientTags(), session.getSource(), getMetastoreHeaders(session), false, diff --git a/presto-hive/src/test/java/com/facebook/presto/hive/security/ranger/TestRangerBasedAccessControl.java b/presto-hive/src/test/java/com/facebook/presto/hive/security/ranger/TestRangerBasedAccessControl.java index b34fcb5aad88..ec0d27388df6 100644 --- a/presto-hive/src/test/java/com/facebook/presto/hive/security/ranger/TestRangerBasedAccessControl.java +++ b/presto-hive/src/test/java/com/facebook/presto/hive/security/ranger/TestRangerBasedAccessControl.java @@ -36,6 +36,7 @@ import org.testng.Assert.ThrowingRunnable; import org.testng.annotations.Test; +import java.util.Collections; import java.util.Optional; import static com.facebook.presto.hive.security.ranger.RangerBasedAccessControlConfig.RANGER_REST_POLICY_MGR_DOWNLOAD_URL; @@ -47,7 +48,7 @@ public class TestRangerBasedAccessControl { public static final ConnectorTransactionHandle TRANSACTION_HANDLE = new ConnectorTransactionHandle() {}; - public static final AccessControlContext CONTEXT = new AccessControlContext(new QueryId("query_id"), Optional.empty(), Optional.empty(), WarningCollector.NOOP, new RuntimeStats()); + public static final AccessControlContext CONTEXT = new AccessControlContext(new QueryId("query_id"), Optional.empty(), Collections.emptySet(), Optional.empty(), WarningCollector.NOOP, new RuntimeStats()); @Test public void testTablePriviledgesRolesNotAllowed() diff --git a/presto-hive/src/test/java/com/facebook/presto/hive/statistics/TestParquetQuickStatsBuilder.java b/presto-hive/src/test/java/com/facebook/presto/hive/statistics/TestParquetQuickStatsBuilder.java index 04f829ac58f0..91289906c5bc 100644 --- a/presto-hive/src/test/java/com/facebook/presto/hive/statistics/TestParquetQuickStatsBuilder.java +++ b/presto-hive/src/test/java/com/facebook/presto/hive/statistics/TestParquetQuickStatsBuilder.java @@ -50,6 +50,7 @@ import java.io.IOException; import java.time.LocalDate; import java.time.chrono.ChronoLocalDate; +import java.util.Collections; import java.util.Map; import java.util.Optional; import java.util.concurrent.TimeUnit; @@ -209,6 +210,7 @@ private void setUp() metastoreContext = new MetastoreContext(SESSION.getUser(), SESSION.getQueryId(), Optional.empty(), + Collections.emptySet(), Optional.empty(), Optional.empty(), false, diff --git a/presto-hive/src/test/java/com/facebook/presto/hive/statistics/TestQuickStatsProvider.java b/presto-hive/src/test/java/com/facebook/presto/hive/statistics/TestQuickStatsProvider.java index b7e8e94495a6..94c0d025cb47 100644 --- a/presto-hive/src/test/java/com/facebook/presto/hive/statistics/TestQuickStatsProvider.java +++ b/presto-hive/src/test/java/com/facebook/presto/hive/statistics/TestQuickStatsProvider.java @@ -50,6 +50,7 @@ import org.testng.annotations.Test; import java.time.Instant; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Optional; @@ -141,6 +142,7 @@ public void setUp() metastoreContext = new MetastoreContext(SESSION.getUser(), SESSION.getQueryId(), Optional.empty(), + Collections.emptySet(), Optional.empty(), Optional.empty(), false, diff --git a/presto-hudi/src/main/java/com/facebook/presto/hudi/HudiMetadata.java b/presto-hudi/src/main/java/com/facebook/presto/hudi/HudiMetadata.java index 576d06056b1b..dbbedd4feff9 100644 --- a/presto-hudi/src/main/java/com/facebook/presto/hudi/HudiMetadata.java +++ b/presto-hudi/src/main/java/com/facebook/presto/hudi/HudiMetadata.java @@ -257,7 +257,7 @@ static List fromDataColumns(List dataColumns) public static MetastoreContext toMetastoreContext(ConnectorSession session) { - return new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getSource(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, session.getWarningCollector(), session.getRuntimeStats()); + return new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getClientTags(), session.getSource(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, session.getWarningCollector(), session.getRuntimeStats()); } private static HudiColumnHandle fromDataColumn(int index, Column column) diff --git a/presto-iceberg/src/main/java/com/facebook/presto/iceberg/IcebergHiveMetadata.java b/presto-iceberg/src/main/java/com/facebook/presto/iceberg/IcebergHiveMetadata.java index 5fb8c99011b6..d54193ef4771 100644 --- a/presto-iceberg/src/main/java/com/facebook/presto/iceberg/IcebergHiveMetadata.java +++ b/presto-iceberg/src/main/java/com/facebook/presto/iceberg/IcebergHiveMetadata.java @@ -428,7 +428,7 @@ public void dropView(ConnectorSession session, SchemaTableName viewName) private MetastoreContext getMetastoreContext(ConnectorSession session) { - return new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getSource(), getMetastoreHeaders(session), isUserDefinedTypeEncodingEnabled(session), HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, session.getWarningCollector(), session.getRuntimeStats()); + return new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getClientTags(), session.getSource(), getMetastoreHeaders(session), isUserDefinedTypeEncodingEnabled(session), HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, session.getWarningCollector(), session.getRuntimeStats()); } private List listSchemas(ConnectorSession session, String schemaNameOrNull) diff --git a/presto-iceberg/src/main/java/com/facebook/presto/iceberg/IcebergUtil.java b/presto-iceberg/src/main/java/com/facebook/presto/iceberg/IcebergUtil.java index 851ede529492..92ffe605db6f 100644 --- a/presto-iceberg/src/main/java/com/facebook/presto/iceberg/IcebergUtil.java +++ b/presto-iceberg/src/main/java/com/facebook/presto/iceberg/IcebergUtil.java @@ -216,7 +216,7 @@ public static Table getHiveIcebergTable(ExtendedHiveMetastore metastore, HdfsEnv HdfsContext hdfsContext = new HdfsContext(session, table.getSchemaName(), table.getTableName()); TableOperations operations = new HiveTableOperations( metastore, - new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getSource(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, session.getWarningCollector(), session.getRuntimeStats()), + new MetastoreContext(session.getIdentity(), session.getQueryId(), session.getClientInfo(), session.getClientTags(), session.getSource(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, session.getWarningCollector(), session.getRuntimeStats()), hdfsEnvironment, hdfsContext, table.getSchemaName(), diff --git a/presto-iceberg/src/test/java/com/facebook/presto/iceberg/IcebergQueryRunner.java b/presto-iceberg/src/test/java/com/facebook/presto/iceberg/IcebergQueryRunner.java index 57a338d64a90..28a134925ca3 100644 --- a/presto-iceberg/src/test/java/com/facebook/presto/iceberg/IcebergQueryRunner.java +++ b/presto-iceberg/src/test/java/com/facebook/presto/iceberg/IcebergQueryRunner.java @@ -41,6 +41,7 @@ import java.io.File; import java.net.URI; import java.nio.file.Path; +import java.util.Collections; import java.util.Map; import java.util.Optional; import java.util.OptionalInt; @@ -61,7 +62,7 @@ public final class IcebergQueryRunner public static final String ICEBERG_CATALOG = "iceberg"; public static final String TEST_DATA_DIRECTORY = "iceberg_data"; public static final String TEST_CATALOG_DIRECTORY = "catalog"; - public static final MetastoreContext METASTORE_CONTEXT = new MetastoreContext("test_user", "test_queryId", Optional.empty(), Optional.empty(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, WarningCollector.NOOP, new RuntimeStats()); + public static final MetastoreContext METASTORE_CONTEXT = new MetastoreContext("test_user", "test_queryId", Optional.empty(), Collections.emptySet(), Optional.empty(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, WarningCollector.NOOP, new RuntimeStats()); private IcebergQueryRunner() {} diff --git a/presto-iceberg/src/test/java/com/facebook/presto/iceberg/procedure/TestIcebergRegisterProcedure.java b/presto-iceberg/src/test/java/com/facebook/presto/iceberg/procedure/TestIcebergRegisterProcedure.java index 19ab9b8fe64c..e2b5a4d872e3 100644 --- a/presto-iceberg/src/test/java/com/facebook/presto/iceberg/procedure/TestIcebergRegisterProcedure.java +++ b/presto-iceberg/src/test/java/com/facebook/presto/iceberg/procedure/TestIcebergRegisterProcedure.java @@ -510,7 +510,7 @@ protected void dropTableFromMetastore(String schemaName, String tableName) { ExtendedHiveMetastore metastore = getFileHiveMetastore(); ConnectorSession connectorSession = session.toConnectorSession(); - MetastoreContext metastoreContext = new MetastoreContext(connectorSession.getIdentity(), connectorSession.getQueryId(), connectorSession.getClientInfo(), connectorSession.getSource(), getMetastoreHeaders(connectorSession), isUserDefinedTypeEncodingEnabled(connectorSession), HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, connectorSession.getWarningCollector(), connectorSession.getRuntimeStats()); + MetastoreContext metastoreContext = new MetastoreContext(connectorSession.getIdentity(), connectorSession.getQueryId(), connectorSession.getClientInfo(), connectorSession.getClientTags(), connectorSession.getSource(), getMetastoreHeaders(connectorSession), isUserDefinedTypeEncodingEnabled(connectorSession), HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, connectorSession.getWarningCollector(), connectorSession.getRuntimeStats()); metastore.dropTableFromMetastore(metastoreContext, schemaName, tableName); } diff --git a/presto-main/src/main/java/com/facebook/presto/Session.java b/presto-main/src/main/java/com/facebook/presto/Session.java index d775c7368bb5..7485bad80671 100644 --- a/presto-main/src/main/java/com/facebook/presto/Session.java +++ b/presto-main/src/main/java/com/facebook/presto/Session.java @@ -166,7 +166,7 @@ public Session( this.tracer = requireNonNull(tracer, "tracer is null"); this.warningCollector = requireNonNull(warningCollector, "warningCollector is null"); this.runtimeStats = requireNonNull(runtimeStats, "runtimeStats is null"); - this.context = new AccessControlContext(queryId, clientInfo, source, warningCollector, runtimeStats); + this.context = new AccessControlContext(queryId, clientInfo, clientTags, source, warningCollector, runtimeStats); } public QueryId getQueryId() diff --git a/presto-main/src/main/java/com/facebook/presto/security/AccessControlUtils.java b/presto-main/src/main/java/com/facebook/presto/security/AccessControlUtils.java index c374a42f4fec..9a0a3dd25cb0 100644 --- a/presto-main/src/main/java/com/facebook/presto/security/AccessControlUtils.java +++ b/presto-main/src/main/java/com/facebook/presto/security/AccessControlUtils.java @@ -43,6 +43,7 @@ public static void checkPermissions(AccessControl accessControl, SecurityConfig new AccessControlContext( queryId, Optional.ofNullable(sessionContext.getClientInfo()), + sessionContext.getClientTags(), Optional.ofNullable(sessionContext.getSource()), WarningCollector.NOOP, sessionContext.getRuntimeStats()), @@ -67,6 +68,7 @@ public static Optional getAuthorizedIdentity(AccessControl a new AccessControlContext( queryId, Optional.ofNullable(sessionContext.getClientInfo()), + sessionContext.getClientTags(), Optional.ofNullable(sessionContext.getSource()), WarningCollector.NOOP, sessionContext.getRuntimeStats()), diff --git a/presto-main/src/test/java/com/facebook/presto/security/TestAccessControlManager.java b/presto-main/src/test/java/com/facebook/presto/security/TestAccessControlManager.java index 8072de3bd4b8..e41cb1d588ca 100644 --- a/presto-main/src/test/java/com/facebook/presto/security/TestAccessControlManager.java +++ b/presto-main/src/test/java/com/facebook/presto/security/TestAccessControlManager.java @@ -51,6 +51,7 @@ import org.testng.annotations.Test; import java.security.Principal; +import java.util.Collections; import java.util.Map; import java.util.Optional; import java.util.Set; @@ -81,7 +82,7 @@ public void testInitializing() AccessControlManager accessControlManager = new AccessControlManager(createTestTransactionManager()); accessControlManager.checkCanSetUser( new Identity(USER_NAME, Optional.of(PRINCIPAL)), - new AccessControlContext(new QueryId(QUERY_ID), Optional.empty(), Optional.empty(), WarningCollector.NOOP, new RuntimeStats()), + new AccessControlContext(new QueryId(QUERY_ID), Optional.empty(), Collections.emptySet(), Optional.empty(), WarningCollector.NOOP, new RuntimeStats()), Optional.empty(), "foo"); } @@ -93,7 +94,7 @@ public void testNoneSystemAccessControl() accessControlManager.setSystemAccessControl(AllowAllSystemAccessControl.NAME, ImmutableMap.of()); accessControlManager.checkCanSetUser( new Identity(USER_NAME, Optional.of(PRINCIPAL)), - new AccessControlContext(new QueryId(QUERY_ID), Optional.empty(), Optional.empty(), WarningCollector.NOOP, new RuntimeStats()), + new AccessControlContext(new QueryId(QUERY_ID), Optional.empty(), Collections.emptySet(), Optional.empty(), WarningCollector.NOOP, new RuntimeStats()), Optional.empty(), USER_NAME); } @@ -105,7 +106,7 @@ public void testReadOnlySystemAccessControl() QualifiedObjectName tableName = new QualifiedObjectName("catalog", "schema", "table"); TransactionManager transactionManager = createTestTransactionManager(); AccessControlManager accessControlManager = new AccessControlManager(transactionManager); - AccessControlContext context = new AccessControlContext(new QueryId(QUERY_ID), Optional.empty(), Optional.empty(), WarningCollector.NOOP, new RuntimeStats()); + AccessControlContext context = new AccessControlContext(new QueryId(QUERY_ID), Optional.empty(), Collections.emptySet(), Optional.empty(), WarningCollector.NOOP, new RuntimeStats()); accessControlManager.setSystemAccessControl(ReadOnlySystemAccessControl.NAME, ImmutableMap.of()); accessControlManager.checkCanSetUser(identity, context, Optional.of(PRINCIPAL), USER_NAME); @@ -148,7 +149,7 @@ public void testSetAccessControl() accessControlManager.checkCanSetUser( new Identity(USER_NAME, Optional.of(PRINCIPAL)), - new AccessControlContext(new QueryId(QUERY_ID), Optional.empty(), Optional.empty(), WarningCollector.NOOP, new RuntimeStats()), + new AccessControlContext(new QueryId(QUERY_ID), Optional.empty(), Collections.emptySet(), Optional.empty(), WarningCollector.NOOP, new RuntimeStats()), Optional.of(PRINCIPAL), USER_NAME); assertEquals(accessControlFactory.getCheckedUserName(), USER_NAME); @@ -159,7 +160,7 @@ public void testSetAccessControl() public void testCheckQueryIntegrity() { AccessControlManager accessControlManager = new AccessControlManager(createTestTransactionManager()); - AccessControlContext context = new AccessControlContext(new QueryId(QUERY_ID), Optional.empty(), Optional.empty(), WarningCollector.NOOP, new RuntimeStats()); + AccessControlContext context = new AccessControlContext(new QueryId(QUERY_ID), Optional.empty(), Collections.emptySet(), Optional.empty(), WarningCollector.NOOP, new RuntimeStats()); TestSystemAccessControlFactory accessControlFactory = new TestSystemAccessControlFactory("test"); accessControlManager.addSystemAccessControlFactory(accessControlFactory); @@ -209,7 +210,7 @@ public void testNoCatalogAccessControl() transaction(transactionManager, accessControlManager) .execute(transactionId -> { accessControlManager.checkCanSelectFromColumns(transactionId, new Identity(USER_NAME, Optional.of(PRINCIPAL)), - new AccessControlContext(new QueryId(QUERY_ID), Optional.empty(), Optional.empty(), WarningCollector.NOOP, new RuntimeStats()), + new AccessControlContext(new QueryId(QUERY_ID), Optional.empty(), Collections.emptySet(), Optional.empty(), WarningCollector.NOOP, new RuntimeStats()), new QualifiedObjectName("catalog", "schema", "table"), ImmutableSet.of(new Subfield("column"))); }); } @@ -231,7 +232,7 @@ public void testDenyCatalogAccessControl() transaction(transactionManager, accessControlManager) .execute(transactionId -> { accessControlManager.checkCanSelectFromColumns(transactionId, new Identity(USER_NAME, Optional.of(PRINCIPAL)), - new AccessControlContext(new QueryId(QUERY_ID), Optional.empty(), Optional.empty(), WarningCollector.NOOP, new RuntimeStats()), + new AccessControlContext(new QueryId(QUERY_ID), Optional.empty(), Collections.emptySet(), Optional.empty(), WarningCollector.NOOP, new RuntimeStats()), new QualifiedObjectName("catalog", "schema", "table"), ImmutableSet.of(new Subfield("column"))); }); } @@ -253,7 +254,7 @@ public void testDenySystemAccessControl() transaction(transactionManager, accessControlManager) .execute(transactionId -> { accessControlManager.checkCanSelectFromColumns(transactionId, new Identity(USER_NAME, Optional.of(PRINCIPAL)), - new AccessControlContext(new QueryId(QUERY_ID), Optional.empty(), Optional.empty(), WarningCollector.NOOP, new RuntimeStats()), + new AccessControlContext(new QueryId(QUERY_ID), Optional.empty(), Collections.emptySet(), Optional.empty(), WarningCollector.NOOP, new RuntimeStats()), new QualifiedObjectName("secured_catalog", "schema", "table"), ImmutableSet.of(new Subfield("column"))); }); } diff --git a/presto-main/src/test/java/com/facebook/presto/security/TestFileBasedSystemAccessControl.java b/presto-main/src/test/java/com/facebook/presto/security/TestFileBasedSystemAccessControl.java index 77518e0ed5f7..5bd759aef186 100644 --- a/presto-main/src/test/java/com/facebook/presto/security/TestFileBasedSystemAccessControl.java +++ b/presto-main/src/test/java/com/facebook/presto/security/TestFileBasedSystemAccessControl.java @@ -33,6 +33,7 @@ import java.io.File; import java.io.IOException; +import java.util.Collections; import java.util.Optional; import java.util.Set; @@ -69,7 +70,7 @@ public class TestFileBasedSystemAccessControl private static final QualifiedObjectName aliceTable = new QualifiedObjectName("alice-catalog", "schema", "table"); private static final QualifiedObjectName aliceView = new QualifiedObjectName("alice-catalog", "schema", "view"); private static final CatalogSchemaName aliceSchema = new CatalogSchemaName("alice-catalog", "schema"); - private static final AccessControlContext context = new AccessControlContext(new QueryId("query_id"), Optional.empty(), Optional.empty(), WarningCollector.NOOP, new RuntimeStats()); + private static final AccessControlContext context = new AccessControlContext(new QueryId("query_id"), Optional.empty(), Collections.emptySet(), Optional.empty(), WarningCollector.NOOP, new RuntimeStats()); @Test public void testCanSetUserOperations() throws IOException { diff --git a/presto-plugin-toolkit/src/test/java/com/facebook/presto/plugin/base/security/TestFileBasedAccessControl.java b/presto-plugin-toolkit/src/test/java/com/facebook/presto/plugin/base/security/TestFileBasedAccessControl.java index 3becb88b45d6..70f39ed214ad 100644 --- a/presto-plugin-toolkit/src/test/java/com/facebook/presto/plugin/base/security/TestFileBasedAccessControl.java +++ b/presto-plugin-toolkit/src/test/java/com/facebook/presto/plugin/base/security/TestFileBasedAccessControl.java @@ -31,6 +31,7 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.StandardCopyOption; +import java.util.Collections; import java.util.Optional; import static com.facebook.presto.spi.testing.InterfaceTestUtils.assertAllMethodsOverridden; @@ -41,7 +42,7 @@ public class TestFileBasedAccessControl { public static final ConnectorTransactionHandle TRANSACTION_HANDLE = new ConnectorTransactionHandle() {}; - public static final AccessControlContext CONTEXT = new AccessControlContext(new QueryId("query_id"), Optional.empty(), Optional.empty(), WarningCollector.NOOP, new RuntimeStats()); + public static final AccessControlContext CONTEXT = new AccessControlContext(new QueryId("query_id"), Optional.empty(), Collections.emptySet(), Optional.empty(), WarningCollector.NOOP, new RuntimeStats()); @Test public void testSchemaRules() diff --git a/presto-spark-base/src/test/java/com/facebook/presto/spark/PrestoSparkQueryRunner.java b/presto-spark-base/src/test/java/com/facebook/presto/spark/PrestoSparkQueryRunner.java index f784af32cc64..015f1936c4bc 100644 --- a/presto-spark-base/src/test/java/com/facebook/presto/spark/PrestoSparkQueryRunner.java +++ b/presto-spark-base/src/test/java/com/facebook/presto/spark/PrestoSparkQueryRunner.java @@ -88,6 +88,7 @@ import java.io.UncheckedIOException; import java.nio.file.Path; import java.nio.file.Paths; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -171,7 +172,7 @@ public class PrestoSparkQueryRunner private final ReadWriteLock lock = new ReentrantReadWriteLock(); - protected static final MetastoreContext METASTORE_CONTEXT = new MetastoreContext("test_user", "test_queryId", Optional.empty(), Optional.empty(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, WarningCollector.NOOP, new RuntimeStats()); + protected static final MetastoreContext METASTORE_CONTEXT = new MetastoreContext("test_user", "test_queryId", Optional.empty(), Collections.emptySet(), Optional.empty(), Optional.empty(), false, HiveColumnConverterProvider.DEFAULT_COLUMN_CONVERTER_PROVIDER, WarningCollector.NOOP, new RuntimeStats()); public static PrestoSparkQueryRunner createHivePrestoSparkQueryRunner() { diff --git a/presto-spi/src/main/java/com/facebook/presto/spi/security/AccessControlContext.java b/presto-spi/src/main/java/com/facebook/presto/spi/security/AccessControlContext.java index 934b969580e2..7e28972b4560 100644 --- a/presto-spi/src/main/java/com/facebook/presto/spi/security/AccessControlContext.java +++ b/presto-spi/src/main/java/com/facebook/presto/spi/security/AccessControlContext.java @@ -18,6 +18,7 @@ import com.facebook.presto.spi.WarningCollector; import java.util.Optional; +import java.util.Set; import static java.util.Objects.requireNonNull; @@ -25,14 +26,16 @@ public class AccessControlContext { private final QueryId queryId; private final Optional clientInfo; + private final Set clientTags; private final Optional source; private final WarningCollector warningCollector; private final RuntimeStats runtimeStats; - public AccessControlContext(QueryId queryId, Optional clientInfo, Optional source, WarningCollector warningCollector, RuntimeStats runtimeStats) + public AccessControlContext(QueryId queryId, Optional clientInfo, Set clientTags, Optional source, WarningCollector warningCollector, RuntimeStats runtimeStats) { this.queryId = requireNonNull(queryId, "queryId is null"); this.clientInfo = requireNonNull(clientInfo, "clientInfo is null"); + this.clientTags = requireNonNull(clientTags, "clientTags is null"); this.source = requireNonNull(source, "source is null"); this.warningCollector = requireNonNull(warningCollector, "warningCollector is null"); this.runtimeStats = requireNonNull(runtimeStats, "runtimeStats is null"); @@ -48,6 +51,11 @@ public Optional getClientInfo() return clientInfo; } + public Set getClientTags() + { + return clientTags; + } + public Optional getSource() { return source;