@Override public boolean isPrimary() { return this.advisor.isPrimary(); }
/** * Try to lock the primary bucket to make sure no operation is on-going at current bucket. * */ public void tryLockIfPrimary() { if (isPrimary()) { try { this.primaryMoveWriteLock.lock(); } finally { this.primaryMoveWriteLock.unlock(); } } }
@Override public void visit(Integer bucketId, Region r) { BucketRegion br = (BucketRegion) r; BucketAdvisor ba = (BucketAdvisor) br.getDistributionAdvisor(); if (ba.isPrimary()) { primaryBucketList.add(bucketId); } } });
public Set<BucketRegion> getAllLocalPrimaryBucketRegions() { Set<BucketRegion> retVal = new HashSet<BucketRegion>(); for (BucketRegion br : localBucket2RegionMap.values()) { if (br.getBucketAdvisor().isPrimary()) { retVal.add(br); } } return Collections.unmodifiableSet(retVal); }
@Override public void visit(Integer bucketId, Region r) { BucketRegion br = (BucketRegion) r; if (br.getBucketAdvisor().isPrimary()) { numPrimaries.incrementAndGet(); } } });
@Override public void visit(Integer bucketId, Region r) { BucketRegion br = (BucketRegion) r; BucketAdvisor ba = (BucketAdvisor) br.getDistributionAdvisor(); if (!ba.isPrimary()) { nonPrimaryBucketList.add(bucketId); } } });
@Override protected boolean shouldDistributeInvalidateRegion(RegionEventImpl event) { return getBucketAdvisor().isPrimary(); }
/** * If the current member is primary for this bucket return true, otherwise, give some time for the * current member to become primary and then return whether it is a primary (true/false). */ public boolean isPrimaryWithWait() { if (this.isPrimary()) { return true; } // wait for the current member to become primary holder InternalDistributedMember primary = waitForNewPrimary(); if (primary != null) { return true; } return false; }
public Set<Integer> getAllLocalPrimaryBucketIds() { Set<Integer> bucketIds = new HashSet<Integer>(); for (Map.Entry<Integer, BucketRegion> bucketEntry : getAllLocalBuckets()) { BucketRegion bucket = bucketEntry.getValue(); if (bucket.getBucketAdvisor().isPrimary()) { bucketIds.add(Integer.valueOf(bucket.getId())); } } return bucketIds; }
/** a fast estimate of total bucket size */ public long getEstimatedLocalBucketSize(boolean primaryOnly) { long size = 0; for (BucketRegion br : localBucket2RegionMap.values()) { if (!primaryOnly || br.getBucketAdvisor().isPrimary()) { size += br.getEstimatedLocalSize(); } } return size; }
@Override void expireInvalidate(EntryEventImpl event) { if (!getBucketAdvisor().isPrimary()) { return; } try { super.expireInvalidate(event); } catch (PrimaryBucketException e) { // must have concurrently removed the primary } }
public Set<Integer> getAllLocalPrimaryBucketIdsBetweenProvidedIds(int low, int high) { Set<Integer> bucketIds = new HashSet<Integer>(); for (Map.Entry<Integer, BucketRegion> bucketEntry : getAllLocalBuckets()) { BucketRegion bucket = bucketEntry.getValue(); if (bucket.getBucketAdvisor().isPrimary() && (bucket.getId() >= low) && (bucket.getId() < high)) { bucketIds.add(Integer.valueOf(bucket.getId())); } } return bucketIds; }
@Override void expireDestroy(EntryEventImpl event, boolean cacheWrite) { /* Early out before we throw a PrimaryBucketException because we're not primary */ if (needWriteLock(event) && !getBucketAdvisor().isPrimary()) { return; } try { super.expireDestroy(event, cacheWrite); return; } catch (PrimaryBucketException e) { // must have concurrently removed the primary return; } }
@Override protected void setInternalRegionArguments(InternalRegionArguments ira) { // PR specific PartitionedRegion pr = mock(PartitionedRegion.class); BucketAdvisor ba = mock(BucketAdvisor.class); ReadWriteLock primaryMoveLock = new ReentrantReadWriteLock(); Lock primaryMoveReadLock = primaryMoveLock.readLock(); when(ba.getPrimaryMoveReadLock()).thenReturn(primaryMoveReadLock); when(ba.getProxyBucketRegion()).thenReturn(mock(ProxyBucketRegion.class)); when(ba.isPrimary()).thenReturn(true); ira.setPartitionedRegion(pr).setPartitionedRegionBucketRedundancy(1).setBucketAdvisor(ba); }
@Override public int getAsInt() { if (isClosed() || !((BucketRegion) userRegion).getBucketAdvisor().isPrimary()) { stats.removeDocumentsSupplier(this); return 0; } try { return writer.numDocs(); } catch (AlreadyClosedException e) { // ignore return 0; } } }
public boolean isReadyForPeek() { return !this.getPartitionedRegion().isDestroyed() && !this.isEmpty() && !this.eventSeqNumDeque.isEmpty() && getBucketAdvisor().isPrimary(); }
/** * Searches through profiles to find first profile that is flagged as primary and sets * {@link #primaryMember} to it. Caller must synchronize on this BucketAdvisor. * * @return true if a primary member was found and used * @see #findAndSetPrimaryMember() */ boolean findAndSetPrimaryMember() { if (isPrimary()) { setPrimaryMember(this.getDistributionManager().getDistributionManagerId()); return true; } InternalDistributedMember[] primaryMembers = findPrimaryMembers(); if (primaryMembers.length > 0) { setPrimaryMember(primaryMembers[0]); return true; } else { return false; } }
public void checkForPrimary() { final boolean isp = getBucketAdvisor().isPrimary(); if (!isp) { this.partitionedRegion.checkReadiness(); checkReadiness(); InternalDistributedMember primaryHolder = getBucketAdvisor().basicGetPrimaryMember(); throw new PrimaryBucketException( "Bucket " + getName() + " is not primary. Current primary holder is " + primaryHolder); } }
protected void distributeInvalidateOperation(EntryEventImpl event) { InvalidateOperation op = null; long token = -1; try { if (!event.isOriginRemote() && getBucketAdvisor().isPrimary()) { // This cache has processed the event, forward operation // and event messages to backup buckets // before distribute: BR.invalidate hasSeenEvent op = new InvalidateOperation(event); token = op.startOperation(); } event.invokeCallbacks(this, true, false); } finally { if (op != null) { op.endOperation(token); } } }
@Override public PRLoad getLoad(PartitionedRegion pr) { PartitionedRegionDataStore ds = pr.getDataStore(); int configuredBucketCount = pr.getTotalNumberOfBuckets(); PRLoad prLoad = new PRLoad(configuredBucketCount, pr.getLocalMaxMemory()); // key: bid, value: size for (Integer bidInt : ds.getAllLocalBucketIds()) { int bid = bidInt.intValue(); BucketAdvisor bucketAdvisor = pr.getRegionAdvisor().getBucket(bid).getBucketAdvisor(); // Wait for a primary to exist for this bucket, because // it might be this member. bucketAdvisor.getPrimary(); boolean isPrimary = pr.getRegionAdvisor().getBucket(bid).getBucketAdvisor().isPrimary(); prLoad.addBucket(bid, 1, isPrimary ? 1 : 0); } return prLoad; }