Repository navigation
Conversation
Supported VictoriaLogs is v1.49.0 (the latest v1.4x release) plus every v1.5x release. The -backend-min-version default, its Go fallback, the Helm value and logsql.MinSupportedMinor move to v1.49.0, the manifest support window and tested matrix become v1.49.0, v1.50.0, v1.51.1, v1.52.0 and v1.53.0, and the README names the supported and tested versions. logsql.Capabilities drops the flags for features at or before the floor (rate_sum, ipv4_range, metadata substring): the zero value is the floor, which is also what an unknown backend version gets. BestIPv4Range emits ipv4_range() for IPv4 unconditionally.
The weekly matrix job ran the compatibility score and three version-sensitive checks. The range-metric table compared with Loki (unwrap, range metric compatibility, Grafana click-outs) is what broke on older backends, so it now runs on every supported VictoriaLogs version too, with an explicit test and job timeout.
… gates The supported floor is v1.49.0, so the gates and fallbacks that only served older backends are removed: - stats_query_range offset (v1.45): buckets are always anchored with the offset arg; the epoch-aligned-only tumbling and sliding grids, the raw-row route for unaligned grids and the ordered-JSON pushdown gate are gone. Raw evaluators that do not depend on the version (sub-millisecond buckets, byte and row limits, more than 11,000 buckets) stay. - metadata substring filter (v1.49): q and filter=substring are always forwarded. The proxy-side search window stays, it also serves the label values browse index and offset/limit windowing. An unknown backend version behaves as the floor, and the background /metrics probe that supportsStatsRangeOffset used to trigger now runs from any upstream response without a version while it is unknown. Tests that only exercised the removed fallbacks are rewritten to assert anchored buckets on v1.49.0, v1.52.0 and an unknown version; the raw-sample evaluator coverage of the unwrap rate window is kept by forcing that route without a version gate.
The generated matrix link and wiring are refreshed for the new matrix, the capability rows of the removed gates (rate_sum, ipv4_range, metadata substring) are deleted, and the two cases that cite the rewritten ordered JSON pushdown test use its new name.
The compatibility, matrix, testing, configuration and architecture pages state the new rule (the latest v1.4x release plus every v1.5x release), the version table starts at v1.49.0 and adds v1.50.0, and the sentences that described the stats offset, metadata substring and ipv4_range fallbacks are removed.
… the v1.49.0 floor The pre-v1.45 stats bucket case no longer describes version gates that were removed: it records the unsupported-version behaviour as a kept difference of the support floor. The ordered JSON pushdown case no longer says it is gated off below v1.45, the VictoriaLogs edge-case bands in the manifest list only the supported v1.49 line, and the testing guide's example image is a supported version.
PR Quality ReportCompared against base branch Coverage and tests
Compatibility
Performance smokeLower CPU cost (
State
|
✅ Visual smoke: passedBase
Gate: a base-vs-PR data difference passes when the PR is closer to Loki, and fails when the PR diverges from Loki or Loki cannot decide it (at a range Loki does not hold, a difference passes when the same page proved it closer to Loki at a shorter range; otherwise label the pull request Core set montages (5): base | PR | Lokidd-fields-1h dd-landing-1h dd-service-logs-1h explore-logs-plain-1h explore-metric-plain-1h All montages of this run: |
⚪ Performance A/B: no change beyond noise147 shape×range — 147 ⚪ same · results vs Loki: 120 same, 0 new difference(s), 27 pre-existing Every shape is within noise of the base build (±30% and 100 ms). 147 unchanged shape×range (within noise)
Cold (first-run) timings — what a user opening a panel sees
Why these shapes
base |





Summary
Supported VictoriaLogs is now v1.49.0 (the latest v1.4x release) and every v1.5x release. The startup floor
-backend-min-versionmoves fromv1.40.0tov1.49.0, the CI matrix tests every supported minor, and the version gates that only served releases before v1.49 are removed.v1.49.0and every v1.5x releasev1.49.0,v1.50.0,v1.51.1,v1.52.0,v1.53.0(every supported minor at its latest patch with a published image; v1.52.1 has none)v1.52.0(unchanged)v1.49.0(wasv1.40.0)Why. The
v1.40–v1.46band was supported only through capability gates and never ran in CI. On VictoriaLogs v1.40.0 the e2e range-metric table fails 65 subtests against Loki, on main as on any branch, every one a series missing one sample at a window edge (proxy has 3 samples, Loki 4):stats_query_rangeignores theoffsetargument before v1.45. On v1.49.0 and v1.50.0 the same table passes on main (789 passed, 0 failed, the 3 known open skips).Changes
logsql.MinSupportedMinor49, thesupport_windowandmatrix_versionsofcompatibility-matrix.json, the regenerated configuration reference. Older backends stop at startup with an error naming-backend-allow-unsupported-version. That flag, or an explicit older-backend-min-version(the comparison with the configured minimum is unchanged), still starts the proxy; a version below v1.49.0 is then logged as unsupported and untested on every start whatever the configured minimum (TestBackendVersionBelowSupportedLinesWarns).stats_query_rangeoffset(v1.45): always sent. The epoch-aligned-only tumbling and sliding grids, the raw-row route for unaligned starts and the gate of thename_extractedpushdown are gone. Raw evaluation stays where it does not depend on the version (buckets below 1 ms, byte and row limits).filter=substring(v1.49): always forwarded withq; the proxy-side search window stays (it also serves the browse index and paging).logsql.CapabilitiesStatsRateSum(v1.44, no consumer),FieldIPv4Range(v1.45) andMetadataSubstring(v1.49):ip()always usesipv4_range()for IPv4, the regular expression stays for IPv6 and unparsable input.field_values, the v1.51coalescepipe, the v1.52 parse-error echo) keeps its fallback down to v1.49.0. Capability profile names are unchanged./metricsnot routed) behaves as v1.49.0. The background/metricsre-probe (every 5 minutes while unknown) is triggered from the version-header observer, since the function that triggered it is removed.compat-vl.yaml): each version also runs the range-metric table against Loki (TestCompat_Unwrap.*,TestRangeMetric.*,TestGrafanaClickout_.*), with an explicit test (25 min) and job (40 min) timeout.TestVictoriaLogsSupportPolicyenforces the rule: floor = lowest matrix version = flag default = Go fallback = Helm value =MinSupportedMinor; exactly one v1.4x entry (the floor); every v1.5x minor from v1.50 up once; the pin is a tested version; the README table lists the same versions.versions/stats-bucket-label-v1.45case (pre-v1.45 behaviour is now outside the supported versions).Nothing else changes: probe, profile names, error wording and unrelated tests are untouched.
Proofs
CI version matrix on this branch (
workflow_dispatch, headb7113d7f): v1.49.0, v1.50.0, v1.51.1, v1.52.0 and v1.53.0 pass with the range-metric table (v1.49.0: 819 passed, 0 failed, 3 skipped), about 6.5 minutes per version; the pinned v1.52.0 job passes.e2e vs Loki 3.7.7, fresh isolated stack per run, compared with main (
f5c05e3a) by test name, VictoriaLogs restarts 0 → 0:TestProxyCompatibilitySurface/vmauth_proxy_drilldown_limits_backend_detectionpasses on both builds and both versions.Startup floor against VictoriaLogs v1.48.0: with default flags the proxy exits 1 with
detected backend version v1.48.0-0-g3b50299862 ... is below minimum supported v1.49.0; compatibility may be incomplete. Set -backend-allow-unsupported-version=true to bypass at your own risk; with-backend-allow-unsupported-version=trueit starts and warns that the version is unsupported and untested. On v1.49.0 it starts withminimum_supported_version v1.49.0.A/B (
bench/ab/pr_smoke.py, VictoriaLogs v1.52.0 at 2 CPUs, main vs branch, 18 sets selected for the changed files):Four cells the first long pass flagged measured the same when run again. Exact answers of binary, offset, sliding and tumbling queries compared directly: identical except last-digit float rounding (relative difference ≤ 4e-16) that two instances of the main binary show against each other too.
benchstat (10 interleaved rounds,
GOMAXPROCS=4): proxy hot paths geomean +0.43% time, +0.20% bytes, −0.05% allocations; translator +3.5% time (noise; spread up to ±80%). One deterministic change:Translate_IPFilterFallback, which uses a version below the floor, now buildsipv4_range()(+2 allocations), the path v1.45+ already took.Grafana range matrix (Grafana 13.2.3, 43 pages at 5m, 15m, 1h, 6h, 24h and 7d plus Live tail, 260 rows, main vs branch vs Loki): main and branch identical on 259 rows. The 260th, the 7d
dd-fieldsbreakdown (256,595 frames ofspan_id/trace_id), killed Grafana while loading, so one chunk was captured on one side only; every request captured on both sides has the same status, frames and hash. Against Loki: no new difference, the same 117 differences from Loki on both builds.Load (8 clients, 240 s, 78 shapes at 24h and 7d, fresh proxy per build):
/labelsThe failing shapes are the same on both builds (the heavy-query admission limit, the 502s of the 7d drilldown and
rate_countershapes, Loki's own 400 forjson rate by level).Unit and gates: capped full run (
GOMEMLIMIT=3GiB GOMAXPROCS=4 go test -short -p 1 ./..., peak RSS 1.32 GB against 1.43 GB on main),-raceon the touched tests,go vetwith every build tag,gofmt,golangci-lint, the conformance, matrix-link and changelog gates, the CI script and bench unit suites, andTestPinnedCompatibilityMatrixMatchesComposepass. Droppingunwrap_ratefrom the window functions fails the raw-evaluator tests this change keeps covering that path.