Status Update
Comments
zh...@google.com <zh...@google.com>
zh...@google.com <zh...@google.com> #2
yb...@google.com <yb...@google.com> #3
No, this bug is about not listening to the file unless there is a collector on "datastore.data". That CL only handles stopping the file observer when the Datastore's Scope is cancelled, which we were already doing before that CL.
zh...@google.com <zh...@google.com> #4
I see - as this is more of a performance improvement effort, how about we move it to datastore-1.1 stable so it doesn't block beta?
yb...@google.com <yb...@google.com> #5
moved.
yb...@google.com <yb...@google.com>
ap...@google.com <ap...@google.com> #6
Branch: androidx-main
commit 777ba8f9a1cdb4ca88263c6785c2708846b16d3f
Author: Yigit Boyar <yboyar@google.com>
Date: Tue Feb 13 09:46:31 2024
Collect update notifications only when datastore is observed
Previously, DataStore started collecting updates from IPC right after
it is initialized and kept this collection alive as long as the scope
is alive.
This change updates it to only observe the file if there is an active
observer on the DataStore. We achieve this by updating `data` to a
channel flow that will collect on the shared flow when it is used.
Some tests needed to be updated because they made an assumption on the
order of execution which slightly changes with this channel flow but
does not effect correctness.
Fixes: 267792241
Test: SingleProcessDataStoreTest#observeFileOnlyWhenDatastoreIsObserved
Change-Id: Id8221718f75b9755119d5e9f38c4827fa907b867
M datastore/datastore-core/src/androidInstrumentedTest/kotlin/androidx/datastore/core/MultiProcessDataStoreSingleProcessTest.kt
M datastore/datastore-core/src/commonMain/kotlin/androidx/datastore/core/DataStoreImpl.kt
M datastore/datastore-core/src/commonTest/kotlin/androidx/datastore/core/CloseDownstreamOnCloseTest.kt
M datastore/datastore-core/src/commonTest/kotlin/androidx/datastore/core/SingleProcessDataStoreTest.kt
th...@shareforce.eu <th...@shareforce.eu> #7
In my code I keep a reference to the supervisorJob used in the datastore scope:
val job = SupervisorJob()
val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "dynamic name", CoroutineScope(Dispatchers.IO + job)
When the datastore is no longer in use, I call job.cancelAndJoin()
. Does this change imply cancelling is no longer needed?
yb...@google.com <yb...@google.com> #8
you still need to explicitly cancel if you want to re-open the same file via another instance. This is because StorageConnection objects still need to be explicitly closed and even when we are not observing the file, DataStore instance claims ownership of it.
There is a relevant FR about that here:
th...@shareforce.eu <th...@shareforce.eu> #9
Thank you for your quick answer and the relevant information, much appreciated.
na...@google.com <na...@google.com> #10
The following release(s) address this bug.It is possible this bug has only been partially addressed:
androidx.datastore:datastore-core:1.1.0-beta02
androidx.datastore:datastore-core-android:1.1.0-beta02
androidx.datastore:datastore-core-iosarm64:1.1.0-beta02
androidx.datastore:datastore-core-iossimulatorarm64:1.1.0-beta02
androidx.datastore:datastore-core-iosx64:1.1.0-beta02
androidx.datastore:datastore-core-jvm:1.1.0-beta02
androidx.datastore:datastore-core-linuxx64:1.1.0-beta02
androidx.datastore:datastore-core-macosarm64:1.1.0-beta02
androidx.datastore:datastore-core-macosx64:1.1.0-beta02
Description
we already have versioning check to avoid issues there.