Search in sources :

Example 21 with Holder

use of com.evolveum.midpoint.util.Holder in project midpoint by Evolveum.

the class SqlAuditServiceImpl method cleanupAuditMaxAge.

private void cleanupAuditMaxAge(CleanupPolicyType policy, OperationResult parentResult) {
    if (policy.getMaxAge() == null) {
        return;
    }
    final String operation = "deletingMaxAge";
    SqlPerformanceMonitorImpl pm = getPerformanceMonitor();
    long opHandle = pm.registerOperationStart(OP_CLEANUP_AUDIT_MAX_AGE, AuditEventRecord.class);
    int attempt = 1;
    Duration duration = policy.getMaxAge();
    if (duration.getSign() > 0) {
        duration = duration.negate();
    }
    Date minValue = new Date();
    duration.addTo(minValue);
    checkTemporaryTablesSupport();
    long start = System.currentTimeMillis();
    boolean first = true;
    Holder<Integer> totalCountHolder = new Holder<>(0);
    try {
        while (true) {
            try {
                LOGGER.info("{} audit cleanup, deleting up to {} (duration '{}'), batch size {}{}.", first ? "Starting" : "Continuing with ", minValue, duration, CLEANUP_AUDIT_BATCH_SIZE, first ? "" : ", up to now deleted " + totalCountHolder.getValue() + " entries");
                first = false;
                int count;
                do {
                    // the following method may restart due to concurrency
                    // (or any other) problem - in any iteration
                    long batchStart = System.currentTimeMillis();
                    LOGGER.debug("Starting audit cleanup batch, deleting up to {} (duration '{}')," + " batch size {}, up to now deleted {} entries.", minValue, duration, CLEANUP_AUDIT_BATCH_SIZE, totalCountHolder.getValue());
                    count = batchDeletionAttempt((session, tempTable) -> selectRecordsByMaxAge(session, tempTable, minValue), totalCountHolder, batchStart, parentResult);
                } while (count > 0);
                return;
            } catch (RuntimeException ex) {
                attempt = baseHelper.logOperationAttempt(null, operation, attempt, ex, parentResult);
                pm.registerOperationNewAttempt(opHandle, attempt);
            }
        }
    } finally {
        pm.registerOperationFinish(opHandle, attempt);
        LOGGER.info("Audit cleanup based on age finished; deleted {} entries in {} seconds.", totalCountHolder.getValue(), (System.currentTimeMillis() - start) / 1000L);
    }
}
Also used : ObjectDeltaType(com.evolveum.prism.xml.ns._public.types_3.ObjectDeltaType) AuditReferenceValue(com.evolveum.midpoint.audit.api.AuditReferenceValue) com.evolveum.midpoint.prism.query(com.evolveum.midpoint.prism.query) com.evolveum.midpoint.repo.sqlbase(com.evolveum.midpoint.repo.sqlbase) BiFunction(java.util.function.BiFunction) ChangeType(com.evolveum.midpoint.prism.delta.ChangeType) SchemaException(com.evolveum.midpoint.util.exception.SchemaException) com.evolveum.midpoint.repo.sql.audit.querymodel(com.evolveum.midpoint.repo.sql.audit.querymodel) ColumnMetadata(com.querydsl.sql.ColumnMetadata) InternalsConfig(com.evolveum.midpoint.schema.internals.InternalsConfig) ObjectType(com.evolveum.prism.xml.ns._public.types_3.ObjectType) OperationResultType(com.evolveum.midpoint.xml.ns._public.common.common_3.OperationResultType) Duration(javax.xml.datatype.Duration) SystemConfigurationAuditType(com.evolveum.midpoint.xml.ns._public.common.common_3.SystemConfigurationAuditType) S_MatchingRuleEntry(com.evolveum.midpoint.prism.query.builder.S_MatchingRuleEntry) AuditEventRecord(com.evolveum.midpoint.audit.api.AuditEventRecord) com.evolveum.midpoint.prism(com.evolveum.midpoint.prism) ObjectQueryUtil(com.evolveum.midpoint.schema.util.ObjectQueryUtil) S_ConditionEntry(com.evolveum.midpoint.prism.query.builder.S_ConditionEntry) Holder(com.evolveum.midpoint.util.Holder) ObjectDelta(com.evolveum.midpoint.prism.delta.ObjectDelta) RChangeType(com.evolveum.midpoint.repo.sql.data.common.enums.RChangeType) SystemConfigurationAuditUtil.isEscapingInvalidCharacters(com.evolveum.midpoint.schema.util.SystemConfigurationAuditUtil.isEscapingInvalidCharacters) MiscUtil(com.evolveum.midpoint.util.MiscUtil) Instant(java.time.Instant) Task(com.evolveum.midpoint.task.api.Task) com.evolveum.midpoint.repo.sql.audit.mapping(com.evolveum.midpoint.repo.sql.audit.mapping) BaseHelper(com.evolveum.midpoint.repo.sql.helpers.BaseHelper) CleanupPolicyType(com.evolveum.midpoint.xml.ns._public.common.common_3.CleanupPolicyType) Nullable(org.jetbrains.annotations.Nullable) SystemException(com.evolveum.midpoint.util.exception.SystemException) PolyStringType(com.evolveum.prism.xml.ns._public.types_3.PolyStringType) Entry(java.util.Map.Entry) RUtil(com.evolveum.midpoint.repo.sql.util.RUtil) NotNull(org.jetbrains.annotations.NotNull) MAuditDelta(com.evolveum.midpoint.repo.sql.audit.beans.MAuditDelta) Types(java.sql.Types) com.evolveum.midpoint.schema(com.evolveum.midpoint.schema) java.util(java.util) OperationResult(com.evolveum.midpoint.schema.result.OperationResult) Trace(com.evolveum.midpoint.util.logging.Trace) ObjectUtils.defaultIfNull(org.apache.commons.lang3.ObjectUtils.defaultIfNull) ObjectDeltaOperationType(com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectDeltaOperationType) ROperationResultStatus(com.evolveum.midpoint.repo.sql.data.common.enums.ROperationResultStatus) AuditSqlQueryContext(com.evolveum.midpoint.repo.sql.audit.AuditSqlQueryContext) ItemDeltaType(com.evolveum.prism.xml.ns._public.types_3.ItemDeltaType) SQLQuery(com.querydsl.sql.SQLQuery) CloneUtil(com.evolveum.midpoint.prism.util.CloneUtil) PolyString(com.evolveum.midpoint.prism.polystring.PolyString) com.evolveum.midpoint.xml.ns._public.common.audit_3(com.evolveum.midpoint.xml.ns._public.common.audit_3) SQLInsertClause(com.querydsl.sql.dml.SQLInsertClause) AuditService(com.evolveum.midpoint.audit.api.AuditService) TemporaryTableDialect(com.evolveum.midpoint.repo.sql.util.TemporaryTableDialect) CanonicalItemPath(com.evolveum.midpoint.prism.path.CanonicalItemPath) XMLGregorianCalendar(javax.xml.datatype.XMLGregorianCalendar) SqlPerformanceMonitorImpl(com.evolveum.midpoint.repo.sqlbase.perfmon.SqlPerformanceMonitorImpl) ItemPath(com.evolveum.midpoint.prism.path.ItemPath) AuditResultHandler(com.evolveum.midpoint.audit.api.AuditResultHandler) Validate(org.apache.commons.lang3.Validate) DefaultMapper(com.querydsl.sql.dml.DefaultMapper) MAuditEventRecord(com.evolveum.midpoint.repo.sql.audit.beans.MAuditEventRecord) TraceManager(com.evolveum.midpoint.util.logging.TraceManager) SqlPerformanceMonitorImpl(com.evolveum.midpoint.repo.sqlbase.perfmon.SqlPerformanceMonitorImpl) Holder(com.evolveum.midpoint.util.Holder) Duration(javax.xml.datatype.Duration) PolyString(com.evolveum.midpoint.prism.polystring.PolyString)

