diff --git a/bom/build.gradle.kts b/bom/build.gradle.kts index 8a1fa16b90b..70136c83287 100644 --- a/bom/build.gradle.kts +++ b/bom/build.gradle.kts @@ -86,6 +86,7 @@ dependencies { api(project(":polaris-config-docs-generator")) api(project(":polaris-core")) + api(project(":polaris-extensions-lineage")) api(project(":polaris-relational-jdbc")) diff --git a/extensions/lineage/build.gradle.kts b/extensions/lineage/build.gradle.kts new file mode 100644 index 00000000000..e296a9da550 --- /dev/null +++ b/extensions/lineage/build.gradle.kts @@ -0,0 +1,42 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +plugins { + id("polaris-client") + id("org.kordamp.gradle.jandex") +} + +description = "Polaris lineage model and service contract" + +dependencies { + implementation(project(":polaris-core")) + + compileOnly(platform(libs.quarkus.bom)) + compileOnly("io.quarkus:quarkus-arc") + compileOnly(libs.jakarta.enterprise.cdi.api) + compileOnly(libs.jakarta.inject.api) + compileOnly(libs.smallrye.config.core) + + testImplementation(platform(libs.junit.bom)) + testImplementation("org.junit.jupiter:junit-jupiter") + testImplementation(libs.assertj.core) + testImplementation(libs.mockito.core) +} + +tasks.named("javadoc") { dependsOn("jandex") } diff --git a/extensions/lineage/src/main/java/org/apache/polaris/extensions/lineage/DefaultPolarisLineageHandler.java b/extensions/lineage/src/main/java/org/apache/polaris/extensions/lineage/DefaultPolarisLineageHandler.java new file mode 100644 index 00000000000..2c51421f466 --- /dev/null +++ b/extensions/lineage/src/main/java/org/apache/polaris/extensions/lineage/DefaultPolarisLineageHandler.java @@ -0,0 +1,56 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.polaris.extensions.lineage; + +import jakarta.enterprise.context.RequestScoped; +import jakarta.inject.Inject; +import org.apache.polaris.core.config.FeatureConfiguration; +import org.apache.polaris.core.context.CallContext; + +@RequestScoped +public class DefaultPolarisLineageHandler implements PolarisLineageHandler { + private final CallContext callContext; + private final LineageConfiguration configuration; + + @Inject + public DefaultPolarisLineageHandler(CallContext callContext, LineageConfiguration configuration) { + this.callContext = callContext; + this.configuration = configuration; + } + + @Override + public LineageGraph query(LineageQueryRequest request) { + ensureEnabled(); + throw new UnsupportedOperationException("Lineage query is not implemented yet."); + } + + private void ensureEnabled() { + if (!configuration.enabled()) { + throw new UnsupportedOperationException( + "Lineage is disabled: set polaris.lineage.enabled=true to enable it."); + } + + if (!callContext.getRealmConfig().getConfig(FeatureConfiguration.ENABLE_LINEAGE)) { + throw new UnsupportedOperationException( + "Lineage realm feature is disabled: enable " + + FeatureConfiguration.ENABLE_LINEAGE.key() + + " in the realm feature configuration."); + } + } +} diff --git a/extensions/lineage/src/main/java/org/apache/polaris/extensions/lineage/LineageConfiguration.java b/extensions/lineage/src/main/java/org/apache/polaris/extensions/lineage/LineageConfiguration.java new file mode 100644 index 00000000000..7324ce065e7 --- /dev/null +++ b/extensions/lineage/src/main/java/org/apache/polaris/extensions/lineage/LineageConfiguration.java @@ -0,0 +1,29 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.polaris.extensions.lineage; + +import io.smallrye.config.ConfigMapping; +import io.smallrye.config.WithDefault; + +@ConfigMapping(prefix = "polaris.lineage") +public interface LineageConfiguration { + + @WithDefault("false") + boolean enabled(); +} diff --git a/extensions/lineage/src/main/java/org/apache/polaris/extensions/lineage/LineageData.java b/extensions/lineage/src/main/java/org/apache/polaris/extensions/lineage/LineageData.java new file mode 100644 index 00000000000..dc2beebc1f3 --- /dev/null +++ b/extensions/lineage/src/main/java/org/apache/polaris/extensions/lineage/LineageData.java @@ -0,0 +1,59 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.polaris.extensions.lineage; + +import java.util.Objects; +import java.util.OptionalLong; + +/** Dataset metadata returned in a lineage query response. */ +public record LineageData( + OptionalLong catalogId, + OptionalLong datasetId, + String namespace, + String name, + String subType, + OptionalLong createdAt, + OptionalLong updatedAt) { + public LineageData { + Objects.requireNonNull(catalogId, "catalogId must be non-null"); + Objects.requireNonNull(datasetId, "datasetId must be non-null"); + Objects.requireNonNull(namespace, "namespace must be non-null"); + Objects.requireNonNull(name, "name must be non-null"); + Objects.requireNonNull(createdAt, "createdAt must be non-null"); + Objects.requireNonNull(updatedAt, "updatedAt must be non-null"); + } + + public LineageData( + long catalogId, + long datasetId, + String namespace, + String name, + String subType, + long createdAt, + long updatedAt) { + this( + OptionalLong.of(catalogId), + OptionalLong.of(datasetId), + namespace, + name, + subType, + OptionalLong.of(createdAt), + OptionalLong.of(updatedAt)); + } +} diff --git a/extensions/lineage/src/main/java/org/apache/polaris/extensions/lineage/LineageDirection.java b/extensions/lineage/src/main/java/org/apache/polaris/extensions/lineage/LineageDirection.java new file mode 100644 index 00000000000..60ba480d946 --- /dev/null +++ b/extensions/lineage/src/main/java/org/apache/polaris/extensions/lineage/LineageDirection.java @@ -0,0 +1,26 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.polaris.extensions.lineage; + +/** Supported directions for lineage queries. */ +public enum LineageDirection { + UPSTREAM, + DOWNSTREAM, + BOTH +} diff --git a/extensions/lineage/src/main/java/org/apache/polaris/extensions/lineage/LineageFieldMapping.java b/extensions/lineage/src/main/java/org/apache/polaris/extensions/lineage/LineageFieldMapping.java new file mode 100644 index 00000000000..73a5b1e2523 --- /dev/null +++ b/extensions/lineage/src/main/java/org/apache/polaris/extensions/lineage/LineageFieldMapping.java @@ -0,0 +1,29 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.polaris.extensions.lineage; + +import java.util.Objects; + +/** A source-to-target field mapping returned for column-granularity queries. */ +public record LineageFieldMapping(String sourceField, String targetField) { + public LineageFieldMapping { + Objects.requireNonNull(sourceField, "sourceField must be non-null"); + Objects.requireNonNull(targetField, "targetField must be non-null"); + } +} diff --git a/extensions/lineage/src/main/java/org/apache/polaris/extensions/lineage/LineageGranularity.java b/extensions/lineage/src/main/java/org/apache/polaris/extensions/lineage/LineageGranularity.java new file mode 100644 index 00000000000..9b9862839fc --- /dev/null +++ b/extensions/lineage/src/main/java/org/apache/polaris/extensions/lineage/LineageGranularity.java @@ -0,0 +1,25 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.polaris.extensions.lineage; + +/** Supported query granularities for lineage lookups. */ +public enum LineageGranularity { + DATASET, + COLUMN +} diff --git a/extensions/lineage/src/main/java/org/apache/polaris/extensions/lineage/LineageGraph.java b/extensions/lineage/src/main/java/org/apache/polaris/extensions/lineage/LineageGraph.java new file mode 100644 index 00000000000..597b3bb9a79 --- /dev/null +++ b/extensions/lineage/src/main/java/org/apache/polaris/extensions/lineage/LineageGraph.java @@ -0,0 +1,32 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.polaris.extensions.lineage; + +import java.util.List; +import java.util.Objects; + +/** Normalized response model for lineage queries. */ +public record LineageGraph( + LineageNode node, List upstream, List downstream) { + public LineageGraph { + Objects.requireNonNull(node, "node must be non-null"); + upstream = List.copyOf(Objects.requireNonNull(upstream, "upstream must be non-null")); + downstream = List.copyOf(Objects.requireNonNull(downstream, "downstream must be non-null")); + } +} diff --git a/extensions/lineage/src/main/java/org/apache/polaris/extensions/lineage/LineageNode.java b/extensions/lineage/src/main/java/org/apache/polaris/extensions/lineage/LineageNode.java new file mode 100644 index 00000000000..b7a0c6d5b8a --- /dev/null +++ b/extensions/lineage/src/main/java/org/apache/polaris/extensions/lineage/LineageNode.java @@ -0,0 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.polaris.extensions.lineage; + +import java.util.List; +import java.util.Objects; + +/** A node returned in a lineage query response. */ +public record LineageNode( + String id, + LineageNodeType type, + LineageData data, + boolean opaque, + List fieldMappings) { + public LineageNode { + Objects.requireNonNull(id, "id must be non-null"); + Objects.requireNonNull(type, "type must be non-null"); + fieldMappings = + List.copyOf(Objects.requireNonNull(fieldMappings, "fieldMappings must be non-null")); + } + + public LineageNode(String id, LineageNodeType type, LineageData data, boolean opaque) { + this(id, type, data, opaque, List.of()); + } +} diff --git a/extensions/lineage/src/main/java/org/apache/polaris/extensions/lineage/LineageNodeType.java b/extensions/lineage/src/main/java/org/apache/polaris/extensions/lineage/LineageNodeType.java new file mode 100644 index 00000000000..5c8c5d1b140 --- /dev/null +++ b/extensions/lineage/src/main/java/org/apache/polaris/extensions/lineage/LineageNodeType.java @@ -0,0 +1,25 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.polaris.extensions.lineage; + +/** Node kinds surfaced by normalized lineage queries. */ +public enum LineageNodeType { + DATASET, + COLUMN +} diff --git a/extensions/lineage/src/main/java/org/apache/polaris/extensions/lineage/LineageQueryRequest.java b/extensions/lineage/src/main/java/org/apache/polaris/extensions/lineage/LineageQueryRequest.java new file mode 100644 index 00000000000..b3811fc6900 --- /dev/null +++ b/extensions/lineage/src/main/java/org/apache/polaris/extensions/lineage/LineageQueryRequest.java @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.polaris.extensions.lineage; + +import java.util.Objects; + +/** Request model for normalized lineage lookups. */ +public record LineageQueryRequest( + String nodeId, LineageDirection direction, LineageGranularity granularity) { + public LineageQueryRequest { + Objects.requireNonNull(nodeId, "nodeId must be non-null"); + Objects.requireNonNull(direction, "direction must be non-null"); + Objects.requireNonNull(granularity, "granularity must be non-null"); + } +} diff --git a/extensions/lineage/src/main/java/org/apache/polaris/extensions/lineage/PolarisLineageHandler.java b/extensions/lineage/src/main/java/org/apache/polaris/extensions/lineage/PolarisLineageHandler.java new file mode 100644 index 00000000000..bde8097367b --- /dev/null +++ b/extensions/lineage/src/main/java/org/apache/polaris/extensions/lineage/PolarisLineageHandler.java @@ -0,0 +1,24 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.polaris.extensions.lineage; + +/** Handler boundary for lineage operations used by transport-layer adapters. */ +public interface PolarisLineageHandler { + LineageGraph query(LineageQueryRequest request); +} diff --git a/extensions/lineage/src/test/java/org/apache/polaris/extensions/lineage/DefaultPolarisLineageHandlerTest.java b/extensions/lineage/src/test/java/org/apache/polaris/extensions/lineage/DefaultPolarisLineageHandlerTest.java new file mode 100644 index 00000000000..2bd87cfd5dc --- /dev/null +++ b/extensions/lineage/src/test/java/org/apache/polaris/extensions/lineage/DefaultPolarisLineageHandlerTest.java @@ -0,0 +1,79 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.polaris.extensions.lineage; + +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.mockito.Mockito.when; + +import org.apache.polaris.core.config.FeatureConfiguration; +import org.apache.polaris.core.config.RealmConfig; +import org.apache.polaris.core.context.CallContext; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +public class DefaultPolarisLineageHandlerTest { + @Mock private CallContext callContext; + @Mock private RealmConfig realmConfig; + @Mock private LineageConfiguration configuration; + + private DefaultPolarisLineageHandler handler; + + @BeforeEach + void setUp() { + MockitoAnnotations.openMocks(this); + when(callContext.getRealmConfig()).thenReturn(realmConfig); + handler = new DefaultPolarisLineageHandler(callContext, configuration); + } + + @Test + void throwsWhenStaticConfigDisabled() { + when(configuration.enabled()).thenReturn(false); + + assertThatThrownBy(() -> handler.query(queryRequest())) + .isInstanceOf(UnsupportedOperationException.class) + .hasMessageContaining("polaris.lineage.enabled"); + } + + @Test + void throwsWhenRealmFeatureDisabled() { + when(configuration.enabled()).thenReturn(true); + when(realmConfig.getConfig(FeatureConfiguration.ENABLE_LINEAGE)).thenReturn(false); + + assertThatThrownBy(() -> handler.query(queryRequest())) + .isInstanceOf(UnsupportedOperationException.class) + .hasMessageContaining(FeatureConfiguration.ENABLE_LINEAGE.key()); + } + + @Test + void throwsNotImplementedWhenLineageEnabled() { + when(configuration.enabled()).thenReturn(true); + when(realmConfig.getConfig(FeatureConfiguration.ENABLE_LINEAGE)).thenReturn(true); + + assertThatThrownBy(() -> handler.query(queryRequest())) + .isInstanceOf(UnsupportedOperationException.class) + .hasMessageContaining("Lineage query is not implemented yet"); + } + + private static LineageQueryRequest queryRequest() { + return new LineageQueryRequest( + "dataset:test:orders", LineageDirection.BOTH, LineageGranularity.DATASET); + } +} diff --git a/gradle/projects.main.properties b/gradle/projects.main.properties index 5cb39799fa8..7dd70c65cd2 100644 --- a/gradle/projects.main.properties +++ b/gradle/projects.main.properties @@ -20,6 +20,7 @@ polaris-bom=bom polaris-core=polaris-core +polaris-extensions-lineage=extensions/lineage polaris-api-iceberg-service=api/iceberg-service polaris-api-management-model=api/management-model polaris-api-management-service=api/management-service diff --git a/polaris-core/src/main/java/org/apache/polaris/core/config/FeatureConfiguration.java b/polaris-core/src/main/java/org/apache/polaris/core/config/FeatureConfiguration.java index 48eed5b2309..3a0ed1796bc 100644 --- a/polaris-core/src/main/java/org/apache/polaris/core/config/FeatureConfiguration.java +++ b/polaris-core/src/main/java/org/apache/polaris/core/config/FeatureConfiguration.java @@ -357,6 +357,13 @@ public static void enforceFeatureEnabledOrThrow( .defaultValue(true) .buildFeatureConfiguration(); + public static final FeatureConfiguration ENABLE_LINEAGE = + PolarisConfiguration.builder() + .key("ENABLE_LINEAGE") + .description("If true, lineage services are enabled") + .defaultValue(false) + .buildFeatureConfiguration(); + public static final FeatureConfiguration> SUPPORTED_CATALOG_CONNECTION_TYPES = PolarisConfiguration.>builder() .key("SUPPORTED_CATALOG_CONNECTION_TYPES") diff --git a/runtime/service/build.gradle.kts b/runtime/service/build.gradle.kts index 630b5cbe359..fc6af62b374 100644 --- a/runtime/service/build.gradle.kts +++ b/runtime/service/build.gradle.kts @@ -26,6 +26,7 @@ plugins { dependencies { implementation(project(":polaris-core")) + implementation(project(":polaris-extensions-lineage")) implementation(project(":polaris-api-management-model")) implementation(project(":polaris-api-management-service")) implementation(project(":polaris-api-iceberg-service")) diff --git a/site/content/in-dev/unreleased/configuration/config-sections/flags-polaris_features.md b/site/content/in-dev/unreleased/configuration/config-sections/flags-polaris_features.md index 3a24803023c..b1296a36d24 100644 --- a/site/content/in-dev/unreleased/configuration/config-sections/flags-polaris_features.md +++ b/site/content/in-dev/unreleased/configuration/config-sections/flags-polaris_features.md @@ -298,6 +298,15 @@ If true, the generic-tables endpoints are enabled --- +##### `polaris.features."ENABLE_LINEAGE"` + +If true, lineage services are enabled + +- **Type:** `Boolean` +- **Default:** `false` + +--- + ##### `polaris.features."ENABLE_POLICY_STORE"` If true, the policy-store endpoints are enabled