From 50c6e1f0fe471f744d46a945d44a537b25548ed6 Mon Sep 17 00:00:00 2001 From: catborise Date: Fri, 6 Nov 2026 08:57:25 +0300 Subject: [PATCH] fix(jobs): recovery that cannot read a job's state for an hour ends it uncertain Recovery retried a reconcile that raised every 10 minutes with no end. A job whose compute was gone for good stayed running ("Waiting for recovery") and kept its claims: it could not be resolved (only uncertain jobs can), cancelled, or have its compute deleted. After an hour of failed reconciles the job ends uncertain with the last error; it keeps its claims, and an administrator checks the VM and resolves it. A reconcile that answers restarts the hour. --- locale/tr/LC_MESSAGES/django.mo | Bin 192865 -> 193075 bytes locale/tr/LC_MESSAGES/django.po | 148 ++++++++++++++++-------------- locale/zh/LC_MESSAGES/django.mo | Bin 180337 -> 180533 bytes locale/zh/LC_MESSAGES/django.po | 146 +++++++++++++++-------------- operations/tests/test_recovery.py | 23 ++++- operations/worker.py | 14 ++- 6 files changed, 188 insertions(+), 143 deletions(-) diff --git a/locale/tr/LC_MESSAGES/django.mo b/locale/tr/LC_MESSAGES/django.mo index 4c3e1c0c96cddfe19955cb2079b74aa72c66aee5..e7de45a2b011f394f63ddd5af760bcb22a87f2c6 100644 GIT binary patch delta 39931 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 B$k_k@ delta 39798 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 diff --git a/locale/tr/LC_MESSAGES/django.po b/locale/tr/LC_MESSAGES/django.po index 8954b854..9ec883a3 100644 --- a/locale/tr/LC_MESSAGES/django.po +++ b/locale/tr/LC_MESSAGES/django.po @@ -396,7 +396,7 @@ msgid "2FA Protection Active" msgstr "2FA Koruması Etkin" #: accounts/templates/accounts/otp_qr.html:4 -#: accounts/templates/accounts/otp_qr.html:6 accounts/utils.py:70 +#: accounts/templates/accounts/otp_qr.html:6 accounts/utils.py:74 msgid "OTP QR Code" msgstr "OTP QR Kodu" @@ -553,7 +553,7 @@ msgstr "%(name)s SSH anahtarı için işlemler" msgid "No SSH keys." msgstr "SSH anahtarı yok." -#: accounts/utils.py:71 +#: accounts/utils.py:75 #, python-format msgid "" "Open this link within an hour to see the OTP QR code of account '%(user)s':\n" @@ -2767,7 +2767,7 @@ msgstr "" msgid "Delete snapshot" msgstr "Anlık görüntüyü sil" -#: instances/jobs.py:313 vrtManager/instance.py:2298 +#: instances/jobs.py:313 vrtManager/instance.py:2299 #, python-format msgid "The VM has no external snapshot named %(name)s" msgstr "Sanal makinede %(name)s adında harici anlık görüntü yok" @@ -2802,7 +2802,7 @@ msgstr "Sanal makine artık işin çalıştığı sunucuda değil" msgid "Take snapshot" msgstr "Anlık görüntü al" -#: instances/jobs.py:381 instances/jobs.py:390 vrtManager/instance.py:1894 +#: instances/jobs.py:381 instances/jobs.py:390 vrtManager/instance.py:1895 #, python-format msgid "A snapshot named %(name)s already exists" msgstr "%(name)s adında bir anlık görüntü zaten var" @@ -2977,7 +2977,7 @@ msgstr "cloud-init tohumu, disk için bir dizin depolama havuzu gerektirir" msgid "This host offers no firmware %(firmware)s" msgstr "Bu sunucu %(firmware)s firmware'ini sunmuyor" -#: instances/jobs.py:792 vrtManager/instance.py:3022 +#: instances/jobs.py:792 vrtManager/instance.py:3023 msgid "This host offers no TPM 2.0: install swtpm on it" msgstr "Bu sunucu TPM 2.0 sunmuyor: üzerine swtpm kurun" @@ -7925,7 +7925,15 @@ msgstr "" msgid "Waiting for recovery" msgstr "Kurtarma bekleniyor" -#: operations/worker.py:460 +#: operations/worker.py:48 +msgid "" +"Recovery could not read the job's state for an hour; check the VM, then " +"resolve this job" +msgstr "" +"Kurtarma bir saat boyunca işin durumunu okuyamadı; sanal makineyi kontrol " +"edin, sonra bu işi çözün" + +#: operations/worker.py:464 msgid "The worker stopped before the job changed anything" msgstr "Worker, iş herhangi bir şeyi değiştirmeden önce durdu" @@ -9110,56 +9118,56 @@ msgid "Please shutdown the instance then try to enable vCPU hotplug" msgstr "" "vCPU hotplug özelliğini etkinleştirmek için önce sanal makineyi kapatın" -#: vrtManager/instance.py:1853 +#: vrtManager/instance.py:1854 msgid "" "The VM has external snapshots; internal snapshots cannot be mixed with them" msgstr "" "Sanal makinenin harici anlık görüntüleri var; dahili anlık görüntüler " "bunlarla karıştırılamaz" -#: vrtManager/instance.py:1885 +#: vrtManager/instance.py:1886 msgid "A snapshot with memory is not quiesced; it keeps the whole guest state" msgstr "" "Bellekli bir anlık görüntüde dosya sistemleri dondurulmaz; tüm konuk durumunu" " saklar" -#: vrtManager/instance.py:1887 +#: vrtManager/instance.py:1888 msgid "Only a running VM's file systems can be frozen" msgstr "Yalnızca çalışan bir sanal makinenin dosya sistemleri dondurulabilir" -#: vrtManager/instance.py:1889 +#: vrtManager/instance.py:1890 msgid "The QEMU guest agent is not connected; it freezes the file systems" msgstr "QEMU konuk aracısı bağlı değil; dosya sistemlerini o dondurur" -#: vrtManager/instance.py:1892 +#: vrtManager/instance.py:1893 msgid "" "The VM has internal snapshots; external snapshots cannot be mixed with them" msgstr "" "Sanal makinenin dahili anlık görüntüleri var; harici anlık görüntüler " "bunlarla karıştırılamaz" -#: vrtManager/instance.py:1897 +#: vrtManager/instance.py:1898 msgid "Newer snapshots exist after the last revert; delete them first" msgstr "" "Son geri dönüşten sonra daha yeni anlık görüntüler var; önce onları silin" -#: vrtManager/instance.py:1900 +#: vrtManager/instance.py:1901 msgid "No snapshot is current; revert to a snapshot first" msgstr "Geçerli anlık görüntü yok; önce bir anlık görüntüye geri dönün" -#: vrtManager/instance.py:1906 +#: vrtManager/instance.py:1907 #, python-format msgid "Eject the media from %(dev)s first" msgstr "Önce %(dev)s içindeki ortamı çıkarın" -#: vrtManager/instance.py:1908 +#: vrtManager/instance.py:1909 #, python-format msgid "Disk %(dev)s is not a file; external snapshots need file disks" msgstr "" "Disk %(dev)s bir dosya değil; harici anlık görüntüler dosya diskleri " "gerektirir" -#: vrtManager/instance.py:1916 +#: vrtManager/instance.py:1917 #, python-format msgid "" "The storage pools could not be refreshed, so their free space is unknown: " @@ -9167,21 +9175,21 @@ msgid "" msgstr "" "Depolama havuzları yenilenemedi, bu yüzden boş alanları bilinmiyor: %(err)s" -#: vrtManager/instance.py:1937 +#: vrtManager/instance.py:1938 msgid "Memory is saved only from a running VM" msgstr "Bellek yalnızca çalışan bir sanal makineden kaydedilir" -#: vrtManager/instance.py:1939 +#: vrtManager/instance.py:1940 msgid "The VM has no disk to keep its memory next to" msgstr "Sanal makinenin, belleğinin yanına kaydedileceği bir diski yok" -#: vrtManager/instance.py:1943 +#: vrtManager/instance.py:1944 #, python-format msgid "%(disk)s is not in a storage pool; memory is saved only into one" msgstr "" "%(disk)s bir depolama havuzunda değil; bellek yalnızca bir havuza kaydedilir" -#: vrtManager/instance.py:1974 +#: vrtManager/instance.py:1975 #, python-format msgid "" "Storage pool %(pool)s has %(free).1f GiB free; the snapshot needs %(size).1f " @@ -9192,7 +9200,7 @@ msgstr "" "%(size).1f GiB gerektiriyor (sanal makinenin oradaki disklerinin " "%%%(percent)g kadarı, en az %(minimum)g GiB, ve kaydediliyorsa bellek)" -#: vrtManager/instance.py:1992 +#: vrtManager/instance.py:1993 msgid "" "This snapshot was taken by an older version on a UEFI VM and cannot be " "reverted; delete it instead" @@ -9200,7 +9208,7 @@ msgstr "" "Bu anlık görüntü UEFI bir sanal makinede eski bir sürümle alındı ve geri " "dönülemez; bunun yerine silin" -#: vrtManager/instance.py:2022 +#: vrtManager/instance.py:2023 #, python-format msgid "" "The revert failed twice; try again in a moment (%(error)s). The VM is " @@ -9209,7 +9217,7 @@ msgstr "" "Geri dönüş iki kez başarısız oldu; biraz sonra tekrar deneyin (%(error)s). " "Sanal makine çalışıyor." -#: vrtManager/instance.py:2024 +#: vrtManager/instance.py:2025 #, python-format msgid "" "The revert failed twice; try again in a moment (%(error)s). The VM is shut " @@ -9218,13 +9226,13 @@ msgstr "" "Geri dönüş iki kez başarısız oldu; biraz sonra tekrar deneyin (%(error)s). " "Sanal makine kapalı." -#: vrtManager/instance.py:2187 +#: vrtManager/instance.py:2188 msgid "A disk moves when its VM is defined and running, paused or shut off" msgstr "" "Bir disk, sanal makinesi tanımlıyken ve çalışırken, duraklatılmışken veya " "kapalıyken taşınır" -#: vrtManager/instance.py:2189 +#: vrtManager/instance.py:2190 msgid "" "A disk of a VM with snapshots, a saved state or a running block job does not " "move" @@ -9232,7 +9240,7 @@ msgstr "" "Anlık görüntüleri, kaydedilmiş durumu veya çalışan bir blok işi olan sanal " "makinenin diski taşınmaz" -#: vrtManager/instance.py:2197 +#: vrtManager/instance.py:2198 #, python-format msgid "" "%(dev)s is not a disk file of the VM, the same in its running and next " @@ -9241,132 +9249,132 @@ msgstr "" "%(dev)s, sanal makinenin çalışan ve sonraki başlatma tanımlarında aynı olan " "bir disk dosyası değil" -#: vrtManager/instance.py:2202 +#: vrtManager/instance.py:2203 #, python-format msgid "%(dev)s does not move: only writable raw and qcow2 disks do" msgstr "%(dev)s taşınmaz: yalnızca yazılabilir raw ve qcow2 diskler taşınır" -#: vrtManager/instance.py:2209 +#: vrtManager/instance.py:2210 #, python-format msgid "%(dev)s does not move: no storage pool has %(path)s" msgstr "%(dev)s taşınmaz: hiçbir depolama havuzunda %(path)s yok" -#: vrtManager/instance.py:2211 +#: vrtManager/instance.py:2212 #, python-format msgid "%(dev)s does not move: it has a backing file" msgstr "%(dev)s taşınmaz: temel (backing) dosyası var" -#: vrtManager/instance.py:2214 +#: vrtManager/instance.py:2215 #, python-format msgid "%(pool_name)s is not an active pool of disk files of this host" msgstr "%(pool_name)s bu sunucunun etkin bir disk dosyası havuzu değil" -#: vrtManager/instance.py:2217 +#: vrtManager/instance.py:2218 #, python-format msgid "%(dev)s is in pool %(pool_name)s already" msgstr "%(dev)s zaten %(pool_name)s havuzunda" -#: vrtManager/instance.py:2221 +#: vrtManager/instance.py:2222 #, python-format msgid "Pool %(pool_name)s already has a file %(name)s" msgstr "%(pool_name)s havuzunda zaten %(name)s dosyası var" -#: vrtManager/instance.py:2245 +#: vrtManager/instance.py:2246 #, python-format msgid "The copy of %(dev)s ended before it was complete" msgstr "%(dev)s kopyası tamamlanmadan sona erdi" -#: vrtManager/instance.py:2290 +#: vrtManager/instance.py:2291 #, python-format msgid "%(error)s; remove %(dest)s if it is there: %(cleanup_error)s" msgstr "%(error)s; varsa %(dest)s dosyasını kaldırın: %(cleanup_error)s" -#: vrtManager/instance.py:2292 +#: vrtManager/instance.py:2293 #, python-format msgid "%(error)s; the VM may use %(dest)s now: check its disk %(dev)s" msgstr "" "%(error)s; sanal makine şu anda %(dest)s dosyasını kullanıyor olabilir: " "%(dev)s diskini kontrol edin" -#: vrtManager/instance.py:2299 +#: vrtManager/instance.py:2300 #, python-format msgid "The VM has no internal snapshot named %(name)s" msgstr "Sanal makinenin %(name)s adlı dahili anlık görüntüsü yok" -#: vrtManager/instance.py:2308 +#: vrtManager/instance.py:2309 msgid "The VM has a saved state; start it or remove the saved state first" msgstr "" "Sanal makinenin kaydedilmiş durumu var; önce başlatın veya kaydedilmiş durumu" " kaldırın" -#: vrtManager/instance.py:2310 +#: vrtManager/instance.py:2311 msgid "A snapshot job is still running on this VM; try again when it ends" msgstr "" "Bu sanal makinede hâlâ bir anlık görüntü işi çalışıyor; bittiğinde tekrar " "deneyin" -#: vrtManager/instance.py:2320 +#: vrtManager/instance.py:2321 msgid "Shut the VM down to revert to an internal snapshot" msgstr "Dahili bir anlık görüntüye geri dönmek için sanal makineyi kapatın" -#: vrtManager/instance.py:2414 +#: vrtManager/instance.py:2415 msgid "Cannot clone a VM whose NVRAM is not a file" msgstr "NVRAM'i dosya olmayan bir sanal makine klonlanamaz" -#: vrtManager/instance.py:2482 +#: vrtManager/instance.py:2483 #, python-format msgid "Clone failed (%(err)s); remove these copies by hand: %(path)s" msgstr "" "Klonlama başarısız oldu (%(err)s); bu kopyaları elle kaldırın: %(path)s" -#: vrtManager/instance.py:2492 +#: vrtManager/instance.py:2493 msgid "Shut the VM down before cloning it" msgstr "Klonlamadan önce sanal makineyi kapatın" -#: vrtManager/instance.py:2546 +#: vrtManager/instance.py:2547 #, python-format msgid "Clone failed (%(err)s); remove these copies by hand: %(leftovers)s" msgstr "" "Klonlama başarısız oldu (%(err)s); bu kopyaları elle kaldırın: %(leftovers)s" -#: vrtManager/instance.py:2557 +#: vrtManager/instance.py:2558 msgid "Live clone needs libvirt 11.10 or later; shut the VM down to clone it" msgstr "" "Canlı klonlama libvirt 11.10 veya sonrasını gerektirir; klonlamak için sanal " "makineyi kapatın" -#: vrtManager/instance.py:2560 +#: vrtManager/instance.py:2561 msgid "A VM with a TPM is cloned only shut down" msgstr "TPM'i olan bir sanal makine yalnızca kapalıyken klonlanır" -#: vrtManager/instance.py:2563 +#: vrtManager/instance.py:2564 #, python-format msgid "Disk %(dev)s is not a local file; shut the VM down to clone it" msgstr "" "Disk %(dev)s yerel bir dosya değil; klonlamak için sanal makineyi kapatın" -#: vrtManager/instance.py:2565 +#: vrtManager/instance.py:2566 #, python-format msgid "Disk %(dev)s is shareable; shut the VM down to clone it" msgstr "Disk %(dev)s paylaşılabilir; klonlamak için sanal makineyi kapatın" -#: vrtManager/instance.py:2570 +#: vrtManager/instance.py:2571 #, python-format msgid "Disk %(dev)s changes at the next start; shut the VM down to clone it" msgstr "" "Disk %(dev)s sonraki başlatmada değişiyor; klonlamak için sanal makineyi " "kapatın" -#: vrtManager/instance.py:2572 +#: vrtManager/instance.py:2573 msgid "Another job is running on the VM; clone it when that ends" msgstr "Sanal makinede başka bir iş çalışıyor; o bittiğinde klonlayın" -#: vrtManager/instance.py:2585 +#: vrtManager/instance.py:2586 #, python-format msgid "Volume %(name)s already exists in storage pool %(pool)s" msgstr "%(name)s birimi %(pool)s depolama havuzunda zaten var" -#: vrtManager/instance.py:2604 +#: vrtManager/instance.py:2605 #, python-format msgid "" "Storage pool %(pool)s has %(free).1f GiB free; the clone needs %(size).1f GiB" @@ -9376,20 +9384,20 @@ msgstr "" "gerektiriyor (kopyalanan diskler, artı bunların %%%(percent)g kadarı, en az " "%(minimum)g GiB)" -#: vrtManager/instance.py:2743 +#: vrtManager/instance.py:2744 msgid "A network interface that is a host device is removed in the XML editor" msgstr "Sunucu aygıtı olan bir ağ arabirimi XML düzenleyicide kaldırılır" -#: vrtManager/instance.py:2759 +#: vrtManager/instance.py:2760 #, python-format msgid "No network interface with MAC %(old_mac)s" msgstr "MAC adresi %(old_mac)s olan ağ arabirimi yok" -#: vrtManager/instance.py:2762 +#: vrtManager/instance.py:2763 msgid "A network interface that is a host device is changed in the XML editor" msgstr "Sunucu aygıtı olan bir ağ arabirimi XML düzenleyicide değiştirilir" -#: vrtManager/instance.py:2853 +#: vrtManager/instance.py:2854 msgid "" "A VM changes its PCI devices while it runs, or is shut off without a saved " "state" @@ -9397,14 +9405,14 @@ msgstr "" "Sanal makine PCI aygıtlarını çalışırken veya kaydedilmiş durumu olmadan " "kapalıyken değiştirir" -#: vrtManager/instance.py:2865 +#: vrtManager/instance.py:2866 #, python-format msgid "%(err)s; whether the VM has PCI device %(address)s now is not known" msgstr "" "%(err)s; sanal makinede şu anda %(address)s PCI aygıtının olup olmadığı " "bilinmiyor" -#: vrtManager/instance.py:2867 +#: vrtManager/instance.py:2868 #, python-format msgid "" "%(err)s; PCI device %(address)s: the VM is not running, its next start has it" @@ -9412,7 +9420,7 @@ msgstr "" "%(err)s; PCI aygıtı %(address)s: sanal makine çalışmıyor, sonraki başlatmada " "var" -#: vrtManager/instance.py:2869 +#: vrtManager/instance.py:2870 #, python-format msgid "" "%(err)s; PCI device %(address)s: the VM is not running, its next start does " @@ -9421,7 +9429,7 @@ msgstr "" "%(err)s; PCI aygıtı %(address)s: sanal makine çalışmıyor, sonraki başlatmada " "yok" -#: vrtManager/instance.py:2870 +#: vrtManager/instance.py:2871 #, python-format msgid "" "%(err)s; PCI device %(address)s: the running VM has it, its next start has it" @@ -9429,7 +9437,7 @@ msgstr "" "%(err)s; PCI aygıtı %(address)s: çalışan sanal makinede var, sonraki " "başlatmada var" -#: vrtManager/instance.py:2872 +#: vrtManager/instance.py:2873 #, python-format msgid "" "%(err)s; PCI device %(address)s: the running VM has it, its next start does " @@ -9438,7 +9446,7 @@ msgstr "" "%(err)s; PCI aygıtı %(address)s: çalışan sanal makinede var, sonraki " "başlatmada yok" -#: vrtManager/instance.py:2874 +#: vrtManager/instance.py:2875 #, python-format msgid "" "%(err)s; PCI device %(address)s: the running VM does not have it, its next " @@ -9447,7 +9455,7 @@ msgstr "" "%(err)s; PCI aygıtı %(address)s: çalışan sanal makinede yok, sonraki " "başlatmada var" -#: vrtManager/instance.py:2876 +#: vrtManager/instance.py:2877 #, python-format msgid "" "%(err)s; PCI device %(address)s: the running VM does not have it, its next " @@ -9456,29 +9464,29 @@ msgstr "" "%(err)s; PCI aygıtı %(address)s: çalışan sanal makinede yok, sonraki " "başlatmada yok" -#: vrtManager/instance.py:2910 +#: vrtManager/instance.py:2911 #, python-format msgid "The VM has no PCI device %(address)s" msgstr "Sanal makinede %(address)s PCI aygıtı yok" -#: vrtManager/instance.py:2928 +#: vrtManager/instance.py:2929 msgid "The VM has no USB controller" msgstr "Sanal makinede USB denetleyicisi yok" -#: vrtManager/instance.py:2947 +#: vrtManager/instance.py:2948 msgid "The VM has no such USB device" msgstr "Sanal makinede böyle bir USB aygıtı yok" -#: vrtManager/instance.py:2988 +#: vrtManager/instance.py:2989 msgid "The VM has its own RNG device: change it in the XML editor" msgstr "" "Sanal makinenin kendi RNG aygıtı var: bunu XML düzenleyicide değiştirin" -#: vrtManager/instance.py:3015 +#: vrtManager/instance.py:3016 msgid "The VM has its own TPM: change it in the XML editor" msgstr "Sanal makinenin kendi TPM'i var: bunu XML düzenleyicide değiştirin" -#: vrtManager/instance.py:3034 +#: vrtManager/instance.py:3035 #, python-format msgid "Unknown crash action %(action)s" msgstr "Bilinmeyen çökme eylemi %(action)s" @@ -9909,10 +9917,10 @@ msgid "Secret %(uuid)s is used by %(named)s; remove it from them first" msgstr "" "%(uuid)s parolası %(named)s tarafından kullanılıyor; önce onlardan kaldırın" -#: webvirtcloud/settings.py:332 +#: webvirtcloud/settings.py:334 msgid "Localhost" msgstr "Yerel sunucu" -#: webvirtcloud/settings.py:333 +#: webvirtcloud/settings.py:335 msgid "All interfaces" msgstr "Tüm arabirimler" diff --git a/locale/zh/LC_MESSAGES/django.mo b/locale/zh/LC_MESSAGES/django.mo index ac5337887e54f861f13736815dc57c66b9828246..e444978b1850a7d7d514e1b9d241ca5bc6c80960 100644 GIT binary patch delta 39940 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 YN8c@Zv~c&FTwQ{b?&w-MIO>4^1M<0A7ytkO delta 39798 zcmY-21(?*;|Mv0OC6;bjdKVU0dRdn4?(XjHZWy|I=mtpvDJcO#5Rh(>PNhW=kmh;c zb3XpB-!s=WzE1b~&g`PNb9CIlN5=KuP7-~thu7I4k0&ioE#dL>jN|cq8m3f_XU|%X zrwH!FD1438G3z>yClm)@R-BJH@sOpzz)AvgD+%W? zHNHc};7Pi{U%*obvlH)+>2U>S!Gov{|G;dR^jlZ1IMT4E6Kdd7Q0*SWRCo_n?;}Rh zzbETPkEbXJ%}@<3Kn>_HHpXWd56f?I`E@V_@nM)0eW-!0!w@`%>F^IMhtW5?b}C~J z;@_ZFFv)iwPXqe*v?8DecVj6$iw!a17FVz%wkEz4l^(p+*%Q^!aqNJ}x3SDP47K!! zuo%9LJx&$J2xFsKh@rfTsE!BC{o;}4J81%hc(kN_2yaz_&ISj>s zovwaH)E4Ez#MlrMVrPpFMy=G8ovgn)+(?4{m(-cr(;i&&P1Qw1@T2MBpO{NilS<+v9v#l6VW$OqO8; z9z|7rgQ}PA2iH*<)Dm|`9lirt81G^uOuf(JX@Y%G<<4R-ruXi5OIrX#Noa#wkujJG zXJK00i0b$kRL6gz4q5U8&L~Vyyf((fju?hLP&1y5?4su^YGR{*bnST$6R1VPQ_PP= z54zLe8?}UsuoWJ~VwmNSTamWdl=x&+2Y+B@%=nYL4V5r0@s6mOjU1hyD$yrJL2}P7S<&`38U~9*2cs?yVKql6<>#p(eob5;ohU}EPTP-#3PQm zThRg)_xbg5+6h!3;cv6hao4dI7m~gQlVF`++)UeJMdB;55g9Q#yPjOr7(i@0jTHJrntcVE2F>#ciQWs;@wfFc`|AMD=-?aLk)BzCd6Hs z0FRkhPy>62aq+qN&hn#QbnPX@?Bu7u$oj`3P@V+MtOlxsW~lUzsB72@)$nB0%w}V3 zT!-pto24JXB*ZUbJp3I~;wy~6xR*EwSQJ&ivzLH6>Wk`l7^1JXg{0{X5Jct_DN7NPuTzB!T&rt*M+;jtph00HWIy0%!tEEm) zKr_jK8bC4BQuRP}FcP)b6Ht5k18S+Cq8fUK+PY7e27_+7LmGw|iRVOZRZUEZ?NKW= z;uh<#iepI##u=!?w+=OfQ>Yo=K@H>yhT>nSfh4}|wxl$sC0-kIU=P$SS!8~Ln&>7} zdwWqUapX4ZubH2-jJv3jJw@&HU#OXS?zjOaz)+%DP&2EDD%ZsvVopX)Xc210+ff5P zg&N35)YiuG-t~Bj6NtjH*c-J}JIzz5Yj_XU;afA+J=bwDR7ce?9NVD=JQcNqi%_2- z-(hC_8&hNOefMeV%}XGJgbt{s8E?)+JwO(r&cX&PgZoee{DMg^*#lQE9JO+hW`pN2YgOEDep zMGgEaY6bp44der={b;{)^)La()%~wUKn0qi3baREn_j3D8H8Hm(U=Dpp~{^ye?=X> zdsq^`U_C7Hhr91SOi%m}Y65pqD<1HO&ldXkWFU|ki=t-K8iTMmYN-cf3Y>x3+qI}I z`5raXW2i%X1$FxWK&@Po$L@PU2xceV6E)C9sCv86+nB&H0-+fC#C1>_)nHB39=Aeu z*cUZ}aTpudVGwS^n79`;z(c43oJDQz4b&ligt76HrN?~A`fDUfp1QrtfNCH=s)4eo z>r)Fgpw6iBLr{A=3Dv<;RJ{!r-;G+aBd9ZR9W~H*rstU}AL|+GubHJFAv$J7U5{KC z7b{^LtY_&hQ8OKa4R93J$KO!(b3b=8jlwA6l`uOFLv7_c%Rhiwh+p&)(4N1?SQz_- z>mUj0l%_)EH$}~;D~91{)QYS{|6Zadat!0+Z>U522Wp^SQ043Y$#)6tfbq~9LUSQ<5x%BZbrg4&YysKeO}wb#?p-!WDtz8Y2T zFVu?ti^+BWW4?A3(xR3&6VAX&sDb>3I<+rR*YrJV03mN&dLB$nya@KeYFHf)q6QNG zty}8kSdn-})WEwaUH88~0Ue&vSPmy(c|46JFv-8p+L)jCOe~1Uuqb{(o$?~@+ykl+ zDt{72;!mg!|3RIxFBT7a&-y1JAqfE;hRmof$ZPQusHLiEHo;`XJEQh|1g6C4SOC|d z>fgo`_!MJczz262gHS6Hg6cQ?1M9Dm6(K<@P#(3ERWK7aL(OayYVVe#4%b@DhmTS9 z(tUIj$cWnW2-E0|2 zKe;6hMxBXJ)PN#Uhp~XAH$ole&X^Y`p(eK9OCSe<>sSn9es(|OmBn(zC!-3U!_@c! zwdAqBxUI>6O^N5hV4P~{t1&zA9jKY#Mh);Ws@!{2J#XT#ZU)`46A1&b2;RY>nA#KI zUx5awC2fXks2gf8hnwS2r+XS|tFE9XbQ870sR9B#bucq(Ew} zH&0wKltASJL}q8oY;Eq0guRMvv(R7KxRKm&Il{4MXrLY6as2xfLmcTDgj- zm8^?PumyTG!jA;BC(&XB_)mQbRL6xe3)aW+I1HmyF18y`LDb5WK%JR#mhMH}|M92} zm!it8xA=Fc0qu<);Prnj9wkBd@dj#X-(WS25y$Oy9aM!5sJ-ih>R>2pWoDyJ^+MDc z*kTV0^_=jc&NQjWASX5mUto50PCX$(jGOl9;iL- zhZ@)#jE4JB=RM_cvlk8Vc3LiuyO)-`ZuAj&u^#?9Zy2HbOo?H z(Xyy(HwiV9-KYs1M0I=^>*HzEz%nLs<#M3TS`>1Py`BmLbZVQR_GSq3VDL=9tauF7 zz)Q@8?=TytOYCk#MbzH+Lp_+LqPAcu>ci@L)Pw8Shp(8c=rB;jM}4s55G**Pv#49JOWFQ4{$CTjEPhOaGpl z$=t}gp_Xh4R>6C?9CIdj`KM9$`WfnahNa*Ef+aCGjzk^0EvSxnpw7%O)N|t$>bAT? zP2?+j^@K|r>+_8O=anS;9T-=G@afLe(is0R0=mi}i{ z`Kzc7|3E!C|3TFcPvf>AmzO|t5=x^wY>1jkGgJp%P)phmb;t&xmUK4iP%X9m4X6QZ zMs>IoHL=5%{ugE;{ti_?B&{2uH#-3xp2Db#olp(+H;1DJG!FF~@S!?Bf!cyAmY*P< ztCtpaCNiPg%Yk|T6|#7DRC_~^>*)1NB%qP4L#@PF)FFF_5%>}H#LAK0o%(X9d)*5C z12u=EW;PD>9GHnZ+$&LAx&y=T2&&#AjG_Dgl0Ya4Z%`vn5#p9Q47FFqQ4NiCQs0r;fPocK*9_rKbcg1!8Lqpvm%7p4Dm&FUAIxLM^vI_VO z)zl5rP7ghg>#b0Ogx~2SV2?;X0 z0>P+(WW*Af7qu0=Eq?&&({2=M#$!=S@53K)F>3FdWC`$ZMK9F%hgqlre}_8M`@94q z2wcVt7(Lv5>}EkVSOc?S1JssyF&EB9&EzPmq4Spi1XVsDt2-OnQROS41~93 zcN+nn#$Qo0PMpmZ%z)~!gvA?RDDl3iPs2H=0q#aE?LjPwzo5=Ytn4m54Q3;r2}7|4 z>cgievPE9c7)zLeI?dl;4*UtVA}>%&oG^!LAU*07mqe9siyFu%%!`vy1KN+eo<~vT z?xD8uE2hTiIdxXJe<1`k@?5A6yQB7Q25M>7pgQ;w^W!npN`1mA7%!Lm7;cEV-wRNC zyaZKm18M@>P+N8gbvRF9R^9)r1k|A?w`(8;>d>Xe0@xVU&`i{!TYzd{v8Aswx1g4O zH`c|I*a6c=xRo1+xrwheub@|lAbKA6?KB%|&bpBS9;01ob?)hFZ!ysJ(n(`Oi@g zp1>%#BB@aM8Bkl29ZO*mb13R???*jP{zYxU7gRg3^Kt(b2+ik~v>eQ8U_$I&3FVEAkli2!3Jlc==tsiBVga-fMyEsE!Jt?rC`p!8R5j zjm3yBM>TvCb@=XCe$E2!npH;aabMIEausStH=#P*Zs|Xw2JZcZfL7pw6?lv~l&?_( z=~vKQmszL*Z9*;SY1GyQ6>=s-H5hF1P}DWcidwOUb@x!(*r!okh*)GHP${qE_Y+>J~i5I`|dUah<|$Ynq|rL$IW#I+lPwG=4^P zcoEgnE!3X=j?M8cs$9Jy?y$AN3B>!L2Jiv(X%|q`)k}&RKqhR31FlAL^RTLGA5BEQ1ln-GKU_o@hf*GoOcAiB+hxvmSLwccTV$3jGs84g3~n!e^GA zs03TBnWiD2nTDaZA|I-u;;8)Es0JHbyp_c}p_aO*#YdyA;Uv^yU5LZ*S5*6TOS*x! zL)GhBlKZcv7*B%sZV75{R-!uGh`K)8Q3Jbxn(=ki%1FD?@ zsQSfG6RLn(ks77EZp6*3KsVGt`lA{cf_e_jKn-*WYKGfU12}B?XHYA49o4~~7=>?9 z1IS+5-I_>Lyc=rE`g$!e8g&h4p+>eIb(nUcmg*N&g&U{=JVg!cgQW+RaUWtSPy=Xy zYNrKiE4pER+<>|84(d7KjbGMXw_=!ug!-t%H4L>96D>Xsb)Oev1b&a2$wSP8&rmCr zwp@Ux9p*(1U_Pqc8q|O{p&spfUB1_IfIw*yPN5D-{POM$q(|*pR@96mQA=Ff^6R5I zY>C>c{uqvvQ6Ea%QRS~-Hhg0FNh`STibXM*?tgs(`lizbb@)bO7*0hsv=uYsB};#g zp~TZwbU)dYz`Vr!qV{|(M&fnU$9TL-ZY8Rswx%&^qOFy#``?E^IUI?Z@F;5OpP~-g zOKgE3uq8IG?9%t5R_JHcN}MqtpqBnU*1@1E?u$(m)L9ya`Z%6}{`>!sfL7o+>I_7$ z>h>%LY6M*smcn91R z0tvs8prvn7!;Nf=IR!O9AL{h3#d){`w_%llC-P8$d!-{gkMBSuI`w^`xwT zTG6(s74r5Yke$F_REMiEFaC)7Ci6GyL6NYIopw}uU(AKGP~Qg*qCTuXpw3Y7x~_aX z)RHg6;`ki3(%I|zf41~`Y7$Vzc~}UqVO300-+kF^fr_t3&FD3%!@vga*KNg7*KRQ8 z!_BBq$@{2|zMy6v*3h+I3Y9+?bLsxiC7>A|v5Z$1PteHCv^c8arl_T#Y3b`x&xd2E z`~C#GV4BA6(2Ymc+m6-n5$X|~uZg?vU9chjd$thJ(gZaP@XW#T*c7j0K`hYBJ%D;( zJ>qjvEA<4GpRu`nAT>cP{ZLfLtFR_sMXgwP3)g-d)Hkeu(W^&eqL%K%qX?EGJ_L0Z z4q_9$hD9-7E4L!OP><~Cs6%)jb*LU%{u|U2Gihu0+q1%`Gvh_w|E1wQT;Tad7a>$ouLlr}=`)pS(F?U)rmqMi?#db(@Z z5OvL_pw7fr)C69k+DY8Y&9ow_y(y^tEy%U^dd?E?s$g%oWV29Dx>u-YcSIkz=S@+E zYK3_WwUp0M_dio#cZ(XKJ}u{AD84aM^mF+Iu`=oXv8;MNNI-`pT7TC;X0s|rklx!| zi6w|%KrLOO0d6bupq_*sQP*!Ss@#6m06(I(CTgHNW7W<6*jh7RNLRo<%)!KVwczJ;JSIMby>~ zMBSe6M{xhOrzc6!VfhPn{jzW^by!-W9AoKz}UDLHNrLi0^A1FJwAqs@e8V4BA?sq)Yy`EEz}Zk#prkl z^mY{Cc3Dh^IuNV*G&vX5yMz2m|76Q7DMNtjcMm5+4HR9f=hKHHcP+PJLwYR^Z zX8sg)WWG?IZ;XaR zPy-x+9dRl)#n-4OT&>0Kc`yMLKacuq7PQ1YAJU*cl*(c`9F1C0?{NZpkR(|e;2DTb zQ3JY!TKfB_C3}gQ@f*}kV=Qy|DNtJ%hANi>^(h#M+QLSt2{lKx*AdlzKV${?{XYSH zcuYr~?#-w}bp~|^U!tzxTdaz?m%I27EK7Vl>fXOa%{b8tH_%L|_VS^&pdRYevlVK< z!!VVem17BLPnMwuvcn2oM2+}5hT?7unE>g9l~!>4Ie-?c-hkbLVborTkWD!;+p zVd)1@hwdn9>rSHf{;K6aK%J>)sB*8?d0pUN5_Eb$S;4^dZY$!T29gw2F*9laIZ+Md zLp?DIqn;CWP&4af`F$~z_#o8QE<_D%6>4BxyaZHXpLq;5vkRz>ZlDJ60M)=7)N|mA z#p7*o4JAh%!VIWekQa5RD_D9{vm2_t;iz)n85Z~kbtrbDI@*U?k)KfmI*B@5mvI@s zLS55Y-@3!O12Ym&u+g23NK}49b1-Hiz8JINA* z1{80z8(H%VSQA7Yt-JiM}7G8!7RG}{Rybx64cDs zqYD0vTA2%|3U5$b^Ue&|;sz22_25Z}nrR4X;E|}aRTwqka;S+`My*^;^lHi463__y zp(+kSUAK{_h8Lk4_!iZ`7Ss~&H20(G9YM8s3ibW}CTiv0qn;08Tiwc(Kz+@xww3#z ziNH7#{2ibg+G6qD=6>@h)Y2Y94dgOv<*uVn`yZ%l_z|;U;%%;6AyoS%P+MCT)lc

