#435: checkpoint properties based querying#457
Conversation
|
JaCoCo Coverage Report
Run 29999546289 · Event: |
…ith how we treat partitioning for example), and fixing decoder to URL decoder
There was a problem hiding this comment.
Pull request overview
Adds end-to-end support for filtering flow/partitioning checkpoint listings by arbitrary checkpoint property key/value pairs, propagating the new optional filter through HTTP → controller/service/repository → DB functions, and updating tests accordingly.
Changes:
- Add
checkpointPropertiesfilter support to v2 endpoints (checkpoint-propertiesquery param as base64url-encoded JSON) and propagate it through server layers. - Extend DB functions
flows.get_flow_checkpointsandruns.get_partitioning_checkpointsto accept an optional HSTORE filter and apply AND-semantics matching. - Update/extend server, reader, model, and database integration tests to cover the new filter and encoding/decoding behavior.
Reviewed changes
Copilot reviewed 38 out of 38 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
| server/src/test/scala/za/co/absa/atum/server/api/v2/service/FlowServiceUnitTests.scala | Updates mocks/calls for new checkpointProperties argument. |
| server/src/test/scala/za/co/absa/atum/server/api/v2/service/CheckpointServiceUnitTests.scala | Updates mocks/calls for new checkpointProperties argument. |
| server/src/test/scala/za/co/absa/atum/server/api/v2/repository/FlowRepositoryUnitTests.scala | Updates function-arg expectations for new DB function signature. |
| server/src/test/scala/za/co/absa/atum/server/api/v2/repository/CheckpointRepositoryUnitTests.scala | Updates function-arg expectations for new DB function signature. |
| server/src/test/scala/za/co/absa/atum/server/api/v2/http/GetPartitioningCheckpointsEndpointUnitTests.scala | Adapts endpoint logic/mocks for checkpoint-properties query param. |
| server/src/test/scala/za/co/absa/atum/server/api/v2/http/GetFlowCheckpointsEndpointUnitTests.scala | Adds endpoint tests for properties filtering + invalid base64 handling. |
| server/src/test/scala/za/co/absa/atum/server/api/v2/controller/FlowControllerUnitTests.scala | Updates controller calls for new checkpointProperties argument. |
| server/src/test/scala/za/co/absa/atum/server/api/v2/controller/CheckpointControllerUnitTests.scala | Updates controller calls for new checkpointProperties argument. |
| server/src/test/scala/za/co/absa/atum/server/api/database/runs/functions/GetPartitioningCheckpointsIntegrationTests.scala | Updates integration args to include checkpointProperties. |
| server/src/test/scala/za/co/absa/atum/server/api/database/flows/functions/GetFlowCheckpointsIntegrationTests.scala | Updates integration args to include checkpointProperties. |
| server/src/main/scala/za/co/absa/atum/server/api/v2/service/FlowServiceImpl.scala | Propagates checkpointProperties to repository call. |
| server/src/main/scala/za/co/absa/atum/server/api/v2/service/FlowService.scala | Extends service API with checkpointProperties. |
| server/src/main/scala/za/co/absa/atum/server/api/v2/service/CheckpointServiceImpl.scala | Propagates checkpointProperties to repository call. |
| server/src/main/scala/za/co/absa/atum/server/api/v2/service/CheckpointService.scala | Extends service API with checkpointProperties. |
| server/src/main/scala/za/co/absa/atum/server/api/v2/repository/FlowRepositoryImpl.scala | Passes checkpointProperties into DB function args. |
| server/src/main/scala/za/co/absa/atum/server/api/v2/repository/FlowRepository.scala | Extends repository API with checkpointProperties. |
| server/src/main/scala/za/co/absa/atum/server/api/v2/repository/CheckpointRepositoryImpl.scala | Passes checkpointProperties into DB function args. |
| server/src/main/scala/za/co/absa/atum/server/api/v2/repository/CheckpointRepository.scala | Extends repository API with checkpointProperties. |
| server/src/main/scala/za/co/absa/atum/server/api/v2/http/Endpoints.scala | Adds checkpoint-properties query param + base64url JSON codec for Map filter. |
| server/src/main/scala/za/co/absa/atum/server/api/v2/controller/FlowControllerImpl.scala | Propagates checkpointProperties to service call. |
| server/src/main/scala/za/co/absa/atum/server/api/v2/controller/FlowController.scala | Extends controller API with checkpointProperties. |
| server/src/main/scala/za/co/absa/atum/server/api/v2/controller/CheckpointControllerImpl.scala | Propagates checkpointProperties to service call. |
| server/src/main/scala/za/co/absa/atum/server/api/v2/controller/CheckpointController.scala | Extends controller API with checkpointProperties. |
| server/src/main/scala/za/co/absa/atum/server/api/database/runs/functions/GetPartitioningCheckpoints.scala | Extends DB function wrapper args with checkpointProperties. |
| server/src/main/scala/za/co/absa/atum/server/api/database/flows/functions/GetFlowCheckpoints.scala | Extends DB function wrapper args with checkpointProperties. |
| reader/src/test/scala/za/co/absa/atum/reader/PartitioningReaderUnitTests.scala | Adds reader test verifying properties filter query param is sent. |
| reader/src/test/scala/za/co/absa/atum/reader/FlowReaderUnitTests.scala | Adds reader test verifying properties filter query param is sent. |
| reader/src/main/scala/za/co/absa/atum/reader/requests/QueryParamNames.scala | Adds checkpoint-properties query parameter name constant. |
| reader/src/main/scala/za/co/absa/atum/reader/PartitioningReader.scala | Adds getCheckpointsByPropertiesPage and sends encoded filter param. |
| reader/src/main/scala/za/co/absa/atum/reader/FlowReader.scala | Adds getCheckpointsByPropertiesPage and sends encoded filter param. |
| model/src/test/scala/za/co/absa/atum/model/utils/JsonSerializationSyntaxUnitTests.scala | Adds test for base64url JSON encoding of properties Map. |
| model/src/test/scala/za/co/absa/atum/model/utils/JsonDeserializationSyntaxUnitTests.scala | Adds tests for base64url decoding + round-trip behavior. |
| model/src/main/scala/za/co/absa/atum/model/utils/JsonSyntaxExtensions.scala | Switches base64 decoding to URL-safe decoder. |
| jmf-rules.txt | Updates rules list to include QueryParamNames. |
| database/src/test/scala/za/co/absa/atum/database/runs/GetPartitioningCheckpointsIntegrationTests.scala | Adds integration test validating DB-side properties filtering. |
| database/src/test/scala/za/co/absa/atum/database/flows/GetFlowCheckpointsIntegrationTests.scala | Adds integration test validating DB-side properties filtering (incl. AND semantics). |
| database/src/main/postgres/runs/V0.7.0.2__get_partitioning_checkpoints.sql | New migration adding HSTORE properties filter to partitioning checkpoints function. |
| database/src/main/postgres/flows/V0.7.0.1__get_flow_checkpoints.sql | New migration adding HSTORE properties filter to flow checkpoints function. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
… SQL functions - Add ORDER BY process_start_time DESC, id_checkpoint ASC to _has_more subquery for deterministic pagination results in both functions - Fix limited_checkpoints CTE: correct ORDER BY from id_checkpoint-first to process_start_time DESC, id_checkpoint ASC in get_partitioning_checkpoints - Add id_checkpoint ASC tie-breaker to limited_checkpoints and final ORDER BY in get_flow_checkpoints for stable pagination when timestamps collide
|
Review from Copilot (twice) finished, deployed and tested via Postman, and also ran integration & agent-server compatibility tests, it all passes: https://github.com/absa-group/atum-service-deployment/actions/runs/29994664014 |
Overview
What's changed:
flows.get_flow_checkpointsandruns.get_partitioning_checkpointsfunctions, each now supporting an optionali_checkpoint_propertiesHSTORE parameter to filter checkpoints by matching property key-value pairs. This enables more flexible and precise queries for checkpoints.Release Notes
i_latest_firstparameter support toruns.get_partitioning_checkpoints, propagating all the way from DB function to REST API layer, to manipulate with the order of checkpoints being retrieved.Related
Closes #435