Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sql cache: use a single transaction when using MemoryCache chaining #5840

Merged
merged 1 commit into from
Apr 22, 2024

Conversation

BoD
Copy link
Contributor

@BoD BoD commented Apr 22, 2024

A single transaction is used in merge(records: Collection<Record>), but merge(record: Record) was called instead when using memory cache chaining, resulting in using 1 transaction per insert (significantly slower).

Also - enable WAL by default. This has no noticeable perf impact with the fix above (single transaction), but showed significant improvement without it. (moved to its own PR)

Related to #5834

@BoD BoD requested a review from martinbonnin as a code owner April 22, 2024 14:52
Copy link

netlify bot commented Apr 22, 2024

Deploy Preview for apollo-android-docs canceled.

Name Link
🔨 Latest commit d271ab7
🔍 Latest deploy log https://app.netlify.com/sites/apollo-android-docs/deploys/6626805c1df9530008bad7fb

@@ -43,6 +43,7 @@ actual class SqlNormalizedCacheFactory actual constructor(
object : AndroidSqliteDriver.Callback(getSchema(withDates)) {
override fun onConfigure(db: SupportSQLiteDatabase) {
super.onConfigure(db)
db.enableWriteAheadLogging()
Copy link
Contributor

Choose a reason for hiding this comment

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

What's the impact for existing databases? Can this be enabled on a database that wasn't using WAL previously?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Great question! 👀

Copy link
Contributor

Choose a reason for hiding this comment

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

Maybe turn this into 2 separate PRs? One for transactions, one for WAL?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I've tested that opening a db created without WAL and enabling WAL on it works without an issue.

Opened a separate PR: #5843

Comment on lines +111 to +112
val changedKeys = records.flatMap { record -> internalMerge(record, cacheHeaders, recordMerger) }.toSet()
changedKeys + nextCache?.merge(records, cacheHeaders, recordMerger).orEmpty()
Copy link
Contributor

Choose a reason for hiding this comment

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

👍

@BoD BoD merged commit 7079290 into main Apr 22, 2024
9 checks passed
@BoD BoD deleted the sql-cache-transactions branch April 22, 2024 16:15
BoD added a commit that referenced this pull request Apr 29, 2024
BoD added a commit that referenced this pull request Apr 29, 2024
(cherry picked from commit 7079290)
BoD added a commit to BoD/apollo-kotlin that referenced this pull request Jul 1, 2024
Adudouit added a commit to BeApp/apollo-kotlin that referenced this pull request Aug 19, 2024
…ios12-compat

* commit 'b8e8bdba951b1cb9beecabfc80433d848b2c921b': (38 commits)
  release 3.8.5
  Fix mapping of the builtin Float scalar type (apollographql#6047)
  SqlNormalizedCacheFactory make sqldriver public to support Sqlcipher data encryption. (apollographql#5972)
  Update 08-add-a-details-view.mdx for additional state handling (apollographql#5975)
  adding checks for json end_document in http batching interceptors (apollographql#5892)
  adding checks for json end_document in http transport (apollographql#5894)
  [3.x] Bump okio to 3.9.0 (apollographql#5868)
  version is now 3.8.5-SNAPSHOT
  release 3.8.4
  Backport apollographql#5848 to the v3 branch (apollographql#5863)
  Backport apollographql#5840 to the v3 branch (apollographql#5861)
  Backport apollographql#5778 to the v3 branch (apollographql#5860)
  Update min version of Kotlin in README and doc (apollographql#5750)
  version is now 3.8.4-SNAPSHOT
  release 3.8.3
  Add deprecations on symbols that are getting removed in v4 (apollographql#5746)
  docs: Correct file name discrepancies in tutorial documentation (apollographql#5740)
  Ignore IOException when calling ApolloHttpCache.remove (apollographql#5730)
  Added an implementation of a missing NSURLSessionWebSocketDelegateProtocol method in the NSURLSessionWebSocketEngine that's required in order to get a web socket to successfully reopen. (apollographql#5704)
  Update plugin-configuration.mdx (apollographql#5673)
  ...

# Conflicts:
#	gradle.properties
#	libraries/apollo-runtime/src/appleMain/kotlin/com/apollographql/apollo3/network/ws/NSURLSessionWebSocketEngine.kt
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