mirror of https://github.com/apache/nifi.git
NIFI-3671: This closes #1852. Ensure that we use the existing ResourceClaim (if it exists) when swapping data in, instead of creating a new one. Otherwise, if the ResourceClaim is still writable, then we may archive the data and then write to it, which can cause a NullPointerException in FileSystemRepository
Signed-off-by: joewitt <joewitt@apache.org>
This commit is contained in:
parent
fb7d6d1150
commit
b12cf8a6d2
|
@ -112,7 +112,15 @@ public class ContentClaimFieldMap implements Record {
|
||||||
final Long length = (Long) claimRecord.getFieldValue(ContentClaimSchema.CONTENT_CLAIM_LENGTH);
|
final Long length = (Long) claimRecord.getFieldValue(ContentClaimSchema.CONTENT_CLAIM_LENGTH);
|
||||||
final Long resourceOffset = (Long) claimRecord.getFieldValue(ContentClaimSchema.RESOURCE_CLAIM_OFFSET);
|
final Long resourceOffset = (Long) claimRecord.getFieldValue(ContentClaimSchema.RESOURCE_CLAIM_OFFSET);
|
||||||
|
|
||||||
final ResourceClaim resourceClaim = resourceClaimManager.newResourceClaim(container, section, identifier, lossTolerant, false);
|
// Make sure that we preserve the existing ResourceClaim, if there is already one held by the Resource Claim Manager
|
||||||
|
// because we need to honor its determination of whether or not the claim is writable. If the Resource Claim Manager
|
||||||
|
// does not have a copy of this Resource Claim, then we can go ahead and just create one and assume that it is not
|
||||||
|
// writable (because if it were writable, then the Resource Claim Manager would know about it).
|
||||||
|
ResourceClaim resourceClaim = resourceClaimManager.getResourceClaim(container, section, identifier);
|
||||||
|
if (resourceClaim == null) {
|
||||||
|
resourceClaim = resourceClaimManager.newResourceClaim(container, section, identifier, lossTolerant, false);
|
||||||
|
}
|
||||||
|
|
||||||
final StandardContentClaim contentClaim = new StandardContentClaim(resourceClaim, resourceOffset);
|
final StandardContentClaim contentClaim = new StandardContentClaim(resourceClaim, resourceOffset);
|
||||||
contentClaim.setLength(length);
|
contentClaim.setLength(length);
|
||||||
|
|
||||||
|
|
|
@ -58,7 +58,16 @@ public class ResourceClaimFieldMap implements Record {
|
||||||
final String identifier = (String) record.getFieldValue(ContentClaimSchema.CLAIM_IDENTIFIER);
|
final String identifier = (String) record.getFieldValue(ContentClaimSchema.CLAIM_IDENTIFIER);
|
||||||
final Boolean lossTolerant = (Boolean) record.getFieldValue(ContentClaimSchema.LOSS_TOLERANT);
|
final Boolean lossTolerant = (Boolean) record.getFieldValue(ContentClaimSchema.LOSS_TOLERANT);
|
||||||
|
|
||||||
return claimManager.newResourceClaim(container, section, identifier, lossTolerant, false);
|
// Make sure that we preserve the existing ResourceClaim, if there is already one held by the Resource Claim Manager
|
||||||
|
// because we need to honor its determination of whether or not the claim is writable. If the Resource Claim Manager
|
||||||
|
// does not have a copy of this Resource Claim, then we can go ahead and just create one and assume that it is not
|
||||||
|
// writable (because if it were writable, then the Resource Claim Manager would know about it).
|
||||||
|
ResourceClaim resourceClaim = claimManager.getResourceClaim(container, section, identifier);
|
||||||
|
if (resourceClaim == null) {
|
||||||
|
resourceClaim = claimManager.newResourceClaim(container, section, identifier, lossTolerant, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
return resourceClaim;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
Loading…
Reference in New Issue