From 49f9cdece6b5eb0b1091dca996c0a5e57f14a0ff Mon Sep 17 00:00:00 2001 From: Raj Poluri Date: Wed, 24 Jun 2026 19:47:35 -0500 Subject: [PATCH 1/3] Translate Lake Formation AccessDeniedException to NoSuchObjectException for Glue federations When a client describes a non-existent database on a Glue/Lake Formation-backed metastore, Lake Formation returns AccessDeniedException instead of EntityNotFoundException to prevent database enumeration. This caused waggle-dance to surface a confusing AWS error to clients rather than the standard Hive NoSuchObjectException. Adds isGlueBackend() to MetaStoreMapping (propagated via MetaStoreMappingImpl and MetaStoreMappingDecorator, set from GlueConfig presence in MetaStoreMappingFactoryImpl) so get_database can scope the translation to Glue federations only. Co-Authored-By: Claude Sonnet 4.6 --- .../mapping/model/MetaStoreMapping.java | 4 +++ .../model/MetaStoreMappingDecorator.java | 5 ++++ .../model/MetaStoreMappingFactoryImpl.java | 2 +- .../mapping/model/MetaStoreMappingImpl.java | 10 ++++++- .../server/FederatedHMSHandler.java | 19 +++++++++++-- .../mapping/model/ASTQueryMappingTest.java | 2 +- .../model/DatabaseNameMappingTest.java | 2 +- .../model/MetaStoreMappingImplTest.java | 4 +-- .../mapping/model/PrefixMappingTest.java | 2 +- .../server/FederatedHMSHandlerTest.java | 28 +++++++++++++++++++ 10 files changed, 69 insertions(+), 9 deletions(-) diff --git a/waggle-dance-core/src/main/java/com/hotels/bdp/waggledance/mapping/model/MetaStoreMapping.java b/waggle-dance-core/src/main/java/com/hotels/bdp/waggledance/mapping/model/MetaStoreMapping.java index c8ecf2d00..0d8cbd636 100644 --- a/waggle-dance-core/src/main/java/com/hotels/bdp/waggledance/mapping/model/MetaStoreMapping.java +++ b/waggle-dance-core/src/main/java/com/hotels/bdp/waggledance/mapping/model/MetaStoreMapping.java @@ -90,4 +90,8 @@ void createDatabase(Database database) throws AlreadyExistsException, InvalidObjectException, MetaException, TException; long getLatency(); + + default boolean isGlueBackend() { + return false; + } } diff --git a/waggle-dance-core/src/main/java/com/hotels/bdp/waggledance/mapping/model/MetaStoreMappingDecorator.java b/waggle-dance-core/src/main/java/com/hotels/bdp/waggledance/mapping/model/MetaStoreMappingDecorator.java index 18dab355c..818c31d4c 100644 --- a/waggle-dance-core/src/main/java/com/hotels/bdp/waggledance/mapping/model/MetaStoreMappingDecorator.java +++ b/waggle-dance-core/src/main/java/com/hotels/bdp/waggledance/mapping/model/MetaStoreMappingDecorator.java @@ -109,4 +109,9 @@ public long getLatency() { return metaStoreMapping.getLatency(); } + @Override + public boolean isGlueBackend() { + return metaStoreMapping.isGlueBackend(); + } + } diff --git a/waggle-dance-core/src/main/java/com/hotels/bdp/waggledance/mapping/model/MetaStoreMappingFactoryImpl.java b/waggle-dance-core/src/main/java/com/hotels/bdp/waggledance/mapping/model/MetaStoreMappingFactoryImpl.java index e7cdae8fa..38d02b6eb 100644 --- a/waggle-dance-core/src/main/java/com/hotels/bdp/waggledance/mapping/model/MetaStoreMappingFactoryImpl.java +++ b/waggle-dance-core/src/main/java/com/hotels/bdp/waggledance/mapping/model/MetaStoreMappingFactoryImpl.java @@ -77,7 +77,7 @@ public MetaStoreMapping newInstance(AbstractMetaStore metaStore) { metaStore.getRemoteMetaStoreUris()); MetaStoreMapping metaStoreMapping = new MetaStoreMappingImpl(prefixNameFor(metaStore), metaStore.getName(), createClient(metaStore), accessControlHandlerFactory.newInstance(metaStore), metaStore.getConnectionType(), - metaStore.getLatency(), loadMetastoreFilterHook(metaStore)); + metaStore.getLatency(), loadMetastoreFilterHook(metaStore), metaStore.getGlueConfig() != null); if (waggleDanceConfiguration.getDatabaseResolution() == DatabaseResolution.PREFIXED) { return new DatabaseNameMapping(new PrefixMapping(metaStoreMapping), metaStore.getDatabaseNameBiMapping()); } else { diff --git a/waggle-dance-core/src/main/java/com/hotels/bdp/waggledance/mapping/model/MetaStoreMappingImpl.java b/waggle-dance-core/src/main/java/com/hotels/bdp/waggledance/mapping/model/MetaStoreMappingImpl.java index 8b0d683c9..554dc5eb2 100644 --- a/waggle-dance-core/src/main/java/com/hotels/bdp/waggledance/mapping/model/MetaStoreMappingImpl.java +++ b/waggle-dance-core/src/main/java/com/hotels/bdp/waggledance/mapping/model/MetaStoreMappingImpl.java @@ -57,6 +57,7 @@ class MetaStoreMappingImpl implements MetaStoreMapping { private final ConnectionType connectionType; private final long latency; private final MetaStoreFilterHook metastoreFilter; + private final boolean glueBackend; private final ExecutorService executor = Executors.newSingleThreadExecutor(); MetaStoreMappingImpl( @@ -66,7 +67,8 @@ class MetaStoreMappingImpl implements MetaStoreMapping { AccessControlHandler accessControlHandler, ConnectionType connectionType, long latency, - MetaStoreFilterHook metastoreFilter) { + MetaStoreFilterHook metastoreFilter, + boolean glueBackend) { this.databasePrefix = databasePrefix; this.name = name; this.client = client; @@ -74,6 +76,7 @@ class MetaStoreMappingImpl implements MetaStoreMapping { this.connectionType = connectionType; this.latency = latency; this.metastoreFilter = metastoreFilter; + this.glueBackend = glueBackend; } @Override @@ -177,4 +180,9 @@ public long getLatency() { return latency; } + @Override + public boolean isGlueBackend() { + return glueBackend; + } + } diff --git a/waggle-dance-core/src/main/java/com/hotels/bdp/waggledance/server/FederatedHMSHandler.java b/waggle-dance-core/src/main/java/com/hotels/bdp/waggledance/server/FederatedHMSHandler.java index 1301e97b8..1d3ee54c7 100644 --- a/waggle-dance-core/src/main/java/com/hotels/bdp/waggledance/server/FederatedHMSHandler.java +++ b/waggle-dance-core/src/main/java/com/hotels/bdp/waggledance/server/FederatedHMSHandler.java @@ -364,8 +364,23 @@ public Database get_database(String name) throws NoSuchObjectException, MetaExce log.debug("Fetching database {}", name); DatabaseMapping mapping = databaseMappingService.databaseMapping(name); log.debug("Mapping is '{}'", mapping.getDatabasePrefix()); - Database result = mapping.getClient().get_database(mapping.transformInboundDatabaseName(name)); - return mapping.transformOutboundDatabase(mapping.getMetastoreFilter().filterDatabase(result)); + try { + Database result = mapping.getClient().get_database(mapping.transformInboundDatabaseName(name)); + return mapping.transformOutboundDatabase(mapping.getMetastoreFilter().filterDatabase(result)); + } catch (MetaException e) { + if (mapping.isGlueBackend() && isLakeFormationAccessDenied(e)) { + log.debug("Lake Formation returned AccessDeniedException for database '{}', translating to NoSuchObjectException", name, e); + throw new NoSuchObjectException(name); + } + throw e; + } + } + + private static boolean isLakeFormationAccessDenied(MetaException e) { + String message = e.getMessage(); + return message != null + && message.contains("AccessDeniedException") + && message.contains("Lake Formation permission"); } @Override diff --git a/waggle-dance-core/src/test/java/com/hotels/bdp/waggledance/mapping/model/ASTQueryMappingTest.java b/waggle-dance-core/src/test/java/com/hotels/bdp/waggledance/mapping/model/ASTQueryMappingTest.java index 768761827..6eb041efb 100644 --- a/waggle-dance-core/src/test/java/com/hotels/bdp/waggledance/mapping/model/ASTQueryMappingTest.java +++ b/waggle-dance-core/src/test/java/com/hotels/bdp/waggledance/mapping/model/ASTQueryMappingTest.java @@ -39,7 +39,7 @@ public class ASTQueryMappingTest { @Before public void setUp() { metaStoreMapping = new PrefixMapping(new MetaStoreMappingImpl(PREFIX, "mapping", null, null, DIRECT, LATENCY, - new DefaultMetaStoreFilterHookImpl(new HiveConf()))); + new DefaultMetaStoreFilterHookImpl(new HiveConf()), false)); } @Test diff --git a/waggle-dance-core/src/test/java/com/hotels/bdp/waggledance/mapping/model/DatabaseNameMappingTest.java b/waggle-dance-core/src/test/java/com/hotels/bdp/waggledance/mapping/model/DatabaseNameMappingTest.java index 1076f146f..3cb468343 100644 --- a/waggle-dance-core/src/test/java/com/hotels/bdp/waggledance/mapping/model/DatabaseNameMappingTest.java +++ b/waggle-dance-core/src/test/java/com/hotels/bdp/waggledance/mapping/model/DatabaseNameMappingTest.java @@ -35,7 +35,7 @@ public class DatabaseNameMappingTest { private final MetaStoreMapping metaStoreMapping = new PrefixMapping( new MetaStoreMappingImpl("pre_", "mapping", null, null, DIRECT, - 0L, new DefaultMetaStoreFilterHookImpl(new HiveConf()))); + 0L, new DefaultMetaStoreFilterHookImpl(new HiveConf()), false)); @Test public void mapNames() throws Exception { diff --git a/waggle-dance-core/src/test/java/com/hotels/bdp/waggledance/mapping/model/MetaStoreMappingImplTest.java b/waggle-dance-core/src/test/java/com/hotels/bdp/waggledance/mapping/model/MetaStoreMappingImplTest.java index dcb1d03be..760292479 100644 --- a/waggle-dance-core/src/test/java/com/hotels/bdp/waggledance/mapping/model/MetaStoreMappingImplTest.java +++ b/waggle-dance-core/src/test/java/com/hotels/bdp/waggledance/mapping/model/MetaStoreMappingImplTest.java @@ -61,9 +61,9 @@ public class MetaStoreMappingImplTest { @Before public void init() { metaStoreMapping = new MetaStoreMappingImpl(DATABASE_PREFIX, NAME, client, accessControlHandler, DIRECT, LATENCY, - new DefaultMetaStoreFilterHookImpl(new HiveConf())); + new DefaultMetaStoreFilterHookImpl(new HiveConf()), false); tunneledMetaStoreMapping = new MetaStoreMappingImpl(DATABASE_PREFIX, NAME, client, accessControlHandler, TUNNELED, - LATENCY, new DefaultMetaStoreFilterHookImpl(new HiveConf())); + LATENCY, new DefaultMetaStoreFilterHookImpl(new HiveConf()), false); } @Test diff --git a/waggle-dance-core/src/test/java/com/hotels/bdp/waggledance/mapping/model/PrefixMappingTest.java b/waggle-dance-core/src/test/java/com/hotels/bdp/waggledance/mapping/model/PrefixMappingTest.java index 61c10164f..5534cfe96 100644 --- a/waggle-dance-core/src/test/java/com/hotels/bdp/waggledance/mapping/model/PrefixMappingTest.java +++ b/waggle-dance-core/src/test/java/com/hotels/bdp/waggledance/mapping/model/PrefixMappingTest.java @@ -28,7 +28,7 @@ public class PrefixMappingTest { private final MetaStoreMapping metaStoreMapping = new MetaStoreMappingImpl("prefix_", "mapping", null, null, DIRECT, - 0L, new DefaultMetaStoreFilterHookImpl(new HiveConf())); + 0L, new DefaultMetaStoreFilterHookImpl(new HiveConf()), false); @Test public void mapNames() throws Exception { diff --git a/waggle-dance-core/src/test/java/com/hotels/bdp/waggledance/server/FederatedHMSHandlerTest.java b/waggle-dance-core/src/test/java/com/hotels/bdp/waggledance/server/FederatedHMSHandlerTest.java index 74af2424c..1e7321ca8 100644 --- a/waggle-dance-core/src/test/java/com/hotels/bdp/waggledance/server/FederatedHMSHandlerTest.java +++ b/waggle-dance-core/src/test/java/com/hotels/bdp/waggledance/server/FederatedHMSHandlerTest.java @@ -40,6 +40,7 @@ import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; +import static org.junit.Assert.fail; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -144,6 +145,7 @@ import org.apache.hadoop.hive.metastore.api.LockResponse; import org.apache.hadoop.hive.metastore.api.LockType; import org.apache.hadoop.hive.metastore.api.MapSchemaVersionToSerdeRequest; +import org.apache.hadoop.hive.metastore.api.MetaException; import org.apache.hadoop.hive.metastore.api.NoSuchObjectException; import org.apache.hadoop.hive.metastore.api.NotNullConstraintsRequest; import org.apache.hadoop.hive.metastore.api.NotNullConstraintsResponse; @@ -330,6 +332,32 @@ public void get_database() throws Exception { assertThat(result, is(outboundDB)); } + @Test(expected = NoSuchObjectException.class) + public void get_database_glueBackendLakeFormationAccessDenied_throwsNoSuchObjectException() throws Exception { + when(primaryMapping.isGlueBackend()).thenReturn(true); + when(primaryMapping.transformInboundDatabaseName(DB_P)).thenReturn("inbound"); + when(primaryClient.get_database("inbound")).thenThrow(new MetaException( + "An error occurred (AccessDeniedException) when calling the GetDatabase operation: " + + "Insufficient Lake Formation permission(s): Required Describe on " + DB_P)); + handler.get_database(DB_P); + } + + @Test + public void get_database_nonGlueBackend_lakeFormationLikeMessage_rethrowsMetaException() throws Exception { + MetaException expected = new MetaException( + "An error occurred (AccessDeniedException) when calling the GetDatabase operation: " + + "Insufficient Lake Formation permission(s): Required Describe on " + DB_P); + when(primaryMapping.isGlueBackend()).thenReturn(false); + when(primaryMapping.transformInboundDatabaseName(DB_P)).thenReturn("inbound"); + when(primaryClient.get_database("inbound")).thenThrow(expected); + try { + handler.get_database(DB_P); + fail("Expected MetaException"); + } catch (MetaException e) { + assertThat(e, is(sameInstance(expected))); + } + } + @Test public void drop_database() throws TException { when(primaryMapping.transformInboundDatabaseName(DB_P)).thenReturn("inbound"); From bdfa0daf5fdb56781d7b6cc20e10a9de1c30272e Mon Sep 17 00:00:00 2001 From: Raj Poluri Date: Wed, 24 Jun 2026 19:59:08 -0500 Subject: [PATCH 2/3] Translate Lake Formation AccessDeniedException to NoSuchObjectException for get_table on Glue federations Same pattern as get_database: Lake Formation returns AccessDeniedException instead of EntityNotFoundException for non-existent tables to prevent enumeration. Applied the translation in both get_table and get_table_req so clients receive the standard Hive NoSuchObjectException regardless of which path the caller uses. Co-Authored-By: Claude Sonnet 4.6 --- .../server/FederatedHMSHandler.java | 28 +++++++-- .../server/FederatedHMSHandlerTest.java | 62 ++++++++++++++++++- 2 files changed, 83 insertions(+), 7 deletions(-) diff --git a/waggle-dance-core/src/main/java/com/hotels/bdp/waggledance/server/FederatedHMSHandler.java b/waggle-dance-core/src/main/java/com/hotels/bdp/waggledance/server/FederatedHMSHandler.java index 1d3ee54c7..5649b1c18 100644 --- a/waggle-dance-core/src/main/java/com/hotels/bdp/waggledance/server/FederatedHMSHandler.java +++ b/waggle-dance-core/src/main/java/com/hotels/bdp/waggledance/server/FederatedHMSHandler.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2016-2025 Expedia, Inc. + * Copyright (C) 2016-2026 Expedia, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -538,8 +538,16 @@ public List get_all_tables(String db_name) throws MetaException, TExcept @Loggable(value = Loggable.DEBUG, skipResult = true, name = INVOCATION_LOG_NAME) public Table get_table(String dbname, String tbl_name) throws MetaException, NoSuchObjectException, TException { DatabaseMapping mapping = getDbMappingAndCheckTableAllowed(dbname, tbl_name); - Table table = mapping.getClient().get_table(mapping.transformInboundDatabaseName(dbname), tbl_name); - return mapping.transformOutboundTable(mapping.getMetastoreFilter().filterTable(table)); + try { + Table table = mapping.getClient().get_table(mapping.transformInboundDatabaseName(dbname), tbl_name); + return mapping.transformOutboundTable(mapping.getMetastoreFilter().filterTable(table)); + } catch (MetaException e) { + if (mapping.isGlueBackend() && isLakeFormationAccessDenied(e)) { + log.debug("Lake Formation returned AccessDeniedException for table '{}.{}', translating to NoSuchObjectException", dbname, tbl_name, e); + throw new NoSuchObjectException(dbname + "." + tbl_name); + } + throw e; + } } @Override @@ -2203,9 +2211,17 @@ public List get_materialized_views_for_rewriting(String dbName) throws M @Loggable(value = Loggable.DEBUG, skipResult = true, name = INVOCATION_LOG_NAME) public GetTableResult get_table_req(GetTableRequest req) throws MetaException, NoSuchObjectException, TException { DatabaseMapping mapping = getDbMappingAndCheckTableAllowed(req.getDbName(), req.getTblName()); - GetTableResult result = mapping.getClient().get_table_req(mapping.transformInboundGetTableRequest(req)); - result.setTable(mapping.getMetastoreFilter().filterTable(result.getTable())); - return mapping.transformOutboundGetTableResult(result); + try { + GetTableResult result = mapping.getClient().get_table_req(mapping.transformInboundGetTableRequest(req)); + result.setTable(mapping.getMetastoreFilter().filterTable(result.getTable())); + return mapping.transformOutboundGetTableResult(result); + } catch (MetaException e) { + if (mapping.isGlueBackend() && isLakeFormationAccessDenied(e)) { + log.debug("Lake Formation returned AccessDeniedException for table '{}.{}', translating to NoSuchObjectException", req.getDbName(), req.getTblName(), e); + throw new NoSuchObjectException(req.getDbName() + "." + req.getTblName()); + } + throw e; + } } @Override diff --git a/waggle-dance-core/src/test/java/com/hotels/bdp/waggledance/server/FederatedHMSHandlerTest.java b/waggle-dance-core/src/test/java/com/hotels/bdp/waggledance/server/FederatedHMSHandlerTest.java index 1e7321ca8..dcecdefea 100644 --- a/waggle-dance-core/src/test/java/com/hotels/bdp/waggledance/server/FederatedHMSHandlerTest.java +++ b/waggle-dance-core/src/test/java/com/hotels/bdp/waggledance/server/FederatedHMSHandlerTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2016-2025 Expedia, Inc. + * Copyright (C) 2016-2026 Expedia, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -514,6 +514,32 @@ public void get_table() throws TException { assertThat(result, is(outbound)); } + @Test(expected = NoSuchObjectException.class) + public void get_table_glueBackendLakeFormationAccessDenied_throwsNoSuchObjectException() throws Exception { + when(primaryMapping.isGlueBackend()).thenReturn(true); + when(primaryMapping.transformInboundDatabaseName(DB_P)).thenReturn("inbound"); + when(primaryClient.get_table("inbound", "table")).thenThrow(new MetaException( + "An error occurred (AccessDeniedException) when calling the GetTable operation: " + + "Insufficient Lake Formation permission(s): Required Describe on table")); + handler.get_table(DB_P, "table"); + } + + @Test + public void get_table_nonGlueBackend_lakeFormationLikeMessage_rethrowsMetaException() throws Exception { + MetaException expected = new MetaException( + "An error occurred (AccessDeniedException) when calling the GetTable operation: " + + "Insufficient Lake Formation permission(s): Required Describe on table"); + when(primaryMapping.isGlueBackend()).thenReturn(false); + when(primaryMapping.transformInboundDatabaseName(DB_P)).thenReturn("inbound"); + when(primaryClient.get_table("inbound", "table")).thenThrow(expected); + try { + handler.get_table(DB_P, "table"); + fail("Expected MetaException"); + } catch (MetaException e) { + assertThat(e, is(sameInstance(expected))); + } + } + @Test public void get_table_objects_by_name() throws TException { when(primaryMapping.transformInboundDatabaseName(DB_P)).thenReturn("inbound"); @@ -1029,6 +1055,40 @@ public void get_table_req() throws TException { assertThat(result.getTable().getTableName(), is("table")); } + @Test(expected = NoSuchObjectException.class) + public void get_table_req_glueBackendLakeFormationAccessDenied_throwsNoSuchObjectException() throws Exception { + when(primaryMapping.isGlueBackend()).thenReturn(true); + Table table = new Table(); + table.setDbName(DB_P); + table.setTableName("table"); + GetTableRequest request = new GetTableRequest(table.getDbName(), table.getTableName()); + when(primaryMapping.transformInboundGetTableRequest(request)).thenReturn(request); + when(primaryClient.get_table_req(request)).thenThrow(new MetaException( + "An error occurred (AccessDeniedException) when calling the GetTable operation: " + + "Insufficient Lake Formation permission(s): Required Describe on table")); + handler.get_table_req(request); + } + + @Test + public void get_table_req_nonGlueBackend_lakeFormationLikeMessage_rethrowsMetaException() throws Exception { + MetaException expected = new MetaException( + "An error occurred (AccessDeniedException) when calling the GetTable operation: " + + "Insufficient Lake Formation permission(s): Required Describe on table"); + when(primaryMapping.isGlueBackend()).thenReturn(false); + Table table = new Table(); + table.setDbName(DB_P); + table.setTableName("table"); + GetTableRequest request = new GetTableRequest(table.getDbName(), table.getTableName()); + when(primaryMapping.transformInboundGetTableRequest(request)).thenReturn(request); + when(primaryClient.get_table_req(request)).thenThrow(expected); + try { + handler.get_table_req(request); + fail("Expected MetaException"); + } catch (MetaException e) { + assertThat(e, is(sameInstance(expected))); + } + } + @Test public void get_table_objects_by_name_req() throws TException { Table table0 = new Table(); From e9de2a718e70f3beac99783c49e2af96294df621 Mon Sep 17 00:00:00 2001 From: Raj Poluri Date: Wed, 24 Jun 2026 20:02:49 -0500 Subject: [PATCH 3/3] Apply spotless formatting to files modified by Lake Formation fix Co-Authored-By: Claude Sonnet 4.6 --- .../hotels/bdp/waggledance/mapping/model/MetaStoreMapping.java | 2 +- .../waggledance/mapping/model/MetaStoreMappingDecorator.java | 2 +- .../waggledance/mapping/model/MetaStoreMappingFactoryImpl.java | 2 +- .../bdp/waggledance/mapping/model/MetaStoreMappingImpl.java | 2 +- .../bdp/waggledance/mapping/model/ASTQueryMappingTest.java | 2 +- .../bdp/waggledance/mapping/model/DatabaseNameMappingTest.java | 2 +- .../bdp/waggledance/mapping/model/MetaStoreMappingImplTest.java | 2 +- .../hotels/bdp/waggledance/mapping/model/PrefixMappingTest.java | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/waggle-dance-core/src/main/java/com/hotels/bdp/waggledance/mapping/model/MetaStoreMapping.java b/waggle-dance-core/src/main/java/com/hotels/bdp/waggledance/mapping/model/MetaStoreMapping.java index 0d8cbd636..8a1293eb0 100644 --- a/waggle-dance-core/src/main/java/com/hotels/bdp/waggledance/mapping/model/MetaStoreMapping.java +++ b/waggle-dance-core/src/main/java/com/hotels/bdp/waggledance/mapping/model/MetaStoreMapping.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2016-2021 Expedia, Inc. + * Copyright (C) 2016-2026 Expedia, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/waggle-dance-core/src/main/java/com/hotels/bdp/waggledance/mapping/model/MetaStoreMappingDecorator.java b/waggle-dance-core/src/main/java/com/hotels/bdp/waggledance/mapping/model/MetaStoreMappingDecorator.java index 818c31d4c..e6dca3b23 100644 --- a/waggle-dance-core/src/main/java/com/hotels/bdp/waggledance/mapping/model/MetaStoreMappingDecorator.java +++ b/waggle-dance-core/src/main/java/com/hotels/bdp/waggledance/mapping/model/MetaStoreMappingDecorator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2016-2023 Expedia, Inc. + * Copyright (C) 2016-2026 Expedia, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/waggle-dance-core/src/main/java/com/hotels/bdp/waggledance/mapping/model/MetaStoreMappingFactoryImpl.java b/waggle-dance-core/src/main/java/com/hotels/bdp/waggledance/mapping/model/MetaStoreMappingFactoryImpl.java index 38d02b6eb..a9b02be12 100644 --- a/waggle-dance-core/src/main/java/com/hotels/bdp/waggledance/mapping/model/MetaStoreMappingFactoryImpl.java +++ b/waggle-dance-core/src/main/java/com/hotels/bdp/waggledance/mapping/model/MetaStoreMappingFactoryImpl.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2016-2025 Expedia, Inc. + * Copyright (C) 2016-2026 Expedia, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/waggle-dance-core/src/main/java/com/hotels/bdp/waggledance/mapping/model/MetaStoreMappingImpl.java b/waggle-dance-core/src/main/java/com/hotels/bdp/waggledance/mapping/model/MetaStoreMappingImpl.java index 554dc5eb2..cd5412a95 100644 --- a/waggle-dance-core/src/main/java/com/hotels/bdp/waggledance/mapping/model/MetaStoreMappingImpl.java +++ b/waggle-dance-core/src/main/java/com/hotels/bdp/waggledance/mapping/model/MetaStoreMappingImpl.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2016-2025 Expedia, Inc. + * Copyright (C) 2016-2026 Expedia, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/waggle-dance-core/src/test/java/com/hotels/bdp/waggledance/mapping/model/ASTQueryMappingTest.java b/waggle-dance-core/src/test/java/com/hotels/bdp/waggledance/mapping/model/ASTQueryMappingTest.java index 6eb041efb..f0507f328 100644 --- a/waggle-dance-core/src/test/java/com/hotels/bdp/waggledance/mapping/model/ASTQueryMappingTest.java +++ b/waggle-dance-core/src/test/java/com/hotels/bdp/waggledance/mapping/model/ASTQueryMappingTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2016-2025 Expedia, Inc. + * Copyright (C) 2016-2026 Expedia, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/waggle-dance-core/src/test/java/com/hotels/bdp/waggledance/mapping/model/DatabaseNameMappingTest.java b/waggle-dance-core/src/test/java/com/hotels/bdp/waggledance/mapping/model/DatabaseNameMappingTest.java index 3cb468343..19a5c20ca 100644 --- a/waggle-dance-core/src/test/java/com/hotels/bdp/waggledance/mapping/model/DatabaseNameMappingTest.java +++ b/waggle-dance-core/src/test/java/com/hotels/bdp/waggledance/mapping/model/DatabaseNameMappingTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2016-2021 Expedia, Inc. + * Copyright (C) 2016-2026 Expedia, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/waggle-dance-core/src/test/java/com/hotels/bdp/waggledance/mapping/model/MetaStoreMappingImplTest.java b/waggle-dance-core/src/test/java/com/hotels/bdp/waggledance/mapping/model/MetaStoreMappingImplTest.java index 760292479..c5936d0bc 100644 --- a/waggle-dance-core/src/test/java/com/hotels/bdp/waggledance/mapping/model/MetaStoreMappingImplTest.java +++ b/waggle-dance-core/src/test/java/com/hotels/bdp/waggledance/mapping/model/MetaStoreMappingImplTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2016-2025 Expedia, Inc. + * Copyright (C) 2016-2026 Expedia, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/waggle-dance-core/src/test/java/com/hotels/bdp/waggledance/mapping/model/PrefixMappingTest.java b/waggle-dance-core/src/test/java/com/hotels/bdp/waggledance/mapping/model/PrefixMappingTest.java index 5534cfe96..f96752e92 100644 --- a/waggle-dance-core/src/test/java/com/hotels/bdp/waggledance/mapping/model/PrefixMappingTest.java +++ b/waggle-dance-core/src/test/java/com/hotels/bdp/waggledance/mapping/model/PrefixMappingTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2016-2021 Expedia, Inc. + * Copyright (C) 2016-2026 Expedia, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License.