openvidu-server: seal stopped metadata file before posting CDR/Webhook event

pull/531/head
pabloFuente 2020-09-03 14:42:45 +02:00
parent b1836df20b
commit 401fc3d7fa
5 changed files with 13 additions and 9 deletions

View File

@ -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();

View File

@ -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();

View File

@ -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);

View File

@ -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

View File

@ -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);
}