Example 22 with Holder

use of com.evolveum.midpoint.util.Holder in project midpoint by Evolveum.

the class SqlAuditServiceImpl method cleanupAuditMaxRecords.

private void cleanupAuditMaxRecords(CleanupPolicyType policy, OperationResult parentResult) {
    if (policy.getMaxRecords() == null) {
        return;
    }
    final String operation = "deletingMaxRecords";
    SqlPerformanceMonitorImpl pm = getPerformanceMonitor();
    long opHandle = pm.registerOperationStart(OP_CLEANUP_AUDIT_MAX_RECORDS, AuditEventRecord.class);
    int attempt = 1;
    int recordsToKeep = policy.getMaxRecords();
    checkTemporaryTablesSupport();
    long start = System.currentTimeMillis();
    boolean first = true;
    Holder<Integer> totalCountHolder = new Holder<>(0);
    try {
        while (true) {
            try {
                LOGGER.info("{} audit cleanup, keeping at most {} records, batch size {}{}.", first ? "Starting" : "Continuing with ", recordsToKeep, CLEANUP_AUDIT_BATCH_SIZE, first ? "" : ", up to now deleted " + totalCountHolder.getValue() + " entries");
                first = false;
                int count;
                do {
                    // the following method may restart due to concurrency
                    // (or any other) problem - in any iteration
                    long batchStart = System.currentTimeMillis();
                    LOGGER.debug("Starting audit cleanup batch, keeping at most {} records," + " batch size {}, up to now deleted {} entries.", recordsToKeep, CLEANUP_AUDIT_BATCH_SIZE, totalCountHolder.getValue());
                    count = batchDeletionAttempt((session, tempTable) -> selectRecordsByNumberToKeep(session, tempTable, recordsToKeep), totalCountHolder, batchStart, parentResult);
                } while (count > 0);
                return;
            } catch (RuntimeException ex) {
                attempt = baseHelper.logOperationAttempt(null, operation, attempt, ex, parentResult);
                pm.registerOperationNewAttempt(opHandle, attempt);
            }
        }
    } finally {
        pm.registerOperationFinish(opHandle, attempt);
        LOGGER.info("Audit cleanup based on record count finished; deleted {} entries in {} seconds.", totalCountHolder.getValue(), (System.currentTimeMillis() - start) / 1000L);
    }
}
Also used : ObjectDeltaType(com.evolveum.prism.xml.ns._public.types_3.ObjectDeltaType) AuditReferenceValue(com.evolveum.midpoint.audit.api.AuditReferenceValue) com.evolveum.midpoint.prism.query(com.evolveum.midpoint.prism.query) com.evolveum.midpoint.repo.sqlbase(com.evolveum.midpoint.repo.sqlbase) BiFunction(java.util.function.BiFunction) ChangeType(com.evolveum.midpoint.prism.delta.ChangeType) SchemaException(com.evolveum.midpoint.util.exception.SchemaException) com.evolveum.midpoint.repo.sql.audit.querymodel(com.evolveum.midpoint.repo.sql.audit.querymodel) ColumnMetadata(com.querydsl.sql.ColumnMetadata) InternalsConfig(com.evolveum.midpoint.schema.internals.InternalsConfig) ObjectType(com.evolveum.prism.xml.ns._public.types_3.ObjectType) OperationResultType(com.evolveum.midpoint.xml.ns._public.common.common_3.OperationResultType) Duration(javax.xml.datatype.Duration) SystemConfigurationAuditType(com.evolveum.midpoint.xml.ns._public.common.common_3.SystemConfigurationAuditType) S_MatchingRuleEntry(com.evolveum.midpoint.prism.query.builder.S_MatchingRuleEntry) AuditEventRecord(com.evolveum.midpoint.audit.api.AuditEventRecord) com.evolveum.midpoint.prism(com.evolveum.midpoint.prism) ObjectQueryUtil(com.evolveum.midpoint.schema.util.ObjectQueryUtil) S_ConditionEntry(com.evolveum.midpoint.prism.query.builder.S_ConditionEntry) Holder(com.evolveum.midpoint.util.Holder) ObjectDelta(com.evolveum.midpoint.prism.delta.ObjectDelta) RChangeType(com.evolveum.midpoint.repo.sql.data.common.enums.RChangeType) SystemConfigurationAuditUtil.isEscapingInvalidCharacters(com.evolveum.midpoint.schema.util.SystemConfigurationAuditUtil.isEscapingInvalidCharacters) MiscUtil(com.evolveum.midpoint.util.MiscUtil) Instant(java.time.Instant) Task(com.evolveum.midpoint.task.api.Task) com.evolveum.midpoint.repo.sql.audit.mapping(com.evolveum.midpoint.repo.sql.audit.mapping) BaseHelper(com.evolveum.midpoint.repo.sql.helpers.BaseHelper) CleanupPolicyType(com.evolveum.midpoint.xml.ns._public.common.common_3.CleanupPolicyType) Nullable(org.jetbrains.annotations.Nullable) SystemException(com.evolveum.midpoint.util.exception.SystemException) PolyStringType(com.evolveum.prism.xml.ns._public.types_3.PolyStringType) Entry(java.util.Map.Entry) RUtil(com.evolveum.midpoint.repo.sql.util.RUtil) NotNull(org.jetbrains.annotations.NotNull) MAuditDelta(com.evolveum.midpoint.repo.sql.audit.beans.MAuditDelta) Types(java.sql.Types) com.evolveum.midpoint.schema(com.evolveum.midpoint.schema) java.util(java.util) OperationResult(com.evolveum.midpoint.schema.result.OperationResult) Trace(com.evolveum.midpoint.util.logging.Trace) ObjectUtils.defaultIfNull(org.apache.commons.lang3.ObjectUtils.defaultIfNull) ObjectDeltaOperationType(com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectDeltaOperationType) ROperationResultStatus(com.evolveum.midpoint.repo.sql.data.common.enums.ROperationResultStatus) AuditSqlQueryContext(com.evolveum.midpoint.repo.sql.audit.AuditSqlQueryContext) ItemDeltaType(com.evolveum.prism.xml.ns._public.types_3.ItemDeltaType) SQLQuery(com.querydsl.sql.SQLQuery) CloneUtil(com.evolveum.midpoint.prism.util.CloneUtil) PolyString(com.evolveum.midpoint.prism.polystring.PolyString) com.evolveum.midpoint.xml.ns._public.common.audit_3(com.evolveum.midpoint.xml.ns._public.common.audit_3) SQLInsertClause(com.querydsl.sql.dml.SQLInsertClause) AuditService(com.evolveum.midpoint.audit.api.AuditService) TemporaryTableDialect(com.evolveum.midpoint.repo.sql.util.TemporaryTableDialect) CanonicalItemPath(com.evolveum.midpoint.prism.path.CanonicalItemPath) XMLGregorianCalendar(javax.xml.datatype.XMLGregorianCalendar) SqlPerformanceMonitorImpl(com.evolveum.midpoint.repo.sqlbase.perfmon.SqlPerformanceMonitorImpl) ItemPath(com.evolveum.midpoint.prism.path.ItemPath) AuditResultHandler(com.evolveum.midpoint.audit.api.AuditResultHandler) Validate(org.apache.commons.lang3.Validate) DefaultMapper(com.querydsl.sql.dml.DefaultMapper) MAuditEventRecord(com.evolveum.midpoint.repo.sql.audit.beans.MAuditEventRecord) TraceManager(com.evolveum.midpoint.util.logging.TraceManager) SqlPerformanceMonitorImpl(com.evolveum.midpoint.repo.sqlbase.perfmon.SqlPerformanceMonitorImpl) Holder(com.evolveum.midpoint.util.Holder) PolyString(com.evolveum.midpoint.prism.polystring.PolyString)

