Skip to content

Commit

Permalink
Fixing excessive normalization on sync+rename
Browse files Browse the repository at this point in the history
  • Loading branch information
semancik committed Mar 9, 2016
1 parent a6080fd commit 8b771a5
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 11 deletions.
Expand Up @@ -1164,8 +1164,10 @@ public int synchronize(ResourceShadowDiscriminator shadowCoordinates, PrismPrope
}
}

@SuppressWarnings("rawtypes") boolean processSynchronization(ProvisioningContext ctx, Change<ShadowType> change, OperationResult result) throws SchemaException, ObjectNotFoundException,
@SuppressWarnings("rawtypes")
boolean processSynchronization(ProvisioningContext ctx, Change<ShadowType> change, OperationResult result) throws SchemaException, ObjectNotFoundException,
ObjectAlreadyExistsException, CommunicationException, ConfigurationException {

ResourceObjectShadowChangeDescription shadowChangeDescription = createResourceShadowChangeDescription(
change, ctx.getResource(), ctx.getChannel());

Expand Down Expand Up @@ -1363,7 +1365,7 @@ void processChange(ProvisioningContext ctx, Change<ShadowType> change, PrismObje

}


// TODO: better move this to shadowManager?
private void forceRenameIfNeeded(ProvisioningContext ctx, ShadowType currentShadowType, ShadowType oldShadowType, OperationResult parentResult) throws SchemaException, ObjectNotFoundException, ObjectAlreadyExistsException, ConfigurationException, CommunicationException {
Collection<ResourceAttribute<?>> oldSecondaryIdentifiers = ShadowUtil.getSecondaryIdentifiers(oldShadowType);
if (oldSecondaryIdentifiers.isEmpty()){
Expand All @@ -1383,11 +1385,10 @@ private void forceRenameIfNeeded(ProvisioningContext ctx, ShadowType currentShad
Collection newValue = newSecondaryIdentifier.getRealValues();

if (!shadowManager.compareAttribute(ctx.getObjectClassDefinition(), newSecondaryIdentifier, oldSecondaryIdentifier)){
PropertyDelta<?> shadowNameDelta = PropertyDelta.createDelta(new ItemPath(ShadowType.F_ATTRIBUTES, oldSecondaryIdentifier.getElementName()), oldShadowType.asPrismObject().getDefinition());
shadowNameDelta.addValuesToDelete(PrismPropertyValue.cloneCollection((Collection)oldSecondaryIdentifier.getValues()));
shadowManager.normalizeAttributes(currentShadowType.asPrismObject(), ctx.getObjectClassDefinition());
shadowNameDelta.addValuesToAdd(PrismPropertyValue.cloneCollection((Collection)newSecondaryIdentifier.getValues()));
renameDeltas.add(shadowNameDelta);
PropertyDelta<?> propertyDelta = PropertyDelta.createDelta(new ItemPath(ShadowType.F_ATTRIBUTES, oldSecondaryIdentifier.getElementName()), oldShadowType.asPrismObject().getDefinition());
propertyDelta.addValuesToDelete(PrismPropertyValue.cloneCollection((Collection)oldSecondaryIdentifier.getValues()));
propertyDelta.addValuesToAdd(PrismPropertyValue.cloneCollection((Collection)newSecondaryIdentifier.getValues()));
renameDeltas.add(propertyDelta);
}

}
Expand All @@ -1407,6 +1408,7 @@ private void forceRenameIfNeeded(ProvisioningContext ctx, ShadowType currentShad
}
}
if (!renameDeltas.isEmpty()){
shadowManager.normalizeDeltas((Collection)renameDeltas, ctx.getObjectClassDefinition());
ConstraintsChecker.onShadowModifyOperation(renameDeltas);
repositoryService.modifyObject(ShadowType.class, oldShadowType.getOid(), renameDeltas, parentResult);
oldShadowType.setName(new PolyStringType(currentShadowName));
Expand Down
Expand Up @@ -671,8 +671,10 @@ public void test110GetObject() throws Exception {
assertEquals(ACCOUNT1_OID, addedObjectOid);
PropertyReferenceListType resolve = new PropertyReferenceListType();

// WHEN
ShadowType shadow = provisioningService.getObject(ShadowType.class, ACCOUNT1_OID, null, task, result).asObjectable();

// THEN
assertNotNull(shadow);

display(SchemaDebugUtil.prettyPrint(shadow));
Expand Down Expand Up @@ -709,7 +711,7 @@ public void test110GetObject() throws Exception {
// must be all lowercase
assertEquals("Wrong secondary identifier (repo)", "uid=jbond,ou=people,dc=example,dc=com", idSecondaryVal);

assertShadows(2);
assertShadows(2);
}

/**
Expand Down Expand Up @@ -839,7 +841,7 @@ public void test121RenameAccountWillOnResource() throws Exception{
ShadowType provisioningAccountType = provisioningService.getObject(ShadowType.class, ACCOUNT_WILL_OID,
null, task, result).asObjectable();
PrismAsserts.assertEqualsPolyString("Name not equal.", "uid=will123,ou=People,dc=example,dc=com", provisioningAccountType.getName());
assertAttribute(provisioningAccountType, getSecondaryIdentifierQName(), "uid=will123,ou=people,dc=example,dc=com");
assertAttribute(provisioningAccountType, getSecondaryIdentifierQName(), "uid=will123,ou=People,dc=example,dc=com");

repoShadowType = repositoryService.getObject(ShadowType.class, ACCOUNT_WILL_OID,
null, result).asObjectable();
Expand Down
Expand Up @@ -43,6 +43,10 @@
<level>DEBUG</level>
<package>com.evolveum.midpoint.model</package>
</classLogger>
<classLogger>
<level>TRACE</level>
<package>com.evolveum.midpoint.model.impl.sync.SynchronizationService</package>
</classLogger>
<classLogger>
<level>INFO</level>
<package>org.identityconnectors</package>
Expand All @@ -68,7 +72,7 @@
<package>com.evolveum.midpoint.model.impl.lens.Clockwork</package>
</classLogger>
<classLogger>
<level>DEBUG</level>
<level>TRACE</level>
<package>com.evolveum.midpoint.provisioning</package>
</classLogger>
<classLogger>
Expand Down
2 changes: 1 addition & 1 deletion testing/conntest/src/test/resources/logback-test.xml
Expand Up @@ -40,7 +40,7 @@
<logger name="com.evolveum.midpoint.common.expression" level="TRACE" />
<logger name="com.evolveum.midpoint.common.expression.MidPointFunctions" level="TRACE" />

<!--<logger name="com.evolveum.midpoint.provisioning" level="TRACE" />-->
<!--<logger name="com.evolveum.midpoint.provisioning" level="TRACE" />z
<!--<logger name="com.evolveum.midpoint.common" level="TRACE" />-->
<!-- <logger name="com.evolveum.midpoint.repo" level="TRACE" /> -->

Expand Down

0 comments on commit 8b771a5

Please sign in to comment.