* Once a log is retrieved, server adds an entry with this log id to a sorted set in Redis, scored by expiry time and broadcasts it to any other server instances.
* If a log is being tailed, server keeps the total number of lines in a Redis key and appends chunks of log data to a sorted set for that log scored by index of the first line.
* Chunks are split on fixed boundaries, in order to allow older entries to be purged by score without having to count the number of lines they contain first.
* Agent polls for requests to provide tail data via LogRpcService.UpdateLogTail, which calls LogTailService.WaitForTailNext. WaitForTailNext returns the index of the total line count for this log if it is being tailed (indicating the index of the next line that the agent should send to the server), or blocks until the log is being tailed.
* Once data is flushed to persistent storage, the number of flushed lines is added to LogRpcService._trimQueue and the line data is removed from Redis after LogRpcService.TrimAfter.
* Log node contains a "complete" flag indicating whether it is necessary to check for tail data.
#preflight none
[CL 23215856 by Ben Marsh in ue5-main branch]
Prevents multiple worker processes from trying to flush log chunks at the same time. Which hopefully reduces peak network I/O.
#preflight none
[CL 22477177 by carl bystrom in ue5-main branch]
* Limits number of concurrent writes to avoid high memory and I/O usage.
* Can be toggled by a feature flag.
#preflight 6337144e7c11614c21cf879a
[CL 22272489 by carl bystrom in ue5-main branch]
This method does parallel writes which potentially causes a spiky load on the underlying log chunk storage (Redis).
#preflight 62a6fe75bf050eb24f5ef699
[CL 20624055 by carl bystrom in ue5-main branch]
* Controllers and messages are now stored alongside their related classes.
* "Impl" folders have been removed to allow more logical grouping of code by subject area rather than implementation details.
#fyi Josh.Engebretson, Carl.Bystrom
#preflight none
[CL 20540527 by Ben Marsh in ue5-main branch]