private GatewaySenderAdvisor(DistributionAdvisee sender) { super(sender); this.sender = (AbstractGatewaySender) sender; this.lockToken = getDLockServiceName() + "-token"; }
public static GatewaySenderAdvisor createGatewaySenderAdvisor(DistributionAdvisee sender) { GatewaySenderAdvisor advisor = new GatewaySenderAdvisor(sender); advisor.initialize(); return advisor; }
/** * When the sender profile is removed, then check for the primary members if they are not * available then this secondary sender should volunteer for primary */ @Override protected void profileRemoved(Profile profile) { if (profile instanceof GatewaySenderProfile) { GatewaySenderProfile sp = (GatewaySenderProfile) profile; if (!sp.isParallel) {// SerialGatewaySender // if there is a primary sender, then don't volunteer for primary if (advisePrimaryGatewaySender() != null) { return; } if (!this.sender.isPrimary()) {// IF this sender is not primary if (!adviseEldestGatewaySender()) {// AND this is not the eldest sender if (logger.isDebugEnabled()) { logger.debug( "Sender {} is not the eldest in the system. Giving preference to eldest sender to become primary...", this.sender); } return; } launchLockObtainingVolunteerThread(); } } } }
getSenderAdvisor().initDLockService(); if (!isPrimary()) { if (getSenderAdvisor().volunteerForPrimary()) { getSenderAdvisor().makePrimary(); } else { getSenderAdvisor().makeSecondary();
DistributedLockService.destroy(getSenderAdvisor().getDLockServiceName()); } catch (IllegalArgumentException e) { Thread lockObtainingThread = getSenderAdvisor().getLockObtainingThread(); if (lockObtainingThread != null && lockObtainingThread.isAlive()) {
if (volunteerForPrimary()) { if (logger.isDebugEnabled()) { logger.debug("{}: Obtained the lock on {}", this, GatewaySenderAdvisor.this.makePrimary();
public boolean volunteerForPrimary() { if (logger.isDebugEnabled()) { logger.debug("Sender : {} is volunteering for Primary ", this.sender.getId()); } if (advisePrimaryGatewaySender() == null) { if (!adviseEldestGatewaySender()) { if (logger.isDebugEnabled()) { logger.debug( "Sender {} is not the eldest in the system. Giving preference to eldest sender to become primary...", this.sender); } return false; } if (logger.isDebugEnabled()) { logger.debug("Sender : {} no Primary available. So going to acquire distributed lock", this.sender); } this.lockService.lock(this.lockToken, 10000, -1); return this.lockService.isHeldByCurrentThread(this.lockToken); } return false; }
public void makeSecondary() { if (logger.isDebugEnabled()) { logger.debug("{}: Did not obtain the lock on {}. Starting as secondary gateway sender.", this.sender, this.lockToken); } // Set primary flag to false logger.info( "{} starting as secondary because primary gateway sender is available on member :{}", new Object[] {this.sender.getId(), advisePrimaryGatewaySender()}); this.isPrimary = false; new UpdateAttributesProcessor(this.sender).distribute(false); }
/** * The profile will be created when the sender is added to the cache. here we are not starting the * sender. so we should not release or acquire any lock for the sender to become primary based on * creation only. */ @Override public void profileCreated(Profile profile) { if (profile instanceof GatewaySenderProfile) { GatewaySenderProfile sp = (GatewaySenderProfile) profile; checkCompatibility(sp); } }
getSenderAdvisor().initDLockService(); if (!isPrimary()) { if (getSenderAdvisor().volunteerForPrimary()) { getSenderAdvisor().makePrimary(); } else { getSenderAdvisor().makeSecondary();
DistributedLockService.destroy(getSenderAdvisor().getDLockServiceName()); } catch (IllegalArgumentException e) { } catch (CancelException e) { Thread lockObtainingThread = getSenderAdvisor().getLockObtainingThread(); if (lockObtainingThread != null && lockObtainingThread.isAlive()) {
AbstractGatewaySender sender = this.region.getSerialGatewaySender(); if (sender != null) { InternalDistributedMember primary = sender.getSenderAdvisor().advisePrimaryGatewaySender(); if (primary != null) { recipients.remove(primary);
if (!sp.isParallel) { // SerialGatewaySender if (!sp.isRunning) { if (advisePrimaryGatewaySender() != null) { return; if (!adviseEldestGatewaySender()) {// AND this is not the eldest launchLockObtainingVolunteerThread();
public void initDLockService() { InternalDistributedSystem ds = this.sender.getCache().getInternalDistributedSystem(); String dlsName = getDLockServiceName(); this.lockService = DistributedLockService.getServiceNamed(dlsName); if (this.lockService == null) { this.lockService = DLockService.create(dlsName, ds, true, true, true); } Assert.assertTrue(this.lockService != null); if (logger.isDebugEnabled()) { logger.debug("{}: Obtained DistributedLockService: {}", this, this.lockService); } }