@Override public String toString() { return new StringBuilder() .append("BucketRegion") .append("[path='").append(getFullPath()) .append(";serial=").append(getSerialNumber()) .append(";primary=").append(getBucketAdvisor().getProxyBucketRegion().isPrimary()) .append(";indexUpdater=").append(getIndexUpdater()) .append("]") .toString(); }
boolean wasPrimary = false; synchronized(this) { wasPrimary = isPrimary(); if (isClosed()) { return; if (hasPrimary()) { requestPrimaryState(OTHER_PRIMARY_HOSTING); requestPrimaryState(NO_PRIMARY_HOSTING); needToVolunteerForPrimary = true; if (hasPrimary()) { // has primary... if (isPrimary()) { requestPrimaryState(NO_PRIMARY_NOT_HOSTING); this.primaryMember.set(null); findAndSetPrimaryMember(); requestPrimaryState(OTHER_PRIMARY_NOT_HOSTING); requestPrimaryState(NO_PRIMARY_NOT_HOSTING); if (updateRedundancy() > 0 && isHosting()) { releasePrimaryLock(); volunteerForPrimary(); sendProfileUpdate();
return false; if (!isVolunteering() && !isBecomingPrimary()) { return false; if (!isAggressive() && basicGetPrimaryMember() != null) { return false; if (isPrimary()) { return false; if (isClosed()) { return false; if (!isHosting()) { return false;
private void waitIfNoPrimaryMemberFound() { synchronized (BucketAdvisor.this) { if (basicGetPrimaryMember() == null) { waitForPrimaryMember(100); if (basicGetPrimaryMember() == null ) { findAndSetPrimaryMember(); } } } }
/** * Returns true if there exists a member with uninitialized bucket i.e. in the * process of creation and GII (including self). */ public boolean hasUninitialized() { final Profile[] locProfiles = this.profiles; // grab current profiles for (Profile profile : locProfiles) { BucketProfile bucketProfile = (BucketProfile)profile; if (!bucketProfile.isHosting) { return true; } } if (!isHosting() && getProxyBucketRegion() .getCreatedBucketRegion() != null) { return true; } return false; }
logger.debug("Acquired primary lock for BucketID {} PR : {}", getBucket().getId(), regionAdvisor.getPartitionedRegion().getFullPath()); try { synchronized (this) { if (isHosting() && (isVolunteering() || isBecomingPrimary())) { Bucket br = this.regionAdvisor.getBucket(getBucket().getId()); if (br != null && br instanceof BucketRegion) { ((BucketRegion)br).beforeAcquiringPrimaryState(); if (requestPrimaryState(IS_PRIMARY_HOSTING)) { if (logger.isDebugEnabled()) { logger.debug("Acquired primary lock for setting primary now BucketID {} PR : {}", getBucket().getId(), regionAdvisor.getPartitionedRegion().getFullPath()); setPrimaryMember(getDistributionManager().getId()); changedStateToIsPrimary = true; if (hasPrimary() && isPrimary()) { shouldInvokeListeners = true; invokePartitionListeners(); sendProfileUpdate(); Bucket br = this.regionAdvisor.getBucket(getBucket().getId()); if( br != null && br instanceof BucketRegion) { ((BucketRegion)br).processPendingSecondaryExpires(); releasePrimaryLock();
@Override public final void checkAllBucketsHosted() throws BucketMovedException { // check if bucket has moved if (this.pr != null) { final BucketAdvisor bucAdvisor = this.pr.getRegionAdvisor() .getBucketAdvisor(this.bucketId); if (optimizeForWrite()) { if (!bucAdvisor.isPrimary()) { this.pr.checkReadiness(); InternalDistributedMember primaryHolder = bucAdvisor .basicGetPrimaryMember(); throw new PrimaryBucketException("Bucket " + this.pr.getBucketName(this.bucketId) + " is not primary. Current primary holder is " + primaryHolder); } } else if (!bucAdvisor.isHosting()) { throw new BucketMovedException( LocalizedStrings.FunctionService_BUCKET_MIGRATED_TO_ANOTHER_NODE .toLocalizedString(), this.bucketId, this.pr.getFullPath()); } } }
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; }
public void run() { PartitionedRegion pr = (PartitionedRegion) getCache().getRegion(regionPath[0]); Bucket bucket = pr.getRegionAdvisor().getBucket(0); assertNotNull("Bucket is null on DST member", bucket); BucketRegion bucketRegion = bucket.getBucketAdvisor() .getProxyBucketRegion().getHostedBucketRegion(); assertTrue("DST member is not hosting bucket", bucket.isHosting()); assertNotNull("BucketRegion is null on DST member", bucketRegion); assertEquals(redundantCopies, bucket.getBucketAdvisor().getBucketRedundancy()); } });
@Override public void visit(Integer bucketId, Region r) { BucketRegion br = (BucketRegion) r; if (br.getBucketAdvisor().isPrimary()) { numPrimaries.incrementAndGet(); } } });
private ConcurrentParallelGatewaySenderQueue getHDFSQueue() throws ForceReattemptException { if (this.hdfsQueue == null) { String asyncQId = this.owner.getPartitionedRegion().getHDFSEventQueueName(); final AsyncEventQueueImpl asyncQ = (AsyncEventQueueImpl)this.owner.getCache().getAsyncEventQueue(asyncQId); final AbstractGatewaySender gatewaySender = (AbstractGatewaySender)asyncQ.getSender(); AbstractGatewaySenderEventProcessor ep = gatewaySender.getEventProcessor(); if (ep == null) return null; hdfsQueue = (ConcurrentParallelGatewaySenderQueue)ep.getQueue(); } // Check whether the queue has become primary here. // There could be some time between bucket becoming a primary // and underlying queue becoming a primary, so isPrimaryWithWait() // waits for some time for the queue to become a primary on this member final HDFSBucketRegionQueue brq = hdfsQueue.getBucketRegionQueue( this.owner.getPartitionedRegion(), this.owner.getId()); if (brq != null) { if (owner.getBucketAdvisor().isPrimary() && !brq.getBucketAdvisor().isPrimaryWithWait()) { InternalDistributedMember primaryHolder = brq.getBucketAdvisor() .basicGetPrimaryMember(); throw new PrimaryBucketException("Bucket " + brq.getName() + " is not primary. Current primary holder is " + primaryHolder); } } return hdfsQueue; }
/** * Get the most recent primary node for the bucketId. Returns null if no * primary can be found within {@link com.gemstone.gemfire.distributed.internal.DistributionConfig#getMemberTimeout}. * @param bucketId * @return the Node managing the primary copy of the bucket */ final public InternalDistributedMember getPrimaryMemberForBucket(int bucketId) { Assert.assertTrue(this.buckets != null); Bucket b = this.buckets[bucketId]; return b.getBucketAdvisor().getPrimary(); }
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); } }
public boolean isHosting() { return this.advisor.isHosting(); }
/** * Returns the ProxyBucketRegion which owns this advisor. * * @return the ProxyBucketRegion which owns this advisor */ public ProxyBucketRegion getProxyBucketRegion() { return (ProxyBucketRegion)getAdvisee(); }
/** * Called from catch blocks in {@link #doVolunteerForPrimary()}. Handles * the exception properly based on advisor settings and shutdown condition. * * @param e the RuntimeException that was caught while volunteering * @param loggit true if message should be logged if shutdown condition * is not met */ private void handleException(Exception e, boolean loggit) { boolean safe = isClosed() || getAdvisee().getCancelCriterion().cancelInProgress() != null; if (!safe) { if (ENFORCE_SAFE_CLOSE) { Assert.assertTrue(safe, LocalizedStrings.BucketAdvisor_BUCKETADVISOR_WAS_NOT_CLOSED_PROPERLY.toLocalizedString()); } else if (loggit) { getLogWriter().warning(LocalizedStrings.BucketAdvisor_BUCKETADVISOR_WAS_NOT_CLOSED_PROPERLY, e); } } }
@Override public String toString() { //String identity = super.toString(); //String identity = "BucketAdvisor " + getAdvisee().getFullPath() + // ":" + getAdvisee().getSerialNumber(); //identity = identity.substring(identity.lastIndexOf(".")+1); //final StringBuffer sb = new StringBuffer("[" + identity + ": "); final StringBuilder sb = new StringBuilder("[BucketAdvisor ") .append(getAdvisee().getFullPath()).append(':') .append(getAdvisee().getSerialNumber()).append(": "); sb.append("state=").append(primaryStateToString()); sb.append("]"); return sb.toString(); }
@Override protected final boolean operateOnPartitionedRegion(DistributionManager dm, PartitionedRegion region, long startTime) throws ForceReattemptException { // this is executing in the WAITING_POOL_EXECUTOR byte responseCode = BecomePrimaryBucketReplyMessage.NOT_SECONDARY; BucketAdvisor bucketAdvisor = region.getRegionAdvisor().getBucketAdvisor(this.bucketId); if (bucketAdvisor.isHosting()) { if (bucketAdvisor.becomePrimary(this.isRebalance)) { // sends a request/reply message responseCode = BecomePrimaryBucketReplyMessage.OK; } } region.getPrStats().endPartitionMessagesProcessing(startTime); BecomePrimaryBucketReplyMessage.send( getSender(), getProcessorId(), dm, null, responseCode); return false; }
if (source.equals(bucketAdvisor.getPrimary())) { if (!bucketAdvisor.becomePrimary(true)) { if (logger.isDebugEnabled()) { logger.debug("Failed to become primary for bucket {} on {}", bucketId, this);
/** * Returns all {@link InternalDistributedMember}s currently * flagged as primary. * <p> * Since profile messages may arrive out of order from different members, * more than one member may temporarily be flagged as primary. * <p> * The user of this BucketAdvisor should simply assume that the first * profile is primary until the dust settles, leaving only one primary * profile. * * @return zero or greater array of primary members */ private InternalDistributedMember[] findPrimaryMembers() { Set primaryMembers = adviseFilter(new Filter() { public boolean include(Profile profile) { assert profile instanceof BucketProfile; BucketProfile srp = (BucketProfile) profile; return srp.isPrimary; } }); if (primaryMembers.size() > 1 && logger.isDebugEnabled()) { logger.debug("[findPrimaryProfiles] found the following primary members for {}: {}", getAdvisee().getName(), primaryMembers); } return (InternalDistributedMember[]) primaryMembers.toArray( new InternalDistributedMember[primaryMembers.size()]); }