Example 23 with Holder

use of com.evolveum.midpoint.util.Holder in project midpoint by Evolveum.

the class IterativeActivityRun method getWorkBucket.

private WorkBucketType getWorkBucket(boolean initialRun, OperationResult result) throws ActivityRunException {
    RunningTask task = taskRun.getRunningTask();
    Holder<BucketProgressOverviewType> bucketProgressHolder = new Holder<>();
    WorkBucketType bucket;
    try {
        GetBucketOperationOptions options = GetBucketOperationOptionsBuilder.anOptions().withDistributionDefinition(activity.getDefinition().getDistributionDefinition()).withFreeBucketWaitTime(FREE_BUCKET_WAIT_TIME).withCanRun(task::canRun).withExecuteInitialWait(initialRun).withImplicitSegmentationResolver(this).withIsScavenger(isScavenger(task)).withBucketProgressConsumer(bucketProgressHolder).build();
        bucket = beans.bucketingManager.getWorkBucket(bucketingSituation.coordinatorTaskOid, bucketingSituation.workerTaskOid, activity.getPath(), options, getLiveBucketManagementStatistics(), result);
        // We want to have the most current state of the running task.
        task.refresh(result);
    } catch (InterruptedException e) {
        LOGGER.trace("InterruptedExecution in getWorkBucket for {}", task);
        if (!task.canRun()) {
            return null;
        } else {
            LoggingUtils.logUnexpectedException(LOGGER, "Unexpected InterruptedException in {}", e, task);
            throw new SystemException("Unexpected InterruptedException: " + e.getMessage(), e);
        }
    } catch (Throwable t) {
        LoggingUtils.logUnexpectedException(LOGGER, "Couldn't allocate a work bucket for task {}", t, task);
        throw new SystemException("Couldn't allocate a work bucket for task: " + t.getMessage(), t);
    }
    announceNumberOfBuckets(bucketProgressHolder.getValue(), result);
    return bucket;
}
Also used : RunningTask(com.evolveum.midpoint.task.api.RunningTask) Holder(com.evolveum.midpoint.util.Holder) GetBucketOperationOptions(com.evolveum.midpoint.repo.common.activity.run.buckets.GetBucketOperationOptions)

