use of org.apache.catalina.tribes.Member in project tomcat by apache.
the class StaticMembershipInterceptor method start.
/**
* {@inheritDoc}
* <p>
* Sends notifications upwards.
*/
@Override
public void start(int svc) throws ChannelException {
if ((Channel.SND_RX_SEQ & svc) == Channel.SND_RX_SEQ) {
super.start(Channel.SND_RX_SEQ);
}
if ((Channel.SND_TX_SEQ & svc) == Channel.SND_TX_SEQ) {
super.start(Channel.SND_TX_SEQ);
}
final ChannelInterceptorBase base = this;
ScheduledExecutorService executor = getChannel().getUtilityExecutor();
for (final Member member : members) {
Runnable r = () -> {
base.memberAdded(member);
if (getfirstInterceptor().getMember(member) != null) {
sendLocalMember(new Member[] { member });
}
};
executor.execute(r);
}
super.start(svc & (~Channel.SND_RX_SEQ) & (~Channel.SND_TX_SEQ));
// check required interceptors
TcpFailureDetector failureDetector = null;
TcpPingInterceptor pingInterceptor = null;
ChannelInterceptor prev = getPrevious();
while (prev != null) {
if (prev instanceof TcpFailureDetector) {
failureDetector = (TcpFailureDetector) prev;
}
if (prev instanceof TcpPingInterceptor) {
pingInterceptor = (TcpPingInterceptor) prev;
}
prev = prev.getPrevious();
}
if (failureDetector == null) {
log.warn(sm.getString("staticMembershipInterceptor.no.failureDetector"));
}
if (pingInterceptor == null) {
log.warn(sm.getString("staticMembershipInterceptor.no.pingInterceptor"));
}
}
use of org.apache.catalina.tribes.Member in project tomcat by apache.
the class TcpFailureDetector method performBasicCheck.
protected void performBasicCheck() {
// update all alive times
Member[] members = super.getMembers();
for (int i = 0; members != null && i < members.length; i++) {
if (addSuspects.containsKey(members[i]) && membership.getMember(members[i]) == null) {
// avoid temporary adding member.
continue;
}
if (membership.memberAlive(members[i])) {
// we don't have this one in our membership, check to see if the member is alive
if (memberAlive(members[i])) {
log.warn(sm.getString("tcpFailureDetector.performBasicCheck.memberAdded", members[i]));
super.memberAdded(members[i]);
} else {
membership.removeMember(members[i]);
}
// end if
}
// end if
}
// for
// check suspect members if they are still alive,
// if not, simply issue the memberDisappeared message
Member[] keys = removeSuspects.keySet().toArray(new Member[0]);
for (Member m : keys) {
if (membership.getMember(m) != null && (!memberAlive(m))) {
membership.removeMember(m);
if (m instanceof StaticMember) {
addSuspects.put(m, Long.valueOf(System.currentTimeMillis()));
}
super.memberDisappeared(m);
removeSuspects.remove(m);
if (log.isInfoEnabled()) {
log.info(sm.getString("tcpFailureDetector.suspectMember.dead", m));
}
} else {
if (removeSuspectsTimeout > 0) {
long timeNow = System.currentTimeMillis();
int timeIdle = (int) ((timeNow - removeSuspects.get(m).longValue()) / 1000L);
if (timeIdle > removeSuspectsTimeout) {
// remove suspect member
removeSuspects.remove(m);
}
}
}
}
// check add suspects members if they are alive now,
// if they are, simply issue the memberAdded message
keys = addSuspects.keySet().toArray(new Member[0]);
for (Member m : keys) {
if (membership.getMember(m) == null && (memberAlive(m))) {
membership.memberAlive(m);
super.memberAdded(m);
addSuspects.remove(m);
if (log.isInfoEnabled()) {
log.info(sm.getString("tcpFailureDetector.suspectMember.alive", m));
}
}
// end if
}
}
use of org.apache.catalina.tribes.Member in project tomcat by apache.
the class Membership method expire.
/**
* Runs a refresh cycle and returns a list of members that has expired.
* This also removes the members from the membership, in such a way that
* getMembers() = getMembers() - expire()
* @param maxtime - the max time a member can remain unannounced before it is considered dead.
* @return the list of expired members
*/
public Member[] expire(long maxtime) {
synchronized (membersLock) {
if (!hasMembers()) {
return EMPTY_MEMBERS;
}
ArrayList<Member> list = null;
for (MbrEntry entry : map.values()) {
if (entry.hasExpired(maxtime)) {
if (list == null) {
// Only need a list when members are expired (smaller gc)
list = new java.util.ArrayList<>();
}
list.add(entry.getMember());
}
}
if (list != null) {
Member[] result = new Member[list.size()];
list.toArray(result);
for (Member member : result) {
removeMember(member);
}
return result;
} else {
return EMPTY_MEMBERS;
}
}
}
use of org.apache.catalina.tribes.Member in project tomcat by apache.
the class StaticMembershipProvider method memberAdded.
protected void memberAdded(Member member) {
Member mbr = setupMember(member);
if (membership.memberAlive(mbr)) {
Runnable r = () -> {
String name = Thread.currentThread().getName();
try {
Thread.currentThread().setName("StaticMembership-memberAdded");
membershipListener.memberAdded(mbr);
} finally {
Thread.currentThread().setName(name);
}
};
executor.execute(r);
}
}
use of org.apache.catalina.tribes.Member in project tomcat by apache.
the class StaticMembershipProvider method messageReceived.
@Override
public void messageReceived(Serializable msg, Member sender) {
MemberMessage memMsg = (MemberMessage) msg;
Member member = memMsg.getMember();
if (memMsg.getMsgtype() == MemberMessage.MSG_START) {
memberAdded(member);
} else if (memMsg.getMsgtype() == MemberMessage.MSG_STOP) {
memberDisappeared(member);
} else if (memMsg.getMsgtype() == MemberMessage.MSG_PING) {
memberAlive(member);
}
}
Aggregations