@Override public void markDestructable(final ResourceClaim claim) { if (claim == null) { return; } synchronized (claim) { if (getClaimantCount(claim) > 0) { return; } logger.debug("Marking claim {} as destructable", claim); try { while (!destructableClaims.offer(claim, 30, TimeUnit.MINUTES)) { } } catch (final InterruptedException ie) { } } }
@Override public int incrementClaimantCount(final ResourceClaim claim, final boolean newClaim) { if (claim == null) { return 0; } synchronized (claim) { final AtomicInteger counter = getCounter(claim); final int newClaimantCount = counter.incrementAndGet(); logger.debug("Incrementing claimant count for {} to {}", claim, newClaimantCount); // If the claimant count moved from 0 to 1, remove it from the queue of destructable claims. if (!newClaim && newClaimantCount == 1) { destructableClaims.remove(claim); } return newClaimantCount; } }
@Override public int incrementClaimantCount(final ResourceClaim claim) { return incrementClaimantCount(claim, false); }
@Override public int decrementClaimantCount(final ResourceClaim claim) { if (claim == null) { return 0; } synchronized (claim) { final ClaimCount counter = claimantCounts.get(claim); if (counter == null) { logger.warn("Decrementing claimant count for {} but claimant count is not known. Returning -1", claim); return -1; } final int newClaimantCount = counter.getCount().decrementAndGet(); if (newClaimantCount < 0) { logger.error("Decremented claimant count for {} to {}", claim, newClaimantCount); } else { logger.debug("Decrementing claimant count for {} to {}", claim, newClaimantCount); } // If the claim is no longer referenced, we want to remove it. We consider the claim to be "no longer referenced" // if the count is 0 and it is no longer writable (if it's writable, it may still be writable by the Content Repository, // even though no existing FlowFile is referencing the claim). if (newClaimantCount == 0 && !claim.isWritable()) { removeClaimantCount(claim); } return newClaimantCount; } }
@Override public int decrementClaimantCount(final ResourceClaim claim) { if (claim == null) { return 0; } synchronized (claim) { final ClaimCount counter = claimantCounts.get(claim); if (counter == null) { logger.warn("Decrementing claimant count for {} but claimant count is not known. Returning -1", claim); return -1; } final int newClaimantCount = counter.getCount().decrementAndGet(); if (newClaimantCount < 0) { logger.error("Decremented claimant count for {} to {}", claim, newClaimantCount); } else { logger.debug("Decrementing claimant count for {} to {}", claim, newClaimantCount); } // If the claim is no longer referenced, we want to remove it. We consider the claim to be "no longer referenced" // if the count is 0 and it is no longer writable (if it's writable, it may still be writable by the Content Repository, // even though no existing FlowFile is referencing the claim). if (newClaimantCount == 0 && !claim.isWritable()) { removeClaimantCount(claim); } return newClaimantCount; } }
@Override public void freeze(final ResourceClaim claim) { if (claim == null) { return; } if (!(claim instanceof StandardResourceClaim)) { throw new IllegalArgumentException("The given resource claim is not managed by this Resource Claim Manager"); } ((StandardResourceClaim) claim).freeze(); synchronized (claim) { if (getClaimantCount(claim) == 0) { claimantCounts.remove(claim); } } }
@Override public int incrementClaimantCount(final ResourceClaim claim) { return incrementClaimantCount(claim, false); }
@Override public int incrementClaimantCount(final ResourceClaim claim, final boolean newClaim) { if (claim == null) { return 0; } synchronized (claim) { final AtomicInteger counter = getCounter(claim); final int newClaimantCount = counter.incrementAndGet(); logger.debug("Incrementing claimant count for {} to {}", claim, newClaimantCount); // If the claimant count moved from 0 to 1, remove it from the queue of destructable claims. if (!newClaim && newClaimantCount == 1) { destructableClaims.remove(claim); } return newClaimantCount; } }
@Override public void markDestructable(final ResourceClaim claim) { if (claim == null) { return; } synchronized (claim) { if (getClaimantCount(claim) > 0) { return; } logger.debug("Marking claim {} as destructable", claim); try { while (!destructableClaims.offer(claim, 30, TimeUnit.MINUTES)) { } } catch (final InterruptedException ie) { } } }
@Override public void freeze(final ResourceClaim claim) { if (claim == null) { return; } if (!(claim instanceof StandardResourceClaim)) { throw new IllegalArgumentException("The given resource claim is not managed by this Resource Claim Manager"); } ((StandardResourceClaim) claim).freeze(); synchronized (claim) { if (getClaimantCount(claim) == 0) { claimantCounts.remove(claim); } } }