public List<String> getCurrentCoreMembers() { return groupHandle.getCurrentCoreMembers(); }
/** * Must be called by client after recovery operation is complete * to bring the group state up-to-date on this recovery operation. * Not doing so will leave a stale entry in the group's state. */ @Override public void release() throws SignalReleaseException { try { // deprecated fencining in gms proper. // ctx.getGroupHandle().lowerFence(componentName, failedMember); // logger.log(Level.FINE, "lowered fence for component "+ componentName +" and member "+ failedMember); // GMS will reissue FailureRecovery if instance appointed as Recovery Agent fails before removing // its appointment. ctx.getGroupHandle().removeRecoveryAppointments(failedMember, componentName); failedMember=null; } catch ( GMSException e ) { throw new SignalReleaseException( e ); } }
@Override public boolean sendMessage(String targetMemberName, String token, byte[] data) { try { groupHandle.sendMessage(targetMemberName, token, data); return true; } catch (MemberNotInViewException memEx) { final String msg = "Error during groupHandle.sendMessage(" + targetMemberName + "," + token + ") failed because " + targetMemberName + " is not alive?"; logSendMsgFailure(memEx, targetMemberName, msg); } catch (GMSException gmsEx) { try { groupHandle.sendMessage(targetMemberName, token, data); return true; } catch (GMSException gmsEx2) { final String msg = "Error during groupHandle.sendMessage(" + targetMemberName + ", " + token + "; size=" + (data == null ? -1 : data.length) + ")"; logSendMsgFailure(gmsEx2, targetMemberName, msg); } } return false; }
final List<String> liveCache = getMemberTokens(viewCache, ctx.getSuspectList(), ctx.getGroupHandle().getAllCurrentMembers()); if (logger.isLoggable(Level.FINE)) { logger.log(Level.FINE, "LiveCache = "+liveCache);
private String getOldestCurrentMember(String exclude) { List<GMSMember> currentMembers = getGMSContext().getGroupHandle().getCurrentView(); GMSMember oldestMember = null; if (currentMembers != null) { for (GMSMember member : currentMembers) { if (member.getMemberToken().equals(exclude)){ continue; } if (oldestMember == null) { oldestMember = member; } if (member.getStartTime() < oldestMember.getStartTime()) { oldestMember = member; } } } return oldestMember == null ? null : oldestMember.getMemberToken(); }
private synchronized void checkAndNotifyAboutCurrentAndPreviousMembers(String memberName, boolean isJoinEvent, boolean triggeredByGMS) { SortedSet<String> currentAliveAndReadyMembers = gms.getGroupHandle().getCurrentAliveAndReadyCoreView().getMembers(); AliveAndReadyView aView = gms.getGroupHandle().getPreviousAliveAndReadyCoreView(); SortedSet<String> previousAliveAndReadyMembers = new TreeSet<String>();
/** * Find records of not finished delegated recovery in the recovery lock file on * this path and recorded before specified timestamp, and do delegated recovery if such record exists */ String finishDelegatedRecovery(String logdir, long timestamp) { String delegatedLogDir = null; String instance = fence.getInstanceRecoveredFor(logdir, timestamp); if (_logger.isLoggable(Level.INFO)) { _logger.log(Level.INFO, "[GMSCallBack] Instance " + instance + " need to finish delegated recovering"); } if (instance != null) { DistributedStateCache dsc=gms.getGroupHandle().getDistributedStateCache(); Map<Serializable, Serializable> memberDetails = dsc.getFromCacheForPattern(MEMBER_DETAILS, instance ); delegatedLogDir = (String)memberDetails.get(TXLOGLOCATION); if (_logger.isLoggable(Level.INFO)) { _logger.log(Level.INFO, "[GMSCallBack] Tx log dir for instance " + instance + " is " + delegatedLogDir); } doRecovery(delegatedLogDir, instance, timestamp); } return delegatedLogDir; }
final List<String> liveCache = getMemberTokens(viewCache, ctx.getSuspectList(), ctx.getGroupHandle().getAllCurrentMembers()); if (logger.isLoggable(Level.FINE)) { logger.log(Level.FINE, "LiveCache = "+liveCache);
private String getOldestCurrentMember(String exclude) { List<GMSMember> currentMembers = getGMSContext().getGroupHandle().getCurrentView(); GMSMember oldestMember = null; if (currentMembers != null) { for (GMSMember member : currentMembers) { if (member.getMemberToken().equals(exclude)){ continue; } if (oldestMember == null) { oldestMember = member; } if (member.getStartTime() < oldestMember.getStartTime()) { oldestMember = member; } } } return oldestMember == null ? null : oldestMember.getMemberToken(); }
private static boolean resolveWithEasySelectionAlgorithm(final List<GMSMember> oldViewCache, final String failedMember, final String groupName) { boolean recover = false; String recoverer = null; final GMSContext ctx = GMSContextFactory.getGMSContext(groupName); final String self = ctx.getServerIdentityToken(); final List<String> liveCache = getMemberTokens(oldViewCache, ctx.getSuspectList(), ctx.getGroupHandle().getAllCurrentMembers()); logger.log(Level.FINE, "LiveCache = " + liveCache); final List<String> coreCache = getCoreMembers(oldViewCache); logger.log(Level.FINE, "CoreCache = " + coreCache); for (String coreMember : coreCache) { if (liveCache.contains(coreMember)) { recoverer = coreMember; break; } } if (recoverer != null) { if (recoverer.equals(self)) { recover = true; } setRecoverySelectionState(recoverer, failedMember, groupName); } return recover; }
List<String> startedGMSMembers = gms.getGroupHandle().getCurrentCoreMembers(); if (startedGMSMembers.size() > 0) { try {
/** * This is called by the container after it has called refresh * * @param ejbID * the ejbID that uniquely identifies the container * @param pk * The primary key of the bean(s) that is to be refreshed */ public void notifyRefresh(long ejbID, byte[] pk) { int size = pk.length; byte[] payload = new byte[size + 8]; Logger _logger = ejbContainerUtil.getLogger(); longToBytes(ejbID, payload, 0); System.arraycopy(pk, 0, payload, 8, size); try { gms.getGroupHandle().sendMessage(GMS_READ_ONLY_COMPONENT_NAME, payload); _logger.log(Level.WARNING, "ReadOnlyBeanMessageCallBack: " + " Sent message for ejbID: " + ejbID); } catch (Exception ex) { _logger.log(Level.WARNING, "ReadOnlyBeanMessageCallBack: " + "Got exception during notifyRefresh", ex); } }
/** * Must be called by client after recovery operation is complete * to bring the group state up-to-date on this recovery operation. * Not doing so will leave a stale entry in the group's state. */ @Override public void release() throws SignalReleaseException { try { // deprecated fencining in gms proper. // ctx.getGroupHandle().lowerFence(componentName, failedMember); // logger.log(Level.FINE, "lowered fence for component "+ componentName +" and member "+ failedMember); // GMS will reissue FailureRecovery if instance appointed as Recovery Agent fails before removing // its appointment. ctx.getGroupHandle().removeRecoveryAppointments(failedMember, componentName); failedMember=null; } catch ( GMSException e ) { throw new SignalReleaseException( e ); } }
private static boolean resolveWithEasySelectionAlgorithm(final List<GMSMember> oldViewCache, final String failedMember, final String groupName) { boolean recover = false; String recoverer = null; final GMSContext ctx = GMSContextFactory.getGMSContext(groupName); final String self = ctx.getServerIdentityToken(); final List<String> liveCache = getMemberTokens(oldViewCache, ctx.getSuspectList(), ctx.getGroupHandle().getAllCurrentMembers()); logger.log(Level.FINE, "LiveCache = " + liveCache); final List<String> coreCache = getCoreMembers(oldViewCache); logger.log(Level.FINE, "CoreCache = " + coreCache); for (String coreMember : coreCache) { if (liveCache.contains(coreMember)) { recoverer = coreMember; break; } } if (recoverer != null) { if (recoverer.equals(self)) { recover = true; } setRecoverySelectionState(recoverer, failedMember, groupName); } return recover; }
List<String> startedGMSMembers = gms.getGroupHandle().getCurrentCoreMembers(); if (startedGMSMembers.size() == 0) { try {
/** * This is called by the container after it has called refresh * * @param ejbID * the ejbID that uniquely identifies the container * @param pk * The primary key of the bean(s) that is to be refreshed */ public void notifyRefreshAll(long ejbID) { byte[] payload = new byte[8]; Logger _logger = ejbContainerUtil.getLogger(); longToBytes(ejbID, payload, 0); try { gms.getGroupHandle().sendMessage(GMS_READ_ONLY_COMPONENT_NAME, payload); } catch (Exception ex) { _logger.log(Level.WARNING, "ReadOnlyBeanMessageCallBack: " + "Got exception during notifyRefreshAll", ex); } }
final String thisMember = getGMSContext().getServerIdentityToken(); String remoteDSCMemberToken = memberToken; List<String> currentMembers = getGMSContext().getGroupHandle().getAllCurrentMembers(); ": returning empty map. " + "reason: isShuttingDown()=" + getGMSContext().isShuttingDown() + " isCurrentMember=" + getGMSContext().getGroupHandle().getAllCurrentMembers().contains(memberToken));
final String thisMember = getGMSContext().getServerIdentityToken(); String remoteDSCMemberToken = memberToken; List<String> currentMembers = getGMSContext().getGroupHandle().getAllCurrentMembers(); ": returning empty map. " + "reason: isShuttingDown()=" + getGMSContext().isShuttingDown() + " isCurrentMember=" + getGMSContext().getGroupHandle().getAllCurrentMembers().contains(memberToken));