Decrement value when end is in open range. (#2072)

* Decrement value when end is in open range.

Not an error when end is in open range.

* change API call
This commit is contained in:
Raja Subramanian authored and GitHub committed 2023-09-14 14:31:39 +05:30
1 parent 69177b8b6e
commit 7ac0abdf1b
3 files changed
+39 -17

No files matched your search

+1 -3
View File
@@ -297,9 +297,7 @@ func (r *RTPMunger) UpdateAndGetPaddingSnTs(num int, clockRate uint32, frameRate
r.extSecondLastSN = extLastSN - 1
r.extLastSN = extLastSN
if err := r.snRangeMap.CloseRangeAndDecValue(r.extHighestIncomingSN, uint64(num)); err != nil {
r.logger.Errorw("could not close range", err, "sn", r.extHighestIncomingSN)
}
r.snRangeMap.DecValue(r.extHighestIncomingSN, uint64(num))
r.updateSnOffset("pad")
r.tsOffset -= extLastTS - r.extLastTS
+9 -7
View File
@@ -16,6 +16,7 @@ package utils
import (
"errors"
"fmt"
"math"
"unsafe"
)
@@ -66,13 +67,15 @@ func (r *RangeMap[RT, VT]) ClearAndResetValue(val VT) {
r.initRanges(val)
}
func (r *RangeMap[RT, VT]) CloseRangeAndDecValue(end RT, dec VT) error {
// close open range
func (r *RangeMap[RT, VT]) DecValue(end RT, dec VT) {
lr := &r.ranges[len(r.ranges)-1]
if lr.start > end {
// start of open range is after given end
return errReversedOrder
// modify existing value if end is in open range
lr.value -= dec
return
}
// close open range
lr.end = end
// start a new open one with decremented value
@@ -82,7 +85,6 @@ func (r *RangeMap[RT, VT]) CloseRangeAndDecValue(end RT, dec VT) error {
value: lr.value - dec,
})
r.prune()
return nil
}
func (r *RangeMap[RT, VT]) initRanges(val VT) {
@@ -97,13 +99,13 @@ func (r *RangeMap[RT, VT]) initRanges(val VT) {
func (r *RangeMap[RT, VT]) ExcludeRange(startInclusive RT, endExclusive RT) error {
if endExclusive == startInclusive || endExclusive-startInclusive > r.halfRange {
return errReversedOrder
return fmt.Errorf("%w, start %d, end %d", errReversedOrder, startInclusive, endExclusive)
}
lr := &r.ranges[len(r.ranges)-1]
if lr.start > startInclusive {
// start of open range is after start of exclusion range, cannot close the open range
return errReversedOrder
return fmt.Errorf("%w, existingStart %d, newStart %d", errReversedOrder, lr.start, startInclusive)
}
newValue := lr.value + VT(endExclusive-startInclusive)
+29 -7
View File
@@ -234,8 +234,7 @@ func TestRangeMapUint32(t *testing.T) {
require.Equal(t, uint32(23), value)
// decrement value and ensure that any key returns that value
err = r.CloseRangeAndDecValue(34, 12)
require.NoError(t, err)
r.DecValue(34, 12)
expectedRanges = []rangeVal[uint32, uint32]{
{
@@ -293,8 +292,7 @@ func TestRangeMapUint32(t *testing.T) {
require.NoError(t, err)
require.Equal(t, uint32(16), value)
err = r.CloseRangeAndDecValue(66, 6)
require.NoError(t, err)
r.DecValue(66, 6)
expectedRanges = []rangeVal[uint32, uint32]{
{
@@ -315,9 +313,6 @@ func TestRangeMapUint32(t *testing.T) {
}
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)
@@ -331,4 +326,31 @@ func TestRangeMapUint32(t *testing.T) {
value, err = r.GetValue(67)
require.NoError(t, err)
require.Equal(t, uint32(10), value)
// decrement with old end and check that open range gets decremented
r.DecValue(66, 6)
expectedRanges = []rangeVal[uint32, uint32]{
{
start: 35,
end: 39,
value: 11,
},
{
start: 45,
end: 66,
value: 16,
},
{
start: 67,
end: 0,
value: 4,
},
}
require.Equal(t, expectedRanges, r.ranges)
// open range access should get decremented value
value, err = r.GetValue(67)
require.NoError(t, err)
require.Equal(t, uint32(4), value)
}