Repository navigation
RecCaster has moved to its own repository at ChannelFinder/reccaster. This repository now holds RecCeiver only, and client/ is a stub pointing at the new location. Version numbering for the recceiver package continues unbroken; 1.10.0 is a minor release because it adds a console script and raises the install floor to Python 3.7, not because of the split. The code still runs on 3.6 from a checkout, where recceiver-clean is unavailable because console scripts are created by the install.
Features
- feat(server): add
recceiver-cleanCLI tool for manual channel sweeps by @anderslindho in #168
Reverted
- revert(server): restore global
DeferredLockfor CF commits by @anderslindho in #168 — per-IOC locks let up tomaxActivecommits land in parallel, which raced thecleanOnStartsweep between its query for active channels and its bulk write of Inactive over them
Bug fixes
- fix(server): prevent NActive double-decrement after successful upload by @anderslindho in #168 — after N uploads
NActivedrifted to -N andmaxActivethrottling stopped working entirely - fix(server): initialize
_ping_timerto prevent AttributeError on throttled close by @anderslindho in #168 — hit only whenmaxActivethrottling is in effect and a waiting connection drops before promotion - fix(server): clamp NActive to zero in status log and metrics by @anderslindho in #168
- fix(server): evict IOC from memory when CF push exhausts retries by @anderslindho in #168 — in-memory state previously claimed the IOC was committed when CF had never been written, and the divergence persisted until that IOC reconnected
- fix(server): orphan channel when last known IOC is absent in
_handle_channel_is_oldby @anderslindho in #168 — aKeyErrorsilently dropped the channel from the write batch - fix(server): include metrics extra in Docker image by @anderslindho in #167 —
metricsPortcould not work in the published image, contrary to the1.9.6notes - fix(server): use
getint()forfindSizeLimitto prevent TypeError by @roycpro in #172 — the value reached the CF client as a string and every commit failed with'str' object cannot be interpreted as an integer - fix(server): restore Python 3.6 compatibility by @tynanford in #178 — builtin generic annotations and
str.removeprefix()are 3.9 or later, so the package installed on 3.6 to 3.8 and then failed on import
Repository changes
- RecCaster moved to
ChannelFinder/reccaster;client/CI, docs, and submodule removed by @jacomago in #169 - Debian packaging removed by @anderslindho in #176 — it could no longer build; sites packaging from
debian/will need their own - READMEs and
recceiver_full.confbrought in line with the reccaster split by @anderslindho in #176 - All unit tests collected in CI, and the development
compose.ymlhealthcheck corrected by @anderslindho in #176 - fix(tests): correct the IOC dbd path by @anderslindho in #179
requires-pythonraised to>=3.7and the 3.6 classifier dropped by @tynanford in #178 — setuptools on 3.6 cannot install frompyproject.toml; the overlappingrequestsandtwistedmarkers below 3.7 go with it- CI installs the package and imports it from outside the checkout, so the declared floor is tested by @tynanford in #178
Config changes
- No keys added, removed, or given new defaults.
- Corrected:
findSizeLimitis now parsed as an integer. It was read as a string, so any site that set it saw every CF commit fail (#172). - Corrected:
pushAlwaysRetry— the1.9.6notes stated that enabling it holds only the per-IOC lock, leaving other IOCs unaffected. Following the revert above, enabling it holds the global commit lock and blocks all IOC commits until CF recovers. The default is unchanged atFalse. recceiver-cleanis the manual counterpart tocleanOnStart, for sites that run withcleanOnStart = False. It marks every Active channel for a givenrecceiver_idInactive, and--dry-runreports the count without writing.
New Contributors
Full Changelog: 1.9.6...1.10.0