Skip to content

Fix date histogram cache miss: replace now with cacheable date bounds#108

Merged
DominicBM merged 8 commits into
mainfrom
fix-date-histogram-cache
May 7, 2026
Merged

Fix date histogram cache miss: replace now with cacheable date bounds#108
DominicBM merged 8 commits into
mainfrom
fix-date-histogram-cache

Conversation

@DominicBM
Copy link
Copy Markdown
Contributor

@DominicBM DominicBM commented May 7, 2026

Summary

  • Replace now-2000y and now-416y lower bounds with fixed epoch dates (0001-01-01, 1600-01-01)
  • Replace now upper bound with now/d (rounds to current day)

Why

ES cannot cache filter bitsets for any query containing a now-relative expression — the value changes each millisecond, so ES skips the query cache entirely. The _stats endpoint on the active index shows 299 million cache misses vs 2.3 million hits (0.76% hit rate), meaning virtually every date histogram query forces a full BKD tree traversal of a range spanning 2,000 years (~730,000 day-resolution BKD nodes per shard).

With ~2,000 requests/minute of frontend search traffic, each triggering this traversal, ES nodes are running at 85–99% CPU and the Akka circuit breaker fires repeatedly.

Fix

Fixed lower bounds (0001-01-01, 1600-01-01) are fully cacheable — the bitset is computed once per shard and reused. now/d for the upper bound rounds to midnight UTC, making it constant for the full day. Cache hit rate should improve dramatically, dropping per-query CPU cost for date histogram aggregations from O(BKD-traversal) to O(cache-lookup) for the vast majority of requests.

Test plan

  • Verify date facets still appear correctly on search results
  • Verify yearly and monthly date histogram buckets are correct
  • After deploy, monitor ES node CPU and _stats.query_cache.hit_count — expect hit rate to climb above 50% within minutes
  • Confirm circuit breaker rejection rate drops

🤖 Generated with Claude Code

Fix date histogram cache miss: replace now with cacheable date bounds

This PR modifies Elasticsearch date histogram aggregation queries to improve query-cache effectiveness and reduce expensive BKD traversal work.

Changes

  • Query construction (src/main/scala/dpla/api/v2/search/queryBuilders/QueryBuilder.scala):
    • Replace moving relative lower bounds with fixed dates:
      • Month facets now use "gte": "1600-01-01" (was "now-416y").
      • Year/date-year facets now use "gte": "0001-01-01" (was "now-2000y").
    • Replace "lte": "now" with "lte": "now/d" so the upper bound is rounded to the current UTC day (stable for the day).
    • Aggregation interval selection, formatting, and overall aggregation structure are unchanged.
  • Tests (src/test/scala/dpla/api/v2/search/queryBuilders/QueryBuilderTest.scala):
    • Update QueryBuilderTest assertions to expect the new fixed lower bounds and the "now/d" upper bound.
  • Build tooling:
    • project/build.properties: bump sbt.version 1.4.6 → 1.10.0.
    • project/plugins.sbt: add sbt-revolver and update sbt-assembly and sbt-scoverage versions.
    • build.sbt: Scala version bumped to 2.13.16 and libraryDependencySchemes adjusted for scala-xml.

Motivation and expected effect

  • Elasticsearch cannot cache filter bitsets for queries containing continuously changing "now"-relative expressions. Fixed lower bounds and a day-rounded "now/d" enable shard-level, query-cacheable bitsets.
  • Expected outcome: substantial increase in query-cache hit rate (target >50% shortly after deploy), large reduction in per-request CPU for date-histogram aggregations, and fewer circuit-breaker rejections.

Test plan

  • Verify date facets render correctly and yearly/monthly histogram buckets are correct.
  • After deployment, monitor Elasticsearch CPU, _stats.query_cache.hit_count (expect hit rate >50% within minutes), and circuit breaker rejection rates.

Compatibility & impact notes (explicit)

  • Manual pipeline/ECS redeploy: No special/manual pipeline trigger required beyond the normal deployment process.
  • Environment variables / AWS Secrets Manager: No additions, removals, or renames.
  • Database migrations: None.
  • Shared infrastructure configuration (CodePipeline, CodeBuild, ECS task definitions, IAM): No changes.
  • Public API: No response-shape changes or endpoint additions/removals; change is internal to query construction.
  • Security implications: None introduced.

Other notes

  • Build tooling updates affect development/build environment but do not change runtime behavior or require runtime configuration changes.

ES cannot cache filter bitsets for queries containing time-relative
expressions like `now` or `now-2000y` — the value changes each
millisecond, so ES skips the query cache entirely. With ~2,000
requests/minute each triggering a full BKD tree traversal of a
2,000-year date range, this drives ES nodes to 85–99% CPU.

Replace relative lower bounds with fixed epoch dates (fully cacheable)
and the `now` upper bound with `now/d` (rounds to current day, cached
for up to 24 hours).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 7, 2026

