Status Update
Comments
[Deleted User] <[Deleted User]> #2
Sorry forgot to change the issue title to something that makes more sense.
Main question is, can the same instance of a worker be used in multiple places? And if so, it looks like things are broken.
Main question is, can the same instance of a worker be used in multiple places? And if so, it looks like things are broken.
su...@google.com <su...@google.com> #3
I think the issue here is that we should explicitly disallow more than one instance of the same work request in a chain. What's happening here is correct - each work request runs exactly once.
su...@google.com <su...@google.com> #4
Can you give us a sample app where you see the problems occur? It's a little hard to tell from your logs because both sets of output are using the same exact work requests and it's hard to tell when you enqueued them and what order you're running them in. Did you use them for both the unique and non-unique work?
[Deleted User] <[Deleted User]> #5
In the last example 2 SnapshotWorkers were run, even though I pass the same instance to both chains.
I think I would expect the same instance to be able to be used multiple times, but runs after it's first would be 'skipped'. What do you think of that concept?
I think I would expect the same instance to be able to be used multiple times, but runs after it's first would be 'skipped'. What do you think of that concept?
[Deleted User] <[Deleted User]> #6
Only one WorkContinuation.combine() is run per log. Ok I can see about creating a sample app.
su...@google.com <su...@google.com> #7
WorkManager should explicitly disallow situations where a workrequest has the same item as both a prerequisite and a dependent. This is happening in your graphs.
[Deleted User] <[Deleted User]> #8
Should we expect using the same dependency in multiple chains like this to work?
val chainA = (1, 2).then(4)
val chainB = (2, 3).then(5)
WorkContinuation.combine(chainA, chainB).enqueue()
// 1 2 3
// \/ \/
// 4 5
Tree example in the code along with ones from comments above.
Attached project
val chainA = (1, 2).then(4)
val chainB = (2, 3).then(5)
WorkContinuation.combine(chainA, chainB).enqueue()
// 1 2 3
// \/ \/
// 4 5
Tree example in the code along with ones from comments above.
Attached project
ra...@google.com <ra...@google.com> #9
That should still work.
Essentially what WorkManager does is this. If your Worker has no prerequisites, then its eligible to run. So in your example (1, 2) and (2, 3) have no prerequisites, So they will get scheduled first.
We also ensure that 2 only executes once.
Once they are done running, we look for dependencies that might get unblocked (depending on the status of the Worker which unblocked it). So 4, 5 will eventually get unblocked once all their prerequisites are successful.
Essentially what WorkManager does is this. If your Worker has no prerequisites, then its eligible to run. So in your example (1, 2) and (2, 3) have no prerequisites, So they will get scheduled first.
We also ensure that 2 only executes once.
Once they are done running, we look for dependencies that might get unblocked (depending on the status of the Worker which unblocked it). So 4, 5 will eventually get unblocked once all their prerequisites are successful.
[Deleted User] <[Deleted User]> #10
Ok here is a more representative snippet of what we have been experimenting with. We have 19 workers, some of which have dependencies on other workers. The path vals are those dependancy chains and the allItems workers is a catch all for workers not listed in dependency chains. Contrary to your comment above, it looks like RFIWorker and FieldReportWorker are run twice.
What could be going on here? Is this type of chaining not intended?
private fun createWorkContinuations(): List<WorkContinuation> {
val downloadAnnotationDigestWorker = createWorker<DownloadAnnotationDigestWorker>()
val downloadAssetsWorker = createWorker<DownloadAssetsWorker>()
val downloadCommentsWorker = createWorker<DownloadCommentsWorker>()
val downloadDocumentsWorker = createWorker<DownloadDocumentsWorker>()
val downloadEventsWorker = createWorker<DownloadEventsWorker>()
val downloadFieldReportsWorker = createWorker<DownloadFieldReportsWorker>()
val downloadHistorySetWorker = createWorker<DownloadHistorySetWorker>()
val downloadIssueListsWorker = createWorker<DownloadIssueListsWorker>()
val downloadProjectDigestWorker = createWorker<DownloadProjectDigestWorker>()
val downloadRfiWorker = createWorker<DownloadRfisWorker>()
val downloadSheetsWorker = createWorker<DownloadSheetsWorker>()
val downloadSheetTextWorker = createWorker<DownloadSheetTextWorker>()
val downloadSheetVersionsWorker = createWorker<DownloadSheetVersionsWorker>()
val downloadSnapshotsWorker = createWorker<DownloadSnapshotsWorker>()
val downloadStampMetaWorker = createWorker<DownloadStampMetaWorker>()
val downloadTasksWorker = createWorker<DownloadTasksWorker>()
val downloadUserEventsWorker = createWorker<DownloadUserEventsWorker>()
val downloadUserGroupsWorker = createWorker<DownloadUserGroupsWorker>()
val downloadUsersWorker = createWorker<DownloadUsersWorker>()
val path1 = WorkManager.getInstance()
.beginWith(listOf(downloadHistorySetWorker, downloadSheetVersionsWorker))
.then(downloadSheetsWorker)
val path2 = WorkManager.getInstance()
.beginWith(
listOf(
downloadSheetsWorker,
downloadSheetVersionsWorker,
downloadCommentsWorker,
downloadTasksWorker,
downloadProjectDigestWorker,
downloadAnnotationDigestWorker
)
)
.then(downloadUserEventsWorker)
val path3 = WorkManager.getInstance()
.beginWith(
listOf(
downloadRfiWorker,
downloadProjectDigestWorker,
downloadAnnotationDigestWorker,
downloadFieldReportsWorker,
downloadSnapshotsWorker,
downloadTasksWorker
)
)
.then(downloadAssetsWorker)
val path4 = WorkManager.getInstance()
.beginWith(
listOf(
downloadProjectDigestWorker
)
)
.then(downloadRfiWorker)
val path5 = WorkManager.getInstance()
.beginWith(
listOf(
downloadAnnotationDigestWorker
)
)
.then(downloadFieldReportsWorker)
val allItems = WorkManager.getInstance()
.beginWith(
listOf(
downloadAnnotationDigestWorker,
downloadAssetsWorker,
downloadCommentsWorker,
downloadDocumentsWorker,
downloadEventsWorker,
downloadFieldReportsWorker,
downloadHistorySetWorker,
downloadIssueListsWorker,
downloadProjectDigestWorker,
downloadRfiWorker,
downloadSheetsWorker,
downloadSheetTextWorker,
downloadSheetVersionsWorker,
downloadSnapshotsWorker,
downloadStampMetaWorker,
downloadTasksWorker,
downloadUserEventsWorker,
downloadUserGroupsWorker,
downloadUsersWorker
)
)
return listOf(path1, path2, path3, path4, path5, allItems)
}
WorkContinuation
.combine(createWorkContinuations())
.then(OneTimeWorkRequestBuilder<FinalWorker>().build())
.enqueue()
Output
2018-12-12 13:40:32.838 6156-6224/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadHistorySetWorker@901a7a0::class.java - Started
2018-12-12 13:40:32.843 6156-6225/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadSheetVersionsWorker@f699dcc::class.java - Started
2018-12-12 13:40:32.846 6156-6226/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadCommentsWorker@92e891b::class.java - Started
2018-12-12 13:40:34.329 6156-6226/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadCommentsWorker@92e891b::class.java - Done
2018-12-12 13:40:34.330 6156-6226/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadTasksWorker@ffc4473::class.java - Started
2018-12-12 13:40:34.958 6156-6225/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadSheetVersionsWorker@f699dcc::class.java - Done
2018-12-12 13:40:34.958 6156-6225/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadProjectDigestWorker@2cc012e::class.java - Started
2018-12-12 13:40:35.820 6156-6225/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadProjectDigestWorker@2cc012e::class.java - Done
2018-12-12 13:40:35.822 6156-6225/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadAnnotationDigestWorker@594c565::class.java - Started
2018-12-12 13:40:35.929 6156-6224/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadHistorySetWorker@901a7a0::class.java - Done
2018-12-12 13:40:35.930 6156-6224/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadRfisWorker@c7ae448::class.java - Started
2018-12-12 13:40:38.734 6156-6224/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadRfisWorker@c7ae448::class.java - Done
2018-12-12 13:40:38.735 6156-6224/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadFieldReportsWorker@fff3063::class.java - Started
2018-12-12 13:40:38.860 6156-6226/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadTasksWorker@ffc4473::class.java - Done
2018-12-12 13:40:38.861 6156-6226/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadSnapshotsWorker@e5111de::class.java - Started
2018-12-12 13:40:39.397 6156-6225/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadAnnotationDigestWorker@594c565::class.java - Done
2018-12-12 13:40:39.398 6156-6225/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadDocumentsWorker@8dad1d5::class.java - Started
2018-12-12 13:40:39.899 6156-6224/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadFieldReportsWorker@fff3063::class.java - Done
2018-12-12 13:40:39.900 6156-6224/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadEventsWorker@d3ef78::class.java - Started
2018-12-12 13:40:40.682 6156-6226/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadSnapshotsWorker@e5111de::class.java - Done
2018-12-12 13:40:40.683 6156-6226/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadIssueListsWorker@e5097b7::class.java - Started
2018-12-12 13:40:44.137 6156-6225/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadDocumentsWorker@8dad1d5::class.java - Done
2018-12-12 13:40:44.138 6156-6225/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadSheetTextWorker@9c4d042::class.java - Started
2018-12-12 13:40:44.207 6156-6224/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadEventsWorker@d3ef78::class.java - Done
2018-12-12 13:40:44.207 6156-6224/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadStampMetaWorker@855de89::class.java - Started
2018-12-12 13:40:45.507 6156-6226/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadIssueListsWorker@e5097b7::class.java - Done
2018-12-12 13:40:45.508 6156-6226/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadUserGroupsWorker@40c1abc::class.java - Started
2018-12-12 13:40:46.180 6156-6224/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadStampMetaWorker@855de89::class.java - Done
2018-12-12 13:40:46.181 6156-6224/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadUsersWorker@5011ecb::class.java - Started
2018-12-12 13:40:46.615 6156-6226/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadUserGroupsWorker@40c1abc::class.java - Done
2018-12-12 13:40:46.616 6156-6226/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadSheetsWorker@c8b0166::class.java - Started
2018-12-12 13:40:48.392 6156-6224/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadUsersWorker@5011ecb::class.java - Done
2018-12-12 13:40:48.600 6156-6225/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadSheetTextWorker@9c4d042::class.java - Done
2018-12-12 13:40:50.577 6156-6226/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadSheetsWorker@c8b0166::class.java - Done
2018-12-12 13:40:50.600 6156-6224/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadUserEventsWorker@4fb50bb::class.java - Started
2018-12-12 13:40:52.083 6156-6224/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadUserEventsWorker@4fb50bb::class.java - Done
2018-12-12 13:41:08.753 6156-6225/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadRfisWorker@4a72ac6::class.java - Started
2018-12-12 13:41:13.529 6156-6225/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadRfisWorker@4a72ac6::class.java - Done
2018-12-12 13:41:13.758 6156-6226/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadFieldReportsWorker@5cd6ad9::class.java - Started
2018-12-12 13:41:18.384 6156-6226/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadFieldReportsWorker@5cd6ad9::class.java - Done
2018-12-12 13:41:18.411 6156-6224/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadAssetsWorker@2f5d176::class.java - Started
2018-12-12 13:41:18.718 6156-6224/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadAssetsWorker@2f5d176::class.java - Done
2018-12-12 13:41:18.757 6156-6226/com.plangrid.android.devgrid I/System.out: ALL WORK COMPLETE
What could be going on here? Is this type of chaining not intended?
private fun createWorkContinuations(): List<WorkContinuation> {
val downloadAnnotationDigestWorker = createWorker<DownloadAnnotationDigestWorker>()
val downloadAssetsWorker = createWorker<DownloadAssetsWorker>()
val downloadCommentsWorker = createWorker<DownloadCommentsWorker>()
val downloadDocumentsWorker = createWorker<DownloadDocumentsWorker>()
val downloadEventsWorker = createWorker<DownloadEventsWorker>()
val downloadFieldReportsWorker = createWorker<DownloadFieldReportsWorker>()
val downloadHistorySetWorker = createWorker<DownloadHistorySetWorker>()
val downloadIssueListsWorker = createWorker<DownloadIssueListsWorker>()
val downloadProjectDigestWorker = createWorker<DownloadProjectDigestWorker>()
val downloadRfiWorker = createWorker<DownloadRfisWorker>()
val downloadSheetsWorker = createWorker<DownloadSheetsWorker>()
val downloadSheetTextWorker = createWorker<DownloadSheetTextWorker>()
val downloadSheetVersionsWorker = createWorker<DownloadSheetVersionsWorker>()
val downloadSnapshotsWorker = createWorker<DownloadSnapshotsWorker>()
val downloadStampMetaWorker = createWorker<DownloadStampMetaWorker>()
val downloadTasksWorker = createWorker<DownloadTasksWorker>()
val downloadUserEventsWorker = createWorker<DownloadUserEventsWorker>()
val downloadUserGroupsWorker = createWorker<DownloadUserGroupsWorker>()
val downloadUsersWorker = createWorker<DownloadUsersWorker>()
val path1 = WorkManager.getInstance()
.beginWith(listOf(downloadHistorySetWorker, downloadSheetVersionsWorker))
.then(downloadSheetsWorker)
val path2 = WorkManager.getInstance()
.beginWith(
listOf(
downloadSheetsWorker,
downloadSheetVersionsWorker,
downloadCommentsWorker,
downloadTasksWorker,
downloadProjectDigestWorker,
downloadAnnotationDigestWorker
)
)
.then(downloadUserEventsWorker)
val path3 = WorkManager.getInstance()
.beginWith(
listOf(
downloadRfiWorker,
downloadProjectDigestWorker,
downloadAnnotationDigestWorker,
downloadFieldReportsWorker,
downloadSnapshotsWorker,
downloadTasksWorker
)
)
.then(downloadAssetsWorker)
val path4 = WorkManager.getInstance()
.beginWith(
listOf(
downloadProjectDigestWorker
)
)
.then(downloadRfiWorker)
val path5 = WorkManager.getInstance()
.beginWith(
listOf(
downloadAnnotationDigestWorker
)
)
.then(downloadFieldReportsWorker)
val allItems = WorkManager.getInstance()
.beginWith(
listOf(
downloadAnnotationDigestWorker,
downloadAssetsWorker,
downloadCommentsWorker,
downloadDocumentsWorker,
downloadEventsWorker,
downloadFieldReportsWorker,
downloadHistorySetWorker,
downloadIssueListsWorker,
downloadProjectDigestWorker,
downloadRfiWorker,
downloadSheetsWorker,
downloadSheetTextWorker,
downloadSheetVersionsWorker,
downloadSnapshotsWorker,
downloadStampMetaWorker,
downloadTasksWorker,
downloadUserEventsWorker,
downloadUserGroupsWorker,
downloadUsersWorker
)
)
return listOf(path1, path2, path3, path4, path5, allItems)
}
WorkContinuation
.combine(createWorkContinuations())
.then(OneTimeWorkRequestBuilder<FinalWorker>().build())
.enqueue()
Output
2018-12-12 13:40:32.838 6156-6224/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadHistorySetWorker@901a7a0::class.java - Started
2018-12-12 13:40:32.843 6156-6225/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadSheetVersionsWorker@f699dcc::class.java - Started
2018-12-12 13:40:32.846 6156-6226/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadCommentsWorker@92e891b::class.java - Started
2018-12-12 13:40:34.329 6156-6226/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadCommentsWorker@92e891b::class.java - Done
2018-12-12 13:40:34.330 6156-6226/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadTasksWorker@ffc4473::class.java - Started
2018-12-12 13:40:34.958 6156-6225/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadSheetVersionsWorker@f699dcc::class.java - Done
2018-12-12 13:40:34.958 6156-6225/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadProjectDigestWorker@2cc012e::class.java - Started
2018-12-12 13:40:35.820 6156-6225/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadProjectDigestWorker@2cc012e::class.java - Done
2018-12-12 13:40:35.822 6156-6225/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadAnnotationDigestWorker@594c565::class.java - Started
2018-12-12 13:40:35.929 6156-6224/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadHistorySetWorker@901a7a0::class.java - Done
2018-12-12 13:40:35.930 6156-6224/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadRfisWorker@c7ae448::class.java - Started
2018-12-12 13:40:38.734 6156-6224/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadRfisWorker@c7ae448::class.java - Done
2018-12-12 13:40:38.735 6156-6224/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadFieldReportsWorker@fff3063::class.java - Started
2018-12-12 13:40:38.860 6156-6226/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadTasksWorker@ffc4473::class.java - Done
2018-12-12 13:40:38.861 6156-6226/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadSnapshotsWorker@e5111de::class.java - Started
2018-12-12 13:40:39.397 6156-6225/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadAnnotationDigestWorker@594c565::class.java - Done
2018-12-12 13:40:39.398 6156-6225/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadDocumentsWorker@8dad1d5::class.java - Started
2018-12-12 13:40:39.899 6156-6224/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadFieldReportsWorker@fff3063::class.java - Done
2018-12-12 13:40:39.900 6156-6224/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadEventsWorker@d3ef78::class.java - Started
2018-12-12 13:40:40.682 6156-6226/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadSnapshotsWorker@e5111de::class.java - Done
2018-12-12 13:40:40.683 6156-6226/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadIssueListsWorker@e5097b7::class.java - Started
2018-12-12 13:40:44.137 6156-6225/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadDocumentsWorker@8dad1d5::class.java - Done
2018-12-12 13:40:44.138 6156-6225/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadSheetTextWorker@9c4d042::class.java - Started
2018-12-12 13:40:44.207 6156-6224/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadEventsWorker@d3ef78::class.java - Done
2018-12-12 13:40:44.207 6156-6224/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadStampMetaWorker@855de89::class.java - Started
2018-12-12 13:40:45.507 6156-6226/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadIssueListsWorker@e5097b7::class.java - Done
2018-12-12 13:40:45.508 6156-6226/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadUserGroupsWorker@40c1abc::class.java - Started
2018-12-12 13:40:46.180 6156-6224/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadStampMetaWorker@855de89::class.java - Done
2018-12-12 13:40:46.181 6156-6224/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadUsersWorker@5011ecb::class.java - Started
2018-12-12 13:40:46.615 6156-6226/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadUserGroupsWorker@40c1abc::class.java - Done
2018-12-12 13:40:46.616 6156-6226/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadSheetsWorker@c8b0166::class.java - Started
2018-12-12 13:40:48.392 6156-6224/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadUsersWorker@5011ecb::class.java - Done
2018-12-12 13:40:48.600 6156-6225/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadSheetTextWorker@9c4d042::class.java - Done
2018-12-12 13:40:50.577 6156-6226/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadSheetsWorker@c8b0166::class.java - Done
2018-12-12 13:40:50.600 6156-6224/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadUserEventsWorker@4fb50bb::class.java - Started
2018-12-12 13:40:52.083 6156-6224/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadUserEventsWorker@4fb50bb::class.java - Done
2018-12-12 13:41:08.753 6156-6225/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadRfisWorker@4a72ac6::class.java - Started
2018-12-12 13:41:13.529 6156-6225/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadRfisWorker@4a72ac6::class.java - Done
2018-12-12 13:41:13.758 6156-6226/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadFieldReportsWorker@5cd6ad9::class.java - Started
2018-12-12 13:41:18.384 6156-6226/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadFieldReportsWorker@5cd6ad9::class.java - Done
2018-12-12 13:41:18.411 6156-6224/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadAssetsWorker@2f5d176::class.java - Started
2018-12-12 13:41:18.718 6156-6224/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadAssetsWorker@2f5d176::class.java - Done
2018-12-12 13:41:18.757 6156-6226/com.plangrid.android.devgrid I/System.out: ALL WORK COMPLETE
su...@google.com <su...@google.com> #11
Can you print out the worker id's in your log statements (or share a sample project that reproduces this bug so we can do that)?
We'd also like to see more verbose WorkManager logs - right now, you're only showing your own app's logs, so I don't know what's happening inside WorkManager.
We'd also like to see more verbose WorkManager logs - right now, you're only showing your own app's logs, so I don't know what's happening inside WorkManager.
[Deleted User] <[Deleted User]> #12
Attached
ra...@google.com <ra...@google.com> #14
Thanks for your logs, and the sample.
What you are seeing is the same bug (https://issuetracker.google.com/issues/120811767 ).
When you have multiple subgraphs that define dependencies on the same `WorkRequest` we did not check if we already ran the Worker (i.e. if It was `BLOCKED`).
This should be fixed in beta01.
This should also fix the other problem where each subgraph defines conflicting dependencies. Something like:
A B
| |
B A
-------
|
Combined
In both the cases we will only run A, B exactly once.
What you are seeing is the same bug (
When you have multiple subgraphs that define dependencies on the same `WorkRequest` we did not check if we already ran the Worker (i.e. if It was `BLOCKED`).
This should be fixed in beta01.
This should also fix the other problem where each subgraph defines conflicting dependencies. Something like:
A B
| |
B A
-------
|
Combined
In both the cases we will only run A, B exactly once.
[Deleted User] <[Deleted User]> #15
Good to know
Thank you very much for your help and quick responses!
Thank you very much for your help and quick responses!
Description
Version used: 1.0.0-alpha12
Devices/Android versions reproduced on: Pixel 2 Emulator
I have multiple worker chains I run with WorkContinuation.combine(). I noticed that if a single instance of a worker is used in multiple chains, it sometimes runs fine all the way through while respecting dependancies, but sometimes it does not run at all or 'gets stuck' in the middle.
This example is contrived, but illustrates the point. We need each worker to be run once, but when some other worker (or workers) is complete, that does not follow a linear path (more similar to a tree).
Both Workers:
override fun doWork(): Result {
System.out.println("$this::class.java - Started")
Thread.sleep(Random.nextLong(5000))
System.out.println("$this::class.java - Done")
return Result.success()
}
val downloadUsersWorker = OneTimeWorkRequestBuilder<UsersWorker>().build()
val downloadSnapshotsWorker = OneTimeWorkRequestBuilder<SnapshotsWorker>().build()
val path1 = WorkManager.getInstance().beginUniqueWork("one", ExistingWorkPolicy.KEEP, downloadUsersWorker).then(downloadSnapshotsWorker)
val path2 = WorkManager.getInstance().beginUniqueWork("unique", ExistingWorkPolicy.KEEP, downloadSnapshotsWorker).then(downloadUsersWorker)
WorkContinuation.combine(path1, path2).enqueue()
Working Output:
2018-12-11 13:57:53.645 5750-5814/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadUsersWorker@c8d5bf4::class.java - Started
2018-12-11 13:57:56.796 5750-5814/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadUsersWorker@c8d5bf4::class.java - Done
2018-12-11 13:57:56.822 5750-5819/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadSnapshotsWorker@7eef1c0::class.java - Started
2018-12-11 13:58:00.561 5750-5819/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadSnapshotsWorker@7eef1c0::class.java - Done
Not working Output (Stuck):
2018-12-11 13:58:27.276 5876-5941/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadUsersWorker@a9b9c5::class.java - Started
2018-12-11 13:58:32.137 5876-5941/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadUsersWorker@a9b9c5::class.java - Done
Looks like without the unique chain, sometimes the task is created and run more than once. What is expected for these cases?
val path1 = WorkManager.getInstance().beginWith(downloadUsersWorker).then(downloadSnapshotsWorker)
val path2 = WorkManager.getInstance().beginWith(downloadSnapshotsWorker).then(downloadUsersWorker)
WorkContinuation.combine(path1, path2).enqueue()
Output:
2018-12-11 14:09:36.884 6778-6842/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadSnapshotsWorker@a9b9c5::class.java - Started
2018-12-11 14:09:37.003 6778-6845/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadUsersWorker@ef9e9c7::class.java - Started
2018-12-11 14:09:37.679 6778-6842/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadSnapshotsWorker@a9b9c5::class.java - Done
2018-12-11 14:09:40.296 6778-6845/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadUsersWorker@ef9e9c7::class.java - Done
2018-12-11 14:09:40.321 6778-6846/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadSnapshotsWorker@8e59ef9::class.java - Started
2018-12-11 14:09:40.563 6778-6846/com.plangrid.android.devgrid I/System.out: com.plangrid.android.workmanager.DownloadSnapshotsWorker@8e59ef9::class.java - Done