opensrp / fhircore

FHIR Core / OpenSRP 2 is a Kotlin application for delivering offline-capable, mobile-first healthcare project implementations from local community to national and international scale using FHIR and WHO Smart Guidelines on Android.
https://smartregister.org
Apache License 2.0
50 stars 39 forks source link

Sync up on of resources of the app not working when using REL #3209

Open SebaMutuku opened 2 months ago

SebaMutuku commented 2 months ago

To Reproduce Steps to reproduce the behavior:

Below is the error thrown Work [ id=c393e90f-e6b8-46dc-a6ab-d25bf9d9ce6f, tags={ org.smartregister.fhircore.engine.sync.AppSyncWorker } ] failed because it threw an exception/error java.util.concurrent.ExecutionException: java.lang.IllegalStateException: Detected a cycle. at androidx.work.impl.utils.futures.AbstractFuture.getDoneValue(AbstractFuture.java:515) at androidx.work.impl.utils.futures.AbstractFuture.get(AbstractFuture.java:474) at androidx.work.impl.WorkerWrapper$2.run(WorkerWrapper.java:316) at androidx.work.impl.utils.SerialExecutorImpl$Task.run(SerialExecutorImpl.java:96) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) at java.lang.Thread.run(Thread.java:1012) Caused by: java.lang.IllegalStateException: Detected a cycle. at com.google.android.fhir.sync.upload.patch.PatchOrdering.createTopologicalOrderedList$dfs(PatchOrdering.kt:131) at com.google.android.fhir.sync.upload.patch.PatchOrdering.createTopologicalOrderedList$dfs(PatchOrdering.kt:133) at com.google.android.fhir.sync.upload.patch.PatchOrdering.createTopologicalOrderedList$dfs(PatchOrdering.kt:133) at com.google.android.fhir.sync.upload.patch.PatchOrdering.createTopologicalOrderedList(PatchOrdering.kt:139) at com.google.android.fhir.sync.upload.patch.PatchOrdering.orderByReferences(PatchOrdering.kt:74) at com.google.android.fhir.sync.upload.patch.PatchOrdering$orderByReferences$1.invokeSuspend(Unknown Source:15) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:108) at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:584) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:793) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:697) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:684)

Expected behavior All created resources should sync to server

Screenshots Screenshot_20240419_160445_BidanKu

Additional context Sample Task resource that hasn't synced

