Skip to content

datalake: support iceberg_default_catalog_namespace config#29113

Merged
piyushredpanda merged 3 commits into
redpanda-data:devfrom
nvartolomei:nv/iceberg-namespace
Jan 7, 2026
Merged

datalake: support iceberg_default_catalog_namespace config#29113
piyushredpanda merged 3 commits into
redpanda-data:devfrom
nvartolomei:nv/iceberg-namespace

Conversation

@nvartolomei
Copy link
Copy Markdown
Contributor

@nvartolomei nvartolomei commented Dec 23, 2025

Add a new configuration option to customize the Iceberg table namespace
(database name), which was previously hardcoded to "redpanda". This
allows users to specify a custom namespace for their Iceberg tables
within the catalog.

The default value remains "redpanda" for backward compatibility.

https://redpandadata.atlassian.net/browse/CORE-13736

Backports Required

  • none - not a bug fix
  • none - this is a backport
  • none - issue does not exist in previous branches
  • none - papercut/not impactful enough to backport
  • v25.3.x
  • v25.2.x
  • v25.1.x

Release Notes

Features

  • Iceberg: Support customizing Iceberg catalog namespace (defaults to redpanda) at cluster level.

@nvartolomei nvartolomei requested a review from a team as a code owner December 23, 2025 21:44
Copilot AI review requested due to automatic review settings December 23, 2025 21:44
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adds support for customizing the Iceberg catalog namespace (database name) through a new configuration option iceberg_default_catalog_namespace. Previously, the namespace was hardcoded to "redpanda". The default value remains "redpanda" for backward compatibility, and nested namespaces are not yet supported.

Key Changes:

  • Added a new configuration property iceberg_default_catalog_namespace with validation to ensure at least one element and prevent multi-level namespaces for now
  • Updated C++ code to use the configurable namespace instead of the hardcoded "redpanda" value
  • Modified Python test infrastructure to support Identifier type (a tuple of strings) for namespaces and updated related functions

Reviewed changes

Copilot reviewed 12 out of 12 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
src/v/config/configuration.h Added property declaration for iceberg_default_catalog_namespace
src/v/config/configuration.cc Defined the configuration property with default value ["redpanda"] and validation
src/v/config/validators.h Added validator function declaration for namespace validation
src/v/config/validators.cc Implemented validation logic ensuring non-empty namespace with single element only
src/v/config/tests/validator_tests.cc Added unit tests for the namespace validator
src/v/datalake/table_id_provider.cc Updated to use the configurable namespace instead of hardcoded "redpanda"
src/v/datalake/coordinator/iceberg_file_committer.cc Added debug logging for committed files to main and DLQ tables
tests/rptest/tests/datalake/iceberg.py Defined Identifier type for representing table namespaces
tests/rptest/tests/datalake/query_engine_base.py Updated count_table to accept Identifier type for namespace
tests/rptest/tests/datalake/query_engine_factory.py Added type hints and QueryEngineService protocol
tests/rptest/tests/datalake/datalake_services.py Updated methods to use Identifier type and support custom namespaces
tests/rptest/tests/datalake/datalake_e2e_test.py Added end-to-end test for custom namespace functionality

Comment thread src/v/config/configuration.cc
Comment thread tests/rptest/tests/datalake/datalake_e2e_test.py
@nvartolomei nvartolomei marked this pull request as draft December 23, 2025 21:47
@nvartolomei nvartolomei force-pushed the nv/iceberg-namespace branch 2 times, most recently from 000c5f8 to a439a15 Compare December 24, 2025 11:11
@nvartolomei nvartolomei marked this pull request as ready for review December 24, 2025 11:11
@vbotbuildovich
Copy link
Copy Markdown
Collaborator

Retry command for Build#78391

please wait until all jobs are finished before running the slash command

