From 401fc3d7fa976fb22c05620c16ca6803301895c2 Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Thu, 3 Sep 2020 14:42:45 +0200 Subject: [PATCH] openvidu-server: seal stopped metadata file before posting CDR/Webhook event --- .../service/ComposedQuickStartRecordingService.java | 5 +---- .../recording/service/ComposedRecordingService.java | 5 +---- .../server/recording/service/RecordingManager.java | 2 ++ .../server/recording/service/RecordingService.java | 9 +++++++++ .../recording/service/SingleStreamRecordingService.java | 1 - 5 files changed, 13 insertions(+), 9 deletions(-) diff --git a/openvidu-server/src/main/java/io/openvidu/server/recording/service/ComposedQuickStartRecordingService.java b/openvidu-server/src/main/java/io/openvidu/server/recording/service/ComposedQuickStartRecordingService.java index 7bd09037..c5325740 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/recording/service/ComposedQuickStartRecordingService.java +++ b/openvidu-server/src/main/java/io/openvidu/server/recording/service/ComposedQuickStartRecordingService.java @@ -119,10 +119,7 @@ public class ComposedQuickStartRecordingService extends ComposedRecordingService recording = updateRecordingAttributes(recording); - final String folderPath = this.openviduConfig.getOpenViduRecordingPath() + recording.getId() + "/"; - final String metadataFilePath = folderPath + RecordingManager.RECORDING_ENTITY_FILE + recording.getId(); - this.sealRecordingMetadataFileAsReady(recording, recording.getSize(), recording.getDuration(), - metadataFilePath); + this.sealRecordingMetadataFileAsReady(recording, recording.getSize(), recording.getDuration(), getMetadataFilePath(recording)); cleanRecordingMaps(recording); final long timestamp = System.currentTimeMillis(); 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 a645e6d2..8ecc5c1d 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 @@ -103,7 +103,6 @@ public class ComposedRecordingService extends RecordingService { @Override public Recording stopRecording(Session session, Recording recording, EndReason reason) { - recording = this.sealRecordingMetadataFileAsStopped(recording); if (recording.hasVideo()) { return this.stopRecordingWithVideo(session, recording, reason); } else { @@ -297,10 +296,8 @@ public class ComposedRecordingService extends RecordingService { stopAndRemoveRecordingContainer(recording, containerId, 30); recording = updateRecordingAttributes(recording); - final String folderPath = this.openviduConfig.getOpenViduRecordingPath() + recording.getId() + "/"; - final String metadataFilePath = folderPath + RecordingManager.RECORDING_ENTITY_FILE + recording.getId(); this.sealRecordingMetadataFileAsReady(recording, recording.getSize(), recording.getDuration(), - metadataFilePath); + getMetadataFilePath(recording)); cleanRecordingMaps(recording); final long timestamp = System.currentTimeMillis(); diff --git a/openvidu-server/src/main/java/io/openvidu/server/recording/service/RecordingManager.java b/openvidu-server/src/main/java/io/openvidu/server/recording/service/RecordingManager.java index 41b901f7..57d41d1b 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/recording/service/RecordingManager.java +++ b/openvidu-server/src/main/java/io/openvidu/server/recording/service/RecordingManager.java @@ -310,6 +310,8 @@ public class RecordingManager { recording = this.sessionsRecordings.get(session.getSessionId()); } + recording = ((RecordingService) singleStreamRecordingService).sealRecordingMetadataFileAsStopped(recording); + final long timestamp = System.currentTimeMillis(); this.cdr.recordRecordingStatusChanged(recording, reason, timestamp, Status.stopped); cdr.recordRecordingStopped(recording, reason, timestamp); 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 15317a07..385899e3 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 @@ -175,6 +175,10 @@ public abstract class RecordingService { protected OpenViduException failStartRecording(Session session, Recording recording, String errorMessage) { log.error("Recording start failed for session {}: {}", session.getSessionId(), errorMessage); recording.setStatus(io.openvidu.java.client.Recording.Status.failed); + + sealRecordingMetadataFileAsReady(recording, recording.getSize(), recording.getDuration(), + getMetadataFilePath(recording)); + this.recordingManager.startingRecordings.remove(recording.getId()); this.recordingManager.sessionsRecordingsStarting.remove(session.getSessionId()); this.stopRecording(session, recording, null); @@ -186,6 +190,11 @@ public abstract class RecordingService { this.recordingManager.startedRecordings.remove(recording.getId()); } + protected String getMetadataFilePath(Recording recording) { + final String folderPath = this.openviduConfig.getOpenViduRecordingPath() + recording.getId() + "/"; + return folderPath + RecordingManager.RECORDING_ENTITY_FILE + recording.getId(); + } + /** * Simple wrapper for returning update RecordingProperties and a free * recordingId when starting a new 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 0e246e34..404ca521 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 @@ -139,7 +139,6 @@ public class SingleStreamRecordingService extends RecordingService { @Override public Recording stopRecording(Session session, Recording recording, EndReason reason) { - recording = this.sealRecordingMetadataFileAsStopped(recording); return this.stopRecording(session, recording, reason, 0); }