Example 24 with Holder

use of com.evolveum.midpoint.util.Holder in project midpoint by Evolveum.

the class ResourceObjectReferenceResolver method resolve.

/**
 * Resolves a {@link ResourceObjectReferenceType}.
 *
 * @param useRawDefinition If true, object class definition is used (instead of object type definition).
 * This is to avoid endless recursion when resolving the base context for object type.
 */
@Nullable
PrismObject<ShadowType> resolve(@NotNull ProvisioningContext ctx, @NotNull ResourceObjectReferenceType resourceObjectReference, boolean useRawDefinition, @NotNull String desc, @NotNull OperationResult result) throws ObjectNotFoundException, SchemaException, CommunicationException, ConfigurationException, SecurityViolationException, ExpressionEvaluationException {
    ObjectReferenceType shadowRef = resourceObjectReference.getShadowRef();
    if (shadowRef != null && shadowRef.getOid() != null) {
        if (resourceObjectReference.getResolutionFrequency() == null || resourceObjectReference.getResolutionFrequency() == ResourceObjectReferenceResolutionFrequencyType.ONCE) {
            PrismObject<ShadowType> shadow = repositoryService.getObject(ShadowType.class, shadowRef.getOid(), null, result);
            shadowsFacade.applyDefinition(shadow, ctx.getTask(), result);
            return shadow;
        }
    } else if (resourceObjectReference.getResolutionFrequency() == ResourceObjectReferenceResolutionFrequencyType.NEVER) {
        throw new ObjectNotFoundException("No shadowRef OID in " + desc + " and resolution frequency set to NEVER");
    }
    argCheck(resourceObjectReference.getObjectClass() != null, "No object class name in object reference in %s", desc);
    QName objectClassName = QNameUtil.qualifyIfNeeded(resourceObjectReference.getObjectClass(), MidPointConstants.NS_RI);
    ProvisioningContext subCtx = useRawDefinition ? ctx.spawnForObjectClassWithRawDefinition(objectClassName) : ctx.spawnForObjectClass(objectClassName);
    subCtx.assertDefinition();
    ObjectQuery refQuery = prismContext.getQueryConverter().createObjectQuery(ShadowType.class, resourceObjectReference.getFilter());
    // No variables. At least not now. We expect that mostly constants will be used here.
    VariablesMap variables = new VariablesMap();
    ObjectQuery evaluatedRefQuery = ExpressionUtil.evaluateQueryExpressions(refQuery, variables, MiscSchemaUtil.getExpressionProfile(), expressionFactory, prismContext, desc, ctx.getTask(), result);
    ObjectFilter baseFilter = ObjectQueryUtil.createResourceAndObjectClassFilter(ctx.getResource().getOid(), objectClassName, prismContext);
    ObjectFilter filter = prismContext.queryFactory().createAnd(baseFilter, evaluatedRefQuery.getFilter());
    ObjectQuery query = prismContext.queryFactory().createQuery(filter);
    // TODO: implement "repo" search strategies, don't forget to apply definitions
    Holder<PrismObject<ShadowType>> shadowHolder = new Holder<>();
    ResultHandler<ShadowType> handler = (shadow, objResult) -> {
        if (shadowHolder.getValue() != null) {
            throw new IllegalStateException("More than one search results for " + desc);
        }
        shadowHolder.setValue(shadow);
        return true;
    };
    shadowsFacade.searchObjectsIterative(subCtx, query, null, handler, result);
    return shadowHolder.getValue();
}
Also used : ResourceAttributeDefinition(com.evolveum.midpoint.schema.processor.ResourceAttributeDefinition) Autowired(org.springframework.beans.factory.annotation.Autowired) ConfigurationException(com.evolveum.midpoint.util.exception.ConfigurationException) SchemaException(com.evolveum.midpoint.util.exception.SchemaException) ResourceAttribute(com.evolveum.midpoint.schema.processor.ResourceAttribute) ConnectorInstance(com.evolveum.midpoint.provisioning.ucf.api.ConnectorInstance) QNameUtil(com.evolveum.midpoint.util.QNameUtil) MiscSchemaUtil(com.evolveum.midpoint.schema.util.MiscSchemaUtil) ObjectQueryUtil(com.evolveum.midpoint.schema.util.ObjectQueryUtil) ResultHandler(com.evolveum.midpoint.schema.ResultHandler) Holder(com.evolveum.midpoint.util.Holder) PrismProperty(com.evolveum.midpoint.prism.PrismProperty) ObjectNotFoundException(com.evolveum.midpoint.util.exception.ObjectNotFoundException) Collection(java.util.Collection) GenericFrameworkException(com.evolveum.midpoint.provisioning.ucf.api.GenericFrameworkException) Nullable(org.jetbrains.annotations.Nullable) ExpressionFactory(com.evolveum.midpoint.repo.common.expression.ExpressionFactory) ReadCapabilityType(com.evolveum.midpoint.xml.ns._public.resource.capabilities_3.ReadCapabilityType) ShadowsFacade(com.evolveum.midpoint.provisioning.impl.shadows.ShadowsFacade) ExpressionUtil(com.evolveum.midpoint.repo.common.expression.ExpressionUtil) CommunicationException(com.evolveum.midpoint.util.exception.CommunicationException) QName(javax.xml.namespace.QName) NotNull(org.jetbrains.annotations.NotNull) ResourceObjectDefinition(com.evolveum.midpoint.schema.processor.ResourceObjectDefinition) com.evolveum.midpoint.xml.ns._public.common.common_3(com.evolveum.midpoint.xml.ns._public.common.common_3) PrismContainer(com.evolveum.midpoint.prism.PrismContainer) OperationResult(com.evolveum.midpoint.schema.result.OperationResult) Trace(com.evolveum.midpoint.util.logging.Trace) PrettyPrinter(com.evolveum.midpoint.util.PrettyPrinter) ObjectFilter(com.evolveum.midpoint.prism.query.ObjectFilter) ExpressionEvaluationException(com.evolveum.midpoint.util.exception.ExpressionEvaluationException) ArrayList(java.util.ArrayList) GenericConnectorException(com.evolveum.midpoint.provisioning.api.GenericConnectorException) ProvisioningContext(com.evolveum.midpoint.provisioning.impl.ProvisioningContext) SecurityViolationException(com.evolveum.midpoint.util.exception.SecurityViolationException) PrismContext(com.evolveum.midpoint.prism.PrismContext) Qualifier(org.springframework.beans.factory.annotation.Qualifier) VariablesMap(com.evolveum.midpoint.schema.expression.VariablesMap) RepositoryService(com.evolveum.midpoint.repo.api.RepositoryService) Containerable(com.evolveum.midpoint.prism.Containerable) AttributesToReturn(com.evolveum.midpoint.provisioning.ucf.api.AttributesToReturn) PrismObject(com.evolveum.midpoint.prism.PrismObject) ResourceObjectIdentification(com.evolveum.midpoint.schema.processor.ResourceObjectIdentification) Component(org.springframework.stereotype.Component) MidPointConstants(com.evolveum.midpoint.schema.constants.MidPointConstants) ShadowUtil(com.evolveum.midpoint.schema.util.ShadowUtil) MiscUtil.argCheck(com.evolveum.midpoint.util.MiscUtil.argCheck) ObjectQuery(com.evolveum.midpoint.prism.query.ObjectQuery) TraceManager(com.evolveum.midpoint.util.logging.TraceManager) ShadowManager(com.evolveum.midpoint.provisioning.impl.shadows.manager.ShadowManager) QName(javax.xml.namespace.QName) Holder(com.evolveum.midpoint.util.Holder) ObjectFilter(com.evolveum.midpoint.prism.query.ObjectFilter) ObjectQuery(com.evolveum.midpoint.prism.query.ObjectQuery) ProvisioningContext(com.evolveum.midpoint.provisioning.impl.ProvisioningContext) PrismObject(com.evolveum.midpoint.prism.PrismObject) ObjectNotFoundException(com.evolveum.midpoint.util.exception.ObjectNotFoundException) VariablesMap(com.evolveum.midpoint.schema.expression.VariablesMap) Nullable(org.jetbrains.annotations.Nullable)

