/** * Returns the ProxyBucketRegion which owns this advisor. * * @return the ProxyBucketRegion which owns this advisor */ public ProxyBucketRegion getProxyBucketRegion() { return (ProxyBucketRegion) getAdvisee(); }
private Bucket getBucket() { return (Bucket) getAdvisee(); }
@Override public DistributedRegion getRegionForDeltaGII() { DistributedRegion result = super.getRegionForDeltaGII(); if (result == null && getAdvisee() instanceof ProxyBucketRegion) { result = ((ProxyBucketRegion) getAdvisee()).getHostedBucketRegion(); } return result; }
@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(); }
/** * 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() { @Override 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()]); }
/** * Initiates volunteering for primary. Repeated calls are harmless. Invoked by the * BucketAdvisor. Caller must be synchronized on BucketAdvisor. */ void volunteerForPrimary() { boolean handedOff = false; while (!handedOff) { getAdvisee().getCancelCriterion().checkCancelInProgress(null); boolean interrupted = Thread.interrupted(); try { execute(new Runnable() { @Override public void run() { doVolunteerForPrimary(); } }); handedOff = true; } catch (InterruptedException e) { interrupted = true; getAdvisee().getCancelCriterion().checkCancelInProgress(e); } finally { if (interrupted) { Thread.currentThread().interrupt(); } } } }
/** * 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().isCancelInProgress(); if (!safe) { if (ENFORCE_SAFE_CLOSE) { Assert.assertTrue(safe, "BucketAdvisor was not closed properly."); } else if (loggit) { logger.warn("BucketAdvisor was not closed properly.", e); } } }
while (true) { getAdvisee().getCancelCriterion().checkCancelInProgress(null); synchronized (volunteeringQueue) {
getAdvisee().getSystem(), true /* distributed */, true /* destroyOnDisconnect */, true /* automateFreeResources */); } catch (IllegalArgumentException e) { this.primaryLock = new DistributedMemberLock(dls, getAdvisee().getName(), DistributedMemberLock.NON_EXPIRING_LEASE, DistributedMemberLock.LockReentryPolicy.PREVENT_SILENTLY);
long waitTime = 2000; // time each iteration will wait while (!isPrimary()) { this.getAdvisee().getCancelCriterion().checkCancelInProgress(null); boolean attemptToBecomePrimary = false; boolean attemptToDeposePrimary = false;
final int bucketId = ((ProxyBucketRegion) getAdvisee()).getBucketId();
for (;;) { this.getAdvisee().getCancelCriterion().checkCancelInProgress(null); final InternalCache cache = getBucket().getCache(); if (cache != null && cache.isCacheAtShutdownAll()) {
try { boolean acquiredLock = false; getAdvisee().getCancelCriterion().checkCancelInProgress(null);
String.format("Cannot change from %s to %s for bucket %s", new Object[] {this.primaryStateToString(), this.primaryStateToString(requestedState), getAdvisee().getName()}));