Review Change Stack

Warning

Rate limit exceeded

@DominicBM has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 15 seconds before requesting another review.

You’ve run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: c3a06b49-9737-4313-95c6-5fe823d71114

📥 Commits

Reviewing files that changed from the base of the PR and between bda66d1 and e1aba02.

📒 Files selected for processing (2)
  • build.sbt
  • src/test/scala/dpla/api/v2/search/queryBuilders/QueryBuilderTest.scala

Walkthrough

The pull request changes date facet aggregation lower-bound (gte) logic to fixed dates (month -> 1600-01-01; year/default -> 0001-01-01) and sets histogram lte to now/d. It also updates SBT launcher, adds/upgrades SBT plugins, bumps Scala to 2.13.16, and adds a libraryDependencySchemes rule.

Changes

Date Facet Aggregation Bounds

Layer / File(s) Summary
Date Range Bounds
src/main/scala/dpla/api/v2/search/queryBuilders/QueryBuilder.scala
Date facet gte values change from relative expressions to fixed absolute dates: month facets → 1600-01-01; year/default facets → 0001-01-01. Histogram lte remains now/d.
SBT Version
project/build.properties
Project SBT launcher version updated from 1.4.6 to 1.10.0.
SBT Plugins
project/plugins.sbt
Adds sbt-revolver and upgrades pinned plugin versions (sbt-assembly, sbt-scoverage).
Scala Version
build.sbt
scalaVersion updated from 2.13.4 to 2.13.16.
Library Dependency Scheme
build.sbt
Adds ThisBuild / libraryDependencySchemes entry forcing org.scala-lang.modules:scala-xml to use the always scheme.
Tests
src/test/scala/dpla/api/v2/search/queryBuilders/QueryBuilderTest.scala
Tests adjusted to assert new fixed gte/lte string values (0001-01-01, 1600-01-01, now/d).

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

  • dpla/api#108: Changes QueryBuilder.scala date-facet bounds to fixed dates and uses now/d for lte, directly related to the date-aggregation edits in this PR.
🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately and specifically describes the primary change: replacing time-relative date bounds with fixed, cacheable date values to address query cache misses in Elasticsearch date histogram aggregations.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix-date-histogram-cache

Tip

💬 Introducing Slack Agent: The best way for teams to turn conversations into code.

Slack Agent is built on CodeRabbit's deep understanding of your code, so your team can collaborate across the entire SDLC without losing context.

  • Generate code and open pull requests
  • Plan features and break down work
  • Investigate incidents and troubleshoot customer tickets together
  • Automate recurring tasks and respond to alerts with triggers
  • Summarize progress and report instantly

Built for teams:

  • Shared memory across your entire org—no repeating context
  • Per-thread sandboxes to safely plan and execute work
  • Governance built-in—scoped access, auditability, and budget controls

One agent for your entire SDLC. Right inside Slack.

👉 Get started


Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 7, 2026

Caution

Failed to replace (edit) comment. This is likely due to insufficient permissions or the comment being deleted.

