Fix recording size not properly being reported and transferred between server and client
This commit is contained in:
parent
f55a5fc644
commit
3d00b45c7d
|
@ -226,7 +226,7 @@ public class Recording implements Serializable {
|
|||
} else {
|
||||
long now = System.currentTimeMillis();
|
||||
if (now - lastSizeUpdate > 2500) {
|
||||
log.debug("full size update for {}", this);
|
||||
log.trace("full size update for {}", this);
|
||||
sizeInByte = getSize();
|
||||
lastSizeUpdate = now;
|
||||
}
|
||||
|
|
|
@ -397,7 +397,14 @@ public class RemoteRecorder implements Recorder {
|
|||
if (response.isSuccessful()) {
|
||||
RecordingListResponse resp = mapper.readValue(json, RecordingListResponse.class);
|
||||
if (resp.status.equals(SUCCESS)) {
|
||||
List<Recording> newRecordings = resp.recordings.stream().map(Mappers.getMapper(RecordingMapper.class)::toRecording).collect(Collectors.toList());
|
||||
List<Recording> newRecordings = resp.recordings.stream()
|
||||
.map(dto -> {
|
||||
var rec = Mappers.getMapper(RecordingMapper.class).toRecording(dto);
|
||||
rec.setSizeInByte(dto.getSizeInByte());
|
||||
rec.setLastSizeUpdate(Instant.now().toEpochMilli());
|
||||
return rec;
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
// fire changed events
|
||||
for (Recording recording : recordings) {
|
||||
if (newRecordings.contains(recording)) {
|
||||
|
|
|
@ -12,12 +12,14 @@ import java.time.Instant;
|
|||
import java.util.List;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.atomic.AtomicLong;
|
||||
|
||||
import static ctbrec.recorder.download.StreamSource.UNKNOWN;
|
||||
|
||||
@Slf4j
|
||||
public abstract class AbstractDownload implements RecordingProcess {
|
||||
|
||||
protected AtomicLong downloadedBytes = new AtomicLong();
|
||||
protected Instant startTime;
|
||||
protected Instant rescheduleTime = Instant.now();
|
||||
protected Model model = new UnknownModel();
|
||||
|
@ -112,4 +114,9 @@ public abstract class AbstractDownload implements RecordingProcess {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public AtomicLong getDownloadedBytes() {
|
||||
return downloadedBytes;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,7 +12,6 @@ import java.util.concurrent.ExecutorService;
|
|||
import java.util.concurrent.atomic.AtomicLong;
|
||||
|
||||
public interface RecordingProcess extends Callable<RecordingProcess> {
|
||||
AtomicLong downloadedBytes = new AtomicLong();
|
||||
|
||||
void init(Config config, Model model, Instant startTime, ExecutorService executorService) throws IOException;
|
||||
|
||||
|
@ -62,8 +61,5 @@ public interface RecordingProcess extends Callable<RecordingProcess> {
|
|||
|
||||
void awaitEnd();
|
||||
|
||||
default AtomicLong getDownloadedBytes() {
|
||||
return downloadedBytes;
|
||||
}
|
||||
|
||||
AtomicLong getDownloadedBytes();
|
||||
}
|
||||
|
|
|
@ -44,7 +44,6 @@ import java.util.concurrent.ExecutionException;
|
|||
import java.util.concurrent.ExecutorCompletionService;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Future;
|
||||
import java.util.concurrent.atomic.AtomicLong;
|
||||
|
||||
import static ctbrec.io.HttpConstants.*;
|
||||
import static java.nio.charset.StandardCharsets.UTF_8;
|
||||
|
@ -70,7 +69,6 @@ public abstract class AbstractHlsDownload extends AbstractDownload {
|
|||
private Instant beforeLastPlaylistRequest = Instant.EPOCH;
|
||||
private int consecutivePlaylistTimeouts = 0;
|
||||
private int consecutivePlaylistErrors = 0;
|
||||
private final AtomicLong sizeInByte = new AtomicLong();
|
||||
protected Instant lastSegmentDownload = Instant.MIN;
|
||||
private final List<Instant> segmentErrorTimestamps = new LinkedList<>();
|
||||
|
||||
|
@ -90,14 +88,13 @@ public abstract class AbstractHlsDownload extends AbstractDownload {
|
|||
|
||||
@Override
|
||||
public long getSizeInByte() {
|
||||
return sizeInByte.get();
|
||||
return getDownloadedBytes().get();
|
||||
}
|
||||
|
||||
protected abstract OutputStream getSegmentOutputStream(Segment segment) throws IOException;
|
||||
|
||||
protected void segmentDownloadFinished(SegmentDownload segmentDownload) { // NOSONAR
|
||||
long bytes = getDownloadedBytes().addAndGet(segmentDownload.size());
|
||||
sizeInByte.addAndGet(bytes);
|
||||
getDownloadedBytes().addAndGet(segmentDownload.size());
|
||||
lastSegmentDownload = Instant.now();
|
||||
}
|
||||
|
||||
|
|
|
@ -211,7 +211,7 @@ public class CamsodaModel extends AbstractModel {
|
|||
} else {
|
||||
try {
|
||||
List<StreamSource> sources = getStreamSources();
|
||||
LOG.debug("stream sources {}", sources);
|
||||
LOG.debug("{}:{} stream sources {}", getSite().getName(), getName(), sources);
|
||||
if (sources.isEmpty()) {
|
||||
return new int[]{0, 0};
|
||||
} else {
|
||||
|
|
Loading…
Reference in New Issue