Search in sources :

Example 1 with ResourceObjectLiveSyncChangeListener

use of com.evolveum.midpoint.provisioning.impl.resourceobjects.ResourceObjectLiveSyncChangeListener in project midpoint by Evolveum.

the class LiveSynchronizer method synchronize.

@NotNull
public SynchronizationOperationResult synchronize(ResourceShadowDiscriminator shadowCoordinates, LiveSyncOptions options, LiveSyncTokenStorage tokenStorage, LiveSyncEventHandler handler, Task task, OperationResult gResult) throws ObjectNotFoundException, CommunicationException, GenericFrameworkException, SchemaException, ConfigurationException, SecurityViolationException, ObjectAlreadyExistsException, ExpressionEvaluationException {
    LiveSyncCtx ctx = new LiveSyncCtx(shadowCoordinates, task, options, tokenStorage, gResult);
    InternalMonitor.recordCount(InternalCounters.PROVISIONING_ALL_EXT_OPERATION_COUNT);
    setupInitialToken(ctx);
    if (!ctx.hasInitialToken()) {
        // see comment in the called method
        fetchAndRememberCurrentToken(ctx, gResult);
        return ctx.syncResult;
    }
    IndividualEventsAcknowledgeGate<LiveSyncEvent> acknowledgeGate = new IndividualEventsAcknowledgeGate<>();
    ResourceObjectLiveSyncChangeListener listener = (resourceObjectChange, lResult) -> {
        int sequentialNumber = ctx.oldestTokenWatcher.changeArrived(resourceObjectChange.getToken());
        ShadowedLiveSyncChange change = new ShadowedLiveSyncChange(resourceObjectChange, beans);
        change.initialize(task, lResult);
        LiveSyncEvent event = new LiveSyncEventImpl(change) {

            @Override
            public void acknowledge(boolean release, OperationResult aResult) {
                LOGGER.trace("Acknowledgement (release={}) sent for {}", release, this);
                if (release) {
                    ctx.oldestTokenWatcher.changeProcessed(sequentialNumber);
                }
                acknowledgeGate.acknowledgeIssuedEvent(this);
            }
        };
        acknowledgeGate.registerIssuedEvent(event);
        try {
            return handler.handle(event, lResult);
        } catch (Throwable t) {
            // We assume the event was not acknowledged yet. Note that serious handler should never throw an exception!
            LoggingUtils.logUnexpectedException(LOGGER, "Got unexpected exception while handling a live sync event", t);
            acknowledgeGate.acknowledgeIssuedEvent(event);
            return false;
        }
    };
    UcfFetchChangesResult fetchChangesResult;
    try {
        fetchChangesResult = resourceObjectConverter.fetchChanges(ctx.context, ctx.getInitialToken(), ctx.getBatchSize(), listener, gResult);
    } finally {
        handler.allEventsSubmitted(gResult);
    }
    if (fetchChangesResult.isAllChangesFetched()) {
        ctx.syncResult.setAllChangesFetched();
        ctx.finalToken = TokenUtil.fromUcf(fetchChangesResult.getFinalToken());
    }
    acknowledgeGate.waitForIssuedEventsAcknowledge(gResult);
    if (ctx.oldestTokenWatcher.isEverythingProcessed()) {
        ctx.syncResult.setAllFetchedChangesProcessed();
    }
    updateTokenValue(ctx, gResult);
    return ctx.syncResult;
}
Also used : ProvisioningContextFactory(com.evolveum.midpoint.provisioning.impl.ProvisioningContextFactory) UcfFetchChangesResult(com.evolveum.midpoint.provisioning.ucf.api.UcfFetchChangesResult) OperationResult(com.evolveum.midpoint.schema.result.OperationResult) Autowired(org.springframework.beans.factory.annotation.Autowired) LiveSyncEventHandler(com.evolveum.midpoint.provisioning.api.LiveSyncEventHandler) Trace(com.evolveum.midpoint.util.logging.Trace) ShadowedLiveSyncChange(com.evolveum.midpoint.provisioning.impl.shadows.ShadowedLiveSyncChange) com.evolveum.midpoint.util.exception(com.evolveum.midpoint.util.exception) ResourceObjectLiveSyncChangeListener(com.evolveum.midpoint.provisioning.impl.resourceobjects.ResourceObjectLiveSyncChangeListener) ProvisioningContext(com.evolveum.midpoint.provisioning.impl.ProvisioningContext) SchemaDebugUtil(com.evolveum.midpoint.schema.util.SchemaDebugUtil) LiveSyncEvent(com.evolveum.midpoint.provisioning.api.LiveSyncEvent) InternalCounters(com.evolveum.midpoint.schema.internals.InternalCounters) LiveSyncToken(com.evolveum.midpoint.provisioning.api.LiveSyncToken) TokenUtil(com.evolveum.midpoint.provisioning.impl.TokenUtil) InternalMonitor(com.evolveum.midpoint.schema.internals.InternalMonitor) LiveSyncCapabilityType(com.evolveum.midpoint.xml.ns._public.resource.capabilities_3.LiveSyncCapabilityType) Task(com.evolveum.midpoint.task.api.Task) LoggingUtils(com.evolveum.midpoint.util.logging.LoggingUtils) GenericFrameworkException(com.evolveum.midpoint.provisioning.ucf.api.GenericFrameworkException) ExecutionModeType(com.evolveum.midpoint.xml.ns._public.common.common_3.ExecutionModeType) ResourceShadowDiscriminator(com.evolveum.midpoint.schema.ResourceShadowDiscriminator) Component(org.springframework.stereotype.Component) LiveSyncTokenStorage(com.evolveum.midpoint.provisioning.api.LiveSyncTokenStorage) ResourceObjectConverter(com.evolveum.midpoint.provisioning.impl.resourceobjects.ResourceObjectConverter) ShadowsFacade(com.evolveum.midpoint.provisioning.impl.shadows.ShadowsFacade) BooleanUtils.isTrue(org.apache.commons.lang3.BooleanUtils.isTrue) LiveSyncOptions(com.evolveum.midpoint.provisioning.api.LiveSyncOptions) NotNull(org.jetbrains.annotations.NotNull) TraceManager(com.evolveum.midpoint.util.logging.TraceManager) ResourceObjectLiveSyncChangeListener(com.evolveum.midpoint.provisioning.impl.resourceobjects.ResourceObjectLiveSyncChangeListener) OperationResult(com.evolveum.midpoint.schema.result.OperationResult) ShadowedLiveSyncChange(com.evolveum.midpoint.provisioning.impl.shadows.ShadowedLiveSyncChange) LiveSyncEvent(com.evolveum.midpoint.provisioning.api.LiveSyncEvent) UcfFetchChangesResult(com.evolveum.midpoint.provisioning.ucf.api.UcfFetchChangesResult) NotNull(org.jetbrains.annotations.NotNull)

