We want to return
tagValuesfor augmentation tables (tagged at the column-level) inGET_SCHEMAcalls.tagValues(column-level) are stored inColumnDeclarationwhich can be found incommon/src/main/protos/augmentation_table_ddl.proto; these are already stored in the DB as part of theCreateRequestpayload.Goal:
- Write an integration test in
ComputeApiLiveDataModelTest.javato make sure that when we create an augmentation table and callgetLiveDataModel, we get the expectedtagValues.- Change what is needed in the mappers and make sure the tests added in the first step are passing.
AugmentationValidator (AugmentationValidator.java) already wraps cloud.celonis.compute2.augmentation.validation.AugmentationTableValidator. Today its single consumer is validateLoad(DataModelLoad), called from DataModelLoadDAO after a successful load (DataModelLoadDAO.java:536) to surface warnings such as "Querying this augmentation table will not work until the data model schema inconsistency is fixed." Those warnings are stored on DataModelLoad.warningMessages but never block queries — once a load succeeds the broken augmentation tables remain visible in the cube's AUGMENTATION_TABLE set (AugmentationCompilers.java:18) and any query referencing them will be compiled and dispatched to the engine.
We want to add a new use of the same broken-tables computation: **reject queries that reference any b
The service uses a push-based mechanism via RabbitMQ to synchronize in-memory routing table caches across DMM instances. This is an optimization on top of a pull-based cron fallback (every 15s). When any instance changes the routing table (e.g., during a data model migration), it broadcasts a RoutingTableUpdateRequestMessage to all other instances via a direct exchange. Each instance has its own per-instance queue (data-model-manager.routing-table-update-req-<instanceId>), non-durable and auto-delete.
refreshRoutingTable() uses a watermark-based DB query (fetchRecentUpdates(latestUpdateTimestamp)) that fetches all changes since the last refresh. A single call after a burst captures everything. All subsequent calls for queued messages hit the DB only to find zero new rows.
Prompt:
loading.protoandqueries.protoshould not haveai_generated, remove them and reserve the field number to make sure it will not be used in the future, see where these are referenced and delete. AlsoDataColumnTransport.TAG_AI_GENERATEDshould be removed.
Actions taken:
This PR replaces the specific aiGenerated boolean flag on augmentation columns with a generic tagValues: Map<String, String> mechanism. This allows arbitrary metadata to be attached to columns without requiring dedicated fields for each use case.
The aiGenerated flag was a narrow, single-purpose field. As more column metadata needs arise, adding a new boolean for each would lead to API and schema bloat. A generic key-value tag map is more flexible and future-proof.
Replace the single-purpose aiGenerated: Boolean persistence field on ColumnEntity with a general-purpose Map<String, String> tagValues stored as JSONB, completing the persistence layer migration for column-level tagging.
This is PR #2 in a 3-part series:
- PR #1: API contract changes (column + table level) — merged
- PR #2: Persistence changes (column only) — this PR
- PR #3: Protobuf cleanup — pending