Fix/broadcastify call skew - #1158
Conversation
6f20cf5 to
da0b5bd
Compare
|
@blantonl - Could someone on your team give this a look over? |
|
Looks good to me, ship it! |
Additional production validationWe've been running this fix continuously since Friday and did some additional analysis of the remaining Broadcastify skew rejections. The original inactivity-gap skew behavior appears resolved. We are no longer seeing the prior pattern where promptly uploaded calls were rejected simply because the call remained open after its last retained RF transmission. We did observe a small number of remaining The correlation was effectively 1:1. Examples from Aug 31:
We also saw several ~90s skew rejects. In each case, the OpenMHz uploader blocked until an HTTP 504 before the Broadcastify uploader was invoked. One So the remaining rejects we've identified appear to be a separate plugin/upload-latency issue and not a regression in this change. Based on several days of production use, the fix in this PR is doing what it was intended to do. |
|
GREAT! Nice work @jfgreco - thanks for the patch |
Summary
Fixes Broadcastify Calls uploads being rejected with
REJECTED-CALL-SKEW-TOO-LONGwhen a Trunk Recorder call remains activeafter its final retained RF transmission.
Trunk Recorder's normal
start_time/stop_timemetadata describes theretained over-the-air transmissions. A call may remain open after its last
transmission while waiting for the inactivity timeout. Broadcastify evaluates
node skew from the call end timestamp, so promptly uploaded calls could appear
15+ seconds stale and be rejected.
This change:
Call_Data_tis created;stop_timeis the conclusion time;start_timefrom conclusion time minus playable audio duration;freqList[].timeandsrcList[].timewith playable-audio positions;made artificially fresh.
Reproduction
On a live P25 Phase II system, the host clock was NTP synchronized and normal
upload latency was typically sub-second, but Broadcastify still rejected calls
with skew commonly in the 15–30 second range.
A 24-hour baseline produced 131 skew rejects.
Instrumentation showed successful calls could have a
start_timemore than15 seconds old, while rejected calls tracked the age of the last retained
transmission /
stop_time.Calls containing a short retained transmission followed by a long inactivity
period could therefore be uploaded immediately but rejected with 16–18 seconds
of skew.
Validation
Tested against the live feed in stages.
Final timeline behavior:
Final implementation with the fixed conclusion timestamp preserved across
retries:
The final implementation was built and tested from v5.2.1.