/ci-repeat 1
skip-redpanda-build
skip-units
skip-rebase
tests/rptest/tests/partition_movement_test.py::SIPartitionMovementTest.test_cross_shard@{"cloud_storage_type":1,"num_to_upgrade":0,"with_cloud_topics":true}

@vbotbuildovich
Copy link
Copy Markdown
Collaborator

Retry command for Build#78393

please wait until all jobs are finished before running the slash command

/ci-repeat 1
skip-redpanda-build
skip-units
skip-rebase
tests/rptest/tests/cloud_topics/l0_gc_test.py::CloudTopicsL0GCTest.test_l0_gc@{"cloud_storage_type":2}

@vbotbuildovich
Copy link
Copy Markdown
Collaborator

vbotbuildovich commented Dec 24, 2025

CI test results

test results on build#78393
test_class test_method test_arguments test_kind job_url test_status passed reason test_history
CloudTopicsL0GCTest test_l0_gc {"cloud_storage_type": 2} integration https://buildkite.com/redpanda/redpanda/builds/78393#019b50b0-1c7b-419e-a3f9-3ca45dbb320f FAIL 0/1 https://redpanda.metabaseapp.com/dashboard/87-tests?tab=142-dt-individual-test-history&test_class=CloudTopicsL0GCTest&test_method=test_l0_gc
LogCompactionTxRemovalUpgradeFrom25_3_1_Test test_tx_control_batch_removal_with_upgrade_and_recovery null integration https://buildkite.com/redpanda/redpanda/builds/78393#019b50b0-1c75-4104-97e1-0a67bbf53f23 FLAKY 10/11 Test PASSES after retries.No significant increase in flaky rate(baseline=0.0312, p0=1.0000, reject_threshold=0.0100. adj_baseline=0.1000, p1=0.3487, trust_threshold=0.5000) https://redpanda.metabaseapp.com/dashboard/87-tests?tab=142-dt-individual-test-history&test_class=LogCompactionTxRemovalUpgradeFrom25_3_1_Test&test_method=test_tx_control_batch_removal_with_upgrade_and_recovery
PartitionBalancerTest test_unavailable_nodes null integration https://buildkite.com/redpanda/redpanda/builds/78393#019b50a9-020a-4d00-b250-981eb1c1433f FLAKY 10/11 Test PASSES after retries.No significant increase in flaky rate(baseline=0.0000, p0=1.0000, reject_threshold=0.0100. adj_baseline=0.1000, p1=0.3487, trust_threshold=0.5000) https://redpanda.metabaseapp.com/dashboard/87-tests?tab=142-dt-individual-test-history&test_class=PartitionBalancerTest&test_method=test_unavailable_nodes
WriteCachingFailureInjectionE2ETest test_crash_all {"use_transactions": false} integration https://buildkite.com/redpanda/redpanda/builds/78393#019b50a9-020d-461c-9f25-ff52e66546b6 FLAKY 9/11 Test PASSES after retries.No significant increase in flaky rate(baseline=0.0741, p0=0.5370, reject_threshold=0.0100. adj_baseline=0.2062, p1=0.3572, trust_threshold=0.5000) https://redpanda.metabaseapp.com/dashboard/87-tests?tab=142-dt-individual-test-history&test_class=WriteCachingFailureInjectionE2ETest&test_method=test_crash_all
test results on build#78574
test_class test_method test_arguments test_kind job_url test_status passed reason test_history
NodesDecommissioningTest test_decommission_status null integration https://buildkite.com/redpanda/redpanda/builds/78574#019b92da-5054-44ae-96e6-c1915e613e4c FLAKY 10/11 Test PASSES after retries.No significant increase in flaky rate(baseline=0.0524, p0=1.0000, reject_threshold=0.0100. adj_baseline=0.1491, p1=0.1989, trust_threshold=0.5000) https://redpanda.metabaseapp.com/dashboard/87-tests?tab=142-dt-individual-test-history&test_class=NodesDecommissioningTest&test_method=test_decommission_status
RedpandaNodeOperationsSmokeTest test_node_ops_smoke_test {"cloud_storage_type": 1, "mixed_versions": false} integration https://buildkite.com/redpanda/redpanda/builds/78574#019b92d5-4613-4941-bdc5-afd2b61427a7 FLAKY 25/31 Test FAILS after retries.Significant increase in flaky rate(baseline=0.0436, p0=0.0090, reject_threshold=0.0100) https://redpanda.metabaseapp.com/dashboard/87-tests?tab=142-dt-individual-test-history&test_class=RedpandaNodeOperationsSmokeTest&test_method=test_node_ops_smoke_test
test results on build#78638
test_class test_method test_arguments test_kind job_url test_status passed reason test_history
NodesDecommissioningTest test_decommission_status null integration https://buildkite.com/redpanda/redpanda/builds/78638#019b9871-4786-4669-8814-dd65466126fc FLAKY 19/21 Test PASSES after retries.No significant increase in flaky rate(baseline=0.0476, p0=0.6231, reject_threshold=0.0100. adj_baseline=0.1362, p1=0.2223, trust_threshold=0.5000) https://redpanda.metabaseapp.com/dashboard/87-tests?tab=142-dt-individual-test-history&test_class=NodesDecommissioningTest&test_method=test_decommission_status
RedpandaNodeOperationsSmokeTest test_node_ops_smoke_test {"cloud_storage_type": 1, "mixed_versions": false} integration https://buildkite.com/redpanda/redpanda/builds/78638#019b986b-7fa1-4d49-8e80-5e692f541f44 FLAKY 14/21 Test FAILS after retries.Significant increase in flaky rate(baseline=0.0778, p0=0.0033, reject_threshold=0.0100) https://redpanda.metabaseapp.com/dashboard/87-tests?tab=142-dt-individual-test-history&test_class=RedpandaNodeOperationsSmokeTest&test_method=test_node_ops_smoke_test