{
  "resourceType": "Task",
  "id": "81d7aa12-947f-4f7f-8335-84584ea71e9f",
  "meta": {
    "lastUpdated": "2024-04-19T16:04:23.869+03:00",
    "tag": [
      {
        "system": "https://smartregister.org/related-entity-location-tag-id",
        "code": "30f3bcd9-4f44-42f2-b81c-d7d0588b3d6a",
        "display": "Related Entity Location"
      },
      {
        "system": "https://smartregister.org/care-team-tag-id",
        "code": "ff483a20-391a-4928-8892-461b48353123",
        "display": "Practitioner CareTeam"
      },
      {
        "system": "https://smartregister.org/location-tag-id",
        "code": "30f3bcd9-4f44-42f2-b81c-d7d0588b3d6a",
        "display": "Practitioner Location"
      },
      {
        "system": "https://smartregister.org/organisation-tag-id",
        "code": "0ccdf2b1-96f8-4aa1-981e-783fdfb5f536",
        "display": "Practitioner Organization"
      },
      {
        "system": "https://smartregister.org/practitioner-tag-id",
        "code": "685f285a-4a89-4cae-889e-f41c6e249d9b",
        "display": "Practitioner"
      },
      {
        "system": "https://smartregister.org/app-version",
        "code": "1.1.0-sidBunda",
        "display": "Application Version"
      }
    ]
  },
  "identifier": [
    {
      "use": "official",
      "value": "5521b9da-be60-4c25-af8f-f8e7214ae594"
    }
  ],
  "basedOn": [
    {
      "reference": "CarePlan/80e5bba4-a9e3-4572-8597-248f7ad6a220"
    }
  ],
  "groupIdentifier": {
    "use": "secondary",
    "value": "anc_contact_6"
  },
  "status": "ready",
  "intent": "plan",
  "priority": "routine",
  "code": {
    "coding": [
      {
        "system": "https://www.smartregister.org/",
        "code": "006",
        "display": "Counselling And Treatment"
      }
    ]
  },
  "description": "Counselling And Treatment",
  "for": {
    "reference": "Patient/9423678e-c661-4302-9343-097f9a31b5ed"
  },
  "executionPeriod": {
    "start": "2024-04-19T00:00:00.00Z",
    "end": "2024-10-19T00:00:00.00Z"
  },
  "authoredOn": "2024-04-19T16:04:20+03:00",
  "requester": {
    "reference": "Practitioner/685f285a-4a89-4cae-889e-f41c6e249d9b"
  },
  "owner": {
    "reference": "Practitioner/685f285a-4a89-4cae-889e-f41c6e249d9b"
  },
  "reasonCode": {
    "coding": [
      {
        "system": "https://www.smartregister.org/",
        "code": "006",
        "display": "Counselling And Treatment"
      }
    ],
    "text": "Counselling And Treatment"
  },
  "reasonReference": {
    "reference": "Questionnaire/cec22b4e-8872-11ee-b9d1-0242ac120002"
  },
  "restriction": {
    "period": {
      "start": "2024-03-30T00:00:00.00Z",
      "end": "2024-09-30T00:00:00.00Z"
    }
  },
  "input": [
    {
      "type": {
        "coding": [
          {
            "system": "http://snomed.info/sct",
            "code": "371154000",
            "display": "Dependent (qualifier value)"
          }
        ]
      },
      "valueInteger": 28
    }
  ]
}

A sample Careplan resource that hasn't synced

