public boolean takeSnapshotGIIWriteLock(MembershipListener listener) { if (writeLockEnabled()) { if (this.getPartitionedRegion().isInternalColumnTable()) { BucketRegion bufferRegion = getBufferRegion(); return bufferRegion.takeSnapshotGIIWriteLock(listener); } else { final LogWriterI18n logger = getCache().getLoggerI18n(); if (logger.fineEnabled()) { logger.fine("Taking exclusive snapshotGIILock on bucket " + this.getName()); } snapshotGIILock.attemptLock(LockMode.EX, -1, giiWriteLockForSIOwner); getBucketAdvisor() .addMembershipListenerAndAdviseGeneric(listener); snapshotGIILocked = true; this.giiListener = listener; // Set the listener only after taking the write lock. if (logger.fineEnabled()) { logger.fine("Succesfully took exclusive lock on bucket " + this.getName()); } return true; } } else { return false; } }
public void releaseSnapshotGIIWriteLock() { if (writeLockEnabled()) { if (this.getPartitionedRegion().isInternalColumnTable()) { BucketRegion bufferRegion = getBufferRegion(); bufferRegion.releaseSnapshotGIIWriteLock(); } else { final LogWriterI18n logger = getCache().getLoggerI18n(); if (logger.fineEnabled()) { logger.fine("Releasing exclusive snapshotGIILock on bucket " + this.getName()); } if (this.snapshotGIILock.hasExclusiveLock(giiWriteLockForSIOwner, null)) { if (snapshotGIILocked) { snapshotGIILock.releaseLock(LockMode.EX, false, giiWriteLockForSIOwner); getBucketAdvisor().removeMembershipListener(giiListener); this.giiListener = null; snapshotGIILocked = false; } } if (logger.fineEnabled()) { logger.fine("Released exclusive snapshotGIILock on bucket " + this.getName()); } } } }