)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"fa36987ed4eb391d0118925909ba6973277d1e79","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"6e05a23a_e525cf82","updated":"2023-02-09 08:26:44.000000000","message":"Thank you for picking this bug up and proposing a fix. I think the fix is at the good level. I agree that we need a new exception type to distinguish the late policy check failures from the rest. I have some concerns inline about the error handling though and I would like to see functional test coverage.","commit_id":"f0d03e4a8dbfe3e608ea4cdf1cfb322c6ed54c84"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ad969ec9c772def3f69e6c3e0027de3c16fea4c9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"e870f9dd_87dbdbc5","updated":"2023-02-15 11:50:57.000000000","message":"this seams like a larger change then is required.\n\nim not really conviced that any reschuldes shoudl be counted for build failure weigher so i think there is a smaller fix here by just removing it form the check in the finally block.","commit_id":"6af14c254df195c5104b2e9db508f6816c8f51fe"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"cb88154ef10cbc47080ce392641170b4bc285642","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"b3cd4cd5_7d321f5f","updated":"2023-06-02 12:04:08.000000000","message":"Looks good!","commit_id":"3040009f6903e68021168e098c9e5d29c4474a32"},{"author":{"_account_id":34951,"name":"Yusuke Okada","email":"okada.yusuke@fujitsu.com","username":"yusokada"},"change_message_id":"36640ebbf2e359eaf2d33e0b8ad3dffd9d1a0765","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"fb5f58ce_b1ad03df","updated":"2023-02-22 20:12:13.000000000","message":"Thanks for your review gibi and sean!\nI\u0027ve uploaded patch set 6. Could you check each comment reply? Thanks!","commit_id":"3040009f6903e68021168e098c9e5d29c4474a32"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a68c0a6e80c3eb4e1de5fd4e193c928aa7d00fdf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"6f44df3c_6cf5f652","updated":"2023-06-05 16:40:35.000000000","message":"This needs a rebase as the unit test failures seems relevant. I can reproduce them locally after a rebase too.","commit_id":"3040009f6903e68021168e098c9e5d29c4474a32"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4754c7caa5fc64558331425605352cfff8543546","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"06b91c7c_c8385ac7","updated":"2023-05-31 13:21:54.000000000","message":"based on the functional tests and reviewing the code i think this is OK to proceed.\ni think adding a release note would be nice but not required.\n\nill admit that readign the unit tests the level of mocking makes it hard to follow if they are actully correct. that said if i revert just the changes to the comptue manager i see that they fail asserting that the excption is not the one we expect so they appear to be workign correctly.\n\nbased on that im ok with proceeding with this as is","commit_id":"3040009f6903e68021168e098c9e5d29c4474a32"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6f904cfcb54058d15f714d0299cddf350b18a970","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"b5df9bc2_ae62d773","updated":"2023-03-13 13:54:05.000000000","message":"ill try and loop back to this properly this week.\n\ni see you have addressed some of the feedback.\n\nThanks for being patient, we are currently in the RC period so not merging non release critical patchs but that should end this week and we will go back to merging things on master as normal.","commit_id":"3040009f6903e68021168e098c9e5d29c4474a32"},{"author":{"_account_id":34951,"name":"Yusuke Okada","email":"okada.yusuke@fujitsu.com","username":"yusokada"},"change_message_id":"f277121751bd60a01cd5d04d50ba8d6943b4f256","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"d222b821_2d779c3d","updated":"2023-02-22 22:21:57.000000000","message":"pkvm- recheck","commit_id":"3040009f6903e68021168e098c9e5d29c4474a32"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"48092dbafc60051ef397f933c3e0c35e6fb36850","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"d6af2009_c7f15576","updated":"2023-06-03 19:54:09.000000000","message":"recheck timeout","commit_id":"3040009f6903e68021168e098c9e5d29c4474a32"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5818d46c128de9854d25865cf38bb138f1f8564c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"ff1286ff_8533eb26","in_reply_to":"6f44df3c_6cf5f652","updated":"2023-06-05 17:48:41.000000000","message":"The rebase brings in 82deb0ce4be588d675882a28ef7cacb97d8ffd1b which removed the easy way out from instance_claim via the disable node check. So you have to add an extra mock top of both of the new unit test cases:\n```\n    @mock.patch(\u0027nova.compute.resource_tracker.ResourceTracker.instance_claim\u0027,\n                new\u003dmock.MagicMock())\n```\n\nAnd you can remote the mocking of `_set_instance_host_and_node`","commit_id":"3040009f6903e68021168e098c9e5d29c4474a32"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"aa161539972f485091d06479264fe622bebef5f1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"60fcc086_eb9dd53c","in_reply_to":"ff1286ff_8533eb26","updated":"2023-06-06 08:18:14.000000000","message":"Done","commit_id":"3040009f6903e68021168e098c9e5d29c4474a32"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2c4111794f75946a79a07e80e188dc9509206fe2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"c7273bac_42f2acc8","updated":"2023-06-07 12:10:15.000000000","message":"I only did the rebase and a resulting minor unit test fix, so I feel confident approving it still.","commit_id":"56d320a203a13f262a2e94e491af222032e453d3"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"4584b616820a42414995f77c6e495aafd6499ebc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"6f2edaf7_cb0a6840","updated":"2023-06-06 10:22:48.000000000","message":"recheck guest failures\n\nceph-multi-store\n```\n[   13.183891] random: crng init done\ncurrently loaded modules: 8021q 8139cp 8390 9pnet 9pnet_virtio ahci cec drm drm_kms_helper e1000 e1000e failover fb_sys_fops garp hid hid_generic ip6_udp_tunnel ip_tables isofs libahci libcrc32c llc mii mrp ne2k_pci net_failover nls_ascii nls_iso8859_1 nls_utf8 pcnet32 qemu_fw_cfg rc_core sctp stp syscopyarea sysfillrect sysimgblt udp_tunnel usbhid virtio_blk virtio_dma_buf virtio_gpu virtio_input virtio_net virtio_rng virtio_scsi x_tables \n[   18.391104] blk_update_request: I/O error, dev vda, sector 18432 op 0x1:(WRITE) flags 0x800 phys_seg 2 prio class 0\n[   18.391959] Buffer I/O error on dev vda1, logical block 0, lost async page write\n[   18.393503] Buffer I/O error on dev vda1, logical block 1, lost async page write\n[   18.394238] blk_update_request: I/O error, dev vda, sector 18496 op 0x1:(WRITE) flags 0x800 phys_seg 2 prio class 0\n[   18.394825] Buffer I/O error on dev vda1, logical block 8, lost async page write\n[   18.395550] Buffer I/O error on dev vda1, logical block 9, lost async page write\n[   18.397893] blk_update_request: I/O error, dev vda, sector 18528 op 0x1:(WRITE) flags 0x800 phys_seg 3 prio class 0\n[   18.398500] Buffer I/O error on dev vda1, logical block 12, lost async page write\n[   18.398946] Buffer I/O error on dev vda1, logical block 13, lost async page write\n[   18.400458] Buffer I/O error on dev vda1, logical block 14, lost async page write\n[   18.403084] blk_update_request: I/O error, dev vda, sector 18568 op 0x1:(WRITE) flags 0x800 phys_seg 6 prio class 0\n[   18.403757] Buffer I/O error on dev vda1, logical block 17, lost async page write\n[   18.404340] Buffer I/O error on dev vda1, logical block 18, lost async page write\n[   18.404964] Buffer I/O error on dev vda1, logical block 19, lost async page write\n[   18.407199] blk_update_request: I/O error, dev vda, sector 18624 op 0x1:(WRITE) flags 0x800 phys_seg 1 prio class 0\n[   18.422111] blk_update_request: I/O error, dev vda, sector 18736 op 0x1:(WRITE) flags 0x800 phys_seg 2 prio class 0\n[   18.469337] blk_update_request: I/O error, dev vda, sector 18688 op 0x1:(WRITE) flags 0x800 phys_seg 3 prio class 0\n[   18.472823] blk_update_request: I/O error, dev vda, sector 18816 op 0x1:(WRITE) flags 0x800 phys_seg 1 prio class 0\n[   18.476295] blk_update_request: I/O error, dev vda, sector 18888 op 0x1:(WRITE) flags 0x800 phys_seg 1 prio class 0\n[   18.479641] blk_update_request: I/O error, dev vda, sector 18872 op 0x1:(WRITE) flags 0x800 phys_seg 1 prio class 0\n[   18.507982] JBD2: recovery failed\n[   18.508505] EXT4-fs (vda1): error loading journal\n[   18.607652] JBD2: recovery failed\n[   18.614094] EXT4-fs (vda1): error loading journal\nmount: mounting /dev/vda1 on /newroot failed: Invalid argument\numount: can\u0027t unmount /dev/vda1: Invalid argument\nmcb [info\u003dLABEL\u003dcirros-rootfs dev\u003d/dev/vda1 target\u003d/newroot unmount\u003dcbfail callback\u003dcheck_sbin_init ret\u003d1: failed to unmount\n[   19.023380] JBD2: recovery failed\n[   19.029669] EXT4-fs (vda1): error loading journal\n[   19.128836] JBD2: recovery failed\n[   19.135072] EXT4-fs (vda1): error loading journal\nmount: mounting /dev/vda1 on /newroot failed: Invalid argument\ninfo: copying initramfs to /dev/vda1\ncp: write error: No space left on device\ncp: write error: No space left on device\ncp: write error: No space left on device\n```\n\nnova-next:\n\n```\ninfo: /etc/init.d/rc.sysinit: up at 11.91\n/etc/init.d/rc.sysinit: line 384: awk: not found\n/etc/init.d/rc.sysinit: line 408: awk: not found\n/etc/init.d/rc.sysinit: line 384: awk: not found\nmount: mounting /dev on /dev failed: Device or resource busy\nFAIL: failed mount /dev\ninfo: container: none\n/etc/init.d/rc.sysinit: line 58: filecap: not found\n/etc/init.d/rc.sysinit: line 63: awk: not found\nStarting syslogd: OK\nJun  6 10:28:17 cirros syslog.info syslogd started: BusyBox v1.35.0\n/etc/rc3.d/S10-load-modules: line 71: sort: not found/etc/rc3.d/S10-load-modules: line 71: awk: not found\n/etc/rc3.d/S10-load-modules: line 71: tr: not found\n\ncurrently loaded modules: \nSaving random seed: SKIP (read-only file system detected)\nWARN: /etc/rc3.d/S20-urandom failed\nStarting acpid: OK\n/lib/cirros/ds/configdrive: line 65: json2fstree: not found\njson2fstree failed on /tmp/cirros-ds.yLqgCs/configdrive/raw.tmp/openstack/latest/meta_data.json for /dev/sr0\nconfigdrive-local: returned error\nStarting network: ifup: can\u0027t open \u0027/var/run/ifstate.new\u0027: No such file or directory\nrefusing chroot: dhcpcd: /var\nJun  6 10:28:20 cirros daemon.err dhcpcd[271]: refusing chroot: dhcpcd: /var\nmain: mkdir: /var/db/dhcpcd: No such file or directory\nJun  6 10:28:20 cirros daemon.err dhcpcd[271]: main: mkdir: /var/db/dhcpcd: No such file or directory\nmain: mkdir: /var/run/dhcpcd: No such file or directory\nJun  6 10:28:20 cirros daemon.err dhcpcd[271]: main: mkdir: /var/run/dhcpcd: No such file or directory\nmain: pidfile_lock: /var/run/dhcpcd/pid: No such file or directory\nJun  6 10:28:20 cirros daemon.err dhcpcd[271]: main: pidfile_lock: /var/run/dhcpcd/pid: No such file or directory\nFAIL\nchecking http://169.254.169.254/2009-04-04/instance-id\nfailed 1/20: up 17.56. request failed\nfailed 2/20: up 19.61. request failed\nfailed 3/20: up 21.76. request failed\nfailed 4/20: up 23.81. request failed\nfailed 5/20: up 25.85. request failed\nfailed 6/20: up 27.90. request failed\nfailed 7/20: up 29.98. request failed\nfailed 8/20: up 32.03. request failed\nfailed 9/20: up 34.09. request failed\nfailed 10/20: up 36.13. request failed\nfailed 11/20: up 38.19. request failed\nfailed 12/20: up 40.25. request failed\nfailed 13/20: up 42.30. request failed\nfailed 14/20: up 44.35. request failed\nfailed 15/20: up 46.40. request failed\nfailed 16/20: up 48.44. request failed\nfailed 17/20: up 50.48. request failed\nfailed 18/20: up 52.54. request failed\nfailed 19/20: up 54.60. request failed\nfailed 20/20: up 56.65. request failed\nfailed to read iid from metadata. tried 20\nfailed to get instance-id of datasource\nTop of dropbear init script\nStarting dropbear sshd: failed to get instance-id of datasource\nmkdir: can\u0027t create directory \u0027\u0027: No such file or directory\nWARN: generating key of type rsa failed!\nWARN: generating key of type ecdsa failed!\nOK\n```","commit_id":"56d320a203a13f262a2e94e491af222032e453d3"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0306974232385dedf7a9553ad65459e4f8849e28","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"4f1eb9e3_9d70f1f7","updated":"2023-06-07 08:28:27.000000000","message":"recheck multiple guest failures in test_stamp_pattern \n\n```\n[   10.591719] GPT:Alternate GPT header not at the end of the disk.\n[   10.592067] GPT:229375 !\u003d 2097151\n[   10.592309] GPT: Use GNU Parted to correct GPT errors.\n[   11.259547] virtio_gpu virtio0: [drm] drm_plane_enable_fb_damage_clips() not called\n[snip]\n[  292.181672] blk_update_request: I/O error, dev vdb, sector 16 op 0x1:(WRITE) flags 0x100000 phys_seg 121 prio class 0\n[  292.183051] Buffer I/O error on dev vdb, logical block 2, lost async page write\n[  292.184159] Buffer I/O error on dev vdb, logical block 3, lost async page write\n[  292.184825] Buffer I/O error on dev vdb, logical block 4, lost async page write\n[  292.185473] Buffer I/O error on dev vdb, logical block 5, lost async page write\n[  292.186101] Buffer I/O error on dev vdb, logical block 6, lost async page write\n[  292.186778] Buffer I/O error on dev vdb, logical block 7, lost async page write\n[  292.187407] Buffer I/O error on dev vdb, logical block 8, lost async page write\n[  292.188043] Buffer I/O error on dev vdb, logical block 9, lost async page write\n[  292.188670] Buffer I/O error on dev vdb, logical block 10, lost async page write\n[  292.189337] Buffer I/O error on dev vdb, logical block 11, lost async page write\n```","commit_id":"56d320a203a13f262a2e94e491af222032e453d3"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ea14162aa4e2f617803f7c2b0e739143f18b0009","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"01ab2795_f032d46a","updated":"2023-06-06 10:34:40.000000000","message":"thanks for the rebase. i agree the job failures are unrelated","commit_id":"56d320a203a13f262a2e94e491af222032e453d3"}],"nova/compute/build_results.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"fa36987ed4eb391d0118925909ba6973277d1e79","unresolved":true,"context_lines":[{"line_number":24,"context_line":"ACTIVE \u003d \u0027active\u0027  # Instance is running"},{"line_number":25,"context_line":"FAILED \u003d \u0027failed\u0027  # Instance failed to build and was not rescheduled"},{"line_number":26,"context_line":"RESCHEDULED \u003d \u0027rescheduled\u0027  # Instance failed to build, but was rescheduled"},{"line_number":27,"context_line":"RESCHEDULED_BY_ANTI_AFFINITY \u003d \u0027rescheduled_by_anti-affinity\u0027  # Instance was rescheduled by anti-affinity violation"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a4b699a_9e18917f","line":27,"updated":"2023-02-09 08:26:44.000000000","message":"this is now used both for the affinity and the anti-affinity case so the naming is not correct","commit_id":"f0d03e4a8dbfe3e608ea4cdf1cfb322c6ed54c84"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7024c83e7778f0c5a94c30feb122a552e70e6ff0","unresolved":false,"context_lines":[{"line_number":24,"context_line":"ACTIVE \u003d \u0027active\u0027  # Instance is running"},{"line_number":25,"context_line":"FAILED \u003d \u0027failed\u0027  # Instance failed to build and was not rescheduled"},{"line_number":26,"context_line":"RESCHEDULED \u003d \u0027rescheduled\u0027  # Instance failed to build, but was rescheduled"},{"line_number":27,"context_line":"RESCHEDULED_BY_ANTI_AFFINITY \u003d \u0027rescheduled_by_anti-affinity\u0027  # Instance was rescheduled by anti-affinity violation"}],"source_content_type":"text/x-python","patch_set":2,"id":"2006e277_85202dc7","line":27,"in_reply_to":"24d834d5_b2cae416","updated":"2023-06-02 13:30:28.000000000","message":"Done","commit_id":"f0d03e4a8dbfe3e608ea4cdf1cfb322c6ed54c84"},{"author":{"_account_id":34951,"name":"Yusuke Okada","email":"okada.yusuke@fujitsu.com","username":"yusokada"},"change_message_id":"36640ebbf2e359eaf2d33e0b8ad3dffd9d1a0765","unresolved":true,"context_lines":[{"line_number":24,"context_line":"ACTIVE \u003d \u0027active\u0027  # Instance is running"},{"line_number":25,"context_line":"FAILED \u003d \u0027failed\u0027  # Instance failed to build and was not rescheduled"},{"line_number":26,"context_line":"RESCHEDULED \u003d \u0027rescheduled\u0027  # Instance failed to build, but was rescheduled"},{"line_number":27,"context_line":"RESCHEDULED_BY_ANTI_AFFINITY \u003d \u0027rescheduled_by_anti-affinity\u0027  # Instance was rescheduled by anti-affinity violation"}],"source_content_type":"text/x-python","patch_set":2,"id":"24d834d5_b2cae416","line":27,"in_reply_to":"9a4b699a_9e18917f","updated":"2023-02-22 20:12:13.000000000","message":"Thanks for review. I renamed the name for more generic use.","commit_id":"f0d03e4a8dbfe3e608ea4cdf1cfb322c6ed54c84"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ad969ec9c772def3f69e6c3e0027de3c16fea4c9","unresolved":true,"context_lines":[{"line_number":28,"context_line":"# and was not rescheduled"},{"line_number":29,"context_line":"FAILED_BY_AFFINITY \u003d \u0027failed_by_affinity\u0027"},{"line_number":30,"context_line":"# Instance was rescheduled by affinity or anti-affinity violation"},{"line_number":31,"context_line":"RESCHEDULED_BY_AFFINITY \u003d \u0027rescheduled_by_affinity\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"630d6855_42dffdf1","line":31,"updated":"2023-02-15 11:50:57.000000000","message":"im not sure we need to add new build results by the way.\n\ni was expecting to just add a new excption and make no other changes.\n\nwe can do this but im not sure this is required.","commit_id":"6af14c254df195c5104b2e9db508f6816c8f51fe"},{"author":{"_account_id":34951,"name":"Yusuke Okada","email":"okada.yusuke@fujitsu.com","username":"yusokada"},"change_message_id":"36640ebbf2e359eaf2d33e0b8ad3dffd9d1a0765","unresolved":true,"context_lines":[{"line_number":28,"context_line":"# and was not rescheduled"},{"line_number":29,"context_line":"FAILED_BY_AFFINITY \u003d \u0027failed_by_affinity\u0027"},{"line_number":30,"context_line":"# Instance was rescheduled by affinity or anti-affinity violation"},{"line_number":31,"context_line":"RESCHEDULED_BY_AFFINITY \u003d \u0027rescheduled_by_affinity\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"cb51a471_4c3e44a0","line":31,"in_reply_to":"630d6855_42dffdf1","updated":"2023-02-22 20:12:13.000000000","message":"Thanks for review.\nCurrently any unhandled exceptions requires instance reschedule with failed count increment (nova/compute/manager.py#L2709). I think this default behavior is reasonable because the reason of the failure is unclear. Only confirmed exceptions should skip the increment.\nI understand there are some exceptions that are not caused by compute failure, so I changed the variable more generic to handle other cases.","commit_id":"6af14c254df195c5104b2e9db508f6816c8f51fe"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7024c83e7778f0c5a94c30feb122a552e70e6ff0","unresolved":false,"context_lines":[{"line_number":28,"context_line":"# and was not rescheduled"},{"line_number":29,"context_line":"FAILED_BY_AFFINITY \u003d \u0027failed_by_affinity\u0027"},{"line_number":30,"context_line":"# Instance was rescheduled by affinity or anti-affinity violation"},{"line_number":31,"context_line":"RESCHEDULED_BY_AFFINITY \u003d \u0027rescheduled_by_affinity\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"bdcf9e20_73be6f58","line":31,"in_reply_to":"cb51a471_4c3e44a0","updated":"2023-06-02 13:30:28.000000000","message":"Done","commit_id":"6af14c254df195c5104b2e9db508f6816c8f51fe"}],"nova/compute/manager.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"fa36987ed4eb391d0118925909ba6973277d1e79","unresolved":true,"context_lines":[{"line_number":1896,"context_line":"            elif group.policy and \u0027affinity\u0027 \u003d\u003d group.policy:"},{"line_number":1897,"context_line":"                group_hosts \u003d group.get_hosts(exclude\u003d[instance.uuid])"},{"line_number":1898,"context_line":"                if group_hosts and self.host not in group_hosts:"},{"line_number":1899,"context_line":"                    raise exception.RescheduledByAntiAffinityException("},{"line_number":1900,"context_line":"                            instance_uuid\u003dinstance.uuid)"},{"line_number":1901,"context_line":""},{"line_number":1902,"context_line":"        _do_validation(context, instance, group)"}],"source_content_type":"text/x-python","patch_set":2,"id":"d4a0427b_27e6040f","line":1899,"range":{"start_line":1899,"start_character":47,"end_line":1899,"end_character":61},"updated":"2023-02-09 08:26:44.000000000","message":"This is misleading now as this failure is due to affinity not anti-affinity policy. I suggest to create a bit more generic exception and exception message to cover both the affinity and anti-affinity case","commit_id":"f0d03e4a8dbfe3e608ea4cdf1cfb322c6ed54c84"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7024c83e7778f0c5a94c30feb122a552e70e6ff0","unresolved":false,"context_lines":[{"line_number":1896,"context_line":"            elif group.policy and \u0027affinity\u0027 \u003d\u003d group.policy:"},{"line_number":1897,"context_line":"                group_hosts \u003d group.get_hosts(exclude\u003d[instance.uuid])"},{"line_number":1898,"context_line":"                if group_hosts and self.host not in group_hosts:"},{"line_number":1899,"context_line":"                    raise exception.RescheduledByAntiAffinityException("},{"line_number":1900,"context_line":"                            instance_uuid\u003dinstance.uuid)"},{"line_number":1901,"context_line":""},{"line_number":1902,"context_line":"        _do_validation(context, instance, group)"}],"source_content_type":"text/x-python","patch_set":2,"id":"c4bbe32b_2ae62e68","line":1899,"range":{"start_line":1899,"start_character":47,"end_line":1899,"end_character":61},"in_reply_to":"c6d25862_52a129a0","updated":"2023-06-02 13:30:28.000000000","message":"Ack","commit_id":"f0d03e4a8dbfe3e608ea4cdf1cfb322c6ed54c84"},{"author":{"_account_id":34951,"name":"Yusuke Okada","email":"okada.yusuke@fujitsu.com","username":"yusokada"},"change_message_id":"36640ebbf2e359eaf2d33e0b8ad3dffd9d1a0765","unresolved":true,"context_lines":[{"line_number":1896,"context_line":"            elif group.policy and \u0027affinity\u0027 \u003d\u003d group.policy:"},{"line_number":1897,"context_line":"                group_hosts \u003d group.get_hosts(exclude\u003d[instance.uuid])"},{"line_number":1898,"context_line":"                if group_hosts and self.host not in group_hosts:"},{"line_number":1899,"context_line":"                    raise exception.RescheduledByAntiAffinityException("},{"line_number":1900,"context_line":"                            instance_uuid\u003dinstance.uuid)"},{"line_number":1901,"context_line":""},{"line_number":1902,"context_line":"        _do_validation(context, instance, group)"}],"source_content_type":"text/x-python","patch_set":2,"id":"c6d25862_52a129a0","line":1899,"range":{"start_line":1899,"start_character":47,"end_line":1899,"end_character":61},"in_reply_to":"d4a0427b_27e6040f","updated":"2023-02-22 20:12:13.000000000","message":"Thanks for review. It is my mistake. I renamed the Exception to handle both of the affinity/anti-affinity case.","commit_id":"f0d03e4a8dbfe3e608ea4cdf1cfb322c6ed54c84"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"fa36987ed4eb391d0118925909ba6973277d1e79","unresolved":true,"context_lines":[{"line_number":2438,"context_line":"                self._set_instance_obj_error_state(instance,"},{"line_number":2439,"context_line":"                                                   clean_task_state\u003dTrue)"},{"line_number":2440,"context_line":"                if isinstance(e, exception.RescheduledByAntiAffinityException):"},{"line_number":2441,"context_line":"                    return build_results.RESCHEDULED_BY_ANTI_AFFINITY"},{"line_number":2442,"context_line":""},{"line_number":2443,"context_line":"                return build_results.FAILED"},{"line_number":2444,"context_line":"            LOG.debug(e.format_message(), instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":2,"id":"dfe39c37_b7a4cca9","line":2441,"updated":"2023-02-09 08:26:44.000000000","message":"this seems to be wrong as due to L2428-2429 we are in a path where now re-schedule happens.","commit_id":"f0d03e4a8dbfe3e608ea4cdf1cfb322c6ed54c84"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7024c83e7778f0c5a94c30feb122a552e70e6ff0","unresolved":false,"context_lines":[{"line_number":2438,"context_line":"                self._set_instance_obj_error_state(instance,"},{"line_number":2439,"context_line":"                                                   clean_task_state\u003dTrue)"},{"line_number":2440,"context_line":"                if isinstance(e, exception.RescheduledByAntiAffinityException):"},{"line_number":2441,"context_line":"                    return build_results.RESCHEDULED_BY_ANTI_AFFINITY"},{"line_number":2442,"context_line":""},{"line_number":2443,"context_line":"                return build_results.FAILED"},{"line_number":2444,"context_line":"            LOG.debug(e.format_message(), instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":2,"id":"8d37768e_be1724cd","line":2441,"in_reply_to":"b9e1d6de_d81d034e","updated":"2023-06-02 13:30:28.000000000","message":"Ack","commit_id":"f0d03e4a8dbfe3e608ea4cdf1cfb322c6ed54c84"},{"author":{"_account_id":34951,"name":"Yusuke Okada","email":"okada.yusuke@fujitsu.com","username":"yusokada"},"change_message_id":"36640ebbf2e359eaf2d33e0b8ad3dffd9d1a0765","unresolved":true,"context_lines":[{"line_number":2438,"context_line":"                self._set_instance_obj_error_state(instance,"},{"line_number":2439,"context_line":"                                                   clean_task_state\u003dTrue)"},{"line_number":2440,"context_line":"                if isinstance(e, exception.RescheduledByAntiAffinityException):"},{"line_number":2441,"context_line":"                    return build_results.RESCHEDULED_BY_ANTI_AFFINITY"},{"line_number":2442,"context_line":""},{"line_number":2443,"context_line":"                return build_results.FAILED"},{"line_number":2444,"context_line":"            LOG.debug(e.format_message(), instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":2,"id":"b9e1d6de_d81d034e","line":2441,"in_reply_to":"dfe39c37_b7a4cca9","updated":"2023-02-22 20:12:13.000000000","message":"Thanks for review. In this block, reschedule won\u0027t occur. But I think we still need to avoid increment of the failed count. I added a new build_results variable to handle this case.","commit_id":"f0d03e4a8dbfe3e608ea4cdf1cfb322c6ed54c84"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"fa36987ed4eb391d0118925909ba6973277d1e79","unresolved":true,"context_lines":[{"line_number":2689,"context_line":"                    bdms\u003dblock_device_mapping)"},{"line_number":2690,"context_line":"            raise exception.BuildAbortException(instance_uuid\u003dinstance.uuid,"},{"line_number":2691,"context_line":"                    reason\u003de.format_message())"},{"line_number":2692,"context_line":"        except exception.RescheduledByAntiAffinityException as e:"},{"line_number":2693,"context_line":"            LOG.exception(\u0027Failed to build and run instance\u0027,"},{"line_number":2694,"context_line":"                          instance\u003dinstance)"},{"line_number":2695,"context_line":"            self._notify_about_instance_usage(context, instance,"}],"source_content_type":"text/x-python","patch_set":2,"id":"21a554df_f142bb3c","line":2692,"updated":"2023-02-09 08:26:44.000000000","message":"This is interesting. I\u0027m not sure how we end up here. Based on the rest of the exception handlers this is not a place where we handle the RescheduleException but it is the place when we raise it based on the failure that happened during spawn.","commit_id":"f0d03e4a8dbfe3e608ea4cdf1cfb322c6ed54c84"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7024c83e7778f0c5a94c30feb122a552e70e6ff0","unresolved":false,"context_lines":[{"line_number":2689,"context_line":"                    bdms\u003dblock_device_mapping)"},{"line_number":2690,"context_line":"            raise exception.BuildAbortException(instance_uuid\u003dinstance.uuid,"},{"line_number":2691,"context_line":"                    reason\u003de.format_message())"},{"line_number":2692,"context_line":"        except exception.RescheduledByAntiAffinityException as e:"},{"line_number":2693,"context_line":"            LOG.exception(\u0027Failed to build and run instance\u0027,"},{"line_number":2694,"context_line":"                          instance\u003dinstance)"},{"line_number":2695,"context_line":"            self._notify_about_instance_usage(context, instance,"}],"source_content_type":"text/x-python","patch_set":2,"id":"e283deea_c2a2e8ed","line":2692,"in_reply_to":"0a4368a2_2ba6145f","updated":"2023-06-02 13:30:28.000000000","message":"Ack","commit_id":"f0d03e4a8dbfe3e608ea4cdf1cfb322c6ed54c84"},{"author":{"_account_id":34951,"name":"Yusuke Okada","email":"okada.yusuke@fujitsu.com","username":"yusokada"},"change_message_id":"36640ebbf2e359eaf2d33e0b8ad3dffd9d1a0765","unresolved":true,"context_lines":[{"line_number":2689,"context_line":"                    bdms\u003dblock_device_mapping)"},{"line_number":2690,"context_line":"            raise exception.BuildAbortException(instance_uuid\u003dinstance.uuid,"},{"line_number":2691,"context_line":"                    reason\u003de.format_message())"},{"line_number":2692,"context_line":"        except exception.RescheduledByAntiAffinityException as e:"},{"line_number":2693,"context_line":"            LOG.exception(\u0027Failed to build and run instance\u0027,"},{"line_number":2694,"context_line":"                          instance\u003dinstance)"},{"line_number":2695,"context_line":"            self._notify_about_instance_usage(context, instance,"}],"source_content_type":"text/x-python","patch_set":2,"id":"0a4368a2_2ba6145f","line":2692,"in_reply_to":"21a554df_f142bb3c","updated":"2023-02-22 20:12:13.000000000","message":"Thanks for review. The exception handling logic was not clear. I added a new exception to handle affinity/anti-affinity violation in addition to the new rescheduled exception.","commit_id":"f0d03e4a8dbfe3e608ea4cdf1cfb322c6ed54c84"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ad969ec9c772def3f69e6c3e0027de3c16fea4c9","unresolved":true,"context_lines":[{"line_number":2344,"context_line":"                            context, instance.uuid, force\u003dTrue)"},{"line_number":2345,"context_line":""},{"line_number":2346,"context_line":"                    if result in (build_results.FAILED,"},{"line_number":2347,"context_line":"                                  build_results.RESCHEDULED):"},{"line_number":2348,"context_line":"                        self._build_failed(node)"},{"line_number":2349,"context_line":"                    elif result in (build_results.FAILED_BY_AFFINITY,"},{"line_number":2350,"context_line":"                                    build_results.RESCHEDULED_BY_AFFINITY):"}],"source_content_type":"text/x-python","patch_set":5,"id":"e887e4e8_52da28a8","line":2347,"range":{"start_line":2347,"start_character":34,"end_line":2347,"end_character":59},"updated":"2023-02-15 11:50:57.000000000","message":"im not entirly sure why include RESCHEDULED here by the way.\n\nif we race for the final numa resouces we should not count that as a failed build either.\n\nis there any reason to no just remove build_results.RESCHEDULED here?","commit_id":"6af14c254df195c5104b2e9db508f6816c8f51fe"},{"author":{"_account_id":34951,"name":"Yusuke Okada","email":"okada.yusuke@fujitsu.com","username":"yusokada"},"change_message_id":"36640ebbf2e359eaf2d33e0b8ad3dffd9d1a0765","unresolved":false,"context_lines":[{"line_number":2344,"context_line":"                            context, instance.uuid, force\u003dTrue)"},{"line_number":2345,"context_line":""},{"line_number":2346,"context_line":"                    if result in (build_results.FAILED,"},{"line_number":2347,"context_line":"                                  build_results.RESCHEDULED):"},{"line_number":2348,"context_line":"                        self._build_failed(node)"},{"line_number":2349,"context_line":"                    elif result in (build_results.FAILED_BY_AFFINITY,"},{"line_number":2350,"context_line":"                                    build_results.RESCHEDULED_BY_AFFINITY):"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f5b49ce_d51daeaa","line":2347,"range":{"start_line":2347,"start_character":34,"end_line":2347,"end_character":59},"in_reply_to":"e887e4e8_52da28a8","updated":"2023-02-22 20:12:13.000000000","message":"Thanks for review.\nPlease check the reply for the comment nova/compute/build_results.py#31.","commit_id":"6af14c254df195c5104b2e9db508f6816c8f51fe"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ad969ec9c772def3f69e6c3e0027de3c16fea4c9","unresolved":true,"context_lines":[{"line_number":2346,"context_line":"                    if result in (build_results.FAILED,"},{"line_number":2347,"context_line":"                                  build_results.RESCHEDULED):"},{"line_number":2348,"context_line":"                        self._build_failed(node)"},{"line_number":2349,"context_line":"                    elif result in (build_results.FAILED_BY_AFFINITY,"},{"line_number":2350,"context_line":"                                    build_results.RESCHEDULED_BY_AFFINITY):"},{"line_number":2351,"context_line":"                        pass"},{"line_number":2352,"context_line":"                    else:"}],"source_content_type":"text/x-python","patch_set":5,"id":"20577174_c3eab8f1","line":2349,"updated":"2023-02-15 11:50:57.000000000","message":"this is not required\n\nif we were to do this i would prefer the early return idiom\n\nif result in (build_results.FAILED_BY_AFFINITY,\n              build_results.RESCHEDULED_BY_AFFINITY):\n    return\nif result in (build_results.FAILED,\n              build_results.RESCHEDULED):\n self._build_failed(node)\nelse:\n self._build_succeeded(node)\n \n \n but personally i think we would be better off just doign the following\n \n \n \n                 finally:\n                    if result \u003d\u003d build_results.FAILED:\n                        # Remove the allocation records from Placement for the\n                        # instance if the build failed. The instance.host is\n                        # likely set to None in _do_build_and_run_instance\n                        # which means if the user deletes the instance, it\n                        # will be deleted in the API, not the compute service.\n                        # Setting the instance.host to None in\n                        # _do_build_and_run_instance means that the\n                        # ResourceTracker will no longer consider this instance\n                        # to be claiming resources against it, so we want to\n                        # reflect that same thing in Placement.  No need to\n                        # call this for a reschedule, as the allocations will\n                        # have already been removed in\n                        # self._do_build_and_run_instance().\n                        self.reportclient.delete_allocation_for_instance(\n                            context, instance.uuid, force\u003dTrue)\n                        self._build_failed(node)\n                        return\n                    self._build_succeeded(node)","commit_id":"6af14c254df195c5104b2e9db508f6816c8f51fe"},{"author":{"_account_id":34951,"name":"Yusuke Okada","email":"okada.yusuke@fujitsu.com","username":"yusokada"},"change_message_id":"36640ebbf2e359eaf2d33e0b8ad3dffd9d1a0765","unresolved":true,"context_lines":[{"line_number":2346,"context_line":"                    if result in (build_results.FAILED,"},{"line_number":2347,"context_line":"                                  build_results.RESCHEDULED):"},{"line_number":2348,"context_line":"                        self._build_failed(node)"},{"line_number":2349,"context_line":"                    elif result in (build_results.FAILED_BY_AFFINITY,"},{"line_number":2350,"context_line":"                                    build_results.RESCHEDULED_BY_AFFINITY):"},{"line_number":2351,"context_line":"                        pass"},{"line_number":2352,"context_line":"                    else:"}],"source_content_type":"text/x-python","patch_set":5,"id":"c0cb01dd_17b11e77","line":2349,"in_reply_to":"20577174_c3eab8f1","updated":"2023-02-22 20:12:13.000000000","message":"Thanks for suggestion! I refactored with early return idiom.","commit_id":"6af14c254df195c5104b2e9db508f6816c8f51fe"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6f904cfcb54058d15f714d0299cddf350b18a970","unresolved":false,"context_lines":[{"line_number":2346,"context_line":"                    if result in (build_results.FAILED,"},{"line_number":2347,"context_line":"                                  build_results.RESCHEDULED):"},{"line_number":2348,"context_line":"                        self._build_failed(node)"},{"line_number":2349,"context_line":"                    elif result in (build_results.FAILED_BY_AFFINITY,"},{"line_number":2350,"context_line":"                                    build_results.RESCHEDULED_BY_AFFINITY):"},{"line_number":2351,"context_line":"                        pass"},{"line_number":2352,"context_line":"                    else:"}],"source_content_type":"text/x-python","patch_set":5,"id":"0dcd69ce_202b1b7e","line":2349,"in_reply_to":"c0cb01dd_17b11e77","updated":"2023-03-13 13:54:05.000000000","message":"Ack","commit_id":"6af14c254df195c5104b2e9db508f6816c8f51fe"}],"nova/tests/functional/test_server_group.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4754c7caa5fc64558331425605352cfff8543546","unresolved":true,"context_lines":[{"line_number":542,"context_line":"        computes \u003d objects.ComputeNodeList.get_all(ctxt)"},{"line_number":543,"context_line":""},{"line_number":544,"context_line":"        for node in computes:"},{"line_number":545,"context_line":"            self.assertEqual(node.stats.get(\u0027failed_builds\u0027), \u00270\u0027)"},{"line_number":546,"context_line":""},{"line_number":547,"context_line":"    @mock.patch(\u0027nova.scheduler.filters.affinity_filter.\u0027"},{"line_number":548,"context_line":"        \u0027ServerGroupAntiAffinityFilter.host_passes\u0027, return_value\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":6,"id":"4acb3733_abd08d1f","line":545,"updated":"2023-05-31 13:21:54.000000000","message":"+1","commit_id":"3040009f6903e68021168e098c9e5d29c4474a32"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4754c7caa5fc64558331425605352cfff8543546","unresolved":true,"context_lines":[{"line_number":577,"context_line":"        computes \u003d objects.ComputeNodeList.get_all(ctxt)"},{"line_number":578,"context_line":""},{"line_number":579,"context_line":"        for node in computes:"},{"line_number":580,"context_line":"            self.assertEqual(node.stats.get(\u0027failed_builds\u0027), \u00270\u0027)"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":""},{"line_number":583,"context_line":"class ServerGroupAffinityConfTest(ServerGroupTestBase):"}],"source_content_type":"text/x-python","patch_set":6,"id":"a35c7b74_872440c0","line":580,"updated":"2023-05-31 13:21:54.000000000","message":"+1","commit_id":"3040009f6903e68021168e098c9e5d29c4474a32"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"cb88154ef10cbc47080ce392641170b4bc285642","unresolved":true,"context_lines":[{"line_number":578,"context_line":""},{"line_number":579,"context_line":"        for node in computes:"},{"line_number":580,"context_line":"            self.assertEqual(node.stats.get(\u0027failed_builds\u0027), \u00270\u0027)"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":""},{"line_number":583,"context_line":"class ServerGroupAffinityConfTest(ServerGroupTestBase):"},{"line_number":584,"context_line":"    api_major_version \u003d \u0027v2.1\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"90c19cf6_27ce7fb0","line":581,"updated":"2023-06-02 12:04:08.000000000","message":"Thank you for the tests!","commit_id":"3040009f6903e68021168e098c9e5d29c4474a32"}],"nova/tests/unit/compute/test_compute_mgr.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"fa36987ed4eb391d0118925909ba6973277d1e79","unresolved":true,"context_lines":[{"line_number":7407,"context_line":""},{"line_number":7408,"context_line":"        mock_succeeded.assert_not_called()"},{"line_number":7409,"context_line":"        mock_failed.assert_not_called()"},{"line_number":7410,"context_line":""},{"line_number":7411,"context_line":"    @mock.patch.object(objects.InstanceActionEvent,"},{"line_number":7412,"context_line":"                       \u0027event_finish_with_failure\u0027)"},{"line_number":7413,"context_line":"    @mock.patch.object(objects.InstanceActionEvent, \u0027event_start\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"8a81c785_b75c4aa1","line":7410,"updated":"2023-02-09 08:26:44.000000000","message":"I have some uncertainty about that the solution covers our re-schedule cases. So  I would like to see a set of functional tests that triggers re-schedule due to the violation of the late group policy checks and assert that \n* i) we still correctly re-schedule if re-schedule is needed \n* ii) we don\u0027t try to re-scheduler where we did not do that before (i.e. BuildAbort) \n* iii) the counter for the weigher is incremented only when needed.","commit_id":"f0d03e4a8dbfe3e608ea4cdf1cfb322c6ed54c84"},{"author":{"_account_id":34951,"name":"Yusuke Okada","email":"okada.yusuke@fujitsu.com","username":"yusokada"},"change_message_id":"36640ebbf2e359eaf2d33e0b8ad3dffd9d1a0765","unresolved":true,"context_lines":[{"line_number":7407,"context_line":""},{"line_number":7408,"context_line":"        mock_succeeded.assert_not_called()"},{"line_number":7409,"context_line":"        mock_failed.assert_not_called()"},{"line_number":7410,"context_line":""},{"line_number":7411,"context_line":"    @mock.patch.object(objects.InstanceActionEvent,"},{"line_number":7412,"context_line":"                       \u0027event_finish_with_failure\u0027)"},{"line_number":7413,"context_line":"    @mock.patch.object(objects.InstanceActionEvent, \u0027event_start\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf36691a_95241341","line":7410,"in_reply_to":"8a81c785_b75c4aa1","updated":"2023-02-22 20:12:13.000000000","message":"Thanks for review.\nFor i), I separated non-rescheduled affinity violation scenario and added a new test case for it.\nFor ii), I refactored around L2692 to clarify the difference with the existing exception.\nFor iii), I added new assertions to the existing test cases to check the build count increment.","commit_id":"f0d03e4a8dbfe3e608ea4cdf1cfb322c6ed54c84"}]}