Aggregations

LiveSyncEvent (com.evolveum.midpoint.provisioning.api.LiveSyncEvent)1 LiveSyncEventHandler (com.evolveum.midpoint.provisioning.api.LiveSyncEventHandler)1 LiveSyncOptions (com.evolveum.midpoint.provisioning.api.LiveSyncOptions)1 LiveSyncToken (com.evolveum.midpoint.provisioning.api.LiveSyncToken)1 LiveSyncTokenStorage (com.evolveum.midpoint.provisioning.api.LiveSyncTokenStorage)1 ProvisioningContext (com.evolveum.midpoint.provisioning.impl.ProvisioningContext)1 ProvisioningContextFactory (com.evolveum.midpoint.provisioning.impl.ProvisioningContextFactory)1 TokenUtil (com.evolveum.midpoint.provisioning.impl.TokenUtil)1 ResourceObjectConverter (com.evolveum.midpoint.provisioning.impl.resourceobjects.ResourceObjectConverter)1 ResourceObjectLiveSyncChangeListener (com.evolveum.midpoint.provisioning.impl.resourceobjects.ResourceObjectLiveSyncChangeListener)1 ShadowedLiveSyncChange (com.evolveum.midpoint.provisioning.impl.shadows.ShadowedLiveSyncChange)1 ShadowsFacade (com.evolveum.midpoint.provisioning.impl.shadows.ShadowsFacade)1 GenericFrameworkException (com.evolveum.midpoint.provisioning.ucf.api.GenericFrameworkException)1 UcfFetchChangesResult (com.evolveum.midpoint.provisioning.ucf.api.UcfFetchChangesResult)1 ResourceShadowDiscriminator (com.evolveum.midpoint.schema.ResourceShadowDiscriminator)1 InternalCounters (com.evolveum.midpoint.schema.internals.InternalCounters)1 InternalMonitor (com.evolveum.midpoint.schema.internals.InternalMonitor)1 OperationResult (com.evolveum.midpoint.schema.result.OperationResult)1 SchemaDebugUtil (com.evolveum.midpoint.schema.util.SchemaDebugUtil)1 Task (com.evolveum.midpoint.task.api.Task)1