private boolean continueVolunteering() { synchronized (BucketAdvisor.this) { // false if caller is not the volunteeringThread if (!Thread.currentThread().equals(this.volunteeringThread)) { return false; } if (!isVolunteering() && !isBecomingPrimary()) { return false; } // false if primaryMember is not null if (!isAggressive() && basicGetPrimaryMember() != null) { return false; } // false if this member is already primary if (isPrimary()) { return false; } // false if closed if (isClosed()) { return false; } // false if no longer hosting if (!isHosting()) { return false; } // must be true... need to continue volunteering return true; } }
if (isVolunteering()) {
/** * Attempt to acquire lock for primary until a primary exists. Caller hands off responsibility to * an executor (waiting pool) and returns early. */ public void volunteerForPrimary() { InternalDistributedMember elector = primaryElector; if (elector != null && regionAdvisor.hasPartitionedRegion(elector)) { // another server will determine the primary node return; } primaryElector = null; initializationGate(); synchronized (this) { if (isVolunteering() || isClosed() || !isHosting()) { // only one thread should be attempting to volunteer at one time return; } if (this.volunteeringDelegate == null) { setVolunteeringDelegate(new VolunteeringDelegate()); } this.volunteeringDelegate.volunteerForPrimary(); } }
try { synchronized (this) { if (isHosting() && (isVolunteering() || isBecomingPrimary())) { Bucket br = this.regionAdvisor.getBucket(getBucket().getId()); if (br != null && br instanceof BucketRegion) {