I8P7_9XgFXG+wAC8t>)Lx{IPZOsVOOc$VL{vGP<9I^a6r~$r5 zZ9%48?h#%COA{Z9O7|YKz+c#mgw(s;AsUD|h)+UwuoE@2lc<5*M{Ql;9=EsQScP~Q zY=zUXAO4AzvF%>>tD4QIiG9J6y8ppHxQvFVl~|7&$XjfTb@w?pqdr!H_PclsEJb_| z>L;J~SRQj8a2@u+ip2M0Cyf51`;|_2tVR4V`tN_zgYI)b4E4k+gSoLC7C|4j$Fr!8 z@*Q$Z-4S&=#$dS0p+1)Pp>DxN)XF_Tt<*cz$9KA)-1mVz=>PZsdlJx|4#O5W51Zo~ zORsy_{d<(>H)IcYp&dxUU<|1&MfM)sz z)li_P8`Ey&hJ= z?${r9VIItR*8No7+)F?ej-xWJqed9_oZHK0s1KQWs3rZ~EOI`;bDH=J)SfrHV82C2 zZRItL#AFxUR#rewqzCHD=uFdlj({3SaLN6cTnROxKT-EK;Ido7s;KKU6U*RlmY(K{ z`?0ze>dCnRTj5nyxkA4Nc=qB@)DtrQRad?5-YQMR?oQ+k9??f$S zz%{o5sZmSX6V>4!e2y=%0^YptRx<2{Z2@ZL-LVTu?=cyY6wSrv7S>Y!Gv6Y3k%P;()sCB7T=>311Z;Y&-8eT#JZ_hccUj!I)ptZghjUOfS!e0n&7aL*QSClPovnAM?-ki@yZQyt|KI;sCZLQ4sB6~N z;$DkSwfK5-C+f4{Flr#zE&T=RUVp%xnCgzZRTWSJ>5b}V6voEscewwW@d6Sw)8(l6 zX7hV*y5pg-9W?5vZ#hzn%yjYu*K(Ed==^}{Ak|2>vai%_uO7)LhVrz)FZYY zs={E@Em@2@j90KB{)sw-74ExVHVsEzue+!LhdgkHbvUZMW2iIp3^maJ??V@eh5Ecs zh@n^n)lpN+?}wV

WBr_zZIiYUwvv{x7Jra?bMaS^A%r{sxDU?+yCh4PY#4FQ=gP zY8k4-?@*_ApT&PgJyIW_W{~v{x0ey9cww^?YQ_~&?Q}B-qXs%2Svjv~4FP=>x{3Nm z;(6pgG_s=_9ERG0F&1BgZHR9|HJtFV8*o}w`J85yr5CYy6^qwKO|&%@*ZuEDKwrJK zqZ&Ad8u=O2mb^lJM@;v`eM`=UI;^=+_q!|mQHON4rEfx&zlyQ&HtNUvN9J491Y$gMXCg5w z9){j%1R@A%WKpONN}*0^UDVQdHm9Je1Z@ z^`W-%Irm>3{Y8R|`NB1n7WF8NGHatc?ui=EFmoAdYK|mRKvwzx{m6i%C$u;d3Up)hRo0J*q!ie(>L};q<8bIn2CR zmv~`|PeTo04yr%zO3T=23ENQ(??(;nH&li6udHFz0PQTf92z`$BWff*a6( zCQyg^5A25TQ3LDnM(NzY>HYwx5p|fpN6q+W)Ictv?)MASK;NO3IPk427aLVCg~hX= zI*zjR%4TEB?~K~Y0ZP~XpJ)XZpdK9SQ3E()p11s4<_k;zY{vQ5Rs{8E4M)|lfEs9B z%Ws1E9?=D(qZhsEa4Z2m5SE)8QTKT_s)4iE0k2?tEcVW&uR=YDHlVKE5zK|2_io8^ zqgJ9c>iRXb_(W8@%ii1P{~8j?k+8`M{Ea$fK_A>6hoY9Og4qbQr(IA>KOD7H)36n8 zK&?QWj{%-h7>tT9G}of8=Z=rue|7Yh1T~cKllzhxg8GKj4^?q09>;|iZ~fVQ{`bI= zq#wgl81sv3ry}a>dPCH$*o1oWoyE2o{MD_%P%i<^WHf52=AxExqZPP@8rWU)FH7h6 z`A>NeYAJK02AUr=pfZ*|+R`VX+Mj3Xn^0fJy*mhOB=88e621V};3m{z+JPFtMN7Yr z8t@YwfS<5F_6-d5|4QWq>ci&(>cMjtHL!fqTsx&v1Fnr+SFfiL0WHmH)FFC-+MDdr z1N|$}9W|rHs0Yps)MrD|7=iwubRw}7@opH2n^6P4gX;LD`N`5_$8_nb{Br-Y5J*J9 zDAcD{IkORJ$-1F`i!g-vT+E9*Q5`%+m3xDlS==DEl1WhU9H;^1#ULzW=~XZ>{d;N? z$cSxGhh@AKSdaRc+=6^n@_e!M{IT2;7efu8s@Vv2OWIp}AnFj0MQ!a8OW$c8Mz1o? z5m3jEQ6r8M+pS1q3?-fswE|^PPrwEiZ-pw~7jMj-GS=(A!-Gl zp+405`Xeg0?h2WS|z678@7jz?|HEmT9vQn)Qh zgZi+_Z1FCrf%ikL-~?3pIjDgwHaDUU=|1za)ct=!pb5qdb`@HqK8|~%8XAuJm>p~J zWvGF!vG{TGENTE(Py@Pe@i%5*N|&Axb(S)s|L6al1XQuGSph?d*G2!#P!%Si1~d!x z;jsWUqtllEJF1J?2gu(a?hGM$Zf$sP9sFf&d z@tPK|hkDYrLVY#sV-81kJP~y^cA+}FV);*S4)NF65+|kM{_D~EB#m3rcxeOuKj-I0 z&7>3R4D?4`yG^JSxP>}w4^b0%jCJvq#Ve$9l^+jb8s{J)y0@Vm?$1M02 z)nJzN?)2wDU7x0?nT0dTA|XroBhn8mOmQR(G1iXS%tcedr&h!f~x;F z>K431l}nt>rH5zZ{%ZiaNl<|js3mQPA=nhv;81hC<5YNq!s zKTdX6E*J}wo(a`&i|k&P(SrmvIMgymqps0xR0k)pB>rmg6ggb^Ff%)cRB^4Y|T3-te@F(vLLo&mK& zH&83{x5cC9cjZ%~&QJtKU>PO z1a%(O~3HnXQJ=Ed(gz6}JAvd#X zs6*HWwU<3n-}eWg2C@USV&_m3x`tYj=!IQJsZsgaQ4`IF8el~)0aa*)>UavO!M&D# z#nL@R+<z1;cuvwj$hng-|NXrfG-04 zSFWz%Q7*%C5;cPhs1B~62KKx864l{*)V+>ZBGCWWYPUnp_yg(@o}#3CvQ|fJ^(b>K z`v3l)Qv`H4uApZ2*{o2?9hMoWXZjUXx#XqY%!{KsD2M(PK;4ch*c4Zww)PY1?1Yzb z_41+06;)jKzZL<_w4oJfidw=p=1^1vb1Z+Q#n)qf(s!D1%en_xYt%}u#W=VXQ{X;S z#}_UA5qcv@ctt=zcNkLSH6;Y?Xp4rrFgPL(?)MvtAOP_~Yp`{i-iiwGzw)k!H zcU1e&%W?m;SMN#CsZCzq9mag9(_IBMlcA`Yj>D{Y19M>X3a(rp)PP!}2HYFf!61u| zGpC{syU+4BRPYA+|GS=DBtd8p~|1D|)pHcPF zR(79y*--IrsDXF~TVNz=uO?t?T!B4fK+j_0X;2k+qh|ags@w(C^Wh$L$GlYo z{r}0v3e=&CSIwCLwdDnnPg$?04uJ+FEJMxU4QhmCtGmNg3$C@1w3JVCRgXO3h?X>t|)X0Cc^k?Qf)Iej@b{(ciJqa^g zycy;r-qzv^Q0*>9os~_fcK6rj{wv{}6}W>s9M3HttB$Lf+{}o&ei5iga$(d223z__ z)IcViKbh|^O!exzm8y$68=dNM|22S_B&eYksFAKi4di>&$K`oc$8qYpy-tQ&vD&EH z(h>d71@jWB-CGuaVex;l2I)cdT|W)H1XQstY5?6WqaUh+QI>}y` z6|aFCaCyu{yftcuGf?$*qw1Zv_+wOm-hhT~X=0%s7&$Q~Rz)4QL8yklK|PXBp*r}4 zQJB4v+lm&buU5-YEBFxA!QZG;{|>bxaT>c1snp2FvDed*fC`R96_|qhsdq7U!uO~Z zYSYA(>xTMj))%!!b5R{`!}|Cm>Is^xscSDc)+Sy8)z3^zpO2aJ{ePWhoJK9tC5t~p zE!`_r2XULZfuuy8-i)XQ^P9y`D^nJ=b-htvI3}R#Z?g2g7C(nc^!b02fEs#f8E-8f zt+`8&Va@pi8|W#GrBT;z4C;Hse$0>8u^uLBXG?A_MBV!{s9Tb@ zy?c(d@eZ#+6Xla5|R2ySP*LKcrir|35Iig6g)J$Uaa1WX?s0Y<()Ie6E z9!yuTI>zkj>es{NDu=oy8GE^QilRO{`eP;C|D6Q%Ao+s&29vtC`-8=_QmgsuSLzY>2Noo-dKvb z4=3Pd)P$OiaQPci<loP!%$acQb5_ zTA_ic2hI`s58;k;&V^~*@{}hD`vFm?g12uDqjV)(tWXjm%w5I zIxH7apMtNk6$Z_46+590;V4uCTP=Rg;<0ABGZBgExE*%D*{ECa9yP&AvsmE(evg1h zi9edn{SP5wv(HsHGsk^;<(unfJ_)rI>rs3DBQD3^QO|>M^W0L-MLl9qVL^O|TDi3I zUAdxWRn#GFiYh;QexTQXIyaJ_Gw>Ppxtw)@D^MJ@G7V6td630-qRzxs)YimZ=)U_6 z#hAn|pjPrX)RsI$o%TeF+=OzPWfpO-byymapn{XI6@G`hHVGHI&w|#drCov=`AIy4 z4=lcViR<71YUbBa1Am7qpL(e?3N?^w7=fL<1PT#YU|vAo`#8%2JtHs=>I=mdRKwAi zyLcF?p+VRR=b#4s2B%@g74A`c1+`UaR=SnRVdh1pdkYiLr&?vpXpUNucBrpTb1i+9 zrEkDiq+drhP;`}RxT;wP-;>@L^(k5R8+WT(ptg20Dt$Rd*XRGY1T?cPs1DDf_V5OV z;(gQ-MqBOD)1toPg`ozJ3$-=HQHQH5s-0Dqzs2GQQHS|7roj7{QlJ0t38=#)Yuw0E zVPfK$%mSzmDxvP}083wn+T*R}MbwtOMr~Q5wQeBo%|7T~a?}K7p#S%O3l$(?1#0B$ zun2yS>i8w!A8=zk&O&jNv52$7!gM zE=C>7HP{#TVqMJjt()N})H8i2>bdX+HNd3of9$XVGz5_LZA5dHQGiqWNP^bP5hT>Dy3di++ z=SCim>bMj}U^%Rh{ZKPGi8>2$wzwrMgc@K~R0mB_Thkde05AHt4At%`i?2lu>>z5Z zy{8FiM$atc6>4N(tw5Tsu3!<=6S6U?ff1;VreH&yi`v^4SP4DbT)oPu33bA}xB%PZ zDWqSoCvv-Mun_7CM0wPgNiS-K*HJTkikjg&Gr2KRUz&7?)sHO{}P$Y%me04)PO&tW}JVgTcHuCcD^xBp;q`Gi+@0^ zV8&gf)4wNzfD#IzPH9=xk6d$A0C%AOP?pqfZ}B(gCo|e^*G?SNb0INm z#ZsXE_kXFaKnC=G{93%YSZlI-?=Na=hFks=3?)7rHQ*hnfgUhVTKZM<-fr%{ z3O*x2Gkt^F^G{YF-X8ax&J?Kp%&7dFsCvcB3T7>{iP_HVVGc4!qgG(*9`3(JIFkf* zuoM+vjoSNdxCqaqwxsLcK>uIKGzn7^zi)m<<){3?Spbz^4|8Hq)Q8g&)K|GnsIPK? z-hFP#a-b?y!*19SHN(r80B@tNC=Yc>^07ju2&W~!RoLK|)0BU6M-lz!Z0>i0UxfkFKL2Gl7{L_1TaXHPbwnUfe8)I^|U{2G&A#*ud<7YJULw z|NL(V0X^Bqq6V@7HN(T^3G+N^hF2|q591PljM|#ls0k!G=!`&>uYrZIk)_W ztdwdW#E)LoUap$Fj`EH{`UUdC$ov0Zq_4KLhlGz)rUw4^%4dN;{wFP%wg(d5W%VX8 zg5UHDk_?tGj{@bb^8$qZPbM1r*|&3ec=1D&TJ=B8rK8Iyw6;>rSb8 zygTx~W^D|lObg0xC2gjq1rgV)IHRdTnE&MP|6Vf~)nsBV$ZLeh$?Hn{Iq*mje;n4D zNFC%z%-%CG2>Q#}N%_&{Smw#kf=6sZRMoMSiI+Sne zaWc6Zu?21IAg#4;_{iYKcPXJ)a&nfc7v^x7v;vsidVNFu9QnWVE<-CRNMFo*9c4a} zrzeoU2v#TWIO%67SI+lhWUzM)xoLUNASIQJdNs9vCOnLJrs92s{A5^(GMjj}r-kmc zq@P!=*jf~#d@kOfNJ~onlhzhd&lut}aSds~l&?yA!L)OS|BlB0hn>HW_<@A3R_Rw7 zZ)oAIbheoWzN3Nugqu@#KY3d$zY+CLlU5f;P*1NA!g`IT3_k>To|1lmv>bG-*9hKQ zh?fZDP%O2El<|%Ni^=d&X(i!Pq^%?WAq_Mkev9`F22q*;=~a&KO3D|c%pvQ%uUQ3G z`C5-on(GU-P7)i33weJ_>9_O{MmRq${O@akZ{_GZ4&V#R<{Oaf3UF1EMYW7sJGt6I><(`%$4yK9Fr^laPlh? zug?3iulJbXJ0-oiTDg4K5o}7dqlA~8*M$&;Aq4Zdm_-ev>rK8+*%H1R0nlgEa>owj~I1cIkEWVHU zbINugEemb;AfBJ_Wfjz;;srwwqd~n2Qm{CgZ|O9lZ`8Q(#HX!W<))|lzrMZWLMmsW z%zv*Kg!$IxfAyx`Alh1LnRkd6qSheP>xs2Cg|ujto9fFjJ~$wSukiS=#4~B<80pJs z>j%QkeBH+f7cNO?q_uvOuwLV7#s8y?i+c9cQhaLmqnA>Id+?s?J1{=j8`o+CldIQ! zhyS1FDW%s!@^M7nVGc_b;Rc(Z=uen~C&MzWS5G zYhR+pIJBOZl-az$B|MuFy{LVdcTZ~E=G~ijU*2g*n@XA6l&R?Nn@2xsZRlY+>G6GM zCKZg`n3nVk_QjtZmLWCurje4HcP088Pq_}1A4-XPSl?HBa+-jczV4HQi~mZ#Uad+0 zi#}FSCzN+*+L%baNczf1Trd6PG1TDvvg0JwDu*|PXz0LbqYq=A(no#N-@mAD6 zPduA%)Rf@DpRBEen20v?I!H;qRy#Z^h|eJ0jQ0e_)0%$v`7TUJnywi+i-^6)G_?Jc zKJW6@E6^7(HEHcGP{QsP# zGB&nuzV=f?vhAhDRa$(6+bR8!63uCKmX)ea`nSaE_%=^1>8(uaecDgSdm5!%lDmO$ zP2T^#p3*`OYHYI>GE;68<@5?AoP)AWUDW?4FAFU%059?Wj`wRu)D5#zehBU9Rg$0b zJ$XsIN#ogR><3HyfftegnC8sKI{*% z%%r8Hv!;}rL|Zi|*N=A*;(8sA*_KQSm9Y`cu||4Z{13AbmB*8}fr?p4n@J=8`zpd< zu8`N2^bC|e!vJ4dnZJG2rD9r-ucU^c|fZ5q}u*Zz)rYJpTUH z8NrcJ#BSMmRO=TTOH0~)^grny;`fQ4^HrV^<{dz(I+WhQDD`cQBciSwUQ{yVRS&xb?H?d6(w(d?t}!1$esSTM~y- z=^MgNY(N3z4bfz+5j7N-e7%09tbPNoS1sOUNDm;bKJT@JuVE+ZHl*$X!VgHRjV*~6 zVz9@fdHGI5f%$Z@hr|;UxJ)=UrsVw(jjo~KILhdCjJyT^Gmy~?@-G_Hs|b0isFQ%S zn>P4v)ayg}Sj4}f+z(dvfaMSH|6ePpJe&7FmUxE>{A~-K3AUVSd@v0yqVh_@W9Ue) zEOfRGr|@n}-Bqe@18qpzjfA7&S>CaD>(zs{f1}=e+DJn<_8KD52<-Fqo)s4RC#v)y z>%MR4tQ?W2$je475&8NZ&pZaSnG!!*V_gWJC4U?F4|u=wy`NRo+kjf_8Olydx1q#g z!nb%YqlFEWilX*84V71K-sfmx2jx!l?n#~B$cv<0KGJ_dewoStdzmv#y+=x;{l=8l zs~X`=l$lOmH{2VY)4jyEb9Tx2myM(-+`NlR2$bI!lgTZD>rdJH)43UNc{5 zUm9-#n%hA=y`EC)47ojNUax|do{%!ZRx24TTxQtQ$RA98ec}f#uQB!45+^g^csi|Kw-NUuZ4UJcTkna<|H25elBU-s;(E;^zdGUSl-I9;O4|td zJ(>S?g7$LpUdB5=V~$6?X~ z38$dU4f2S3nv;KxuwGwCABRtAhrd-uuL7Q*h-@Y!o(f6e zXs&PNyr{zO)jqG?l;E#y@Fc&3P+H44{s3Pi1U2$=cmb4o&JW?!XW&M z8U?KX;gm>54ZT|M?oX|)zWVdSydNo@lu~=G@aLj`bx_EMw!3(E=LmIB1x=D#XdB4 znXq0NDe#W)0@4N(Kgm0sGAoJC;N6Wz9?-#muRe6(rH)?wL93^)4SEUbuYJuIq)Gh2 zO8;x6*7znZNYl6&eSD^^D%6XlULE4asWX=P$*HlI_etLQNIOCq{O<}@YAmJXAHF9GBfR}dO~7dMdO@kw#Pz2yk-XaxE@gdxr2Q~z z#UlQY@-ry=Gx=>OSCzaBxPUx9!aSuZSDCyrs8>$H6Dgx(|CYLU8No5qz6s*<@^1=l zCNqn_C=XB?iS%t=6cyt##dG_9Ulh`OKB4caFq$%d5lW`Oq&Kligb>y%8s*FL-bowXeXSSgsNPl~hSr;s+3-ENNqBFi#ppPd7V}suZzy}1 zmbO?gYB4V5;_<}+%|rsX`O|TBWn(B! z_%z|?zEMkqBM<(UN~!0R)~h=$RO8*8w_YO|?IrT~GfK~T--)Fm*{+jwm>Q2<0Z+I_ z!b}pAw%yW1QeR^JZ`d(>*_MT5`-`4NQl^cKCmHb(ge#J^jUJ-YdQs|h^z~krG*=>e zs6=WBa+{Evnea8EDo4rDw9nr{`zl1zAW$k zFQy)U2lVXkXDVZYVl6* zE4?B(d3H+1q0~DX=g&tyXKDPIultH%?>U-pY4ufoBjI1I{T{S4nKrIarW0v3$nS-@ zE&pFy;@>gw9HzC3lu1U}lK6`E|Gvso{zvkL^ZxJEk1}I|c&=oj6TJ@cK0xQ~c|RsI zAr0#lL^!W6+scS+JIQ%MYHr@`dDs4*=2Y?;-30Rf-8X7wc=_^_{_i!F(o4y?Vtr+# z=1*jPrR_nKt7z$cDD#NPd?vju`Coi5R)(ZnMd=Bo%q2&!hqN}2TB&@QSB1CUKq!vO z@U;4$5nUlY#NxGRw=;dLwtg~`ew0@Jdo`kL0?OPbp%c9j{lC{$-{w`}sgyL75_*OD z|LOj*)c0alaAY>xYeKyPjB)~fyrkr3+D}jVQXBOc^6C+;N7@2k{%>*w_gUz2bMeQqbLS4(S8;ZVY_>2oLH zjg%S8d!|jUG3jOXM+nPlXcLLw(P<6ddMzV!iG|ZDZjGL#lVvnAf%0onuWu-qhV;|a zxk37V>mb5qds^AR3Q#Vb@HC4nyHucW$m%2+{v@dZ)n8)`s`KwEcp@l%m3UJ8%eQ%T zaJtdN{wCItj{8w+EMdL&5g+Wkw>m8LpVsy7zW8f`1IG9=uL&zXg0xb!?V(f-TFAir zCTW#PTCZfL_7dBYcA7G6tPPSp5#-(WOg*74Z zhY`~&CF9TN`@AMN-8@=&q2BE^ig*{wzow^5zDWM3$kBbR*QTjFg|z3SwWH=mTA5|# z6Vk^S-czWjS5CrhDYL=imt3;v1L=CT+i`SlV&8;_A_2Q2iUh7rxI0gkz!(GnA9Tm= A3;+NC diff --git a/locale/zh/LC_MESSAGES/django.po b/locale/zh/LC_MESSAGES/django.po index c1de38de..0e3cb5a2 100644 --- a/locale/zh/LC_MESSAGES/django.po +++ b/locale/zh/LC_MESSAGES/django.po @@ -393,7 +393,7 @@ msgid "2FA Protection Active" msgstr "双因素保护已启用" #: accounts/templates/accounts/otp_qr.html:4 -#: accounts/templates/accounts/otp_qr.html:6 accounts/utils.py:70 +#: accounts/templates/accounts/otp_qr.html:6 accounts/utils.py:74 msgid "OTP QR Code" msgstr "OTP 二维码" @@ -545,7 +545,7 @@ msgstr "SSH 密钥 %(name)s 的操作" msgid "No SSH keys." msgstr "没有 SSH 密钥。" -#: accounts/utils.py:71 +#: accounts/utils.py:75 #, python-format msgid "" "Open this link within an hour to see the OTP QR code of account '%(user)s':\n" @@ -2670,7 +2670,7 @@ msgstr "虚拟机未定义;请检查这些卷,然后处理此任务:%(volu msgid "Delete snapshot" msgstr "删除快照" -#: instances/jobs.py:313 vrtManager/instance.py:2298 +#: instances/jobs.py:313 vrtManager/instance.py:2299 #, python-format msgid "The VM has no external snapshot named %(name)s" msgstr "虚拟机没有名为 %(name)s 的外部快照" @@ -2702,7 +2702,7 @@ msgstr "虚拟机已不在运行该任务的计算节点上" msgid "Take snapshot" msgstr "创建快照" -#: instances/jobs.py:381 instances/jobs.py:390 vrtManager/instance.py:1894 +#: instances/jobs.py:381 instances/jobs.py:390 vrtManager/instance.py:1895 #, python-format msgid "A snapshot named %(name)s already exists" msgstr "名为 %(name)s 的快照已存在" @@ -2859,7 +2859,7 @@ msgstr "cloud-init 种子需要为磁盘使用目录类型的存储池" msgid "This host offers no firmware %(firmware)s" msgstr "此主机不提供固件 %(firmware)s" -#: instances/jobs.py:792 vrtManager/instance.py:3022 +#: instances/jobs.py:792 vrtManager/instance.py:3023 msgid "This host offers no TPM 2.0: install swtpm on it" msgstr "此主机不提供 TPM 2.0:请在主机上安装 swtpm" @@ -7516,7 +7516,13 @@ msgstr "运行此任务的工作进程已停止响应;管理员必须确认它 msgid "Waiting for recovery" msgstr "等待恢复" -#: operations/worker.py:460 +#: operations/worker.py:48 +msgid "" +"Recovery could not read the job's state for an hour; check the VM, then " +"resolve this job" +msgstr "恢复在一小时内无法读取任务状态;请检查虚拟机,然后处理此任务" + +#: operations/worker.py:464 msgid "The worker stopped before the job changed anything" msgstr "工作进程在任务做出任何更改之前停止" @@ -8641,67 +8647,67 @@ msgstr "磁盘 %(target_dev)s 不在虚拟机的定义中" msgid "Please shutdown the instance then try to enable vCPU hotplug" msgstr "请先关闭虚拟机,再启用 vCPU 热插拔" -#: vrtManager/instance.py:1853 +#: vrtManager/instance.py:1854 msgid "" "The VM has external snapshots; internal snapshots cannot be mixed with them" msgstr "虚拟机有外部快照;内部快照不能与其混用" -#: vrtManager/instance.py:1885 +#: vrtManager/instance.py:1886 msgid "A snapshot with memory is not quiesced; it keeps the whole guest state" msgstr "含内存的快照不会静默文件系统;它保存整个客户机状态" -#: vrtManager/instance.py:1887 +#: vrtManager/instance.py:1888 msgid "Only a running VM's file systems can be frozen" msgstr "只有运行中的虚拟机的文件系统可以冻结" -#: vrtManager/instance.py:1889 +#: vrtManager/instance.py:1890 msgid "The QEMU guest agent is not connected; it freezes the file systems" msgstr "QEMU 客户机代理未连接;文件系统由它冻结" -#: vrtManager/instance.py:1892 +#: vrtManager/instance.py:1893 msgid "" "The VM has internal snapshots; external snapshots cannot be mixed with them" msgstr "虚拟机有内部快照;外部快照不能与其混用" -#: vrtManager/instance.py:1897 +#: vrtManager/instance.py:1898 msgid "Newer snapshots exist after the last revert; delete them first" msgstr "上次还原后存在更新的快照;请先删除它们" -#: vrtManager/instance.py:1900 +#: vrtManager/instance.py:1901 msgid "No snapshot is current; revert to a snapshot first" msgstr "没有当前快照;请先还原到某个快照" -#: vrtManager/instance.py:1906 +#: vrtManager/instance.py:1907 #, python-format msgid "Eject the media from %(dev)s first" msgstr "请先弹出 %(dev)s 中的介质" -#: vrtManager/instance.py:1908 +#: vrtManager/instance.py:1909 #, python-format msgid "Disk %(dev)s is not a file; external snapshots need file disks" msgstr "磁盘 %(dev)s 不是文件;外部快照需要文件磁盘" -#: vrtManager/instance.py:1916 +#: vrtManager/instance.py:1917 #, python-format msgid "" "The storage pools could not be refreshed, so their free space is unknown: " "%(err)s" msgstr "无法刷新存储池,其可用空间未知:%(err)s" -#: vrtManager/instance.py:1937 +#: vrtManager/instance.py:1938 msgid "Memory is saved only from a running VM" msgstr "只能保存运行中的虚拟机的内存" -#: vrtManager/instance.py:1939 +#: vrtManager/instance.py:1940 msgid "The VM has no disk to keep its memory next to" msgstr "虚拟机没有可存放其内存的磁盘" -#: vrtManager/instance.py:1943 +#: vrtManager/instance.py:1944 #, python-format msgid "%(disk)s is not in a storage pool; memory is saved only into one" msgstr "%(disk)s 不在存储池中;内存只能保存到存储池中" -#: vrtManager/instance.py:1974 +#: vrtManager/instance.py:1975 #, python-format msgid "" "Storage pool %(pool)s has %(free).1f GiB free; the snapshot needs %(size).1f " @@ -8711,156 +8717,156 @@ msgstr "" "存储池 %(pool)s 可用 %(free).1f GiB;快照需要 %(size).1f GiB(其中虚拟机磁盘的 %(percent)g%%,至少 " "%(minimum)g GiB,若保存内存则另加内存)" -#: vrtManager/instance.py:1992 +#: vrtManager/instance.py:1993 msgid "" "This snapshot was taken by an older version on a UEFI VM and cannot be " "reverted; delete it instead" msgstr "此快照由旧版本在 UEFI 虚拟机上创建,无法还原;请将其删除" -#: vrtManager/instance.py:2022 +#: vrtManager/instance.py:2023 #, python-format msgid "" "The revert failed twice; try again in a moment (%(error)s). The VM is " "running." msgstr "还原两次失败;请稍后重试(%(error)s)。虚拟机正在运行。" -#: vrtManager/instance.py:2024 +#: vrtManager/instance.py:2025 #, python-format msgid "" "The revert failed twice; try again in a moment (%(error)s). The VM is shut " "off." msgstr "还原两次失败;请稍后重试(%(error)s)。虚拟机已关机。" -#: vrtManager/instance.py:2187 +#: vrtManager/instance.py:2188 msgid "A disk moves when its VM is defined and running, paused or shut off" msgstr "仅当虚拟机已定义且处于运行、暂停或关机状态时才能移动磁盘" -#: vrtManager/instance.py:2189 +#: vrtManager/instance.py:2190 msgid "" "A disk of a VM with snapshots, a saved state or a running block job does not " "move" msgstr "有快照、保存的状态或正在运行块任务的虚拟机的磁盘不能移动" -#: vrtManager/instance.py:2197 +#: vrtManager/instance.py:2198 #, python-format msgid "" "%(dev)s is not a disk file of the VM, the same in its running and next " "start's definition" msgstr "%(dev)s 不是该虚拟机在运行中的定义和下次启动定义中相同的磁盘文件" -#: vrtManager/instance.py:2202 +#: vrtManager/instance.py:2203 #, python-format msgid "%(dev)s does not move: only writable raw and qcow2 disks do" msgstr "%(dev)s 不能移动:只能移动可写的 raw 和 qcow2 磁盘" -#: vrtManager/instance.py:2209 +#: vrtManager/instance.py:2210 #, python-format msgid "%(dev)s does not move: no storage pool has %(path)s" msgstr "%(dev)s 不能移动:没有存储池包含 %(path)s" -#: vrtManager/instance.py:2211 +#: vrtManager/instance.py:2212 #, python-format msgid "%(dev)s does not move: it has a backing file" msgstr "%(dev)s 不能移动:它有后备文件" -#: vrtManager/instance.py:2214 +#: vrtManager/instance.py:2215 #, python-format msgid "%(pool_name)s is not an active pool of disk files of this host" msgstr "%(pool_name)s 不是此主机上活动的磁盘文件存储池" -#: vrtManager/instance.py:2217 +#: vrtManager/instance.py:2218 #, python-format msgid "%(dev)s is in pool %(pool_name)s already" msgstr "%(dev)s 已在存储池 %(pool_name)s 中" -#: vrtManager/instance.py:2221 +#: vrtManager/instance.py:2222 #, python-format msgid "Pool %(pool_name)s already has a file %(name)s" msgstr "存储池 %(pool_name)s 中已有文件 %(name)s" -#: vrtManager/instance.py:2245 +#: vrtManager/instance.py:2246 #, python-format msgid "The copy of %(dev)s ended before it was complete" msgstr "%(dev)s 的复制在完成前结束" -#: vrtManager/instance.py:2290 +#: vrtManager/instance.py:2291 #, python-format msgid "%(error)s; remove %(dest)s if it is there: %(cleanup_error)s" msgstr "%(error)s;如果 %(dest)s 存在请将其删除:%(cleanup_error)s" -#: vrtManager/instance.py:2292 +#: vrtManager/instance.py:2293 #, python-format msgid "%(error)s; the VM may use %(dest)s now: check its disk %(dev)s" msgstr "%(error)s;虚拟机现在可能在使用 %(dest)s:请检查其磁盘 %(dev)s" -#: vrtManager/instance.py:2299 +#: vrtManager/instance.py:2300 #, python-format msgid "The VM has no internal snapshot named %(name)s" msgstr "虚拟机没有名为 %(name)s 的内部快照" -#: vrtManager/instance.py:2308 +#: vrtManager/instance.py:2309 msgid "The VM has a saved state; start it or remove the saved state first" msgstr "虚拟机有保存的状态;请先启动它或删除保存的状态" -#: vrtManager/instance.py:2310 +#: vrtManager/instance.py:2311 msgid "A snapshot job is still running on this VM; try again when it ends" msgstr "此虚拟机上仍有快照任务在运行;请在其结束后重试" -#: vrtManager/instance.py:2320 +#: vrtManager/instance.py:2321 msgid "Shut the VM down to revert to an internal snapshot" msgstr "请关闭虚拟机后再还原到内部快照" -#: vrtManager/instance.py:2414 +#: vrtManager/instance.py:2415 msgid "Cannot clone a VM whose NVRAM is not a file" msgstr "NVRAM 不是文件的虚拟机无法克隆" -#: vrtManager/instance.py:2482 +#: vrtManager/instance.py:2483 #, python-format msgid "Clone failed (%(err)s); remove these copies by hand: %(path)s" msgstr "克隆失败(%(err)s);请手动删除这些副本:%(path)s" -#: vrtManager/instance.py:2492 +#: vrtManager/instance.py:2493 msgid "Shut the VM down before cloning it" msgstr "请先关闭虚拟机再克隆" -#: vrtManager/instance.py:2546 +#: vrtManager/instance.py:2547 #, python-format msgid "Clone failed (%(err)s); remove these copies by hand: %(leftovers)s" msgstr "克隆失败(%(err)s);请手动删除这些副本:%(leftovers)s" -#: vrtManager/instance.py:2557 +#: vrtManager/instance.py:2558 msgid "Live clone needs libvirt 11.10 or later; shut the VM down to clone it" msgstr "在线克隆需要 libvirt 11.10 或更高版本;请关闭虚拟机后再克隆" -#: vrtManager/instance.py:2560 +#: vrtManager/instance.py:2561 msgid "A VM with a TPM is cloned only shut down" msgstr "带 TPM 的虚拟机只能在关机时克隆" -#: vrtManager/instance.py:2563 +#: vrtManager/instance.py:2564 #, python-format msgid "Disk %(dev)s is not a local file; shut the VM down to clone it" msgstr "磁盘 %(dev)s 不是本地文件;请关闭虚拟机后再克隆" -#: vrtManager/instance.py:2565 +#: vrtManager/instance.py:2566 #, python-format msgid "Disk %(dev)s is shareable; shut the VM down to clone it" msgstr "磁盘 %(dev)s 是可共享的;请关闭虚拟机后再克隆" -#: vrtManager/instance.py:2570 +#: vrtManager/instance.py:2571 #, python-format msgid "Disk %(dev)s changes at the next start; shut the VM down to clone it" msgstr "磁盘 %(dev)s 在下次启动时会改变;请关闭虚拟机后再克隆" -#: vrtManager/instance.py:2572 +#: vrtManager/instance.py:2573 msgid "Another job is running on the VM; clone it when that ends" msgstr "虚拟机上有另一个任务正在运行;请在其结束后再克隆" -#: vrtManager/instance.py:2585 +#: vrtManager/instance.py:2586 #, python-format msgid "Volume %(name)s already exists in storage pool %(pool)s" msgstr "卷 %(name)s 已存在于存储池 %(pool)s 中" -#: vrtManager/instance.py:2604 +#: vrtManager/instance.py:2605 #, python-format msgid "" "Storage pool %(pool)s has %(free).1f GiB free; the clone needs %(size).1f GiB" @@ -8869,92 +8875,92 @@ msgstr "" "存储池 %(pool)s 可用 %(free).1f GiB;克隆需要 %(size).1f GiB(复制的磁盘,再加其 %(percent)g%%,至少" " %(minimum)g GiB)" -#: vrtManager/instance.py:2743 +#: vrtManager/instance.py:2744 msgid "A network interface that is a host device is removed in the XML editor" msgstr "作为主机设备的网络接口需在 XML 编辑器中删除" -#: vrtManager/instance.py:2759 +#: vrtManager/instance.py:2760 #, python-format msgid "No network interface with MAC %(old_mac)s" msgstr "没有 MAC 为 %(old_mac)s 的网络接口" -#: vrtManager/instance.py:2762 +#: vrtManager/instance.py:2763 msgid "A network interface that is a host device is changed in the XML editor" msgstr "作为主机设备的网络接口需在 XML 编辑器中修改" -#: vrtManager/instance.py:2853 +#: vrtManager/instance.py:2854 msgid "" "A VM changes its PCI devices while it runs, or is shut off without a saved " "state" msgstr "虚拟机只能在运行时或无保存的状态的关机时更改其 PCI 设备" -#: vrtManager/instance.py:2865 +#: vrtManager/instance.py:2866 #, python-format msgid "%(err)s; whether the VM has PCI device %(address)s now is not known" msgstr "%(err)s;虚拟机现在是否有 PCI 设备 %(address)s 未知" -#: vrtManager/instance.py:2867 +#: vrtManager/instance.py:2868 #, python-format msgid "" "%(err)s; PCI device %(address)s: the VM is not running, its next start has it" msgstr "%(err)s;PCI 设备 %(address)s:虚拟机未运行,下次启动时有它" -#: vrtManager/instance.py:2869 +#: vrtManager/instance.py:2870 #, python-format msgid "" "%(err)s; PCI device %(address)s: the VM is not running, its next start does " "not have it" msgstr "%(err)s;PCI 设备 %(address)s:虚拟机未运行,下次启动时没有它" -#: vrtManager/instance.py:2870 +#: vrtManager/instance.py:2871 #, python-format msgid "" "%(err)s; PCI device %(address)s: the running VM has it, its next start has it" msgstr "%(err)s;PCI 设备 %(address)s:运行中的虚拟机有它,下次启动时有它" -#: vrtManager/instance.py:2872 +#: vrtManager/instance.py:2873 #, python-format msgid "" "%(err)s; PCI device %(address)s: the running VM has it, its next start does " "not have it" msgstr "%(err)s;PCI 设备 %(address)s:运行中的虚拟机有它,下次启动时没有它" -#: vrtManager/instance.py:2874 +#: vrtManager/instance.py:2875 #, python-format msgid "" "%(err)s; PCI device %(address)s: the running VM does not have it, its next " "start has it" msgstr "%(err)s;PCI 设备 %(address)s:运行中的虚拟机没有它,下次启动时有它" -#: vrtManager/instance.py:2876 +#: vrtManager/instance.py:2877 #, python-format msgid "" "%(err)s; PCI device %(address)s: the running VM does not have it, its next " "start does not have it" msgstr "%(err)s;PCI 设备 %(address)s:运行中的虚拟机没有它,下次启动时没有它" -#: vrtManager/instance.py:2910 +#: vrtManager/instance.py:2911 #, python-format msgid "The VM has no PCI device %(address)s" msgstr "虚拟机没有 PCI 设备 %(address)s" -#: vrtManager/instance.py:2928 +#: vrtManager/instance.py:2929 msgid "The VM has no USB controller" msgstr "虚拟机没有 USB 控制器" -#: vrtManager/instance.py:2947 +#: vrtManager/instance.py:2948 msgid "The VM has no such USB device" msgstr "虚拟机没有此 USB 设备" -#: vrtManager/instance.py:2988 +#: vrtManager/instance.py:2989 msgid "The VM has its own RNG device: change it in the XML editor" msgstr "虚拟机有自己的 RNG 设备:请在 XML 编辑器中修改" -#: vrtManager/instance.py:3015 +#: vrtManager/instance.py:3016 msgid "The VM has its own TPM: change it in the XML editor" msgstr "虚拟机有自己的 TPM:请在 XML 编辑器中修改" -#: vrtManager/instance.py:3034 +#: vrtManager/instance.py:3035 #, python-format msgid "Unknown crash action %(action)s" msgstr "未知的崩溃操作 %(action)s" @@ -9355,10 +9361,10 @@ msgstr "存储池 %(names)s" msgid "Secret %(uuid)s is used by %(named)s; remove it from them first" msgstr "机密 %(uuid)s 正被 %(named)s 使用;请先从中移除它" -#: webvirtcloud/settings.py:332 +#: webvirtcloud/settings.py:334 msgid "Localhost" msgstr "本机" -#: webvirtcloud/settings.py:333 +#: webvirtcloud/settings.py:335 msgid "All interfaces" msgstr "所有接口" diff --git a/operations/tests/test_recovery.py b/operations/tests/test_recovery.py index d93851c9..d6efe373 100644 --- a/operations/tests/test_recovery.py +++ b/operations/tests/test_recovery.py @@ -9,7 +9,7 @@ from operations import jobs from operations.jobs import Outcome from operations.models import Claim, Operation, WorkerLease, acquire from operations.tests import fakes -from operations.worker import ABANDONED, STALL_LIMIT, STALLED, WAITING, Scheduler +from operations.worker import ABANDONED, RECOVERY_LIMIT, STALL_LIMIT, STALLED, UNREACHABLE, WAITING, Scheduler class FakeWorker: @@ -163,6 +163,27 @@ class RecoveryTestCase(TransactionTestCase): self.assertEqual((op.state, op.phase), (Operation.RUNNING, WAITING)) self.assertEqual(self.scheduler.attempts[op.pk], 1) + def test_a_host_unreachable_for_the_recovery_limit_ends_the_job_uncertain(self): + op = self.orphan({}) + for now in (1000, 1000 + RECOVERY_LIMIT - 1, 1000 + RECOVERY_LIMIT): + self.scheduler.next_try[op.pk] = 0 + with patch("operations.worker.time.monotonic", return_value=now), \ + patch.object(fakes.ScriptedKind, "reconcile", side_effect=OSError("host down")): + self.run_due() + self.assertEqual(self.reload(op).state, + Operation.UNCERTAIN if now == 1000 + RECOVERY_LIMIT else Operation.RUNNING) + self.assertTrue(words(op.error).endswith(UNREACHABLE)) + self.assertTrue(Claim.objects.filter(operation=op).exists()) + + def test_an_answer_restarts_the_recovery_limit(self): + op = self.orphan({}) + with patch("operations.worker.time.monotonic", return_value=1000), \ + patch.object(fakes.ScriptedKind, "reconcile", side_effect=OSError("host down")): + self.run_due() + self.scheduler.next_try[op.pk] = 0 + self.run_at(1100, Outcome(Operation.RUNNING)) + self.assertNotIn(op.pk, self.scheduler.failing_since) + def test_a_job_that_never_recorded_its_intent_fails(self): op = self.orphan({}, effects=False) self.run_due() diff --git a/operations/worker.py b/operations/worker.py index 8f1851f9..d300ddfe 100644 --- a/operations/worker.py +++ b/operations/worker.py @@ -44,6 +44,9 @@ STALLED = gettext_noop("libvirt's merge finished copying but never completed (fo ABANDONED = gettext_noop("The worker that ran this job stopped responding; an administrator must make sure it " "is no longer running, then resolve this job") WAITING = gettext_noop("Waiting for recovery") +RECOVERY_LIMIT = 3600 # a host gone for good would keep its jobs and their claims forever +UNREACHABLE = gettext_noop("Recovery could not read the job's state for an hour; check the VM, then " + "resolve this job") ACTIVE = (Operation.RUNNING, Operation.CANCELLING) @@ -387,6 +390,7 @@ class Scheduler: self.attempts = {} self.errors = {} self.stalled_since = {} + self.failing_since = {} self.inflight = set() def schedule_orphans(self): @@ -409,7 +413,7 @@ class Scheduler: self.inflight.discard(op_id) # its host's control task still runs: a later tick def _done(self, op_id): - for table in (self.next_try, self.attempts, self.errors, self.stalled_since): + for table in (self.next_try, self.attempts, self.errors, self.stalled_since, self.failing_since): table.pop(op_id, None) def _take_over(self, op): @@ -462,12 +466,18 @@ class Scheduler: try: outcome = jobs.get_kind(op.kind).reconcile(op) except Exception as err: + now = time.monotonic() + if now - self.failing_since.setdefault(op_id, now) >= RECOVERY_LIMIT: + self._finish(op, jobs.Outcome(Operation.UNCERTAIN, error=self._error( + op_id, [*utils.public_error(err), *utils.say(UNREACHABLE)]))) + return n = self.attempts.get(op_id, 0) self.attempts[op_id] = n + 1 - self.next_try[op_id] = time.monotonic() + BACKOFF[min(n, len(BACKOFF) - 1)] + self.next_try[op_id] = now + BACKOFF[min(n, len(BACKOFF) - 1)] self._phase(op_id, WAITING) logger.warning("recovery of job %s waits: %s", op_id, utils.safe_text(err)) return + self.failing_since.pop(op_id, None) if outcome.state == Operation.RUNNING: now = time.monotonic() if not outcome.stalled: