go.temporal.io/server/common/number/compact8.go

98 LOC · 56 covered · 42 uncovered · 21 ranges · 73 concepts · 15 introducers · 40 tests

File neighbourhood

The centred file is linked to every concept that introduces one of its ranges, every test that runs code from the file, and the gray connector concepts standing between those tests and the file's own introducer concepts. Undirected links join concepts to every file where they introduce source and concepts to the tests they introduce; arrows show specialization between the displayed concepts and bridge only concepts omitted from this view. Concept colors match the source ranges below; connector concepts have no source color and are shown in gray.

Focused file, its introducer and connector concepts, their introduced files, and tests that run code from the file

In the embedded map, ordinary wheel input scrolls the page; use the visible controls to zoom and drag to pan. Open the full-screen map for canvas navigation: wheel pans, Ctrl/Command plus wheel zooms, and arrow keys pan when this region is focused. On touch screens, open the full-screen map to pan or pinch. If JavaScript or WebGL is unavailable, use the related-file, concept, and source links on this page.

Focused file, its introducer and connector concepts, their introduced files, and tests that run code from the fileTestDrainClearsBacklogBits · 0 introduced LOCTestDrainClearsBacklogBi…TestDrainShrinkLimitedReadWrite · 0 introduced LOCTestDrainShrinkLimitedRe…scale_manager.go ×4 · 15 introduced LOCscale_manager.go ×4TestEmitsGaugeMetrics · 0 introduced LOCTestEmitsGaugeMetricsTestPrivateStatePropagation · 0 introduced LOCTestPrivateStatePropagat…TestShadowModeSkipsDrain · 0 introduced LOCTestShadowModeSkipsDrainTestBacklogCountUpdateInMemoryOnly · 0 introduced LOCTestBacklogCountUpdateIn…TestShadowModeColdStartsScalerFromBaseline · 0 introduced LOCTestShadowModeColdStarts…TestShadowModeLogsOscillationFromBaseline · 0 introduced LOCTestShadowModeLogsOscill…TestCooldown · 0 introduced LOCTestCooldownscale_manager.go ×6 · 9 introduced LOCscale_manager.go ×6message.pb.go ×1 · 2 introduced LOCmessage.pb.go ×1TestShadowLoggingCadence · 0 introduced LOCTestShadowLoggingCadenceTestNoDrainWithBacklog · 0 introduced LOCTestNoDrainWithBacklogscale_manager.go ×1 · 2 introduced LOCscale_manager.go ×1TestNoWriteWhenBacklogUnchanged · 0 introduced LOCTestNoWriteWhenBacklogUn…scale_manager.go ×1 · 2 introduced LOCscale_manager.go ×1scale_manager.go ×1 · 5 introduced LOCscale_manager.go ×1scale_manager.go ×2 · 20 introduced LOCscale_manager.go ×2scale_manager.go ×1 · 2 introduced LOCscale_manager.go ×1message.pb.go ×1 · 7 introduced LOCmessage.pb.go ×1TestDrainSkippedDuringBufferTime · 0 introduced LOCTestDrainSkippedDuringBu…scale_manager.go ×1 · 2 introduced LOCscale_manager.go ×1scale_manager.go ×7 · 48 introduced LOCscale_manager.go ×7scale_manager.go ×1 · 3 introduced LOCscale_manager.go ×1TestShadowDecisionDoesNotPersistOrPush · 0 introduced LOCTestShadowDecisionDoesNo…TestNonPositiveShadowLogIntervalDisabled, TestDecisionPersistsAndUpdatesEphemeralData · 0 introduced LOCTestNonPositiveShadowLog…TestNoChangeDecisionSkipsWrite · 0 introduced LOCTestNoChangeDecisionSkip…scale_manager.go ×2 · 4 introduced LOCscale_manager.go ×2scale_manager.go ×1 · 2 introduced LOCscale_manager.go ×1TestShadowModeReleasesManagedTargetToBaseline · 0 introduced LOCTestShadowModeReleasesMa…scale_manager.go ×2 · 10 introduced LOCscale_manager.go ×2TestShadowModeDoesNotLogDisabledScaler · 0 introduced LOCTestShadowModeDoesNotLog…scale_manager.go ×4 · 17 introduced LOCscale_manager.go ×4scale_manager.go ×2 · 7 introduced LOCscale_manager.go ×2scale_manager.go ×1 · 2 introduced LOCscale_manager.go ×1scale_manager.go ×1 · 4 introduced LOCscale_manager.go ×1scale_manager.go ×5 · 31 introduced LOCscale_manager.go ×5TestSameTargetAndCapSkipsWrite · 0 introduced LOCTestSameTargetAndCapSkip…tasks.pb.go ×1 · 11 introduced LOCtasks.pb.go ×1tasks.pb.go ×1 · 2 introduced LOCtasks.pb.go ×1user_data_manager_mock.go ×3 · 20 introduced LOCuser_data_manager_mock.g…TestAddedTasksWakesScalerOnFullBatch · 0 introduced LOCTestAddedTasksWakesScale…TestShadowModeDoesNotLogNoChange · 0 introduced LOCTestShadowModeDoesNotLog…scale_manager.go ×2 · 4 introduced LOCscale_manager.go ×2tasks.pb.go ×1 · 1 introduced LOCtasks.pb.go ×1scale_manager.go ×1 · 2 introduced LOCscale_manager.go ×1partition_scaler_mock.go ×3 · 42 introduced LOCpartition_scaler_mock.go…tasks.pb.go ×1 · 8 introduced LOCtasks.pb.go ×1simple_partition_scaler.go ×1 · 1 introduced LOCsimple_partition_scaler.…simple_partition_scaler.go ×1 · 2 introduced LOCsimple_partition_scaler.…simple_partition_scaler.go ×4 · 9 introduced LOCsimple_partition_scaler.…TestRoundDown · 0 introduced LOCTestRoundDownTestRoundtrip · 0 introduced LOCTestRoundtripTestUpdateZeroBoundary · 0 introduced LOCTestUpdateZeroBoundarycompact8.go ×1 · 1 introduced LOCcompact8.go ×1compact8.go ×1 · 2 introduced LOCcompact8.go ×1compact8.go ×2 · 10 introduced LOCcompact8.go ×2compact8.go ×1 · 2 introduced LOCcompact8.go ×1TestEncodeRoundsDown · 0 introduced LOCTestEncodeRoundsDownTestUpdateSameBucket · 0 introduced LOCTestUpdateSameBucketcompact8.go ×3 · 4 introduced LOCcompact8.go ×3TestMonotonic, TestDecodeKnownValues, +1 · 0 introduced LOCTestMonotonic, TestDecod…compact8.go ×2 · 4 introduced LOCcompact8.go ×2compact8.go ×1 · 2 introduced LOCcompact8.go ×1compact8.go ×1 · 2 introduced LOCcompact8.go ×1compact8.go ×1 · 2 introduced LOCcompact8.go ×1compact8.go ×1 · 1 introduced LOCcompact8.go ×1compact8.go ×2 · 14 introduced LOCcompact8.go ×2compact8.go ×1 · 3 introduced LOCcompact8.go ×1compact8.go ×1 · 2 introduced LOCcompact8.go ×1compact8.go ×2 · 5 introduced LOCcompact8.go ×2compact8.go ×1 · 2 introduced LOCcompact8.go ×1TestDecodeKnownValues · introduced test · go.temporal.io/server/common/number/TestCompact8Suite/TestDecodeKnownValuesTestDecodeKnownValuesTestEncodeKnownValues · introduced test · go.temporal.io/server/common/number/TestCompact8Suite/TestEncodeKnownValuesTestEncodeKnownValuesTestEncodeRoundsDown · introduced test · go.temporal.io/server/common/number/TestCompact8Suite/TestEncodeRoundsDownTestEncodeRoundsDownTestMonotonic · introduced test · go.temporal.io/server/common/number/TestCompact8Suite/TestMonotonicTestMonotonicTestRoundDown · introduced test · go.temporal.io/server/common/number/TestCompact8Suite/TestRoundDownTestRoundDownTestRoundtrip · introduced test · go.temporal.io/server/common/number/TestCompact8Suite/TestRoundtripTestRoundtripTestStrictlyIncreasing · introduced test · go.temporal.io/server/common/number/TestCompact8Suite/TestStrictlyIncreasingTestStrictlyIncreasingTestUpdateHysteresis · introduced test · go.temporal.io/server/common/number/TestCompact8Suite/TestUpdateHysteresisTestUpdateHysteresisTestUpdateLargeJump · introduced test · go.temporal.io/server/common/number/TestCompact8Suite/TestUpdateLargeJumpTestUpdateLargeJumpTestUpdateSameBucket · introduced test · go.temporal.io/server/common/number/TestCompact8Suite/TestUpdateSameBucketTestUpdateSameBucketTestUpdateZeroBoundary · introduced test · go.temporal.io/server/common/number/TestCompact8Suite/TestUpdateZeroBoundaryTestUpdateZeroBoundaryTestOnTasksBacklogScalesUpAndDown · introduced test · go.temporal.io/server/service/matching/TestOnTasksBacklogScalesUpAndDownTestOnTasksBacklogScales…TestAddedTasksWakesScalerOnFullBatch · introduced test · go.temporal.io/server/service/matching/TestScaleManagerSuite/TestAddedTasksWakesScalerOnFullBatchTestAddedTasksWakesScale…TestBacklogCapChangePersists · introduced test · go.temporal.io/server/service/matching/TestScaleManagerSuite/TestBacklogCapChangePersistsTestBacklogCapChangePers…TestBacklogCountUpdateInMemoryOnly · introduced test · go.temporal.io/server/service/matching/TestScaleManagerSuite/TestBacklogCountUpdateInMemoryOnlyTestBacklogCountUpdateIn…TestCooldown · introduced test · go.temporal.io/server/service/matching/TestScaleManagerSuite/TestCooldownTestCooldownTestDBWriteFailureKeepsState · introduced test · go.temporal.io/server/service/matching/TestScaleManagerSuite/TestDBWriteFailureKeepsStateTestDBWriteFailureKeepsS…TestDecisionPersistsAndUpdatesEphemeralData · introduced test · go.temporal.io/server/service/matching/TestScaleManagerSuite/TestDecisionPersistsAndUpdatesEphemeralDataTestDecisionPersistsAndU…TestDrainClearsBacklogBits · introduced test · go.temporal.io/server/service/matching/TestScaleManagerSuite/TestDrainClearsBacklogBitsTestDrainClearsBacklogBi…TestDrainShrinkLimitedReadWrite · introduced test · go.temporal.io/server/service/matching/TestScaleManagerSuite/TestDrainShrinkLimitedReadWriteTestDrainShrinkLimitedRe…TestDrainSkippedDuringBufferTime · introduced test · go.temporal.io/server/service/matching/TestScaleManagerSuite/TestDrainSkippedDuringBufferTimeTestDrainSkippedDuringBu…TestEmitsGaugeMetrics · introduced test · go.temporal.io/server/service/matching/TestScaleManagerSuite/TestEmitsGaugeMetricsTestEmitsGaugeMetricsTestNoChangeDecisionSkipsWrite · introduced test · go.temporal.io/server/service/matching/TestScaleManagerSuite/TestNoChangeDecisionSkipsWriteTestNoChangeDecisionSkip…TestNoDrainWithBacklog · introduced test · go.temporal.io/server/service/matching/TestScaleManagerSuite/TestNoDrainWithBacklogTestNoDrainWithBacklogTestNoWriteWhenBacklogUnchanged · introduced test · go.temporal.io/server/service/matching/TestScaleManagerSuite/TestNoWriteWhenBacklogUnchangedTestNoWriteWhenBacklogUn…TestNonPositiveShadowLogIntervalDisabled · introduced test · go.temporal.io/server/service/matching/TestScaleManagerSuite/TestNonPositiveShadowLogIntervalDisabledTestNonPositiveShadowLog…TestPeriodicTimerCallsScaler · introduced test · go.temporal.io/server/service/matching/TestScaleManagerSuite/TestPeriodicTimerCallsScalerTestPeriodicTimerCallsSc…TestPrivateStatePropagation · introduced test · go.temporal.io/server/service/matching/TestScaleManagerSuite/TestPrivateStatePropagationTestPrivateStatePropagat…TestSameTargetAndCapSkipsWrite · introduced test · go.temporal.io/server/service/matching/TestScaleManagerSuite/TestSameTargetAndCapSkipsWriteTestSameTargetAndCapSkip…TestShadowDecisionDoesNotPersistOrPush · introduced test · go.temporal.io/server/service/matching/TestScaleManagerSuite/TestShadowDecisionDoesNotPersistOrPushTestShadowDecisionDoesNo…TestShadowLoggingCadence · introduced test · go.temporal.io/server/service/matching/TestScaleManagerSuite/TestShadowLoggingCadenceTestShadowLoggingCadenceTestShadowModeColdStartsScalerFromBaseline · introduced test · go.temporal.io/server/service/matching/TestScaleManagerSuite/TestShadowModeColdStartsScalerFromBaselineTestShadowModeColdStarts…TestShadowModeDoesNotLogDisabledScaler · introduced test · go.temporal.io/server/service/matching/TestScaleManagerSuite/TestShadowModeDoesNotLogDisabledScalerTestShadowModeDoesNotLog…TestShadowModeDoesNotLogNoChange · introduced test · go.temporal.io/server/service/matching/TestScaleManagerSuite/TestShadowModeDoesNotLogNoChangeTestShadowModeDoesNotLog…TestShadowModeLogsOscillationFromBaseline · introduced test · go.temporal.io/server/service/matching/TestScaleManagerSuite/TestShadowModeLogsOscillationFromBaselineTestShadowModeLogsOscill…TestShadowModeReleasesManagedTargetToBaseline · introduced test · go.temporal.io/server/service/matching/TestScaleManagerSuite/TestShadowModeReleasesManagedTargetToBaselineTestShadowModeReleasesMa…TestShadowModeSkipsDrain · introduced test · go.temporal.io/server/service/matching/TestScaleManagerSuite/TestShadowModeSkipsDrainTestShadowModeSkipsDrainTestUpdateBacklogTargetClearsBelowReset · introduced test · go.temporal.io/server/service/matching/TestUpdateBacklogTargetClearsBelowResetTestUpdateBacklogTargetC…TestUpdateBacklogTargetHysteresis · introduced test · go.temporal.io/server/service/matching/TestUpdateBacklogTargetHysteresisTestUpdateBacklogTargetH…TestUpdateBacklogTargetSetsBitsAboveBase · introduced test · go.temporal.io/server/service/matching/TestUpdateBacklogTargetSetsBitsAboveBaseTestUpdateBacklogTargetS…Focused file · go.temporal.io/server/common/number/compact8.go · 98 LOCnumber/compact8.go