Error details
{"name":"HttpError","status":500,"request":{"method":"PATCH","url":"https://api.github.com/repos/dpla/api/issues/comments/4400858102","headers":{"accept":"application/vnd.github.v3+json","user-agent":"octokit.js/0.0.0-development octokit-core.js/7.0.6 Node.js/24","authorization":"token [REDACTED]","content-type":"application/json; charset=utf-8"},"body":{"body":"<!-- This is an auto-generated comment: summarize by coderabbit.ai -->\n[![Review Change Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/dpla/api/pull/108)\n<!-- This is an auto-generated comment: review in progress by coderabbit.ai -->\n\n> [!NOTE]\n> Currently processing new changes in this PR. This may take a few minutes, please wait...\n> \n> <details>\n> <summary>⚙️ Run configuration</summary>\n> \n> **Configuration used**: Organization UI\n> \n> **Review profile**: CHILL\n> \n> **Plan**: Pro\n> \n> **Run ID**: `e533c83c-81c7-40cd-b14c-53bb406083cd`\n> \n> </details>\n> \n> <details>\n> <summary>📥 Commits</summary>\n> \n> Reviewing files that changed from the base of the PR and between bda66d170045a0bce79d97ae390bb10688966396 and 321bc20d12d5c84638ea4733bd0087d69f8c9d9b.\n> \n> </details>\n> \n> <details>\n> <summary>📒 Files selected for processing (1)</summary>\n> \n> * `project/plugins.sbt`\n> \n> </details>\n> \n> ```ascii\n>  ___________________________________________________________________________________\n> < Almost every programming language is overrated by its practitioners. - Larry Wall >\n>  -----------------------------------------------------------------------------------\n>   \\\n>    \\   (\\__/)\n>        (•ㅅ•)\n>        /   づ\n> ```\n\n<!-- end of auto-generated comment: review in progress by coderabbit.ai -->\n\n<!-- walkthrough_start -->\n\n## Walkthrough\n\nThe pull request modifies the date facet aggregation bounds in the search query builder. Month facets now use a fixed lower bound of 1600-01-01 instead of a relative offset, and year facets use 0001-01-01 instead of now-2000y. The date histogram structure and upper bounds remain unchanged. SBT launcher and plugin version pins in project config were also updated.\n\n## Changes\n\n**Date Facet Aggregation Bounds**\n\n| Layer / File(s) | Summary |\n|---|---|\n| **Date Range Bounds** <br> `src/main/scala/dpla/api/v2/search/queryBuilders/QueryBuilder.scala` | Date facet lower-bound (`gte`) values change from relative time expressions to fixed absolute dates: month facets switch to `1600-01-01`, year facets switch to `0001-01-01`. Histogram `lte` remains `now/d`. |\n| **SBT Version** <br> `project/build.properties` | Project SBT version updated from `1.4.6` to `1.10.0`. |\n| **SBT Plugins** <br> `project/plugins.sbt` | Adds `sbt-revolver` and upgrades pinned plugin versions (`sbt-assembly`, `sbt-scoverage`). |\n\n## Estimated code review effort\n\n🎯 2 (Simple) | ⏱️ ~8 minutes\n\n<!-- walkthrough_end -->\n\n<!-- pre_merge_checks_walkthrough_start -->\n\n<details>\n<summary>🚥 Pre-merge checks | ✅ 4</summary>\n\n<details>\n<summary>✅ Passed checks (4 passed)</summary>\n\n|         Check name         | Status   | Explanation                                                                                                                                                                                                           |\n| :------------------------: | :------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n|      Description Check     | ✅ Passed | Check skipped - CodeRabbit’s high-level summary is enabled.                                                                                                                                                           |\n|         Title check        | ✅ Passed | The title accurately and specifically describes the primary change: replacing time-relative date bounds with fixed, cacheable date values to address query cache misses in Elasticsearch date histogram aggregations. |\n|     Linked Issues check    | ✅ Passed | Check skipped because no linked issues were found for this pull request.                                                                                                                                              |\n| Out of Scope Changes check | ✅ Passed | Check skipped because no linked issues were found for this pull request.                                                                                                                                              |\n\n</details>\n\n<sub>✏️ Tip: You can configure your own custom pre-merge checks in the settings.</sub>\n\n</details>\n\n<!-- pre_merge_checks_walkthrough_end -->\n\n<!-- finishing_touch_checkbox_start -->\n\n<details>\n<summary>✨ Finishing Touches</summary>\n\n<details>\n<summary>🧪 Generate unit tests (beta)</summary>\n\n- [ ] <!-- {\"checkboxId\": \"f47ac10b-58cc-4372-a567-0e02b2c3d479\", \"radioGroupId\": \"utg-output-choice-group-unknown_comment_id\"} -->   Create PR with unit tests\n- [ ] <!-- {\"checkboxId\": \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\", \"radioGroupId\": \"utg-output-choice-group-unknown_comment_id\"} -->   Commit unit tests in branch `fix-date-histogram-cache`\n\n</details>\n\n</details>\n\n<!-- finishing_touch_checkbox_end -->\n<!-- announcements_start -->\n\n> [!TIP]\n> <details>\n> <summary>💬 Introducing Slack Agent: The best way for teams to turn conversations into code.</summary>\n> \n> [Slack Agent](https://www.coderabbit.ai/agent) is built on CodeRabbit's deep understanding of your code, so your team can collaborate across the entire SDLC without losing context.\n> \n> - Generate code and open pull requests\n> - Plan features and break down work\n> - Investigate incidents and troubleshoot customer tickets together\n> - Automate recurring tasks and respond to alerts with triggers\n> - Summarize progress and report instantly\n> \n> Built for teams:\n> \n> - **Shared memory** across your entire org—no repeating context\n> - **Per-thread sandboxes** to safely plan and execute work\n> - **Governance built-in**—scoped access, auditability, and budget controls\n> \n> One agent for your entire SDLC. Right inside Slack.\n> \n> 👉 [Get started](https://agent.coderabbit.ai/)\n> \n> </details>\n\n<!-- announcements_end -->\n\n<!-- tips_start -->\n\n---\n\n\n\n\n<sub>Comment `@coderabbitai help` to get the list of available commands and usage tips.</sub>\n\n<!-- tips_end -->\n\n<!-- internal state start -->\n\n\n<!-- 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 -->\n\n<!-- internal state end -->"},"request":{"retryCount":3,"signal":{},"retries":3,"retryAfter":16}}}

@DominicBM DominicBM merged commit a13ac2d into main May 7, 2026
4 checks passed
@DominicBM DominicBM deleted the fix-date-histogram-cache branch May 7, 2026 21:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant