Skip to content

Commit

Permalink
Fix wildcard LiveSync
Browse files Browse the repository at this point in the history
(I have introduced improper non-nullity requirement in
ResourceObjectChange during last year's resource schema code cleanup.)

This fixes TestOpenDj.test818 in conntests.
  • Loading branch information
mederly committed Jan 11, 2022
1 parent 6a2c7b7 commit 5a36209
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,7 @@ public static ResourceObjectDefinition getObjectDefinitionPrecisely(
* Adds resolved auxiliary object classes to a given resource object definition.
* (Creating {@link CompositeObjectDefinition} if needed.)
*/
private static ResourceObjectDefinition addAuxiliaryObjectClasses(
private static @NotNull ResourceObjectDefinition addAuxiliaryObjectClasses(
@NotNull ResourceObjectDefinition objectDefinition,
@NotNull Collection<QName> auxiliaryObjectClassNames,
@NotNull ResourceSchema resourceSchema) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ ProvisioningContext spawnForObjectClass(
@NotNull Task task,
@NotNull QName objectClassName,
boolean useRawDefinition) throws SchemaException, ConfigurationException {
ResourceObjectDefinition definition = ResourceObjectDefinitionResolver.getObjectDefinitionPrecisely(
@NotNull ResourceObjectDefinition definition = ResourceObjectDefinitionResolver.getObjectDefinitionPrecisely(
originalCtx.getResource(),
null,
null,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,9 +78,7 @@ public abstract class ResourceObjectChange implements InitializableMixin {

/**
* Refined object class definition as determined from (possibly updated) provisioning context.
* Kept here e.g. to avoid having to check for exceptions when obtaining it from the context.
*
* TODO can we have non-null {@link #initialResourceObjectDefinition} with this value being null?
* May be null in exceptional cases (wildcard LS with delete event with object class not provided).
*/
protected ResourceObjectDefinition resourceObjectDefinition;

Expand Down Expand Up @@ -251,24 +249,23 @@ private void updateProvisioningContext(@NotNull Task task) throws SchemaExceptio
if (context.isWildcard()) {
if (initialResourceObjectDefinition != null) {
context = applyObjectClassAndTask(initialResourceObjectDefinition.getTypeName(), task);
if (context.isWildcard()) {
throw new SchemaException("Unknown object class " + initialResourceObjectDefinition.getTypeName()
+ " found in change " + this);
}
assert !context.isWildcard();
} else {
assert isDelete(); // see the schema check above
context = applyTask(task);
}
} else {
assert initialResourceObjectDefinition != null || !isDelete(); // see the schema check above
context = applyTask(task);
assert !context.isWildcard();
}

if (context != contextBefore) {
getLogger().trace("Updated provisioning context: {}", context);
}
}

/** Returned context is not wildcard. */
private ProvisioningContext applyObjectClassAndTask(@NotNull QName ocName, @NotNull Task task)
throws SchemaException, ConfigurationException {
// We know that current context has now OC name
Expand All @@ -288,7 +285,7 @@ private ProvisioningContext applyTask(Task task) {
}

protected void setResourceObjectDefinition() {
resourceObjectDefinition = context.getObjectDefinitionRequired();
resourceObjectDefinition = context.getObjectDefinition();
}

public int getLocalSequenceNumber() {
Expand Down Expand Up @@ -319,8 +316,8 @@ public String debugDump(int indent) {
sb.append("\n");
DebugUtil.debugDumpWithLabelLn(sb, "localSequenceNumber", localSequenceNumber, indent + 1);
DebugUtil.debugDumpWithLabelLn(sb, "primaryIdentifierValue", String.valueOf(primaryIdentifierRealValue), indent + 1);
DebugUtil.debugDumpWithLabelLn(sb, "initialObjectClassDefinition", String.valueOf(initialResourceObjectDefinition), indent + 1);
DebugUtil.debugDumpWithLabelLn(sb, "refinedObjectClassDefinition", String.valueOf(resourceObjectDefinition), indent + 1);
DebugUtil.debugDumpWithLabelLn(sb, "initialResourceObjectDefinition", String.valueOf(initialResourceObjectDefinition), indent + 1);
DebugUtil.debugDumpWithLabelLn(sb, "resourceObjectDefinition", String.valueOf(resourceObjectDefinition), indent + 1);
DebugUtil.debugDumpWithLabelLn(sb, "identifiers", identifiers, indent + 1);
DebugUtil.debugDumpWithLabelLn(sb, "objectDelta", objectDelta, indent + 1);
DebugUtil.debugDumpWithLabelLn(sb, "resourceObject", resourceObject, indent + 1);
Expand All @@ -344,7 +341,7 @@ private void addFakePrimaryIdentifierIfNeeded() throws SchemaException {
}

/**
* @return The most precise object class definition known at this moment.
* @return The most precise object class definition known at this moment. (May be null.)
*/
public ResourceObjectDefinition getCurrentResourceObjectDefinition() {
if (resourceObjectDefinition != null) {
Expand Down

0 comments on commit 5a36209

Please sign in to comment.