Example 25 with Holder

use of com.evolveum.midpoint.util.Holder in project midpoint by Evolveum.

the class GetBucketOperation method reclaimWronglyAllocatedBuckets.

/**
 * For each allocated work bucket we check if it is allocated to existing and non-closed child task.
 *
 * TODO use generalized transaction to obtain really current worker task state
 *  and then reclaim also from suspended workers
 */
private void reclaimWronglyAllocatedBuckets(OperationResult result) throws SchemaException, ObjectNotFoundException, ObjectAlreadyExistsException {
    Set<String> liveWorkers = getLiveWorkers(result);
    Holder<Integer> reclaimingHolder = new Holder<>(0);
    plainRepositoryService.modifyObjectDynamically(TaskType.class, coordinatorTaskOid, null, task -> {
        Collection<ItemDelta<?, ?>> modifications = new ArrayList<>();
        ItemPath statePath = ActivityStateUtil.getStateItemPath(task.getActivityState(), activityPath);
        List<WorkBucketType> buckets = getBuckets(task.getActivityState(), activityPath);
        int reclaiming = 0;
        for (WorkBucketType bucket : buckets) {
            if (bucket.getState() == WorkBucketStateType.DELEGATED) {
                String workerOid = getWorkerOid(bucket);
                if (!liveWorkers.contains(workerOid)) {
                    LOGGER.info("Will try to reclaim wrongly allocated work bucket {} from worker task {}", bucket, workerOid);
                    modifications.addAll(bucketStateChangeDeltas(statePath, bucket, WorkBucketStateType.READY, null));
                    reclaiming++;
                }
            }
        }
        reclaimingHolder.setValue(reclaiming);
        return modifications;
    }, null, result);
    if (reclaimingHolder.getValue() > 0) {
        LOGGER.info("Reclaimed {} buckets in {}", reclaimingHolder.getValue(), coordinatorTaskOid);
    } else {
        LOGGER.debug("Reclaimed no buckets in {}", coordinatorTaskOid);
    }
}
Also used : Holder(com.evolveum.midpoint.util.Holder) ItemDelta(com.evolveum.midpoint.prism.delta.ItemDelta) ItemPath(com.evolveum.midpoint.prism.path.ItemPath)

