See the corresponding milestone for this release.
Highlights
- The CreateBasicReport method is now available for use on the Reporting public API via gRPC and HTTP JSON. (MC API Phase II)
- To enable, make the following changes in Kubernetes:
- Ensure that the Population Requisition Fulfiller is running in the Kingdom cluster. This has been available since v0.5.26. See the deployment guide.
- This is necessary for the new required
--pdp-nameoption on the Reporting public API server.
- This is necessary for the new required
- Ensure that the MeasurementConsumerConfig in the
mc-configSecret hasoffline_principalspecified for each MeasurementConsumer.- This is used as the auth Principal for BasicReport processing and must have at least the
reporting.reports.getandreporting.metrics.getpermissions.
- This is used as the auth Principal for BasicReport processing and must have at least the
- Specify the
--basic-reports-enabledoption on the Reporting internal API server. This will make the following options required. See the deployment guide for more information on configuration files.--impression-qualification-filter-config-file. Note that this must contain entries with external IDsamiandmrc.--event-message-descriptor-set--event-message-type-url--spanner-project--spanner-instance--spanner-database
- Add a CronJob to run the BasicReports results processor and report results post-processor. NetworkPolicy resources may need to be updated to allow this to call the Kingdom and the Reporting internal API server. See
report-result-post-processor-cronjobin the dev configuration for an example. - Configure which ImpressionQualificationFilters (IQFs) are always applied using the
--base-impression-qualification-filteroption on the Reporting public API server. For example,--base-impression-qualification-filter=impressionQualificationFilters/ami --base-impression-qualification-filter=impressionQualificationFilters/mrc
- Ensure that the Population Requisition Fulfiller is running in the Kingdom cluster. This has been available since v0.5.26. See the deployment guide.
- To enable, make the following changes in Kubernetes:
- Support uncapped impressions in EDPA when frequency_cap_per_user is -1. See [Issue #3368]
- Run ResultsFulfiller on c4d machine in Halo-managed environments. See [Issue #3366]
- Validate edp impression path in DataAvailabilitySync. See [Issue #3360]
- Allow multiple MCs to share the same EventGroupReferenceId in EventGroupSync.. See [Issue #3321]
- Basic Report Custom Filters Should Not Overlap Named Filters. See [Issue #3285]
- Remove services from gRPC gateway that need not be exposed for MC API Phase II. See [Issue #3278]
- Restrict usage of DEV ModelLine type in new Reports. See [Issue #3221]
- Support configuration for default IQFs for CreateBasicReport. See [Issue #3216]
- Complete End-to-End InProcess test for Public BasicReport Creation. See [Issue #3209]
- Complete End-to-End Correctness Test for Public BasicReport Creation. See [Issue #3208]
Issues Addressed
- NOT Null cannot be applied to ModelLineSystemSpecified when NULL values exist. See [Issue #3389]
- ReportResultPostProcessor CronJob Network Policy is setup incorrectly. See [Issue #3376]
- ResourceSetup does not set offline_principal in MeasurementConsumerConfig. See [Issue #3377]
- Retrieving a ReportingSetResult fails when event filter is empty. See [Issue #3379]
- ReportingWindowResult cannot be retrieved when nonCumulative Start doesn't exist. See [Issue #3380]
- BasicReport ResultGroups kPlusReach and percentKPlusReach have more values than requested in ResultGroupSpecs. See [Issue #3381]
- BasicReportsReportsJob incorrectly sets VennDiagramRegionType to PRIMITIVE instead of UNION. See [Issue #3382]
- CreateBasicReport does not persist ImpressionQualificationFilterSpecs used at time of creation. See [Issue #3383]
- CreateBasicReport creates MetricCalculationSpec Groupings using the unset Enum value. See [Issue #3384]
- ModelLineSystemSpecified column in BasicReports table is allowed to be null. See [Issue #3385]
- BasicReport Cumulative Weekly only supports reach and percent_reach. See [Issue #3386]
- DeleteRole Fails when PolicyBindings associated with the Role exists. See [Issue #3373]
- ImpressionQualificationFilter caching in BasicReports Service may cause caching of wrong ImpressionQualificationFilters. See [Issue #3325]
- EDPA Cloud Run Functions may not export metrics before completion. See [Issue #3367]
- Logs not exported for EDPA processes in TEE. See [Issue #3357]
- ImpressionQualificationFilterConfig allows specs with no filters. See [Issue #3315]
- Frequent Reporting Postgres DB locking from GetReport. See [Issue #3337]
- Fix code scanning alert - libpng: LIBPNG buffer overflow / CVE-2025-64720. See [Issue #3236]
- Fix code scanning alert - libpng: LIBPNG heap buffer overflow / CVE-2025-65018. See [Issue #3237]
- Fix code scanning alert - libpng: LIBPNG out-of-bounds read in png_image_read_composite / CVE-2025-66293. See [Issue #3333]
- Incompatible protobuf gencode/runtime versions in report result processor. See [Issue #3327]
- ImpressionQualificationFilterConfig is not Validated against the Event Descriptor. See [Issue #3276]
- CreateBasicReport does not request Population correctly. See [Issue #3302]
- Population Metric does not create a Population Measurement. See [Issue #3290]
- update-edp-aggregator-services workflow sometimes fails with
deployments.apps "default-collector" not found. See [Issue #3296]
Potentially Requiring Action
- BasicMetricSet only supports reach and percent_reach for cumulative weekly. See [Issue #3363]
- Operators may want to use a larger machine type such as c4d-standard-32 for the Results fulfiller, increasing the maximum Java heap size to 96 GiB. These can be configured using variables in the edp-aggregator Terraform module. See [Issue #3366]
- The post processor requires that ImpressionQualificationFilters named "mrc" and "ami" exist. This Issue will be corrected in the future so that the specific names are flexible. See [PR #3344]
- Creating a Metric (and therefore a Report or BasicReport) using a ModelLine of type DEV requires the Principal to have the
reporting.metrics.createWithDevModelLinepermission. See [Issue #3221] - Creating a BasicReport using a ModelLine of type DEV requires the Principal to have the
reporting.basicReports.createWithDevModelLinepermission. See [Issue #3221] - The Reporting public API server has a new
--base-impression-qualification-filteroption to specify the resource name of an ImpressionQualificationFilter resource which is always included in BasicReport creation. It can be specified multiple times. See [Issue #3216] - The Reporting public API server has a new required
--pdp-nameoption. This is the resource name of the Population Data Provider (PDP) corresponding to the running Population Requisition Fulfiller instance. See [Issue #3290]
What's Changed
- ci: Fix Update-cmms dependency graph by @laureanobrs in #3297
- chore: Update urllib3 by @laureanobrs in #3298
- fix: set max frequency below the ring modulus by @stevenwarejones in #3292
- feat(report-processor): process MC API phase 2 report result. by @ple13 in #3248
- fix!: Metrics Service now correctly creates a Population Measurement for a Population Metric by @tristanvuong2021 in #3291
- feat: Implement public EventGroup batch create by @roaminggypsy in #3234
- feat: Add Event Group Activities table by @roaminggypsy in #3288
- fix: CreateBasicReport does not include IQF filters in MetricCalculationSpecs that have a Population MetricSpec by @tristanvuong2021 in #3303
- feat(report-processor): add post process report result job. by @ple13 in #3275
- fix: Validate IQF config against Event Descriptor by @tristanvuong2021 in #3277
- feat: Update gRPC Gateway for BasicReport by @tristanvuong2021 in #3279
- feat: Add base ImpressionQualificationFilters flags by @tristanvuong2021 in #3268
- docs: Update dev standards by @laureanobrs in #3287
- ci: Run nightly build twice a day, everyday by @laureanobrs in #3309
- fix(report-processor): fix large correction test for unnoised edps. by @ple13 in #3318
- refactor: use join key as request id when creating an event group by @Marco-Premier in #3305
- testing: Test event group reference ids that map to multiple MCs by @stevenwarejones in #3301
- ci: Temporarily disable coverage workflow steps by @SanjayVas in #3330
- docs: Update SECURITY.md by @laureanobrs in #3310
- build: Use Python gRPC Bazel rules from grpc rather than rules_proto_grpc_python by @SanjayVas in #3311
- build: Update common-jvm by @laureanobrs in #3317
- ci: Update code scanning actions by @laureanobrs in #3339
- feat: Improve accuracy of CreateBasicReportRequest validation errors by @SanjayVas in #3304
- feat!: Require new permission to create Metrics and BasicReports with DEV ModelLine by @SanjayVas in #3226
- fix: Remove materialize from reporting update statements by @tristanvuong2021 in #3332
- Add edp impression path to data availability config by @stevenwarejones in #3342
- fix(report-processor): correct the metric_subset_by_parent map for reports without AMI measurements by @ple13 in #3344
- fix: Update TrusTEE mill to use StreamingAead by @renjiezh in #3341
- fix: Add additional validation to ImpressionQualificationFilterConfig by @tristanvuong2021 in #3316
- build: Use extras syntax for qpsolvers dep by @SanjayVas in #3345
- ci: Use applysets for remaining K8s workflows by @SanjayVas in #3354
- ci: Add env var needed for applysets in K8s workflows by @laureanobrs in #3361
- fix: Add OTEL_LOGS_EXPORTER to MIG configuration by @georgi in #3336
- fix: flush telemetry before completing data availability request by @georgi in #3313
- feat: run ResultsFulfiller on c4d machine in Halo-managed environments by @georgi in #3324
- refactor: Generalize mig Terraform module so it can be reused for TrusTEE by @renjiezh in #3351
- refactor: Make ResultsFulfillerMetrics injectable for test isolation by @georgi in #3348
- feat: Allow listing BasicReports across MCs in internal API by @SanjayVas in #3335
- feat: Add K8s CronJob for report result post-processor by @SanjayVas in #3355
- feat: Add TrusTEE mill docker image by @renjiezh in #3356
- fix: Remove caching of Base ImpressionQualificationFilters from BasicReports Service by @tristanvuong2021 in #3326
- feat: Add extra_metadata in tf/mig for otel by @renjiezh in #3365
- feat: Support uncapped impressions when frequency_cap_per_user is -1 by @georgi in #3320
- fix(report-processor): verify k-reach is not empty when getting its edp combinations. by @ple13 in #3353
- fix: Don't fail correctness test when there is no ModelRelease by @SanjayVas in #3364
- docs: Update dev-standards and local deploy docs by @laureanobrs in #3349
- feat: Deploy TrusTEE mill in MIG by Terraform by @renjiezh in #3194
- feat: Add terraform KMS and WIF for EDP simulators. by @renjiezh in #3362
- fix: Update trustee_mill_subnetwork_cidr_range to avoid conflicts. by @renjiezh in #3378
- fix: DeleteRole now deletes associated PolicyBindings by @tristanvuong2021 in #3374
- fix!: Complete Integration test for BasicReport by @tristanvuong2021 in #3371
- feat: Custom ImpressionQualificationFilters can no longer overlap with existing ImpressionQualificationFilters by @tristanvuong2021 in #3312
- doc: Fix reporting-v2-server-deployment.md to replace basic-reports-reports with report-result-post-processor by @tristanvuong2021 in #3390
- fix: Update ModelLineSystemSpecified to be false if NULL by @tristanvuong2021 in #3388
Full Changelog: v0.5.29...v0.5.30