addons/promote/common/src/main/java/org/commonjava/indy/promote/data/PromotionManager.java
public PathsPromoteResult rollbackPathsPromote( final PathsPromoteResult result )
            throws PromotionException, IndyWorkflowException
    {
        final PathsPromoteRequest request = result.getRequest();

        Future<PathsPromoteResult> future = submitRollbackPathsPromote( result );
        if ( request.isAsync() )
        {
            return new PathsPromoteResult( request ).accepted();
        }
        else
        {
            try
            {
                return future.get();
            }
            catch ( InterruptedException | ExecutionException e )
            {
                logger.error( "Path promotion rollback failed: " + request.getSource() + " -> " + request.getTargetKey(), e );
                throw new PromotionException( "Execution of path promotion rollback failed.", e );
            }
        }
    }
public PathsPromoteResult rollbackPathsPromote( final PathsPromoteResult result )
            throws PromotionException, IndyWorkflowException
    {
        final PathsPromoteRequest request = result.getRequest();

        Future<PathsPromoteResult> future = submitRollbackPathsPromote( result );
        if ( request.isAsync() )
        {
            return new PathsPromoteResult( request ).accepted();
        }
        else
        {
            try
            {
                return future.get();
            }
            catch ( InterruptedException | ExecutionException e )
            {
                logger.error( "Path promotion rollback failed: " + request.getSource() + " -> " + request.getTargetKey(), e );
                throw new PromotionException( "Execution of path promotion rollback failed.", e );
            }
        }
    }
Attempt to rollbackPathsPromote a previously failing {@link PathsPromoteResult}. This is meant to handle cases where an unrecoverable error
occurs on the server side, and promotion can NOT proceed afterward. All paths in the completed paths set are deleted from the target, if
possible. The output {@link PathsPromoteResult} contains the previous content, with any successfully removed target paths moved back from the
completed-paths list to the pending-paths list. If an error occurs during rollbackPathsPromote, the error field will be set...otherwise, it will be null.

@param result The result to rollbackPathsPromote

@return The same result, with any successful deletions moved from the completed to pending paths list, and the error cleared (or set to a
new error)

@throws PromotionException
@throws IndyWorkflowException