From 0491046e7eb741586f70f17d0b19826409489cb2 Mon Sep 17 00:00:00 2001 From: Richard Alam <ritzalam@gmail.com> Date: Tue, 1 Oct 2019 14:31:47 -0700 Subject: [PATCH] - stop trying to eject after several attempts if unsuccessful. --- .../freeswitch/FreeswitchApplication.java | 2 +- .../actions/CheckIfConfIsRunningCommand.java | 62 +++++++++++-------- 2 files changed, 36 insertions(+), 28 deletions(-) diff --git a/akka-bbb-fsesl/src/main/java/org/bigbluebutton/freeswitch/voice/freeswitch/FreeswitchApplication.java b/akka-bbb-fsesl/src/main/java/org/bigbluebutton/freeswitch/voice/freeswitch/FreeswitchApplication.java index 74ccdf05f1..2065107c59 100755 --- a/akka-bbb-fsesl/src/main/java/org/bigbluebutton/freeswitch/voice/freeswitch/FreeswitchApplication.java +++ b/akka-bbb-fsesl/src/main/java/org/bigbluebutton/freeswitch/voice/freeswitch/FreeswitchApplication.java @@ -170,7 +170,7 @@ public class FreeswitchApplication implements IDelayedCommandListener{ CheckIfConfIsRunningCommand command = new CheckIfConfIsRunningCommand(cmd.getRoom(), cmd.getRequesterId(), - delayedCommandSenderService); + delayedCommandSenderService, 0); delayedCommandSenderService.handleMessage(command, 5000); } else if (command instanceof TransferUserToMeetingCommand) { TransferUserToMeetingCommand cmd = (TransferUserToMeetingCommand) command; diff --git a/akka-bbb-fsesl/src/main/java/org/bigbluebutton/freeswitch/voice/freeswitch/actions/CheckIfConfIsRunningCommand.java b/akka-bbb-fsesl/src/main/java/org/bigbluebutton/freeswitch/voice/freeswitch/actions/CheckIfConfIsRunningCommand.java index a6f8e8e5f3..140d3b61da 100755 --- a/akka-bbb-fsesl/src/main/java/org/bigbluebutton/freeswitch/voice/freeswitch/actions/CheckIfConfIsRunningCommand.java +++ b/akka-bbb-fsesl/src/main/java/org/bigbluebutton/freeswitch/voice/freeswitch/actions/CheckIfConfIsRunningCommand.java @@ -38,10 +38,14 @@ import java.util.regex.Matcher; public class CheckIfConfIsRunningCommand extends FreeswitchCommand { private static Logger log = LoggerFactory.getLogger(CheckIfConfIsRunningCommand.class); private DelayedCommandSenderService delayedCommandSenderService; + private Integer forceEjectCount = 0; - public CheckIfConfIsRunningCommand(String room, String requesterId, DelayedCommandSenderService delayedCommandSenderService) { + public CheckIfConfIsRunningCommand(String room, String requesterId, + DelayedCommandSenderService delayedCommandSenderService, + Integer forceEjectCount) { super(room, requesterId); this.delayedCommandSenderService = delayedCommandSenderService; + this.forceEjectCount = forceEjectCount; } @Override @@ -85,36 +89,40 @@ public class CheckIfConfIsRunningCommand extends FreeswitchCommand { Integer numUsers = confXML.getConferenceList().size(); if (numUsers > 0) { - log.info("Check conference response: " + responseBody); log.warn("WARNING! Failed to eject all users from conf={},numUsers={}.", room, numUsers); - for(ConferenceMember member : confXML.getConferenceList()) { - if ("caller".equals(member.getMemberType())) { - //Foreach found member in conference create a JoinedEvent - String callerId = member.getCallerId(); - String callerIdName = member.getCallerIdName(); - String voiceUserId = callerIdName; - String uuid = member.getUUID(); - log.info("WARNING! User possibly stuck in conference. uuid=" + uuid - + ",caller=" + callerIdName + ",callerId=" + callerId + ",conf=" + room); - - // We have stubborn users that cannot be ejected from the voice conference. - // This results in the voice conference hanging around for potentially a long time. - // Force ejection by killing their uuid. (ralam Oct 1, 2019) - ForceEjectUserCommand forceEjectUserCommand = new ForceEjectUserCommand(getRoom(), - member.getId().toString(), - member.getUUID()); - delayedCommandSenderService.handleMessage(forceEjectUserCommand, 5000L); - - } else if ("recording_node".equals(member.getMemberType())) { - + if (forceEjectCount <= 5) { + for (ConferenceMember member : confXML.getConferenceList()) { + if ("caller".equals(member.getMemberType())) { + //Foreach found member in conference create a JoinedEvent + String callerId = member.getCallerId(); + String callerIdName = member.getCallerIdName(); + String voiceUserId = callerIdName; + String uuid = member.getUUID(); + log.info("WARNING! User possibly stuck in conference. uuid=" + uuid + + ",caller=" + callerIdName + ",callerId=" + callerId + ",conf=" + room); + + // We have stubborn users that cannot be ejected from the voice conference. + // This results in the voice conference hanging around for potentially a long time. + // Force ejection by killing their uuid. (ralam Oct 1, 2019) + ForceEjectUserCommand forceEjectUserCommand = new ForceEjectUserCommand(getRoom(), + member.getId().toString(), + member.getUUID()); + delayedCommandSenderService.handleMessage(forceEjectUserCommand, 5000L); + + } else if ("recording_node".equals(member.getMemberType())) { + + } } + // Check again if the conference is still running after ejecting the users. (ralam Oct. 1, 2019) + CheckIfConfIsRunningCommand command = new CheckIfConfIsRunningCommand(getRoom(), + getRequesterId(), + delayedCommandSenderService, + forceEjectCount + 1); + delayedCommandSenderService.handleMessage(command, 10000); + } else { + log.warn("Failed to eject users for voice conf " + getRoom() + " after " + forceEjectCount + " tries."); } - // Check again if the conference is still running after ejecting the users. (ralam Oct. 1, 2019) - CheckIfConfIsRunningCommand command = new CheckIfConfIsRunningCommand(getRoom(), - getRequesterId(), - delayedCommandSenderService); - delayedCommandSenderService.handleMessage(command, 10000); } else { log.info("INFO! Successfully ejected all users from conference {}.", room); } -- GitLab