Graph controls are ready.

Interactive rendering requires JavaScript and WebGL. Use the related-file, concept, and source links on this page while the interactive map is unavailable.

1 package number
2
3 import "math/bits"
4
5 // Compact8 is an unsigned 8-bit compact integer encoding with 12 mantissa
6 // values per exponent level (instead of the standard power-of-2 split).
7 //
8 // For a byte value b, let e = b / 12 and m = b % 12:
9 //
10 // b=0: 0 (zero)
11 // e=0, m>=1: m << (offset+1) (subnormal)
12 // e>=1: (12+m) << (e+offset) (normalized)
13 //
14 // This gives approximately 8.3% relative precision (12 values per octave)
15 // and a representable range from 32 to 503316480 with offset 4.
16 type Compact8 = uint8
17
18 const compact8offset = 4
19
20 // DecodeCompact8 converts a Compact8 value to an int64.
21 > func DecodeCompact8(b Compact8) int64 { compact8.go ×2
22 > if b == 0 {
23 > return 0 compact8.go ×1
24 > }
25 > e := int(b / 12) compact8.go ×2
26 > m := int(b % 12)
27 > if e == 0 {
28 > return int64(m) << (compact8offset + 1) compact8.go ×1
29 > }
30 > return int64(12+m) << (e + compact8offset) compact8.go ×1
31 }
32
33 // EncodeCompact8 encodes a non-negative int64 into Compact8 representation.
34 // The value is rounded down to the nearest representable value.
35 // Negative values go to 0 and values above the maximum representable go to 255.
36 > func EncodeCompact8(value int64) Compact8 { compact8.go ×1
37 > if value <= 0 {
38 > return 0 compact8.go ×1
39 > }
40
41 > uval := uint64(value) compact8.go ×2
42 > bitLen := bits.Len64(uval)
43 >
44 > // Find shift such that uval >> shift is in [12, 23].
45 > // This extracts the significand for the normalized representation.
46 > shift := max(bitLen-5, 0)
47 > sig := int(uval >> uint(shift))
48 > if sig >= 24 {
49 > shift++
50 > sig = int(uval >> uint(shift))
51 > }
52
53 > e := shift - compact8offset compact8.go ×2
54 >
55 > if e >= 1 {
56 > m := sig - 12 compact8.go ×2
57 > b := e*12 + m
58 > if b > 255 {
59 > return 255 compact8.go ×1
60 > }
61 > return Compact8(b) compact8.go ×2
62 }
63
64 // Subnormal: value = m << (offset + 1), m in [1, 11]
65 > m := int(uval >> (compact8offset + 1)) compact8.go ×3
66 > if m < 1 {
67 > return 0 compact8.go ×1
68 > }
69 > if m > 11 { compact8.go ×3
70 m = 11
71 }
72 > return Compact8(m) compact8.go ×3
73 }
74
75 // UpdateCompact8 returns the Compact8 encoding of value, but with hysteresis:
76 // it sticks to prev unless the new code is significantly closer. This prevents
77 // oscillation when the underlying value fluctuates near a bucket boundary.
78 > func UpdateCompact8(value int64, prev Compact8) Compact8 { compact8.go ×1
79 > newCode := EncodeCompact8(value)
80 > if newCode == prev {
81 > return prev compact8.go ×1
82 > }
83 > newDist := value - DecodeCompact8(newCode) // always >= 0 (round-down) compact8.go ×2
84 > oldDist := DecodeCompact8(prev) - value
85 > if oldDist < 0 {
86 > oldDist = -oldDist
87 > }
88 // Require the new code to be closer by at least half a bucket width
89 // (at the smaller of the two exponent levels). This shifts the
90 // transition point from the midpoint to the 3/4 mark of the gap,
91 // creating a dead zone that prevents chatter.
92 > e := max(1, min(int(prev/12), int(newCode/12))) compact8.go ×2
93 > margin := int64(1) << (e + compact8offset - 1)
94 > if newDist < oldDist-margin {
95 > return newCode
96 > }
97 > return prev compact8.go ×1
98 }