Skip to content

Fix maxAge handling to match Dart implementation#75

Merged
aashishpatil-g merged 2 commits intomainfrom
ap/maxAgeFix
Feb 23, 2026
Merged

Fix maxAge handling to match Dart implementation#75
aashishpatil-g merged 2 commits intomainfrom
ap/maxAgeFix

Conversation

@aashishpatil-g
Copy link
Collaborator

maxAge handling is now same as Flutter where maxAge is associated with the cache entry (query results). This gets updated when cache entry is updated via server results.

@gemini-code-assist
Copy link

Summary of Changes

Hello @aashishpatil-g, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request refactors the cache invalidation mechanism to align with Flutter's maxAge handling. Instead of a global Time-To-Live (TTL), maxAge is now associated directly with each cache entry (ResultTree), determining its individual validity. This ensures that cache entries are considered stale based on their own maxAge property, which can be derived from the server response or a default configuration.

Highlights

  • Cache Staleness Logic: The resultTree function in Cache.swift now incorporates maxAge directly from the ResultTree entry to determine staleness, and accepts an allowStale parameter to control retrieval of stale data.
  • ResultTree Enhancement: The ResultTree struct now includes a maxAge property and a computed isStale property, centralizing the staleness determination logic within the cache entry itself.
  • maxAge Assignment: maxAge is now explicitly set when a ResultTree is created or updated, prioritizing values from the server response extensions or falling back to a default configuration.
  • Simplified Query Reference: The GenericQueryRef now directly utilizes the allowStale parameter when querying the cache, simplifying its internal staleness checks.
  • Test Updates: Cache tests were updated to reflect the new maxAge property in ResultTree and the use of the isStale computed property.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Changelog
  • Sources/Cache/Cache.swift
    • Updated resultTree function signature to include allowStale: Bool = false.
    • Added a guard statement to resultTree to prevent returning stale data unless allowStale is true.
    • Modified resultTree to pass maxAge from dehydratedTree when hydrating results.
    • Introduced a maxAge variable, derived from response.extensions?.maxAge or config.maxAge, when setting a new ResultTree in the cache.
  • Sources/Cache/ResultTree.swift
    • Added a maxAge: TimeInterval property.
    • Replaced the isStale(_ ttl: TimeInterval) function with a computed property isStale that uses the maxAge of the instance.
    • Added maxAge to the CodingKeys enum.
  • Sources/Queries/GenericQueryRef.swift
    • Modified the call to cache.resultTree to pass the allowStale parameter directly.
    • Simplified the conditional logic for retrieving cache entries.
  • Tests/Unit/CacheTests.swift
    • Updated ResultTree initialization to include the maxAge parameter.
    • Adjusted XCTAssertFalse and XCTAssertTrue calls to use the new resultTree.isStale computed property.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request refactors the maxAge handling for cached queries to align with the Dart implementation. The maxAge is now stored with the cache entry itself in ResultTree, which simplifies the logic for checking staleness. The changes are logical and well-implemented. However, this refactoring has resulted in some now-unused code in GenericQueryRef, which should be removed. I've also included a minor suggestion to remove an explanatory comment to improve code conciseness.

@aashishpatil-g aashishpatil-g merged commit c427c4c into main Feb 23, 2026
9 checks passed
@aashishpatil-g aashishpatil-g deleted the ap/maxAgeFix branch February 23, 2026 23:31
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.

2 participants