From a00c90423bcf8915d40b22241a8bbf455c129591 Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Mon, 1 Jul 2019 13:51:16 +0200 Subject: [PATCH] openvidu-server: recording stop process fix --- .../service/ComposedRecordingService.java | 21 +++++++++++-------- .../recording/service/RecordingService.java | 5 +++-- .../service/SingleStreamRecordingService.java | 13 ++++++------ 3 files changed, 22 insertions(+), 17 deletions(-) diff --git a/openvidu-server/src/main/java/io/openvidu/server/recording/service/ComposedRecordingService.java b/openvidu-server/src/main/java/io/openvidu/server/recording/service/ComposedRecordingService.java index eac00ed8..85979c39 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/recording/service/ComposedRecordingService.java +++ b/openvidu-server/src/main/java/io/openvidu/server/recording/service/ComposedRecordingService.java @@ -378,15 +378,18 @@ public class ComposedRecordingService extends RecordingService { // TODO: DOWNLOAD FILE IF SCALABILITY MODE final Recording[] finalRecordingArray = new Recording[1]; + finalRecordingArray[0] = recording; try { - this.recordingDownloader.downloadRecording(recording, null, () -> { - String filesPath = this.openviduConfig.getOpenViduRecordingPath() + recording.getId() + "/"; - File videoFile = new File(filesPath + recording.getName() + ".webm"); + this.recordingDownloader.downloadRecording(finalRecordingArray[0], null, () -> { + String filesPath = this.openviduConfig.getOpenViduRecordingPath() + finalRecordingArray[0].getId() + + "/"; + File videoFile = new File(filesPath + finalRecordingArray[0].getName() + ".webm"); long finalSize = videoFile.length(); double finalDuration = (double) compositeWrapper.getDuration() / 1000; this.updateFilePermissions(filesPath); - finalRecordingArray[0] = this.sealRecordingMetadataFileAsReady(recording, finalSize, finalDuration, - filesPath + RecordingManager.RECORDING_ENTITY_FILE + recording.getId()); + finalRecordingArray[0] = this.sealRecordingMetadataFileAsReady(finalRecordingArray[0], finalSize, + finalDuration, + filesPath + RecordingManager.RECORDING_ENTITY_FILE + finalRecordingArray[0].getId()); final long timestamp = System.currentTimeMillis(); cdr.recordRecordingStopped(finalRecordingArray[0], reason, timestamp); @@ -394,15 +397,15 @@ public class ComposedRecordingService extends RecordingService { finalRecordingArray[0].getStatus()); }); } catch (IOException e) { - log.error("Error while downloading recording {}: {}", recording.getName(), e.getMessage()); + log.error("Error while downloading recording {}: {}", finalRecordingArray[0].getName(), e.getMessage()); } - Recording finalRecording = finalRecordingArray[0] != null ? finalRecordingArray[0] : recording; if (reason != null && session != null) { - this.recordingManager.sessionHandler.sendRecordingStoppedNotification(session, finalRecording, reason); + this.recordingManager.sessionHandler.sendRecordingStoppedNotification(session, finalRecordingArray[0], + reason); } - return finalRecording; + return finalRecordingArray[0]; } private void waitForVideoFileNotEmpty(Recording recording) throws OpenViduException { 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 915044c2..f0f59056 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 @@ -115,9 +115,10 @@ public abstract class RecordingService { recording.setStatus(status); recording.setSize(size); // Size in bytes recording.setDuration(duration > 0 ? duration : 0); // Duration in seconds - this.fileWriter.overwriteFile(metadataFilePath, recording.toJson().toString()); - log.info("Sealed recording metadata file at {} with status [{}]", metadataFilePath, status.name()); + if (this.fileWriter.overwriteFile(metadataFilePath, recording.toJson().toString())) { + log.info("Sealed recording metadata file at {} with status [{}]", metadataFilePath, status.name()); + } return recording; } diff --git a/openvidu-server/src/main/java/io/openvidu/server/recording/service/SingleStreamRecordingService.java b/openvidu-server/src/main/java/io/openvidu/server/recording/service/SingleStreamRecordingService.java index 7610f704..4d7eea18 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/recording/service/SingleStreamRecordingService.java +++ b/openvidu-server/src/main/java/io/openvidu/server/recording/service/SingleStreamRecordingService.java @@ -162,15 +162,16 @@ public class SingleStreamRecordingService extends RecordingService { // TODO: DOWNLOAD FILES IF SCALABILITY MODE final Recording[] finalRecordingArray = new Recording[1]; + finalRecordingArray[0] = recording; try { - this.recordingDownloader.downloadRecording(recording, wrappers.keySet(), () -> { + this.recordingDownloader.downloadRecording(finalRecordingArray[0], wrappers.keySet(), () -> { // Update recording entity files with final file size for (RecorderEndpointWrapper wrapper : wrappers.values()) { if (wrapper.getSize() == 0) { updateIndividualMetadataFile(wrapper); } } - finalRecordingArray[0] = this.sealMetadataFiles(recording); + finalRecordingArray[0] = this.sealMetadataFiles(finalRecordingArray[0]); final long timestamp = System.currentTimeMillis(); cdr.recordRecordingStopped(finalRecordingArray[0], reason, timestamp); @@ -178,15 +179,15 @@ public class SingleStreamRecordingService extends RecordingService { finalRecordingArray[0].getStatus()); }); } catch (IOException e) { - log.error("Error while downloading recording {}", recording.getName()); + log.error("Error while downloading recording {}", finalRecordingArray[0].getName()); } - Recording finalRecording = finalRecordingArray[0] != null ? finalRecordingArray[0] : recording; if (reason != null && session != null) { - this.recordingManager.sessionHandler.sendRecordingStoppedNotification(session, finalRecording, reason); + this.recordingManager.sessionHandler.sendRecordingStoppedNotification(session, finalRecordingArray[0], + reason); } - return finalRecording; + return finalRecordingArray[0]; } public void startRecorderEndpointForPublisherEndpoint(Session session, String recordingId,