{
  "resourceType": "CarePlan",
  "id": "80e5bba4-a9e3-4572-8597-248f7ad6a220",
  "meta": {
    "lastUpdated": "2024-04-19T16:04:20.571+03:00",
    "tag": [
      {
        "system": "https://smartregister.org/related-entity-location-tag-id",
        "code": "30f3bcd9-4f44-42f2-b81c-d7d0588b3d6a",
        "display": "Related Entity Location"
      },
      {
        "system": "https://smartregister.org/care-team-tag-id",
        "code": "ff483a20-391a-4928-8892-461b48353123",
        "display": "Practitioner CareTeam"
      },
      {
        "system": "https://smartregister.org/location-tag-id",
        "code": "30f3bcd9-4f44-42f2-b81c-d7d0588b3d6a",
        "display": "Practitioner Location"
      },
      {
        "system": "https://smartregister.org/organisation-tag-id",
        "code": "0ccdf2b1-96f8-4aa1-981e-783fdfb5f536",
        "display": "Practitioner Organization"
      },
      {
        "system": "https://smartregister.org/practitioner-tag-id",
        "code": "685f285a-4a89-4cae-889e-f41c6e249d9b",
        "display": "Practitioner"
      },
      {
        "system": "https://smartregister.org/app-version",
        "code": "1.1.0-sidBunda",
        "display": "Application Version"
      }
    ]
  },
  "instantiatesCanonical": [
    "PlanDefinition/ced7e596-c3ba-47da-9d7c-2993c5d18ad4"
  ],
  "title": "ANC Contacts",
  "description": "This scheduled will be used to track the Contacts of ANC patient",
  "subject": {
    "reference": "Patient/9423678e-c661-4302-9343-097f9a31b5ed"
  },
  "created": "2024-04-19T16:04:20+03:00",
  "author": {
    "reference": "Practitioner/685f285a-4a89-4cae-889e-f41c6e249d9b"
  },
  "activity": [
    {
      "outcomeReference": [
        {
          "reference": "Task/20737f1f-abb7-4f09-9eef-3fddb038b9f7"
        },
        {
          "reference": "Task/7482ff00-a326-433f-a100-27090cd4296e"
        },
        {
          "reference": "Task/4134bdf4-1f74-4c1d-a8f5-6628155479ff"
        },
        {
          "reference": "Task/1b5889bc-c003-4559-967e-0865f36ea4d0"
        },
        {
          "reference": "Task/b90246d4-04a6-4913-bad4-bb0b8e1865cd"
        },
        {
          "reference": "Task/ab695735-a316-4055-9caa-1c8cfe346964"
        },
        {
          "reference": "Task/0da7c2f8-69ad-4fc0-9d3c-1f04b735e87a"
        },
        {
          "reference": "Task/d7064134-38a4-4777-84da-1cacd4d9d17e"
        },
        {
          "reference": "Task/16038fc7-b1cb-4e7a-b1e2-9c4e0b302f75"
        },
        {
          "reference": "Task/a9928a62-fa8d-4062-b343-63451b7aa3b5"
        },
        {
          "reference": "Task/78cc5c7d-b48f-41b0-8d83-9b0caf2d1d03"
        },
        {
          "reference": "Task/e3d7bc4d-b44f-41d2-82ee-0192e581d3e4"
        },
        {
          "reference": "Task/fc8374f0-4821-463c-a920-1c965afb33b6"
        },
        {
          "reference": "Task/a6eedf35-92ba-41ee-b845-c9581ea73f98"
        },
        {
          "reference": "Task/d531404b-142f-4cc8-8dd4-42d1d6fb3ce2"
        },
        {
          "reference": "Task/0df10a7f-1dc5-4a75-bf96-8478a1a4912b"
        },
        {
          "reference": "Task/9d71f99b-2709-4ecb-8f8e-7db447b83d6d"
        },
        {
          "reference": "Task/344201cb-d939-4d4d-bd0d-3f19ebd7982d"
        },
        {
          "reference": "Task/e3e1a152-7070-47bc-92db-1723698ae37e"
        },
        {
          "reference": "Task/59da7a7b-6c12-4706-83f9-06bf250682f6"
        },
        {
          "reference": "Task/ed463da8-7b95-495b-9bf4-99854c4e11e8"
        },
        {
          "reference": "Task/17ad8e60-af83-4376-9e82-71258199ca3c"
        },
        {
          "reference": "Task/af832b3f-32bf-4071-85cf-a8e21c57b067"
        },
        {
          "reference": "Task/1e1b8bb0-6948-435e-b6ed-29ee4766ccdc"
        },
        {
          "reference": "Task/4b5ed290-89d3-423f-98e1-50198e626674"
        },
        {
          "reference": "Task/8cff1426-6e45-4d3b-b2d9-444c6f5d86b6"
        },
        {
          "reference": "Task/5fca627c-58cb-4740-9f18-d4683bd8c489"
        },
        {
          "reference": "Task/af9f2519-f77b-4abf-9d43-64ed70094a33"
        },
        {
          "reference": "Task/19b83a91-168e-4f99-a347-4cd4408a0495"
        },
        {
          "reference": "Task/5bda52f7-f451-4dc2-bab7-768491739a8c"
        },
        {
          "reference": "Task/1f59fafa-8df6-47f2-85d0-7c4c40627bdd"
        },
        {
          "reference": "Task/018eba7e-22fd-4e12-9447-77dfd4ed60eb"
        },
        {
          "reference": "Task/a28f6203-ef98-4520-8d4a-04bc5f8dfb42"
        },
        {
          "reference": "Task/0dd245b8-077d-408b-ad0e-080db8173b33"
        },
        {
          "reference": "Task/38013e69-1986-4779-a1a2-14154e62cf04"
        },
        {
          "reference": "Task/81d7aa12-947f-4f7f-8335-84584ea71e9f"
        }
      ],
      "detail": {
        "kind": "Task"
      }
    }
  ]
}
pld commented 2 months ago

@ndegwamartin can you take a look at this?