Skip to content

fastcached v0.3.0

Latest

Choose a tag to compare

@github-actions github-actions released this 22 Sep 13:57
· 13 commits to master since this release
6eaea2c

What's Changed

⚠️ Breaking changes

Features

  • feat(cli): fastcache-cli, an operator's client for the cache by @christianparpart in #1198
  • feat(cli): the memcached-text verbs, and the wire column that makes room for them by @christianparpart in #1232
  • Stack six batches onto one branch: 17 tickets, one CI cycle by @christianparpart in #1249
  • Name the toolchain on a dispatched compile, and measure the /fleet render instead of caching it by @christianparpart in #1263
  • feat(node): a reset peer and one that said goodbye are counted apart by @christianparpart in #1262
  • The upstream row is not replicated, the stream decoder reserves within a cap, and a setting must say what reads it by @christianparpart in #1273
  • feat(cli): reach a pure-0xFC node, and let it say what it is by @christianparpart in #1275
  • The cluster verbs in fastcache-cli, and one predicate for following a NotLeader by @christianparpart in #1312
  • A worker that is never chosen says so by @christianparpart in #1316
  • NodeStatus says what a node is DOING, so a default node is observable by @christianparpart in #1315
  • feat(node): the worker's cache tiers take the daemon's six compression settings by @christianparpart in #1324
  • The fleet tables answer a terminal, not only a browser by @christianparpart in #1326
  • cluster admit echoes the endpoint it recorded, so a typo is visible by @christianparpart in #1336
  • Group COMMANDS by wire, derive the fleet-column coverage, and ship the KPI strip computed by @christianparpart in #1341
  • A runtime enrollment window, and the --raft-join trap it makes sharper by @christianparpart in #1333
  • The live-stats dashboard is a fold over one event stream (#134 stage 3) by @christianparpart in #1386
  • fastcache-cli live-stats: a live terminal view of a cache, a compile node or the fleet by @christianparpart in #1392
  • A Counter becomes an index in one place, and a scan says so by @christianparpart in #1409
  • CacheDrop: an operator removes one key from the cache tier that answers by @christianparpart in #1411
  • compile-node: a worker can be cordoned, drains, and says when stopping it abandons nothing by @christianparpart in #1412
  • compile-node: --scheduler is a list, and a dead first entry falls back in the same round by @christianparpart in #1419
  • A unit compiled against a different Counter enum fails to link by @christianparpart in #1414
  • compile-node: NodeMetrics answers the reading /metrics renders, so a node's cache tier shows without an admin surface by @christianparpart in #1435
  • cli: fleet reads the leader's tables over 0xFC, follows a follower to them, and prints the history as a table by @christianparpart in #1436
  • compile-node: print the consensus address peers dial, apart from the one the node binds by @christianparpart in #1425
  • compile-node: --slots=0 runs no worker, and the worker is a tier by @christianparpart in #1459
  • live-stats: a consensus node's panel says where its peers dial it by @christianparpart in #1463
  • One duration grammar for every length of time the tools read and print by @christianparpart in #1458
  • build: every shipping configure runs the instruction-set check, in its job and before its build by @christianparpart in #1493
  • fleet: an admission names every route that admitted it, through one door by @christianparpart in #1498
  • fleet: a node says how many client tombstones it has APPLIED, and absent is not zero by @christianparpart in #1502
  • node: a machine that holds the cluster key is admitted on 0xFC by proving it, not by its address by @christianparpart in #1513
  • node: a live subscription is gated on the cluster-key proof at its door and on every tick, not on an address by @christianparpart in #1516
  • node: a machine with no worker announces itself, so the fleet can see it by @christianparpart in #1517
  • node: an operator can ask WHICH routes admit or refuse a host, not only whether by @christianparpart in #1522
  • node: the fleet surfaces report WHICH clients the cluster has forgotten, not how many by @christianparpart in #1523
  • board 3: thirteen changes integrated on one branch -- learners, identity keys, conditions, arm64 and the CI guards by @christianparpart in #1551
  • board 3, final: per-node identity replaces the cluster key (#178 PRs 3-6), a follower refuses what it cannot read, and a refusal survives its close by @christianparpart in #1558

Bug fixes

  • fix(test): FileTrust's 0640 cases assert for the privilege mode they are actually in by @christianparpart in #1131
  • The MSVC bindir is chosen by the machine, not by the architecture this build targets by @christianparpart in #1133
  • fix(async): give every Submit site the ownership a detached chain needs by @christianparpart in #1132
  • fix(ci): sweep apt sources by an allowlist of hosts, not a list of vendors by @christianparpart in #1164
  • fix(net): retire an IOCP read synchronously, and stop reporting every IOCP error as SystemError by @christianparpart in #1136
  • The caveat self-test's quiet case no longer bets on a fast host by @christianparpart in #1154
  • fix(test): utf8-argv takes its verdict in bytes, not through the console's code page by @christianparpart in #1147
  • fix(tests): take the per-file process out of two hygiene scans by @christianparpart in #1151
  • fix(ci): the gate reports what its tests actually did — skips by name (#1130), crashes named (#1158), states reconciled (#1159) by @christianparpart in #1153
  • fix: four tickets — derived wire-enum bounds (#197), an unclassifiable compiler's own refusal (#264), fleet-open admission (#1112), windows.h include category (#1135) by @christianparpart in #1186
  • The gate's target set, and one staged tree for the check-signals selftest by @christianparpart in #1199
  • Stop a pipe SIGPIPE reddening master, and make three checks report what they found by @christianparpart in #1200
  • fix(launcher,server): the compile budget, the MSVC fingerprint premise, and a compile-time guard on what a connection holds by @christianparpart in #1203
  • The macOS package fixture gets a port of its own, and hygiene budgets get a headroom report by @christianparpart in #1201
  • fix(ci): a notarization stall names Apple, and the toolchain survey is bounded on silence by @christianparpart in #1205
  • fix(hygiene): four defects in the script-check family's readers and verdict arms by @christianparpart in #1222
  • fix(test): a Catch2 case name may not begin with a dash by @christianparpart in #1240
  • Three reactor and socket teardown tickets, and a fourth that did not reproduce by @christianparpart in #1250
  • fix(ci): a green TSan run says WHICH suppressions matched, not just how many by @christianparpart in #1264
  • fix(cli): help answers, and a settled action still reads how to render it by @christianparpart in #1292
  • A settled question answers about its own tail: help <command> renders that verb's page, and a word naming none exits 2 by @christianparpart in #1311
  • fix(compile-cache): the key probe must not treat warnings as errors by @christianparpart in #1322
  • fastcache-cli --format=tsv escapes what it cannot carry raw by @christianparpart in #1335
  • The absent-admin-surface refusal names a remedy, and five reply readers fold into the shared header by @christianparpart in #1337
  • Node observability: the fleet tiles name their counters, the 401 is a real page, and two comments stop lying by @christianparpart in #1343
  • Two instruments that answered confidently and wrongly: a backwards clock, and a counter the build cannot represent by @christianparpart in #1350
  • The scrape asks before reporting, one escaping table instead of two, and the qualified-auto trap gets a home by @christianparpart in #1358
  • The chart cases assert a stroked path, and the HTML prologue is spelled once by @christianparpart in #1363
  • Three instruments that answered confidently and wrongly by @christianparpart in #1365
  • Text that cannot go in the document: plist escaping, a non-UTF-8 key, and one markup convention by @christianparpart in #1368
  • credential-containers derives the stripped text once per file, not once per identifier by @christianparpart in #1378
  • endo's runtime/ joins the build, and the reason it did not was false by @christianparpart in #1381
  • fix: the gate lock, the merge verdict and the Windows suite stop reporting on the wrong subject by @christianparpart in #1388
  • The selftest tally says what it counts, and the comment scan reads // before /* (#1382) by @christianparpart in #1385
  • Guard optional targets vendor/ declares in target-file-guards by @christianparpart in #1393
  • fix(tests): no executable a test runs waits on a Windows error dialog by @christianparpart in #1394
  • fix(node): background waits end on a stop request, and the frame ceilings state what zero means by @christianparpart in #1398
  • fix(cache): ExpiryReaper::Stop waits for the sweep frame's whole trip off the reactor by @christianparpart in #1400
  • fix(cluster): a member says whether its scheduler endpoint was never announced or cleared by a re-admit by @christianparpart in #1401
  • The clang-format build CI judges with is declared, and nothing formats with another by @christianparpart in #1403
  • The known-defects check finds its sites with one grep, not a read per line by @christianparpart in #1417
  • ExpiryReaper tests: destroy the reaper only once its sweep is back by @christianparpart in #1443
  • vendor-figures-selftest writes its 1,200-line fixture once, not a line per open by @christianparpart in #1424
  • fastcache-bench states the build its figures came from, and marks every figure with it by @christianparpart in #1470
  • A client is revoked by a replicated tombstone, so removing one stops failing open by @christianparpart in #1472
  • fleet: a share is the fraction it was measured as, on every surface a machine reads by @christianparpart in #1474
  • cache: a reopened disk tier reports the items it HOLDS, not the ones this session touched by @christianparpart in #1486
  • cc: a macro switch leaves the dispatched command line and nothing else (+ #1469, #1476) by @christianparpart in #1487
  • cli: the fleet verb writes a figure in the scale the leader's tables give it by @christianparpart in #1490
  • build: the loop scan reaches production sources, and the stripper it reads through stops going blind by @christianparpart in #1495
  • metrics: a counter no surface of this process writes reads absent, and says which absence it is by @christianparpart in #1496
  • node: the advertised endpoint is asked where it is presented, and a move retires the registration it replaces by @christianparpart in #1510
  • storage: a lock refusal carries the errno it was classified from, so InUse is falsifiable from a log by @christianparpart in #1514
  • metrics: every catalogue row says which surface writes it, and a row that says nothing is a build failure by @christianparpart in #1521
  • launcher: clang-cl's CMake depfile arrives through -clang:-MF, and a hit that cannot reproduce a named depfile is not served (#1531) by @christianparpart in #1533
  • tests: a Catch2 assertion off its case's thread ends the process (#1211), and the SUBSCRIBE case accepts the Gap a slow reader is owed (#1559) by @christianparpart in #1560
  • tests: eight instrument defects, each proven by the failure it now produces by @christianparpart in #1569
  • Bug-fix sprint: 26 defects across five batches, integrated into one CI cycle by @christianparpart in #1590
  • fix(compile-cache): collapse dot-dot in /showIncludes notes before ninja refuses them by length by @christianparpart in #1594

Performance

Documentation

  • docs(agent): a measurement's conditions are pinned, not pointed at by @christianparpart in #1166
  • docs: backwards compatibility is not owed before production readiness (#332), and PathResolve_test uses the shared scratch fixture (#147) by @christianparpart in #1189
  • docs: --show-stats documents the generation reason it emits (#650), and the environment table is bound to the launcher (#881) by @christianparpart in #1188
  • docs: the diff that verifies a rebase is three-dot (#541), and state the falsifier before opening the file (#536) by @christianparpart in #1191
  • docs(agent): a ticket is a claim about a tree, and it decays by @christianparpart in #1204
  • docs(rules): a count that overstates what is wrong is the same defect as one that understates it by @christianparpart in #1219
  • Name the operator actions only fastcache-compile-node has in fastcache-cli --help by @christianparpart in #1396
  • docs: the TSan build line names every gate target, and the gate is run through bash by @christianparpart in #1536
  • docs: AGENT.md states each rule once and points at the argument, under a guard that says so by @christianparpart in #1573

Internals

  • test(catch2): record why no ctest property can express a Catch2 skip, with a reader by @christianparpart in #1146
  • test(net): hold the resolver across the drain so the hand-back cannot race it by @christianparpart in #1165
  • test(ci): guards that do not guard — an unrun self-test, a scan over an empty set, a selftest pinned to one platform by @christianparpart in #1167
  • test(e2e): write down the background-cleanup rule, and stop either guard being removed by @christianparpart in #1169
  • build/ci: share dependency sources across worktrees, and make the tag sweep a decision by @christianparpart in #1170
  • Three fixtures that reported on something other than their subject by @christianparpart in #1172
  • Nine tickets on one branch: eight open PRs consolidated so the merge queue gets one entry instead of eight by @christianparpart in #1183
  • refactor: one CanonicalToken for two identical copies (#122), and DirectManifest_test writes through the shared fixture (#70) by @christianparpart in #1187
  • chore: a shared declared-count blob builder (#306), and one writer per cache key (#318) by @christianparpart in #1190
  • refactor(launcher): pass the invocation record instead of reaching for it (#60) by @christianparpart in #1193
  • refactor: retire IsToolchainHeader (#657), and close the resolver hand-back race (#1194) by @christianparpart in #1195
  • test(tsan): the sanitized scope names where the threads are, and the check proves a case is selectable by @christianparpart in #1217
  • test(ci): characterise two dist-compile flakes, and census the toolchain walk by @christianparpart in #1256
  • Stack four orphaned branches onto one: 10 tickets, one CI cycle by @christianparpart in #1253
  • Three tests that were not testing what they claimed: NodeConfig sections, the reload-to-resurvey join, and the POSIX dist-compile verdict logic by @christianparpart in #1265
  • Retire the #1207 and #1208 TSan suppressions, whose bugs are fixed by @christianparpart in #1268
  • The launcher's cache decisions move where tests can reach them by @christianparpart in #1267
  • A crashed run is its own outcome, a Windows fixture waits for readiness, and a budget stops citing a falsified fact by @christianparpart in #1271
  • test(tsan): sanitize the third test binary, and derive the set so a fourth cannot hide by @christianparpart in #1269
  • Two instruments: a tracked mutation harness, and four outcomes for any check command by @christianparpart in #1277
  • Three claims that outlived what they described: the write-slot canary, close-under-accept measured, and sourceName's stale contract by @christianparpart in #1278
  • Lane L: the retired-generation idiom, a per-row conformance freeze, and the sccache smoke port by @christianparpart in #1282
  • The sccache smoke asserts it reached fastcached, and in which dialect by @christianparpart in #1323
  • Vendor endo's TUI and wire it into the build (#134 stage 1 of 3) by @christianparpart in #1367
  • A dial seam for --enroll-from, and a skewed-build index at both metrics sites (#1348, #1354) by @christianparpart in #1373
  • The node's early-exit verbs are a table, not seven nested returns (#1351) by @christianparpart in #1384
  • build: every tree-wide enumerator asks one roots file which files are third-party by @christianparpart in #1395
  • clang-tidy is one exact build, identified by its wheel by @christianparpart in #1408
  • The vendored TUI's completeness criterion is a link over a root the build derives by @christianparpart in #1413
  • clang-format is one exact PyPI release, stated once in .clang-format-version by @christianparpart in #1405
  • ExpiryReaper tests: the stop drain's clock is a seam the cases hold, and every fixture wait is bounded by time by @christianparpart in #1451
  • fastcached's configuration file goes through the flag table's own appliers by @christianparpart in #1455
  • Tests wait through one bounded wait, and C-style loops in tests are refused by @christianparpart in #1462
  • net: IocpListener refuses to adopt, so StartAdopted is one body on every platform by @christianparpart in #1438
  • Two checks ask what CI cannot: no first-party unit carries a global instruction-set flag by @christianparpart in #1464
  • Three fixes on one branch: a parking fake, the TSan scope self-test's staging, and the prerequisites blanker by @christianparpart in #1466
  • The per-step env: rule is asked of every workflow file, not one by @christianparpart in #1465
  • Four test coroutines wait through one bounded AwaitUntil, and test-loops refuses the unbounded shape by @christianparpart in #1467
  • check: a definition is a line, so a read above its own assignment is refused by @christianparpart in #1475
  • test: a bound that overran says WHICH of its three stages spent the time by @christianparpart in #1477
  • core: the enumerators of an enum are a view, not a cast at every call site by @christianparpart in #1478
  • test: the cordon case waits for the drained REPORT, not only for the count that precedes it by @christianparpart in #1482
  • check: the ${{ env.NAME }} on the right of a row is read, so a typo cannot satisfy itself by @christianparpart in #1480
  • build: how a file set is found is ONE answer, and the ticket's direction was wrong by @christianparpart in #1489
  • build: the shell lexer becomes an awk library, and the second lexer is refused with evidence by @christianparpart in #1491
  • build: one model of workflow YAML, five readers on it, and a scan that refuses the sixth by @christianparpart in #1492
  • build: the launcher's C-style loops get classified, and two exemption traps get named by @christianparpart in #1499
  • cli: the live panel is held to the absence #1484 was actually reported against by @christianparpart in #1500
  • fleet: a forget is proved composed across a pair, and the harness can now express one by @christianparpart in #1503
  • build: the 12 mechanically safe C-style loops under src/apps are ranges, and three blind spots got named by @christianparpart in #1504
  • test: the membership fakes are shared, and a check refuses the seventh copy by @christianparpart in #1505
  • build: the two option-parser walks that convert do, and the one that does not says why by @christianparpart in #1508
  • test: a temp path may not bet on std::random_device, which answers zero 57% of the time here by @christianparpart in #1511
  • build: 53 C-style loops become ranges, and the residue is classified rather than counted by @christianparpart in #1518
  • build: ten loops that cannot be ranges become exemptions, and two stale figures go by @christianparpart in #1520
  • build: every executable compiles a probe that refuses an instruction set above its baseline (#1447) by @christianparpart in #1526
  • build: the last 49 production C-style loops are converted or exempted with a reason (#1452) by @christianparpart in #1529

Other changes

Full Changelog: v0.2.0...v0.3.0