Uploaded image for project: 'Service Packs and Hot Fixes'
  1. Service Packs and Hot Fixes
  2. MNT-11294

Possible http status ignored in “RemoteConnectorService.executeRequest()” leading to SSD definitions de synchronizations leading to Errors in cloud sync

    Details

    • Bug Priority:
      Category 2
    • ACT Numbers:

      00149131 00153067 00153695 00146153

      Description

      The following error message was observed:
      2014-04-07 00:00:06,664 INFO [repo.sync.SyncTrackerComponent] [DefaultScheduler_Worker-6] SyncTrackerPull: Commencing batch of 11 entries
      2014-04-07 00:00:06,695 WARN [repo.sync.SyncTrackerComponent] [SyncTrackerPull1] PULL: Cannot pull sync set changes (94ef3869-9ea2-4878-be91-dee999819483) - sdd not found: null
      2014-04-07 00:00:07,163 ERROR [repo.sync.SyncTrackerComponent] [SyncTrackerPull3] PULL: Unable to authenticate to pull sync set
      org.alfresco.repo.security.authentication.AuthenticationException: 030735016 Forbidden
      at org.alfresco.repo.remoteconnector.RemoteConnectorServiceImpl.executeRequest(RemoteConnectorServiceImpl.java:193)
      at org.alfresco.repo.remoteconnector.RemoteConnectorServiceImpl.doExecuteJSONRequest(RemoteConnectorServiceImpl.java:247)
      at org.alfresco.repo.remoteconnector.RemoteConnectorServiceImpl.executeJSONRequest(RemoteConnectorServiceImpl.java:238)

      This error can be created by deleting the SSD locally and resynchronizing afterwards with the cloud but this error was observed without having been “artificially” provoked. The examples under are showing such eventuality:

      Example based on 4.2.1 code line:

      1)Calling SyncAdminServiceImpl.deleteSourceSyncSet(String ssdId), I am assuming here that we are in a valid transaction and ssdId exist locally.
      2)Therefore deleteLocalSyncSet(ssdId); is called to delete the local ssd.
      3)Line after we try to delete the ssd remotely on the target in the cloud meaning we start executing CloudSyncSetDefinitionTransportImpl.deleteSSD()
      4) In CloudSyncSetDefinitionTransportImpl.deleteSSD(), CloudConnectorServiceImpl.executeCloudRequest() is called calling remoteConnectorService.executeRequest(request);
      5)In RemoteConnectorServiceImpl.executeRequest() let suppose the returned “status” code is less than 300, lets assume a 202, meaning accepted.
      6)No exception is thrown and status is not tested while coming back from the calls made from SyncAdminServiceImpl.deleteSourceSyncSet(String ssdId).

      Observed result in such case:
      The transaction commits without guarantee that the remote operation succeeded on the cloud.

      NOTES:
      -The same type of scenario and risk of de synchronisation applies also to all other methods in CloudSyncSetDefinitionTransportImpl
      -The most probable untested/ignored status code might be 202.

        Attachments

          Issue Links

            Structure

              Activity

                People

                • Assignee:
                  closedissues Closed Issues
                  Reporter:
                  pdubois Philippe Dubois [X] (Inactive)
                • Votes:
                  0 Vote for this issue
                  Watchers:
                  7 Start watching this issue

                  Dates

                  • Created:
                    Updated:
                    Resolved:

                    Time Tracking

                    Estimated:
                    Original Estimate - Not Specified
                    Not Specified
                    Remaining:
                    Remaining Estimate - 0 minutes
                    0m
                    Logged:
                    Time Spent - 1 day, 6 hours
                    1d 6h

                      Structure Helper Panel