baa16b6586
Cleanup never matched a live session because the controller registered empty manifest and segment paths, renewal was a read-modify-write that could revert a takeover, and the takeover script compared an ISO date to a number, so it errored. - populate the session record's manifest and segment paths from the playlist path - renew the lease via a Lua compare-and-set on the owning pod - store the lease expiry as unix milliseconds so the scripts can compare it - retain the session record past its lease so an orphan can still be taken over - test the Redis store against a real Redis, including the renew-vs-takeover race - drop the live stream record nothing ever read back
27 lines
1005 B
C#
27 lines
1005 B
C#
namespace MediaBrowser.Controller.MediaEncoding;
|
|
|
|
/// <summary>
|
|
/// Configuration options for the transcode session store.
|
|
/// </summary>
|
|
public sealed class TranscodeStoreOptions
|
|
{
|
|
/// <summary>
|
|
/// Gets or sets the Redis connection string.
|
|
/// A <c>null</c> or empty value indicates single-instance mode, where
|
|
/// <see cref="NullTranscodeSessionStore"/> is used instead of a Redis-backed store.
|
|
/// </summary>
|
|
public string? RedisConnectionString { get; set; }
|
|
|
|
/// <summary>
|
|
/// Gets or sets the duration in seconds for which a transcoding session lease is valid.
|
|
/// </summary>
|
|
public int LeaseDurationSeconds { get; set; } = 30;
|
|
|
|
/// <summary>
|
|
/// Gets or sets how long in seconds a session record is retained after its lease was last renewed.
|
|
/// The record must outlive the lease, otherwise an orphaned session is gone before another pod
|
|
/// can take it over.
|
|
/// </summary>
|
|
public int SessionRetentionSeconds { get; set; } = 300;
|
|
}
|