mirror of
https://github.com/livekit/livekit.git
synced 2026-10-23 15:12:43 +00:00
Debug logs to check on sequencer missing offset. (#2071)
* Debug logs to check on sequencer missing offset. * spelling * close range on value decrement
This commit is contained in:
1 parent
68aebb0106
commit
69177b8b6e
5 files changed
+210
-135
No files matched your search
@@ -66,8 +66,23 @@ func (r *RangeMap[RT, VT]) ClearAndResetValue(val VT) {
|
||||
r.initRanges(val)
|
||||
}
|
||||
|
||||
func (r *RangeMap[RT, VT]) DecValue(dec VT) {
|
||||
r.ranges[len(r.ranges)-1].value -= dec
|
||||
func (r *RangeMap[RT, VT]) CloseRangeAndDecValue(end RT, dec VT) error {
|
||||
// close open range
|
||||
lr := &r.ranges[len(r.ranges)-1]
|
||||
if lr.start > end {
|
||||
// start of open range is after given end
|
||||
return errReversedOrder
|
||||
}
|
||||
lr.end = end
|
||||
|
||||
// start a new open one with decremented value
|
||||
r.ranges = append(r.ranges, rangeVal[RT, VT]{
|
||||
start: end + 1,
|
||||
end: 0,
|
||||
value: lr.value - dec,
|
||||
})
|
||||
r.prune()
|
||||
return nil
|
||||
}
|
||||
|
||||
func (r *RangeMap[RT, VT]) initRanges(val VT) {
|
||||
|
||||
+154
-123
@@ -28,30 +28,32 @@ func TestRangeMapUint32(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, uint32(0), value)
|
||||
|
||||
expectedRangeVal := rangeVal[uint32, uint32]{
|
||||
start: 0,
|
||||
end: 0,
|
||||
value: 0,
|
||||
expectedRanges := []rangeVal[uint32, uint32]{
|
||||
{
|
||||
start: 0,
|
||||
end: 0,
|
||||
value: 0,
|
||||
},
|
||||
}
|
||||
require.Equal(t, expectedRangeVal, r.ranges[0])
|
||||
require.Equal(t, expectedRanges, r.ranges)
|
||||
|
||||
// add an exclusion, should create a new range
|
||||
err = r.ExcludeRange(10, 11)
|
||||
require.NoError(t, err)
|
||||
|
||||
expectedRangeVal = rangeVal[uint32, uint32]{
|
||||
start: 0,
|
||||
end: 9,
|
||||
value: 0,
|
||||
expectedRanges = []rangeVal[uint32, uint32]{
|
||||
{
|
||||
start: 0,
|
||||
end: 9,
|
||||
value: 0,
|
||||
},
|
||||
{
|
||||
start: 11,
|
||||
end: 0,
|
||||
value: 1,
|
||||
},
|
||||
}
|
||||
require.Equal(t, expectedRangeVal, r.ranges[0])
|
||||
|
||||
expectedRangeVal = rangeVal[uint32, uint32]{
|
||||
start: 11,
|
||||
end: 0,
|
||||
value: 1,
|
||||
}
|
||||
require.Equal(t, expectedRangeVal, r.ranges[1])
|
||||
require.Equal(t, expectedRanges, r.ranges)
|
||||
|
||||
// getting value in old range should return 0
|
||||
value, err = r.GetValue(6)
|
||||
@@ -81,19 +83,19 @@ func TestRangeMapUint32(t *testing.T) {
|
||||
err = r.ExcludeRange(11, 12)
|
||||
require.NoError(t, err)
|
||||
|
||||
expectedRangeVal = rangeVal[uint32, uint32]{
|
||||
start: 0,
|
||||
end: 9,
|
||||
value: 0,
|
||||
expectedRanges = []rangeVal[uint32, uint32]{
|
||||
{
|
||||
start: 0,
|
||||
end: 9,
|
||||
value: 0,
|
||||
},
|
||||
{
|
||||
start: 12,
|
||||
end: 0,
|
||||
value: 2,
|
||||
},
|
||||
}
|
||||
require.Equal(t, expectedRangeVal, r.ranges[0])
|
||||
|
||||
expectedRangeVal = rangeVal[uint32, uint32]{
|
||||
start: 12,
|
||||
end: 0,
|
||||
value: 2,
|
||||
}
|
||||
require.Equal(t, expectedRangeVal, r.ranges[1])
|
||||
require.Equal(t, expectedRanges, r.ranges)
|
||||
|
||||
// excluded range should return error, now is excluded because exclusion range could be extended
|
||||
value, err = r.GetValue(11)
|
||||
@@ -112,19 +114,19 @@ func TestRangeMapUint32(t *testing.T) {
|
||||
err = r.ExcludeRange(12, 22)
|
||||
require.NoError(t, err)
|
||||
|
||||
expectedRangeVal = rangeVal[uint32, uint32]{
|
||||
start: 0,
|
||||
end: 9,
|
||||
value: 0,
|
||||
expectedRanges = []rangeVal[uint32, uint32]{
|
||||
{
|
||||
start: 0,
|
||||
end: 9,
|
||||
value: 0,
|
||||
},
|
||||
{
|
||||
start: 22,
|
||||
end: 0,
|
||||
value: 12,
|
||||
},
|
||||
}
|
||||
require.Equal(t, expectedRangeVal, r.ranges[0])
|
||||
|
||||
expectedRangeVal = rangeVal[uint32, uint32]{
|
||||
start: 22,
|
||||
end: 0,
|
||||
value: 12,
|
||||
}
|
||||
require.Equal(t, expectedRangeVal, r.ranges[1])
|
||||
require.Equal(t, expectedRanges, r.ranges)
|
||||
|
||||
// excluded range should return error, now is excluded because exclusion range could be extended
|
||||
value, err = r.GetValue(15)
|
||||
@@ -139,26 +141,24 @@ func TestRangeMapUint32(t *testing.T) {
|
||||
err = r.ExcludeRange(26, 30)
|
||||
require.NoError(t, err)
|
||||
|
||||
expectedRangeVal = rangeVal[uint32, uint32]{
|
||||
start: 0,
|
||||
end: 9,
|
||||
value: 0,
|
||||
expectedRanges = []rangeVal[uint32, uint32]{
|
||||
{
|
||||
start: 0,
|
||||
end: 9,
|
||||
value: 0,
|
||||
},
|
||||
{
|
||||
start: 22,
|
||||
end: 25,
|
||||
value: 12,
|
||||
},
|
||||
{
|
||||
start: 30,
|
||||
end: 0,
|
||||
value: 16,
|
||||
},
|
||||
}
|
||||
require.Equal(t, expectedRangeVal, r.ranges[0])
|
||||
|
||||
expectedRangeVal = rangeVal[uint32, uint32]{
|
||||
start: 22,
|
||||
end: 25,
|
||||
value: 12,
|
||||
}
|
||||
require.Equal(t, expectedRangeVal, r.ranges[1])
|
||||
|
||||
expectedRangeVal = rangeVal[uint32, uint32]{
|
||||
start: 30,
|
||||
end: 0,
|
||||
value: 16,
|
||||
}
|
||||
require.Equal(t, expectedRangeVal, r.ranges[2])
|
||||
require.Equal(t, expectedRanges, r.ranges)
|
||||
|
||||
// get a value from newly closed range [22, 25]
|
||||
value, err = r.GetValue(23)
|
||||
@@ -170,26 +170,24 @@ func TestRangeMapUint32(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
|
||||
// previously first range would have been pruned due to size limitations
|
||||
expectedRangeVal = rangeVal[uint32, uint32]{
|
||||
start: 22,
|
||||
end: 25,
|
||||
value: 12,
|
||||
expectedRanges = []rangeVal[uint32, uint32]{
|
||||
{
|
||||
start: 22,
|
||||
end: 25,
|
||||
value: 12,
|
||||
},
|
||||
{
|
||||
start: 30,
|
||||
end: 49,
|
||||
value: 16,
|
||||
},
|
||||
{
|
||||
start: 51,
|
||||
end: 0,
|
||||
value: 17,
|
||||
},
|
||||
}
|
||||
require.Equal(t, expectedRangeVal, r.ranges[0])
|
||||
|
||||
expectedRangeVal = rangeVal[uint32, uint32]{
|
||||
start: 30,
|
||||
end: 49,
|
||||
value: 16,
|
||||
}
|
||||
require.Equal(t, expectedRangeVal, r.ranges[1])
|
||||
|
||||
expectedRangeVal = rangeVal[uint32, uint32]{
|
||||
start: 51,
|
||||
end: 0,
|
||||
value: 17,
|
||||
}
|
||||
require.Equal(t, expectedRangeVal, r.ranges[2])
|
||||
require.Equal(t, expectedRanges, r.ranges)
|
||||
|
||||
// excluded range should return error
|
||||
value, err = r.GetValue(50)
|
||||
@@ -222,52 +220,72 @@ func TestRangeMapUint32(t *testing.T) {
|
||||
|
||||
// reset
|
||||
r.ClearAndResetValue(23)
|
||||
expectedRangeVal = rangeVal[uint32, uint32]{
|
||||
start: 0,
|
||||
end: 0,
|
||||
value: 23,
|
||||
expectedRanges = []rangeVal[uint32, uint32]{
|
||||
{
|
||||
start: 0,
|
||||
end: 0,
|
||||
value: 23,
|
||||
},
|
||||
}
|
||||
require.Equal(t, expectedRangeVal, r.ranges[0])
|
||||
require.Equal(t, expectedRanges, r.ranges)
|
||||
|
||||
value, err = r.GetValue(55555555)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, uint32(23), value)
|
||||
|
||||
// decrement value and ensure that any key returns that value
|
||||
r.DecValue(12)
|
||||
err = r.CloseRangeAndDecValue(34, 12)
|
||||
require.NoError(t, err)
|
||||
|
||||
expectedRangeVal = rangeVal[uint32, uint32]{
|
||||
start: 0,
|
||||
end: 0,
|
||||
value: 11,
|
||||
expectedRanges = []rangeVal[uint32, uint32]{
|
||||
{
|
||||
start: 0,
|
||||
end: 34,
|
||||
value: 23,
|
||||
},
|
||||
{
|
||||
start: 35,
|
||||
end: 0,
|
||||
value: 11,
|
||||
},
|
||||
}
|
||||
require.Equal(t, expectedRangeVal, r.ranges[0])
|
||||
require.Equal(t, expectedRanges, r.ranges)
|
||||
|
||||
value, err = r.GetValue(55555555)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, uint32(11), value)
|
||||
|
||||
// add an exclusion and then decrement value
|
||||
err = r.ExcludeRange(10, 15)
|
||||
err = r.ExcludeRange(40, 45)
|
||||
require.NoError(t, err)
|
||||
|
||||
expectedRangeVal = rangeVal[uint32, uint32]{
|
||||
start: 0,
|
||||
end: 9,
|
||||
value: 11,
|
||||
expectedRanges = []rangeVal[uint32, uint32]{
|
||||
{
|
||||
start: 0,
|
||||
end: 34,
|
||||
value: 23,
|
||||
},
|
||||
{
|
||||
start: 35,
|
||||
end: 39,
|
||||
value: 11,
|
||||
},
|
||||
{
|
||||
start: 45,
|
||||
end: 0,
|
||||
value: 16,
|
||||
},
|
||||
}
|
||||
require.Equal(t, expectedRangeVal, r.ranges[0])
|
||||
|
||||
expectedRangeVal = rangeVal[uint32, uint32]{
|
||||
start: 15,
|
||||
end: 0,
|
||||
value: 16,
|
||||
}
|
||||
require.Equal(t, expectedRangeVal, r.ranges[1])
|
||||
require.Equal(t, expectedRanges, r.ranges)
|
||||
|
||||
// first range access
|
||||
value, err = r.GetValue(5)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, uint32(23), value)
|
||||
|
||||
// second range access
|
||||
value, err = r.GetValue(35)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, uint32(11), value)
|
||||
|
||||
// open range access
|
||||
@@ -275,29 +293,42 @@ func TestRangeMapUint32(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, uint32(16), value)
|
||||
|
||||
r.DecValue(6)
|
||||
|
||||
expectedRangeVal = rangeVal[uint32, uint32]{
|
||||
start: 0,
|
||||
end: 9,
|
||||
value: 11,
|
||||
}
|
||||
require.Equal(t, expectedRangeVal, r.ranges[0])
|
||||
|
||||
expectedRangeVal = rangeVal[uint32, uint32]{
|
||||
start: 15,
|
||||
end: 0,
|
||||
value: 10,
|
||||
}
|
||||
require.Equal(t, expectedRangeVal, r.ranges[1])
|
||||
|
||||
// first range access
|
||||
value, err = r.GetValue(5)
|
||||
err = r.CloseRangeAndDecValue(66, 6)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, uint32(11), value)
|
||||
|
||||
expectedRanges = []rangeVal[uint32, uint32]{
|
||||
{
|
||||
start: 35,
|
||||
end: 39,
|
||||
value: 11,
|
||||
},
|
||||
{
|
||||
start: 45,
|
||||
end: 66,
|
||||
value: 16,
|
||||
},
|
||||
{
|
||||
start: 67,
|
||||
end: 0,
|
||||
value: 10,
|
||||
},
|
||||
}
|
||||
require.Equal(t, expectedRanges, r.ranges)
|
||||
|
||||
err = r.CloseRangeAndDecValue(66, 6)
|
||||
require.ErrorIs(t, err, errReversedOrder)
|
||||
|
||||
// aged out range access
|
||||
value, err = r.GetValue(5)
|
||||
require.ErrorIs(t, err, errKeyTooOld)
|
||||
|
||||
// access closed range before decrementing value
|
||||
value, err = r.GetValue(66)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, uint32(16), value)
|
||||
|
||||
// open range access
|
||||
value, err = r.GetValue(55555555)
|
||||
value, err = r.GetValue(67)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, uint32(10), value)
|
||||
}
|
||||
Reference in new issue
Block a user