Aggregations

Holder (com.evolveum.midpoint.util.Holder)45 OperationResult (com.evolveum.midpoint.schema.result.OperationResult)27 PrismObject (com.evolveum.midpoint.prism.PrismObject)16 Task (com.evolveum.midpoint.task.api.Task)13 Test (org.testng.annotations.Test)13 SchemaException (com.evolveum.midpoint.util.exception.SchemaException)12 ObjectNotFoundException (com.evolveum.midpoint.util.exception.ObjectNotFoundException)9 ItemPath (com.evolveum.midpoint.prism.path.ItemPath)8 QName (javax.xml.namespace.QName)8 SystemException (com.evolveum.midpoint.util.exception.SystemException)7 LensContext (com.evolveum.midpoint.model.impl.lens.LensContext)6 ObjectQuery (com.evolveum.midpoint.prism.query.ObjectQuery)6 ShadowType (com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowType)6 NotNull (org.jetbrains.annotations.NotNull)6 AbstractUninitializedCertificationTest (com.evolveum.midpoint.certification.test.AbstractUninitializedCertificationTest)5 ObjectDelta (com.evolveum.midpoint.prism.delta.ObjectDelta)5 CommunicationException (com.evolveum.midpoint.util.exception.CommunicationException)5 Trace (com.evolveum.midpoint.util.logging.Trace)5 TraceManager (com.evolveum.midpoint.util.logging.TraceManager)5 com.evolveum.midpoint.xml.ns._public.common.common_3 (com.evolveum.midpoint.xml.ns._public.common.common_3)5