Copy link
Copy Markdown
Member

@dotnwat dotnwat left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm

Copy link
Copy Markdown
Member

@oleiman oleiman left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm


iceberg::table_identifier table_id_provider::table_id(const model::topic& t) {
return {
// TODO: namespace as a topic property? Keep it in the table metadata?
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

q: have we foreclosed on the idea of making this per-topic configurable?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No. Removed the todo by accident. Cluster level comes as a separate PR so that it is backportable.

@nvartolomei
Copy link
Copy Markdown
Contributor Author

/ci-repeat 1

@vbotbuildovich
Copy link
Copy Markdown
Collaborator

Retry command for Build#78574

please wait until all jobs are finished before running the slash command

/ci-repeat 1
skip-redpanda-build
skip-units
skip-rebase
tests/rptest/tests/random_node_operations_smoke_test.py::RedpandaNodeOperationsSmokeTest.test_node_ops_smoke_test@{"cloud_storage_type":1,"mixed_versions":false}

Add a new configuration option to customize the Iceberg table namespace
(database name), which was previously hardcoded to "redpanda". This
allows users to specify a custom namespace for their Iceberg tables
within the catalog.

The default value remains "redpanda" for backward compatibility.
@nvartolomei nvartolomei force-pushed the nv/iceberg-namespace branch from 511b904 to 379254f Compare January 7, 2026 11:50
@vbotbuildovich
Copy link
Copy Markdown
Collaborator

Retry command for Build#78638

please wait until all jobs are finished before running the slash command

/ci-repeat 1
skip-redpanda-build
skip-units
skip-rebase
tests/rptest/tests/random_node_operations_smoke_test.py::RedpandaNodeOperationsSmokeTest.test_node_ops_smoke_test@{"cloud_storage_type":1,"mixed_versions":false}

@piyushredpanda piyushredpanda merged commit d64f956 into redpanda-data:dev Jan 7, 2026
18 of 21 checks passed
@nvartolomei
Copy link
Copy Markdown
Contributor Author

/backport 25.3.x

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants