==> Building on infernape ==> Checking for remote environment... ==> Syncing package to remote host... sending incremental file list created directory packages/python-pybreaker ./ .SRCINFO 931 100% 0.00kB/s 0:00:00 931 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=7/9) .nvchecker.toml 97 100% 94.73kB/s 0:00:00 97 100% 94.73kB/s 0:00:00 (xfr#2, to-chk=6/9) LICENSE 646 100% 630.86kB/s 0:00:00 646 100% 630.86kB/s 0:00:00 (xfr#3, to-chk=5/9) PKGBUILD 1,321 100% 1.26MB/s 0:00:00 1,321 100% 1.26MB/s 0:00:00 (xfr#4, to-chk=4/9) REUSE.toml 211 100% 206.05kB/s 0:00:00 211 100% 206.05kB/s 0:00:00 (xfr#5, to-chk=3/9) python-pybreaker-1.4.1-2.log 851 100% 831.05kB/s 0:00:00 851 100% 831.05kB/s 0:00:00 (xfr#6, to-chk=2/9) LICENSES/ LICENSES/0BSD.txt -> ../LICENSE sent 2,729 bytes received 192 bytes 834.57 bytes/sec total size is 3,412 speedup is 1.17 ==> Running pkgctl build --arch riscv64 on remote host... ==> WARNING: invalid architecture: riscv64 ==> Updating pacman database cache ==> Locking pacman database cache...done [?25l:: Synchronizing package databases... core downloading... extra downloading... multilib downloading... [?25h==> Building python-pybreaker -> repo: extra -> arch: riscv64 -> worker: felix-9 ==> Building python-pybreaker for [extra] (riscv64) ==> Locking clean chroot...done Note: in a future version of systemd-nspawn the default set of permitted socket address families will be restricted to AF_INET, AF_INET6 and AF_UNIX. Use --restrict-address-families= to configure the set of permitted socket address families, or set RestrictAddressFamilies= in a .nspawn file. [?25l:: Synchronizing package databases... core downloading... extra downloading... :: Starting full system upgrade... there is nothing to do [?25h==> Building in chroot for [extra] (riscv64)... ==> Synchronizing chroot copy [/var/lib/archbuild/extra-riscv64/root] -> [felix-9]...done ==> Making package: python-pybreaker 1.4.1-2 (Sat Aug 29 16:32:11 2026) ==> Retrieving sources...  -> Cloning python-pybreaker git repo... Cloning into bare repository '/home/felix/packages/python-pybreaker/python-pybreaker'... remote: Enumerating objects: 1194, done. remote: Counting objects: 0% (1/342) remote: Counting objects: 1% (4/342) remote: Counting objects: 2% (7/342) remote: Counting objects: 3% (11/342) remote: Counting objects: 4% (14/342) remote: Counting objects: 5% (18/342) remote: Counting objects: 6% (21/342) remote: Counting objects: 7% (24/342) remote: Counting objects: 8% (28/342) remote: Counting objects: 9% (31/342) remote: Counting objects: 10% (35/342) remote: Counting objects: 11% (38/342) remote: Counting objects: 12% (42/342) remote: Counting objects: 13% (45/342) remote: Counting objects: 14% (48/342) remote: Counting objects: 15% (52/342) remote: Counting objects: 16% (55/342) remote: Counting objects: 17% (59/342) remote: Counting objects: 18% (62/342) remote: Counting objects: 19% (65/342) remote: Counting objects: 20% (69/342) remote: Counting objects: 21% (72/342) remote: Counting objects: 22% (76/342) remote: Counting objects: 23% (79/342) remote: Counting objects: 24% (83/342) remote: Counting objects: 25% (86/342) remote: Counting objects: 26% (89/342) remote: Counting objects: 27% (93/342) remote: Counting objects: 28% (96/342) remote: Counting objects: 29% (100/342) remote: Counting objects: 30% (103/342) remote: Counting objects: 31% (107/342) remote: Counting objects: 32% (110/342) remote: Counting objects: 33% (113/342) remote: Counting objects: 34% (117/342) remote: Counting objects: 35% (120/342) remote: Counting objects: 36% (124/342) remote: Counting objects: 37% (127/342) remote: Counting objects: 38% (130/342) remote: Counting objects: 39% (134/342) remote: Counting objects: 40% (137/342) remote: Counting objects: 41% (141/342) remote: Counting objects: 42% (144/342) remote: Counting objects: 43% (148/342) remote: Counting objects: 44% (151/342) remote: Counting objects: 45% (154/342) remote: Counting objects: 46% (158/342) remote: Counting objects: 47% (161/342) remote: Counting objects: 48% (165/342) remote: Counting objects: 49% (168/342) remote: Counting objects: 50% (171/342) remote: Counting objects: 51% (175/342) remote: Counting objects: 52% (178/342) remote: Counting objects: 53% (182/342) remote: Counting objects: 54% (185/342) remote: Counting objects: 55% (189/342) remote: Counting objects: 56% (192/342) remote: Counting objects: 57% (195/342) remote: Counting objects: 58% (199/342) remote: Counting objects: 59% (202/342) remote: Counting objects: 60% (206/342) remote: Counting objects: 61% (209/342) remote: Counting objects: 62% (213/342) remote: Counting objects: 63% (216/342) remote: Counting objects: 64% (219/342) remote: Counting objects: 65% (223/342) remote: Counting objects: 66% (226/342) remote: Counting objects: 67% (230/342) remote: Counting objects: 68% (233/342) remote: Counting objects: 69% (236/342) remote: Counting objects: 70% (240/342) remote: Counting objects: 71% (243/342) remote: Counting objects: 72% (247/342) remote: Counting objects: 73% (250/342) remote: Counting objects: 74% (254/342) remote: Counting objects: 75% (257/342) remote: Counting objects: 76% (260/342) remote: Counting objects: 77% (264/342) remote: Counting objects: 78% (267/342) remote: Counting objects: 79% (271/342) remote: Counting objects: 80% (274/342) remote: Counting objects: 81% (278/342) remote: Counting objects: 82% (281/342) remote: Counting objects: 83% (284/342) remote: Counting objects: 84% (288/342) remote: Counting objects: 85% (291/342) remote: Counting objects: 86% (295/342) remote: Counting objects: 87% (298/342) remote: Counting objects: 88% (301/342) remote: Counting objects: 89% (305/342) remote: Counting objects: 90% (308/342) remote: Counting objects: 91% (312/342) remote: Counting objects: 92% (315/342) remote: Counting objects: 93% (319/342) remote: Counting objects: 94% (322/342) remote: Counting objects: 95% (325/342) remote: Counting objects: 96% (329/342) remote: Counting objects: 97% (332/342) remote: Counting objects: 98% (336/342) remote: Counting objects: 99% (339/342) remote: Counting objects: 100% (342/342) remote: Counting objects: 100% (342/342), done. remote: Compressing objects: 0% (1/122) remote: Compressing objects: 1% (2/122) remote: Compressing objects: 2% (3/122) remote: Compressing objects: 3% (4/122) remote: Compressing objects: 4% (5/122) remote: Compressing objects: 5% (7/122) remote: Compressing objects: 6% (8/122) remote: Compressing objects: 7% (9/122) remote: Compressing objects: 8% (10/122) remote: Compressing objects: 9% (11/122) remote: Compressing objects: 10% (13/122) remote: Compressing objects: 11% (14/122) remote: Compressing objects: 12% (15/122) remote: Compressing objects: 13% (16/122) remote: Compressing objects: 14% (18/122) remote: Compressing objects: 15% (19/122) remote: Compressing objects: 16% (20/122) remote: Compressing objects: 17% (21/122) remote: Compressing objects: 18% (22/122) remote: Compressing objects: 19% (24/122) remote: Compressing objects: 20% (25/122) remote: Compressing objects: 21% (26/122) remote: Compressing objects: 22% (27/122) remote: Compressing objects: 23% (29/122) remote: Compressing objects: 24% (30/122) remote: Compressing objects: 25% (31/122) remote: Compressing objects: 26% (32/122) remote: Compressing objects: 27% (33/122) remote: Compressing objects: 28% (35/122) remote: Compressing objects: 29% (36/122) remote: Compressing objects: 30% (37/122) remote: Compressing objects: 31% (38/122) remote: Compressing objects: 32% (40/122) remote: Compressing objects: 33% (41/122) remote: Compressing objects: 34% (42/122) remote: Compressing objects: 35% (43/122) remote: Compressing objects: 36% (44/122) remote: Compressing objects: 37% (46/122) remote: Compressing objects: 38% (47/122) remote: Compressing objects: 39% (48/122) remote: Compressing objects: 40% (49/122) remote: Compressing objects: 41% (51/122) remote: Compressing objects: 42% (52/122) remote: Compressing objects: 43% (53/122) remote: Compressing objects: 44% (54/122) remote: Compressing objects: 45% (55/122) remote: Compressing objects: 46% (57/122) remote: Compressing objects: 47% (58/122) remote: Compressing objects: 48% (59/122) remote: Compressing objects: 49% (60/122) remote: Compressing objects: 50% (61/122) remote: Compressing objects: 51% (63/122) remote: Compressing objects: 52% (64/122) remote: Compressing objects: 53% (65/122) remote: Compressing objects: 54% (66/122) remote: Compressing objects: 55% (68/122) remote: Compressing objects: 56% (69/122) remote: Compressing objects: 57% (70/122) remote: Compressing objects: 58% (71/122) remote: Compressing objects: 59% (72/122) remote: Compressing objects: 60% (74/122) remote: Compressing objects: 61% (75/122) remote: Compressing objects: 62% (76/122) remote: Compressing objects: 63% (77/122) remote: Compressing objects: 64% (79/122) remote: Compressing objects: 65% (80/122) remote: Compressing objects: 66% (81/122) remote: Compressing objects: 67% (82/122) remote: Compressing objects: 68% (83/122) remote: Compressing objects: 69% (85/122) remote: Compressing objects: 70% (86/122) remote: Compressing objects: 71% (87/122) remote: Compressing objects: 72% (88/122) remote: Compressing objects: 73% (90/122) remote: Compressing objects: 74% (91/122) remote: Compressing objects: 75% (92/122) remote: Compressing objects: 76% (93/122) remote: Compressing objects: 77% (94/122) remote: Compressing objects: 78% (96/122) remote: Compressing objects: 79% (97/122) remote: Compressing objects: 80% (98/122) remote: Compressing objects: 81% (99/122) remote: Compressing objects: 82% (101/122) remote: Compressing objects: 83% (102/122) remote: Compressing objects: 84% (103/122) remote: Compressing objects: 85% (104/122) remote: Compressing objects: 86% (105/122) remote: Compressing objects: 87% (107/122) remote: Compressing objects: 88% (108/122) remote: Compressing objects: 89% (109/122) remote: Compressing objects: 90% (110/122) remote: Compressing objects: 91% (112/122) remote: Compressing objects: 92% (113/122) remote: Compressing objects: 93% (114/122) remote: Compressing objects: 94% (115/122) remote: Compressing objects: 95% (116/122) remote: Compressing objects: 96% (118/122) remote: Compressing objects: 97% (119/122) remote: Compressing objects: 98% (120/122) remote: Compressing objects: 99% (121/122) remote: Compressing objects: 100% (122/122) remote: Compressing objects: 100% (122/122), done. Receiving objects: 0% (1/1194) Receiving objects: 1% (12/1194) Receiving objects: 2% (24/1194) Receiving objects: 3% (36/1194) Receiving objects: 4% (48/1194) Receiving objects: 5% (60/1194) Receiving objects: 6% (72/1194) Receiving objects: 7% (84/1194) Receiving objects: 8% (96/1194) Receiving objects: 9% (108/1194) Receiving objects: 10% (120/1194) Receiving objects: 11% (132/1194) Receiving objects: 12% (144/1194) Receiving objects: 13% (156/1194) Receiving objects: 14% (168/1194) Receiving objects: 15% (180/1194) Receiving objects: 16% (192/1194) Receiving objects: 17% (203/1194) Receiving objects: 18% (215/1194) Receiving objects: 19% (227/1194) Receiving objects: 20% (239/1194) Receiving objects: 21% (251/1194) Receiving objects: 22% (263/1194) Receiving objects: 23% (275/1194) Receiving objects: 24% (287/1194) Receiving objects: 25% (299/1194) Receiving objects: 26% (311/1194) Receiving objects: 27% (323/1194) Receiving objects: 28% (335/1194) Receiving objects: 29% (347/1194) Receiving objects: 30% (359/1194) Receiving objects: 31% (371/1194) Receiving objects: 32% (383/1194) Receiving objects: 33% (395/1194) Receiving objects: 34% (406/1194) Receiving objects: 35% (418/1194) Receiving objects: 36% (430/1194) Receiving objects: 37% (442/1194) Receiving objects: 38% (454/1194) Receiving objects: 39% (466/1194) Receiving objects: 40% (478/1194) Receiving objects: 41% (490/1194) Receiving objects: 42% (502/1194) Receiving objects: 43% (514/1194) Receiving objects: 44% (526/1194) Receiving objects: 45% (538/1194) Receiving objects: 46% (550/1194) Receiving objects: 47% (562/1194) Receiving objects: 48% (574/1194) Receiving objects: 49% (586/1194) Receiving objects: 50% (597/1194) Receiving objects: 51% (609/1194) Receiving objects: 52% (621/1194) Receiving objects: 53% (633/1194) Receiving objects: 54% (645/1194) Receiving objects: 55% (657/1194) Receiving objects: 56% (669/1194) Receiving objects: 57% (681/1194) Receiving objects: 58% (693/1194) Receiving objects: 59% (705/1194) Receiving objects: 60% (717/1194) Receiving objects: 61% (729/1194) Receiving objects: 62% (741/1194) Receiving objects: 63% (753/1194) Receiving objects: 64% (765/1194) Receiving objects: 65% (777/1194) Receiving objects: 66% (789/1194) Receiving objects: 67% (800/1194) Receiving objects: 68% (812/1194) Receiving objects: 69% (824/1194) Receiving objects: 70% (836/1194) Receiving objects: 71% (848/1194) Receiving objects: 72% (860/1194) Receiving objects: 73% (872/1194) Receiving objects: 74% (884/1194) Receiving objects: 75% (896/1194) Receiving objects: 76% (908/1194) Receiving objects: 77% (920/1194) Receiving objects: 78% (932/1194) Receiving objects: 79% (944/1194) Receiving objects: 80% (956/1194) Receiving objects: 81% (968/1194) Receiving objects: 82% (980/1194) Receiving objects: 83% (992/1194) Receiving objects: 84% (1003/1194) Receiving objects: 85% (1015/1194) Receiving objects: 86% (1027/1194) Receiving objects: 87% (1039/1194) Receiving objects: 88% (1051/1194) Receiving objects: 89% (1063/1194) Receiving objects: 90% (1075/1194) Receiving objects: 91% (1087/1194) Receiving objects: 92% (1099/1194) Receiving objects: 93% (1111/1194) Receiving objects: 94% (1123/1194) Receiving objects: 95% (1135/1194) Receiving objects: 96% (1147/1194) Receiving objects: 97% (1159/1194) remote: Total 1194 (delta 261), reused 251 (delta 213), pack-reused 852 (from 2) Receiving objects: 98% (1171/1194) Receiving objects: 99% (1183/1194) Receiving objects: 100% (1194/1194) Receiving objects: 100% (1194/1194), 358.65 KiB | 810.00 KiB/s, done. Resolving deltas: 0% (0/616) Resolving deltas: 1% (7/616) Resolving deltas: 2% (13/616) Resolving deltas: 3% (19/616) Resolving deltas: 4% (25/616) Resolving deltas: 5% (31/616) Resolving deltas: 6% (37/616) Resolving deltas: 7% (44/616) Resolving deltas: 8% (50/616) Resolving deltas: 9% (57/616) Resolving deltas: 10% (63/616) Resolving deltas: 11% (69/616) Resolving deltas: 12% (75/616) Resolving deltas: 13% (83/616) Resolving deltas: 14% (87/616) Resolving deltas: 15% (94/616) Resolving deltas: 16% (99/616) Resolving deltas: 17% (105/616) Resolving deltas: 18% (112/616) Resolving deltas: 19% (118/616) Resolving deltas: 20% (124/616) Resolving deltas: 21% (130/616) Resolving deltas: 22% (136/616) Resolving deltas: 23% (143/616) Resolving deltas: 24% (148/616) Resolving deltas: 25% (154/616) Resolving deltas: 26% (161/616) Resolving deltas: 27% (167/616) Resolving deltas: 28% (173/616) Resolving deltas: 29% (179/616) Resolving deltas: 30% (185/616) Resolving deltas: 31% (192/616) Resolving deltas: 32% (198/616) Resolving deltas: 33% (204/616) Resolving deltas: 34% (210/616) Resolving deltas: 35% (216/616) Resolving deltas: 36% (222/616) Resolving deltas: 37% (228/616) Resolving deltas: 38% (235/616) Resolving deltas: 39% (241/616) Resolving deltas: 40% (249/616) Resolving deltas: 41% (253/616) Resolving deltas: 42% (259/616) Resolving deltas: 43% (266/616) Resolving deltas: 44% (272/616) Resolving deltas: 45% (278/616) Resolving deltas: 46% (284/616) Resolving deltas: 47% (290/616) Resolving deltas: 48% (296/616) Resolving deltas: 49% (302/616) Resolving deltas: 50% (310/616) Resolving deltas: 51% (315/616) Resolving deltas: 52% (322/616) Resolving deltas: 53% (327/616) Resolving deltas: 54% (333/616) Resolving deltas: 55% (339/616) Resolving deltas: 56% (345/616) Resolving deltas: 57% (352/616) Resolving deltas: 58% (360/616) Resolving deltas: 59% (364/616) Resolving deltas: 60% (371/616) Resolving deltas: 61% (376/616) Resolving deltas: 62% (382/616) Resolving deltas: 63% (389/616) Resolving deltas: 64% (396/616) Resolving deltas: 65% (403/616) Resolving deltas: 66% (407/616) Resolving deltas: 67% (413/616) Resolving deltas: 68% (420/616) Resolving deltas: 69% (427/616) Resolving deltas: 70% (432/616) Resolving deltas: 71% (438/616) Resolving deltas: 72% (444/616) Resolving deltas: 73% (451/616) Resolving deltas: 74% (456/616) Resolving deltas: 75% (462/616) Resolving deltas: 76% (470/616) Resolving deltas: 77% (475/616) Resolving deltas: 78% (481/616) Resolving deltas: 79% (491/616) Resolving deltas: 80% (493/616) Resolving deltas: 81% (500/616) Resolving deltas: 82% (506/616) Resolving deltas: 83% (512/616) Resolving deltas: 84% (520/616) Resolving deltas: 85% (524/616) Resolving deltas: 86% (530/616) Resolving deltas: 87% (538/616) Resolving deltas: 88% (543/616) Resolving deltas: 89% (549/616) Resolving deltas: 90% (556/616) Resolving deltas: 91% (561/616) Resolving deltas: 92% (567/616) Resolving deltas: 93% (573/616) Resolving deltas: 94% (580/616) Resolving deltas: 95% (588/616) Resolving deltas: 96% (593/616) Resolving deltas: 97% (598/616) Resolving deltas: 98% (604/616) Resolving deltas: 99% (610/616) Resolving deltas: 100% (616/616) Resolving deltas: 100% (616/616), done. ==> Validating source files with sha512sums... python-pybreaker ... Passed ==> Validating source files with b2sums... python-pybreaker ... Passed Note: in a future version of systemd-nspawn the default set of permitted socket address families will be restricted to AF_INET, AF_INET6 and AF_UNIX. Use --restrict-address-families= to configure the set of permitted socket address families, or set RestrictAddressFamilies= in a .nspawn file. ==> Making package: python-pybreaker 1.4.1-2 (Sat Aug 29 08:32:33 2026) ==> Checking runtime dependencies... ==> Checking buildtime dependencies... ==> Installing missing dependencies... [?25lresolving dependencies... looking for conflicting packages... Package (18) New Version Net Change Download Size extra/perl-error 0.17030-3 0.04 MiB extra/perl-mailtools 2.22-3 0.10 MiB extra/perl-timedate 2.35-1 0.15 MiB extra/python-iniconfig 2.3.0-1 0.07 MiB extra/python-packaging 26.3-1 1.58 MiB extra/python-pluggy 1.6.0-3.1 0.23 MiB extra/python-pygments 2.20.0-1 15.36 MiB extra/python-pyproject-hooks 1.2.0-6 0.11 MiB extra/python-sortedcontainers 2.4.0-8 0.38 MiB extra/zlib-ng 2.3.3-1 0.23 MiB extra/git 2.55.0-1 29.92 MiB extra/python-build 1.4.3-1 0.26 MiB extra/python-fakeredis 2.37.1-1 2.31 MiB 0.36 MiB extra/python-flit-core 4.0.2-1 0.36 MiB extra/python-installer 1.0.0-1 0.20 MiB extra/python-pytest 1:9.0.3-1 4.86 MiB extra/python-redis 8.1.0-1 8.99 MiB extra/python-tornado 6.5.8-1 6.22 MiB 0.89 MiB Total Download Size: 1.25 MiB Total Installed Size: 71.38 MiB :: Proceed with installation? [Y/n] :: Retrieving packages... python-tornado-6.5.8-1-riscv64 downloading... python-fakeredis-2.37.1-1-any downloading... checking keyring... checking package integrity... loading package files... checking for file conflicts... :: Processing package changes... installing perl-error... installing perl-timedate... installing perl-mailtools... installing zlib-ng... installing git... Optional dependencies for git git-zsh-completion: upstream zsh completion tk: gitk and git gui openssh: ssh transport and crypto man: show help with `git command --help` perl-libwww: git svn perl-term-readkey: git svn and interactive.singlekey setting perl-io-socket-ssl: git send-email TLS support perl-authen-sasl: git send-email TLS support perl-cgi: gitweb (web interface) support python: git svn & git p4 [installed] subversion: git svn org.freedesktop.secrets: keyring credential helper libsecret: libsecret credential helper [installed] less: the default pager for git installing python-packaging... installing python-pyproject-hooks... installing python-build... Optional dependencies for python-build python-pip: to use as the Python package installer (default) python-uv: to use as the Python package installer python-virtualenv: to use virtualenv for build isolation installing python-flit-core... installing python-installer... installing python-iniconfig... installing python-pluggy... installing python-pygments... installing python-pytest... installing python-tornado... Optional dependencies for python-tornado python-pycurl: for tornado.curl_httpclient python-twisted: for tornado.platform.twisted installing python-redis... Optional dependencies for python-redis python-cryptography: OCSP certificate validation python-hiredis: faster performance via hiredis python-pyopenssl: OCSP certificate validation python-requests: OCSP certificate validation installing python-sortedcontainers... installing python-fakeredis... Optional dependencies for python-fakeredis python-packaging: for aioredis support [installed] python-lupa: for lua scripting support :: Running post-transaction hooks... (1/4) Creating system user accounts... Creating group 'git' with GID 968. Creating user 'git' (git daemon user) with UID 968 and GID 968. (2/4) Reloading system manager configuration... Skipped: Current root is not booted. (3/4) Arming ConditionNeedsUpdate... (4/4) Checking for old perl modules... [?25h==> Retrieving sources... ==> WARNING: Skipping all source file integrity checks. ==> Extracting sources...  -> Creating working copy of python-pybreaker git repo... Cloning into 'python-pybreaker'... done. Switched to a new branch 'makepkg' ==> Starting build()... * Getting build dependencies for wheel... * Building wheel... Successfully built pybreaker-1.4.1-py3-none-any.whl ==> Starting check()... ============================= test session starts ============================== platform linux -- Python 3.14.7, pytest-9.0.3, pluggy-1.6.0 -- /usr/bin/python cachedir: .pytest_cache rootdir: /build/python-pybreaker/src/python-pybreaker configfile: pyproject.toml collecting ... collected 81 items tests/pybreaker_test.py::CircuitBreakerTestCase::test_add_excluded_exception PASSED [ 1%] tests/pybreaker_test.py::CircuitBreakerTestCase::test_add_excluded_exceptions PASSED [ 2%] tests/pybreaker_test.py::CircuitBreakerTestCase::test_add_listener PASSED [ 3%] tests/pybreaker_test.py::CircuitBreakerTestCase::test_add_listeners PASSED [ 4%] tests/pybreaker_test.py::CircuitBreakerTestCase::test_call_async_with_args PASSED [ 6%] tests/pybreaker_test.py::CircuitBreakerTestCase::test_call_async_with_kwargs PASSED [ 7%] tests/pybreaker_test.py::CircuitBreakerTestCase::test_call_async_with_no_args PASSED [ 8%] tests/pybreaker_test.py::CircuitBreakerTestCase::test_call_events PASSED [ 9%] tests/pybreaker_test.py::CircuitBreakerTestCase::test_call_with_args PASSED [ 11%] tests/pybreaker_test.py::CircuitBreakerTestCase::test_call_with_kwargs PASSED [ 12%] tests/pybreaker_test.py::CircuitBreakerTestCase::test_call_with_no_args PASSED [ 13%] tests/pybreaker_test.py::CircuitBreakerTestCase::test_close PASSED [ 14%] tests/pybreaker_test.py::CircuitBreakerTestCase::test_contextmanager PASSED [ 16%] tests/pybreaker_test.py::CircuitBreakerTestCase::test_create_new_state__bad_state PASSED [ 17%] tests/pybreaker_test.py::CircuitBreakerTestCase::test_decorator PASSED [ 18%] tests/pybreaker_test.py::CircuitBreakerTestCase::test_decorator_call_future PASSED [ 19%] tests/pybreaker_test.py::CircuitBreakerTestCase::test_default_params PASSED [ 20%] tests/pybreaker_test.py::CircuitBreakerTestCase::test_default_state PASSED [ 22%] tests/pybreaker_test.py::CircuitBreakerTestCase::test_excluded_callable_and_types_exceptions PASSED [ 23%] tests/pybreaker_test.py::CircuitBreakerTestCase::test_excluded_callable_exceptions PASSED [ 24%] tests/pybreaker_test.py::CircuitBreakerTestCase::test_excluded_exceptions PASSED [ 25%] tests/pybreaker_test.py::CircuitBreakerTestCase::test_fail_max_setter PASSED [ 27%] tests/pybreaker_test.py::CircuitBreakerTestCase::test_failed_call_after_timeout PASSED [ 28%] tests/pybreaker_test.py::CircuitBreakerTestCase::test_failed_call_when_halfopen PASSED [ 29%] tests/pybreaker_test.py::CircuitBreakerTestCase::test_failure_count_not_reset_during_creation PASSED [ 30%] tests/pybreaker_test.py::CircuitBreakerTestCase::test_generator PASSED [ 32%] tests/pybreaker_test.py::CircuitBreakerTestCase::test_name PASSED [ 33%] tests/pybreaker_test.py::CircuitBreakerTestCase::test_new_with_custom_excluded_exceptions PASSED [ 34%] tests/pybreaker_test.py::CircuitBreakerTestCase::test_new_with_custom_fail_max PASSED [ 35%] tests/pybreaker_test.py::CircuitBreakerTestCase::test_new_with_custom_reset_timeout PASSED [ 37%] tests/pybreaker_test.py::CircuitBreakerTestCase::test_no_tornado_raises PASSED [ 38%] tests/pybreaker_test.py::CircuitBreakerTestCase::test_notify_called_on_state_change PASSED [ 39%] tests/pybreaker_test.py::CircuitBreakerTestCase::test_notify_not_called_on_init PASSED [ 40%] tests/pybreaker_test.py::CircuitBreakerTestCase::test_one_failed_call PASSED [ 41%] tests/pybreaker_test.py::CircuitBreakerTestCase::test_one_successful_call_after_failed_call PASSED [ 43%] tests/pybreaker_test.py::CircuitBreakerTestCase::test_remove_excluded_exception PASSED [ 44%] tests/pybreaker_test.py::CircuitBreakerTestCase::test_remove_listener PASSED [ 45%] tests/pybreaker_test.py::CircuitBreakerTestCase::test_reset_timeout_setter PASSED [ 46%] tests/pybreaker_test.py::CircuitBreakerTestCase::test_several_failed_calls_setting_absent PASSED [ 48%] tests/pybreaker_test.py::CircuitBreakerTestCase::test_state_opened_at_not_reset_during_creation PASSED [ 49%] tests/pybreaker_test.py::CircuitBreakerTestCase::test_success_threshold_default_behavior PASSED [ 50%] tests/pybreaker_test.py::CircuitBreakerTestCase::test_success_threshold_failure_resets_counter PASSED [ 51%] tests/pybreaker_test.py::CircuitBreakerTestCase::test_success_threshold_multiple_successes_required PASSED [ 53%] tests/pybreaker_test.py::CircuitBreakerTestCase::test_success_threshold_property PASSED [ 54%] tests/pybreaker_test.py::CircuitBreakerTestCase::test_success_threshold_redis_storage SKIPPED [ 55%] tests/pybreaker_test.py::CircuitBreakerTestCase::test_successful_after_timeout PASSED [ 56%] tests/pybreaker_test.py::CircuitBreakerTestCase::test_successful_call PASSED [ 58%] tests/pybreaker_test.py::CircuitBreakerTestCase::test_successful_call_when_halfopen PASSED [ 59%] tests/pybreaker_test.py::CircuitBreakerTestCase::test_throw_new_error_on_trip_false PASSED [ 60%] tests/pybreaker_test.py::CircuitBreakerTestCase::test_throw_new_error_on_trip_true PASSED [ 61%] tests/pybreaker_test.py::CircuitBreakerTestCase::test_traceback_in_circuitbreaker_error PASSED [ 62%] tests/pybreaker_test.py::CircuitBreakerTestCase::test_transition_events PASSED [ 64%] tests/pybreaker_test.py::CircuitBreakerRedisTestCase::test_call_events PASSED [ 65%] tests/pybreaker_test.py::CircuitBreakerRedisTestCase::test_close PASSED [ 66%] tests/pybreaker_test.py::CircuitBreakerRedisTestCase::test_cluster_mode PASSED [ 67%] tests/pybreaker_test.py::CircuitBreakerRedisTestCase::test_contextmanager PASSED [ 69%] tests/pybreaker_test.py::CircuitBreakerRedisTestCase::test_failed_call_after_timeout PASSED [ 70%] tests/pybreaker_test.py::CircuitBreakerRedisTestCase::test_failed_call_when_halfopen PASSED [ 71%] tests/pybreaker_test.py::CircuitBreakerRedisTestCase::test_fallback_state PASSED [ 72%] tests/pybreaker_test.py::CircuitBreakerRedisTestCase::test_generator PASSED [ 74%] tests/pybreaker_test.py::CircuitBreakerRedisTestCase::test_missing_state PASSED [ 75%] tests/pybreaker_test.py::CircuitBreakerRedisTestCase::test_namespace PASSED [ 76%] tests/pybreaker_test.py::CircuitBreakerRedisTestCase::test_one_failed_call PASSED [ 77%] tests/pybreaker_test.py::CircuitBreakerRedisTestCase::test_one_successful_call_after_failed_call PASSED [ 79%] tests/pybreaker_test.py::CircuitBreakerRedisTestCase::test_several_failed_calls_setting_absent PASSED [ 80%] tests/pybreaker_test.py::CircuitBreakerRedisTestCase::test_successful_after_timeout PASSED [ 81%] tests/pybreaker_test.py::CircuitBreakerRedisTestCase::test_successful_call PASSED [ 82%] tests/pybreaker_test.py::CircuitBreakerRedisTestCase::test_successful_call_when_halfopen PASSED [ 83%] tests/pybreaker_test.py::CircuitBreakerRedisTestCase::test_throw_new_error_on_trip_false PASSED [ 85%] tests/pybreaker_test.py::CircuitBreakerRedisTestCase::test_throw_new_error_on_trip_true PASSED [ 86%] tests/pybreaker_test.py::CircuitBreakerRedisTestCase::test_traceback_in_circuitbreaker_error PASSED [ 87%] tests/pybreaker_test.py::CircuitBreakerRedisTestCase::test_transition_events PASSED [ 88%] tests/pybreaker_test.py::CircuitBreakerThreadsTestCase::test_fail_max_thread_safety PASSED [ 90%] tests/pybreaker_test.py::CircuitBreakerThreadsTestCase::test_fail_thread_safety PASSED [ 91%] tests/pybreaker_test.py::CircuitBreakerThreadsTestCase::test_half_open_thread_safety PASSED [ 92%] tests/pybreaker_test.py::CircuitBreakerThreadsTestCase::test_success_thread_safety PASSED [ 93%] tests/pybreaker_test.py::CircuitBreakerRedisConcurrencyTestCase::test_fail_max_thread_safety FAILED [ 95%] tests/pybreaker_test.py::CircuitBreakerRedisConcurrencyTestCase::test_fail_thread_safety PASSED [ 96%] tests/pybreaker_test.py::CircuitBreakerRedisConcurrencyTestCase::test_half_open_thread_safety PASSED [ 97%] tests/pybreaker_test.py::CircuitBreakerRedisConcurrencyTestCase::test_success_thread_safety PASSED [ 98%] tests/pybreaker_test.py::CircuitBreakerContextManagerTestCase::test_calling PASSED [100%] =================================== FAILURES =================================== ______ CircuitBreakerRedisConcurrencyTestCase.test_fail_max_thread_safety ______ self = def test_fail_max_thread_safety(self): """CircuitBreaker: it should not allow more failed calls than 'fail_max' setting. Note that with Redis, where we have separate systems incrementing the counter, we can get concurrent updates such that the counter is greater than the 'fail_max' by the number of systems. To prevent this, we'd need to take out a lock amongst all systems before trying the call. """ @self.breaker def err(): raise Exception def trigger_error(): for i in range(2000): try: err() except: pass class SleepListener(CircuitBreakerListener): def before_call(self, cb, func, *args, **kwargs): sleep(0.00005) self.breaker.add_listener(SleepListener()) num_threads = 3 self._start_threads(trigger_error, num_threads) > assert self.breaker.fail_counter < self.breaker.fail_max + num_threads E assert 3006 < (3000 + 3) E + where 3006 = .fail_counter E + where = .breaker E + and 3000 = .fail_max E + where = .breaker tests/pybreaker_test.py:1315: AssertionError =========================== short test summary info ============================ FAILED tests/pybreaker_test.py::CircuitBreakerRedisConcurrencyTestCase::test_fail_max_thread_safety =================== 1 failed, 79 passed, 1 skipped in 38.43s =================== ==> ERROR: A failure occurred in check().  Aborting... ==> ERROR: Build failed, check /var/lib/archbuild/extra-riscv64/felix-9/build receiving incremental file list python-pybreaker-1.4.1-2-riscv64-build.log python-pybreaker-1.4.1-2-riscv64-check.log sent 62 bytes received 2,173 bytes 638.57 bytes/sec total size is 10,308 speedup is 4.61