|
| 1 | +# Test span policy enforcer detecting compression violations and triggering |
| 2 | +# policy enforcement compactions. |
| 3 | + |
| 4 | +# Create files with Zstd compression using zstd-force (MinReductionPercent=0). |
| 5 | +# The span policy requires fast compression for keys >= "m". |
| 6 | +# We use long repetitive values to ensure they compress with Zstd. |
| 7 | + |
| 8 | +define compression=zstd-force |
| 9 | +L1 |
| 10 | + a#10,SET:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa b#10,SET:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb |
| 11 | +L1 |
| 12 | + m#10,SET:mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm n#10,SET:nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn |
| 13 | +L2 |
| 14 | + x#5,SET:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx z#5,SET:zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz |
| 15 | +---- |
| 16 | +L1: |
| 17 | + 000004:[a#10,SET-b#10,SET] |
| 18 | + 000005:[m#10,SET-n#10,SET] |
| 19 | +L2: |
| 20 | + 000006:[x#5,SET-z#5,SET] |
| 21 | + |
| 22 | +# Configure span policy: keys >= "m" require fast compression. |
| 23 | +set-span-policies |
| 24 | +m,zzz prefer-fast-compression |
| 25 | +---- |
| 26 | + |
| 27 | +# Initially no pending enforcement files. |
| 28 | +pending-policy-enforcement |
| 29 | +---- |
| 30 | +pending: 0 |
| 31 | + |
| 32 | +# Run the enforcer scan to detect violations and mark files. |
| 33 | +# Files 000005 (m-n) and 000006 (x-z) are in the policy span and use Zstd. |
| 34 | +scan-policy-violations |
| 35 | +---- |
| 36 | + |
| 37 | +# Verify files are now pending enforcement. The enforcer's run loop would pause |
| 38 | +# here until these are processed. |
| 39 | +pending-policy-enforcement |
| 40 | +---- |
| 41 | +pending: 2 |
| 42 | + L2: 000006 |
| 43 | + L1: 000005 |
| 44 | + |
| 45 | +# Run compaction. The scheduler should pick up policy enforcement compactions. |
| 46 | +auto-compact |
| 47 | +---- |
| 48 | +L1: |
| 49 | + 000004:[a#10,SET-b#10,SET] |
| 50 | + 000005:[m#10,SET-n#10,SET] |
| 51 | +L2: |
| 52 | + 000007:[x#0,SET-z#0,SET] |
| 53 | + |
| 54 | +# After auto-compact processes enforcement compactions, pending should be cleared. |
| 55 | +# (auto-compact may process one or both files depending on scheduling) |
| 56 | +pending-policy-enforcement |
| 57 | +---- |
| 58 | +pending: 0 |
| 59 | + |
| 60 | +# Scan again to check for any remaining violations. |
| 61 | +scan-policy-violations |
| 62 | +---- |
| 63 | + |
| 64 | +# One file may still violate policy if not recompacted in first pass. |
| 65 | +pending-policy-enforcement |
| 66 | +---- |
| 67 | +pending: 1 |
| 68 | + L1: 000005 |
| 69 | + |
| 70 | +auto-compact |
| 71 | +---- |
| 72 | +L1: |
| 73 | + 000004:[a#10,SET-b#10,SET] |
| 74 | + 000008:[m#0,SET-n#0,SET] |
| 75 | +L2: |
| 76 | + 000007:[x#0,SET-z#0,SET] |
| 77 | + |
| 78 | +# All enforcement compactions complete. |
| 79 | +pending-policy-enforcement |
| 80 | +---- |
| 81 | +pending: 0 |
| 82 | + |
| 83 | +# Test interaction with manual compaction: a file marked for enforcement |
| 84 | +# gets moved by a manual compaction. Since the move keeps the same file |
| 85 | +# reference, the enforcement mark remains valid. |
| 86 | + |
| 87 | +define compression=zstd-force |
| 88 | +L1 |
| 89 | + a#10,SET:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa b#10,SET:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb |
| 90 | +L2 |
| 91 | + m#10,SET:mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm n#10,SET:nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn |
| 92 | +L3 |
| 93 | + x#5,SET:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx z#5,SET:zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz |
| 94 | +---- |
| 95 | +L1: |
| 96 | + 000004:[a#10,SET-b#10,SET] |
| 97 | +L2: |
| 98 | + 000005:[m#10,SET-n#10,SET] |
| 99 | +L3: |
| 100 | + 000006:[x#5,SET-z#5,SET] |
| 101 | + |
| 102 | +# Set policy and scan to mark files. |
| 103 | +set-span-policies |
| 104 | +m,zzz prefer-fast-compression |
| 105 | +---- |
| 106 | + |
| 107 | +scan-policy-violations |
| 108 | +---- |
| 109 | + |
| 110 | +# Manually compact the L2 file. This moves 000005 to L3 but keeps the same |
| 111 | +# file reference, so the enforcement mark remains valid. |
| 112 | +compact m-o L2 |
| 113 | +---- |
| 114 | +L1: |
| 115 | + 000004:[a#10,SET-b#10,SET] |
| 116 | +L3: |
| 117 | + 000005:[m#10,SET-n#10,SET] |
| 118 | + 000006:[x#5,SET-z#5,SET] |
| 119 | + |
| 120 | +# Auto-compact picks up the enforcement compaction for one of the marked files. |
| 121 | +# File 000006 is outside the policy span (x-z < m), so only 000005 was marked. |
| 122 | +auto-compact |
| 123 | +---- |
| 124 | +L1: |
| 125 | + 000004:[a#10,SET-b#10,SET] |
| 126 | +L3: |
| 127 | + 000005:[m#10,SET-n#10,SET] |
| 128 | + 000007:[x#0,SET-z#0,SET] |
| 129 | + |
| 130 | +# Scan and compact again. This should compact file 000005. |
| 131 | +scan-policy-violations |
| 132 | +---- |
| 133 | + |
| 134 | +auto-compact |
| 135 | +---- |
| 136 | +L1: |
| 137 | + 000004:[a#10,SET-b#10,SET] |
| 138 | +L3: |
| 139 | + 000008:[m#0,SET-n#0,SET] |
| 140 | + 000007:[x#0,SET-z#0,SET] |
0 commit comments