diff --git a/openvidu-server/src/main/java/io/openvidu/server/OpenViduServer.java b/openvidu-server/src/main/java/io/openvidu/server/OpenViduServer.java index fd0ec597..ee2d8cbe 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/OpenViduServer.java +++ b/openvidu-server/src/main/java/io/openvidu/server/OpenViduServer.java @@ -215,7 +215,7 @@ public class OpenViduServer implements JsonRpcConfigurer { } public static String getContainerIp() throws IOException, InterruptedException { - return CommandExecutor.execCommand("/bin/sh", "-c", "hostname -i | awk '{print $1}'"); + return CommandExecutor.execCommand(5000, "/bin/sh", "-c", "hostname -i | awk '{print $1}'"); } public static void main(String[] args) throws Exception { diff --git a/openvidu-server/src/main/java/io/openvidu/server/coturn/BashCoturnCredentialsService.java b/openvidu-server/src/main/java/io/openvidu/server/coturn/BashCoturnCredentialsService.java index 95327cb4..e883ad55 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/coturn/BashCoturnCredentialsService.java +++ b/openvidu-server/src/main/java/io/openvidu/server/coturn/BashCoturnCredentialsService.java @@ -35,7 +35,7 @@ public class BashCoturnCredentialsService extends CoturnCredentialsService { @PostConstruct private void initialize() { try { - String response = CommandExecutor.execCommand("/bin/sh", "-c", + String response = CommandExecutor.execCommand(10000, "/bin/sh", "-c", "turnadmin -l -N " + this.coturnDatabaseString); if (response.contains("turnadmin: not found")) { // No coturn installed in the host machine @@ -54,10 +54,10 @@ public class BashCoturnCredentialsService extends CoturnCredentialsService { this.logPath = logFile.substring(0, logFile.lastIndexOf('/') + 1); log.info("Path of COTURN log files: " + this.logPath); } - response = CommandExecutor.execCommand("/bin/sh", "-c", + response = CommandExecutor.execCommand(10000, "/bin/sh", "-c", "redis-cli -a " + this.openviduConfig.getCoturnDatabasePassword() + " -n " + this.openviduConfig.getCoturnDatabaseDbname() + " flushdb"); - String response2 = CommandExecutor.execCommand("/bin/sh", "-c", + String response2 = CommandExecutor.execCommand(10000, "/bin/sh", "-c", "redis-cli -a " + this.openviduConfig.getCoturnDatabasePassword() + " -n " + this.openviduConfig.getCoturnDatabaseDbname() + " --scan --pattern '*'"); if ("OK".equals(response) && response2.isEmpty()) { @@ -80,7 +80,7 @@ public class BashCoturnCredentialsService extends CoturnCredentialsService { String user = RandomStringUtils.randomAlphanumeric(6).toUpperCase(); String pass = RandomStringUtils.randomAlphanumeric(6).toLowerCase(); String command = "turnadmin -a -u " + user + " -r openvidu -p " + pass + " -N " + this.coturnDatabaseString; - String response = CommandExecutor.execCommand("/bin/sh", "-c", command); + String response = CommandExecutor.execCommand(10000, "/bin/sh", "-c", command); if (response.contains("connection success: " + this.trimmedCoturnDatabaseString)) { credentials = new TurnCredentials(user, pass); this.cleanTurnLogFiles(); @@ -99,7 +99,7 @@ public class BashCoturnCredentialsService extends CoturnCredentialsService { String command = "turnadmin -d -u " + user + " -r openvidu -N " + this.coturnDatabaseString; String response = ""; try { - response = CommandExecutor.execCommand("/bin/sh", "-c", command); + response = CommandExecutor.execCommand(10000, "/bin/sh", "-c", command); this.cleanTurnLogFiles(); } catch (IOException | InterruptedException e) { e.printStackTrace(); @@ -111,7 +111,7 @@ public class BashCoturnCredentialsService extends CoturnCredentialsService { private void cleanTurnLogFiles() throws IOException, InterruptedException { if (this.logCounter.incrementAndGet() > LOG_LIMIT) { - CommandExecutor.execCommand("/bin/sh", "-c", "rm " + this.logPath + "turn_*.log"); + CommandExecutor.execCommand(10000, "/bin/sh", "-c", "rm " + this.logPath + "turn_*.log"); log.info("Garbage collector cleaning turn log files at path " + this.logPath); this.logCounter.set(0); } diff --git a/openvidu-server/src/main/java/io/openvidu/server/kurento/endpoint/PublisherEndpoint.java b/openvidu-server/src/main/java/io/openvidu/server/kurento/endpoint/PublisherEndpoint.java index d2b0d748..e35de370 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/kurento/endpoint/PublisherEndpoint.java +++ b/openvidu-server/src/main/java/io/openvidu/server/kurento/endpoint/PublisherEndpoint.java @@ -193,7 +193,7 @@ public class PublisherEndpoint extends MediaEndpoint { public synchronized String publish(SdpType sdpType, String sdpString, boolean doLoopback) { registerOnIceCandidateEventListener(this.getOwner().getParticipantPublicId()); if (doLoopback) { - connect(this.getEndpoint(), null); + connect(this.getEndpoint()); } else { innerConnect(); } diff --git a/openvidu-server/src/main/java/io/openvidu/server/recording/service/RecordingService.java b/openvidu-server/src/main/java/io/openvidu/server/recording/service/RecordingService.java index fb09cd51..acfaa1d0 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/recording/service/RecordingService.java +++ b/openvidu-server/src/main/java/io/openvidu/server/recording/service/RecordingService.java @@ -160,7 +160,7 @@ public abstract class RecordingService { protected void updateFilePermissions(String folder) { String command = "chmod -R 777 " + folder; try { - String response = CommandExecutor.execCommand("/bin/sh", "-c", command); + String response = CommandExecutor.execCommand(5000, "/bin/sh", "-c", command); if ("".equals(response)) { log.info("KMS recording file permissions successfully updated"); } else { diff --git a/openvidu-server/src/main/java/io/openvidu/server/utils/CommandExecutor.java b/openvidu-server/src/main/java/io/openvidu/server/utils/CommandExecutor.java index 4e7a1165..9d933ed0 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/utils/CommandExecutor.java +++ b/openvidu-server/src/main/java/io/openvidu/server/utils/CommandExecutor.java @@ -34,34 +34,33 @@ public class CommandExecutor { private static final Logger log = LoggerFactory.getLogger(CommandExecutor.class); - private static final long MILLIS_TIMEOUT = 10000; - - public static String execCommand(String... command) throws IOException, InterruptedException { + public static String execCommand(long msTimeout, String... command) throws IOException, InterruptedException { ProcessBuilder processBuilder = new ProcessBuilder(command); processBuilder.redirectErrorStream(true); - return commonExecCommand(processBuilder); + return commonExecCommand(msTimeout, processBuilder); } - public static String execCommandRedirectError(File errorOutputFile, String... command) + public static String execCommandRedirectError(long msTimeout, File errorOutputFile, String... command) throws IOException, InterruptedException { ProcessBuilder processBuilder = new ProcessBuilder(command).redirectError(errorOutputFile); - return commonExecCommand(processBuilder); + return commonExecCommand(msTimeout, processBuilder); } - public static void execCommandRedirectStandardOutputAndError(File standardOutputFile, File errorOutputFile, - String... command) throws IOException, InterruptedException { + public static void execCommandRedirectStandardOutputAndError(long msTimeout, File standardOutputFile, + File errorOutputFile, String... command) throws IOException, InterruptedException { ProcessBuilder processBuilder = new ProcessBuilder(command).redirectOutput(standardOutputFile) .redirectError(errorOutputFile); Process process = processBuilder.start(); - if (!process.waitFor(MILLIS_TIMEOUT, TimeUnit.MILLISECONDS)) { - log.error("Command {} did not receive a response in {} ms", Arrays.toString(command), MILLIS_TIMEOUT); + if (!process.waitFor(msTimeout, TimeUnit.MILLISECONDS)) { + log.error("Command {} did not receive a response in {} ms", Arrays.toString(command), msTimeout); String errorMsg = "Current process status of host:\n" + gatherLinuxHostInformation(); log.error(errorMsg); throw new IOException(errorMsg); } } - private static String commonExecCommand(ProcessBuilder processBuilder) throws IOException, InterruptedException { + private static String commonExecCommand(long msTimeout, ProcessBuilder processBuilder) + throws IOException, InterruptedException { Process process = processBuilder.start(); StringBuilder processOutput = new StringBuilder(); String output; @@ -75,9 +74,9 @@ public class CommandExecutor { processOutput.append(readLine + System.lineSeparator()); } - if (!process.waitFor(MILLIS_TIMEOUT, TimeUnit.MILLISECONDS)) { + if (!process.waitFor(msTimeout, TimeUnit.MILLISECONDS)) { log.error("Command {} did not receive a response in {} ms", - Arrays.toString(processBuilder.command().toArray()), MILLIS_TIMEOUT); + Arrays.toString(processBuilder.command().toArray()), msTimeout); String errorMsg = "Current process status of host:\n" + gatherLinuxHostInformation(); log.error(errorMsg); throw new IOException(errorMsg); @@ -96,7 +95,7 @@ public class CommandExecutor { public static String gatherLinuxHostInformation() throws IOException, InterruptedException { final String psCommand = "ps -eo pid,ppid,user,%mem,%cpu,cmd --sort=-%cpu"; - return execCommand("/bin/sh", "-c", psCommand); + return execCommand(5000, "/bin/sh", "-c", psCommand); } } diff --git a/openvidu-server/src/main/java/io/openvidu/server/utils/DockerManager.java b/openvidu-server/src/main/java/io/openvidu/server/utils/DockerManager.java index 48186b61..7a94afe5 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/utils/DockerManager.java +++ b/openvidu-server/src/main/java/io/openvidu/server/utils/DockerManager.java @@ -103,8 +103,8 @@ public class DockerManager { } } - public String runContainer(String container, String containerName, String user, List volumes, List binds, - String networkMode, List envs, List command) throws Exception { + public String runContainer(String container, String containerName, String user, List volumes, + List binds, String networkMode, List envs, List command) throws Exception { CreateContainerCmd cmd = dockerClient.createContainerCmd(container).withEnv(envs); if (containerName != null) { @@ -123,7 +123,7 @@ public class DockerManager { hostConfig.withBinds(binds); } - if(command != null) { + if (command != null) { cmd.withCmd(command); } @@ -194,7 +194,7 @@ public class DockerManager { public String getContainerIp(String containerId) { try { - return CommandExecutor.execCommand("/bin/sh", "-c", + return CommandExecutor.execCommand(5000, "/bin/sh", "-c", "docker inspect -f \"{{ .NetworkSettings.IPAddress }}\" " + containerId); } catch (IOException | InterruptedException e) { log.error(e.getMessage()); @@ -215,7 +215,7 @@ public class DockerManager { static public String getDockerGatewayIp() { try { - return CommandExecutor.execCommand("/bin/sh", "-c", + return CommandExecutor.execCommand(5000, "/bin/sh", "-c", "docker network inspect bridge --format='{{(index .IPAM.Config 0).Gateway}}'"); } catch (IOException | InterruptedException e) { log.error(e.getMessage());