)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d80a832eb8ce3e6b959dc03bb5147edcba0bcf9e","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Wait for Neutron port updates when using SSHPower"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adds a sleep after updating Neutron from the PXEDeploy driver.  This"},{"line_number":10,"context_line":"only triggers if node is configured to use the SSHPower driver.  In"},{"line_number":11,"context_line":"this case, it is presumed to be powering on virtual machines which may present"},{"line_number":12,"context_line":"a race between it booting and Neutron processing DHCP config changes.  This is"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9ad9bd40_8f940644","line":9,"updated":"2014-05-06 14:15:10.000000000","message":"Redundant spaces on this and following lines.","commit_id":"e62c85e0daa126523c0af528e9aa6e248a95f4fb"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"f1e827a566c9f5d7715a71b16883aa0b0d0594ee","unresolved":false,"context_lines":[{"line_number":10,"context_line":"triggers if node is configured to use the SSHPower driver. In this case, it is"},{"line_number":11,"context_line":"presumed to be powering on virtual machines which may present a race between"},{"line_number":12,"context_line":"it booting and Neutron processing DHCP config changes.  This is a temporary"},{"line_number":13,"context_line":"fix until we have better synchronization with external services."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Partial-Bug: #1300589."},{"line_number":16,"context_line":"Change-Id: Iee40d45d34af0c44bc14c202424e919713efb78d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"1ae5cdf2_2f2243a3","line":13,"updated":"2014-06-25 16:01:00.000000000","message":"I think it is worth mentioning that it sleeps for 15 seconds and that this isn\u0027t configurable because of the temporary nature of this patch.","commit_id":"c997757d18543b42aad934c8274d534a2fc87f78"}],"ironic/common/neutron.py":[{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"3b2e6a71278aefe0ecfdf43e0df0e3a5b16936df","unresolved":false,"context_lines":[{"line_number":170,"context_line":"    # for synchronizing events with Neutron.  We need to sleep only if we are"},{"line_number":171,"context_line":"    # booting VMs, to ensure they do not boot before Neutron agents have setup"},{"line_number":172,"context_line":"    # sufficent DHCP config for netboot."},{"line_number":173,"context_line":"    if isinstance(task.driver.power, ssh.SSHPower):"},{"line_number":174,"context_line":"        LOG.debug(_(\"Waiting 15 seconds for Neutron.\"))"},{"line_number":175,"context_line":"        time.sleep(15)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_ef127208","line":173,"updated":"2014-06-16 13:59:54.000000000","message":"I think this is useful to other PXE drivers as well. I think it should not just be limited to the ssh driver. the patch that this one supersedes (https://review.openstack.org/#/c/84361) did not limit it.","commit_id":"663c324f999875fd23dff2d27925e8a981efbaf4"},{"author":{"_account_id":1420,"name":"Adam Gandelman","email":"adamg@ubuntu.com","username":"gandelman-a"},"change_message_id":"1d69b8aa6da379b03bc4bb240689991b5db2b4d8","unresolved":false,"context_lines":[{"line_number":170,"context_line":"    # for synchronizing events with Neutron.  We need to sleep only if we are"},{"line_number":171,"context_line":"    # booting VMs, to ensure they do not boot before Neutron agents have setup"},{"line_number":172,"context_line":"    # sufficent DHCP config for netboot."},{"line_number":173,"context_line":"    if isinstance(task.driver.power, ssh.SSHPower):"},{"line_number":174,"context_line":"        LOG.debug(_(\"Waiting 15 seconds for Neutron.\"))"},{"line_number":175,"context_line":"        time.sleep(15)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_eba338fe","line":173,"in_reply_to":"1ae5cdf2_ef127208","updated":"2014-06-16 19:08:33.000000000","message":"In the other review, the suggestion was that this only happen during ssh power, because its assumed we are booting VMs and thats the only real scenario where this race would surface.  Is this happening elsewhere?  If so, is there a bug?  If its going to be a delay for all drivers, I\u0027d like to have it optional or at least configurable in seconds.. tho that introduces a new config option, which also seemed contentious?","commit_id":"663c324f999875fd23dff2d27925e8a981efbaf4"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"a9286bb6916d2a5584b8707598d5800b8c23c33e","unresolved":false,"context_lines":[{"line_number":172,"context_line":"    # sufficent DHCP config for netboot."},{"line_number":173,"context_line":"    if isinstance(task.driver.power, ssh.SSHPower):"},{"line_number":174,"context_line":"        LOG.debug(_(\"Waiting 15 seconds for Neutron.\"))"},{"line_number":175,"context_line":"        time.sleep(15)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_74a7aea7","line":175,"updated":"2014-06-11 06:35:19.000000000","message":"No problem with hard-coded seconds?","commit_id":"663c324f999875fd23dff2d27925e8a981efbaf4"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"8dc095b458cb8b68ea195fb827055e0b0ed001b6","unresolved":false,"context_lines":[{"line_number":172,"context_line":"    # sufficent DHCP config for netboot."},{"line_number":173,"context_line":"    if isinstance(task.driver.power, ssh.SSHPower):"},{"line_number":174,"context_line":"        LOG.debug(_(\"Waiting 15 seconds for Neutron.\"))"},{"line_number":175,"context_line":"        time.sleep(15)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_29f68d5d","line":175,"in_reply_to":"1ae5cdf2_4552fe67","updated":"2014-06-12 01:06:25.000000000","message":"That\u0027s good already discussed.","commit_id":"663c324f999875fd23dff2d27925e8a981efbaf4"},{"author":{"_account_id":1420,"name":"Adam Gandelman","email":"adamg@ubuntu.com","username":"gandelman-a"},"change_message_id":"1c7f3126d48cc7bfe07182852b724f68a54d7c1b","unresolved":false,"context_lines":[{"line_number":172,"context_line":"    # sufficent DHCP config for netboot."},{"line_number":173,"context_line":"    if isinstance(task.driver.power, ssh.SSHPower):"},{"line_number":174,"context_line":"        LOG.debug(_(\"Waiting 15 seconds for Neutron.\"))"},{"line_number":175,"context_line":"        time.sleep(15)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_4552fe67","line":175,"in_reply_to":"1ae5cdf2_74a7aea7","updated":"2014-06-11 08:22:44.000000000","message":"My original patch had the # of sleeped second derived from a config option.  However, others voiced concern (and I agree) about adding config options for temporary things like this.  The SSH PXE driver is really only used in CI/development and 15 second should be plenty to eliminate the race condition in the short term...The long term solution is to fix this with some kind of callback interface.","commit_id":"663c324f999875fd23dff2d27925e8a981efbaf4"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"f1e827a566c9f5d7715a71b16883aa0b0d0594ee","unresolved":false,"context_lines":[{"line_number":168,"context_line":"    \"\"\"Wait for Neutron agents to process all requested changes if required.\"\"\""},{"line_number":169,"context_line":"    # NOTE(adam_g): Hack to workaround bug 1300589 until we have a mechanism"},{"line_number":170,"context_line":"    # for synchronizing events with Neutron.  We need to sleep only if we are"},{"line_number":171,"context_line":"    # booting VMs, to ensure they do not boot before Neutron agents have setup"},{"line_number":172,"context_line":"    # sufficent DHCP config for netboot."},{"line_number":173,"context_line":"    if isinstance(task.driver.power, ssh.SSHPower):"},{"line_number":174,"context_line":"        LOG.debug(_(\"Waiting 15 seconds for Neutron.\"))"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_efea1b0d","line":171,"updated":"2014-06-25 16:01:00.000000000","message":"is it worth putting something here, that we\u0027re assuming that using SSHPower implies VMs are being used.","commit_id":"c997757d18543b42aad934c8274d534a2fc87f78"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"f80c595519a0821f3467efab8d4b42f2ea574232","unresolved":false,"context_lines":[{"line_number":168,"context_line":""},{"line_number":169,"context_line":"def _wait_for_neutron_update(task):"},{"line_number":170,"context_line":"    \"\"\"Wait for Neutron agents to process all requested changes if required.\"\"\""},{"line_number":171,"context_line":"    # NOTE(adam_g): Hack to workaround bug 1300589 until we have a mechanism"},{"line_number":172,"context_line":"    # for synchronizing events with Neutron.  We need to sleep only if we are"},{"line_number":173,"context_line":"    # booting VMs, which is implied by SSHPower, to ensure they do not boot"},{"line_number":174,"context_line":"    # before Neutron agents have setup sufficent DHCP config for netboot."}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_b4c056e1","line":171,"updated":"2014-06-25 23:55:21.000000000","message":"(if you make another revision) does it matter if it is 1300589 or 1334447?","commit_id":"a8dc4961a6e6992ecf1604e21ef68404fab9697d"},{"author":{"_account_id":1420,"name":"Adam Gandelman","email":"adamg@ubuntu.com","username":"gandelman-a"},"change_message_id":"4910a11b0e059fb8f520b578ff9a8d9e58a13354","unresolved":false,"context_lines":[{"line_number":168,"context_line":""},{"line_number":169,"context_line":"def _wait_for_neutron_update(task):"},{"line_number":170,"context_line":"    \"\"\"Wait for Neutron agents to process all requested changes if required.\"\"\""},{"line_number":171,"context_line":"    # NOTE(adam_g): Hack to workaround bug 1300589 until we have a mechanism"},{"line_number":172,"context_line":"    # for synchronizing events with Neutron.  We need to sleep only if we are"},{"line_number":173,"context_line":"    # booting VMs, which is implied by SSHPower, to ensure they do not boot"},{"line_number":174,"context_line":"    # before Neutron agents have setup sufficent DHCP config for netboot."}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_51ab7b70","line":171,"in_reply_to":"1ae5cdf2_b4c056e1","updated":"2014-06-26 21:25:17.000000000","message":"Done","commit_id":"a8dc4961a6e6992ecf1604e21ef68404fab9697d"},{"author":{"_account_id":8125,"name":"Michael Davies","email":"michael@the-davies.net","username":"mrda"},"change_message_id":"cade262419e2cf432ef4e15a068085f899fffb91","unresolved":false,"context_lines":[{"line_number":168,"context_line":""},{"line_number":169,"context_line":"def _wait_for_neutron_update(task):"},{"line_number":170,"context_line":"    \"\"\"Wait for Neutron agents to process all requested changes if required.\"\"\""},{"line_number":171,"context_line":"    # NOTE(adam_g): Hack to workaround bug 1334447 until we have a mechanism"},{"line_number":172,"context_line":"    # for synchronizing events with Neutron.  We need to sleep only if we are"},{"line_number":173,"context_line":"    # booting VMs, which is implied by SSHPower, to ensure they do not boot"},{"line_number":174,"context_line":"    # before Neutron agents have setup sufficent DHCP config for netboot."}],"source_content_type":"text/x-python","patch_set":8,"id":"1ae5cdf2_e444c274","line":171,"updated":"2014-06-27 02:16:11.000000000","message":"Perhaps this should be a TODO so it can be grepped out in the future.","commit_id":"6588b1f4ea1fd3a6baeb4142f669c7c213b3c9f6"}],"ironic/common/tftp.py":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"4d45a66db0f58f59e7a62212f2917ee474a19254","unresolved":false,"context_lines":[{"line_number":161,"context_line":"    # NOTE(adam_g): Hack to workaround bug 1300589 until we have a mechanism"},{"line_number":162,"context_line":"    # for synchronizing events with Neutron.  We need to sleep only if we are"},{"line_number":163,"context_line":"    # booting VMs, to ensure they do not boot before Neutron agents have setup"},{"line_number":164,"context_line":"    # sufficent DHCP config for netboot.    507"},{"line_number":165,"context_line":"    if isinstance(task.driver.power, ssh.SSHPower):"},{"line_number":166,"context_line":"        LOG.debug(_(\"Waiting 15 seconds for Neutron.\"))"},{"line_number":167,"context_line":"        time.sleep(15)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad9bd40_06e3dc05","line":164,"updated":"2014-05-02 11:52:22.000000000","message":"nit: I think this 507 is a line number thtat came from the copy \u0026 paste.","commit_id":"9167e310dbeade19923181937f186dc6f92805b4"}],"ironic/drivers/modules/pxe.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"f1e827a566c9f5d7715a71b16883aa0b0d0594ee","unresolved":false,"context_lines":[{"line_number":564,"context_line":""},{"line_number":565,"context_line":"    def take_over(self, task):"},{"line_number":566,"context_line":"        neutron.update_neutron(task, CONF.pxe.pxe_bootfile_name)"},{"line_number":567,"context_line":"        neutron.wait_for_neutron_update(task)"},{"line_number":568,"context_line":""},{"line_number":569,"context_line":""},{"line_number":570,"context_line":"class VendorPassthru(base.VendorInterface):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_efd4db20","line":567,"updated":"2014-06-25 16:01:00.000000000","message":"if neutron.wait_for_neutron_update() is only and always going to be called after neutron.update_neutron(), I wonder if it is easier to just have neutron.update_neutron() call neutron.wait_for_neutron_update() (and maybe change it to _wait_for_neutron_update()).\n\nOtherwise, if someone adds neutron.update_neutron() call elsewhere, they\u0027ll need to know to add neutron.wait_for_neutron_update() too.","commit_id":"c997757d18543b42aad934c8274d534a2fc87f78"}],"ironic/tests/test_neutron.py":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"4671b063c1a171a0dd947d97f46cc47c2f0cca31","unresolved":false,"context_lines":[{"line_number":245,"context_line":"        kw \u003d {"},{"line_number":246,"context_line":"            \u0027id\u0027: 190238451205398,"},{"line_number":247,"context_line":"            \u0027uuid\u0027: utils.generate_uuid(),"},{"line_number":248,"context_line":"            \u0027driver\u0027: \u0027pxe_ssh\u0027"},{"line_number":249,"context_line":"        }"},{"line_number":250,"context_line":"        node \u003d db_utils.get_test_node(**kw)"},{"line_number":251,"context_line":"        self.dbapi.create_node(node)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_44ef36b1","line":248,"updated":"2014-06-12 08:34:19.000000000","message":"I think it\u0027s better to use fake drivers for tests, if the power interface is the only checked I suggest we use fake_ssh for the tests here instead","commit_id":"663c324f999875fd23dff2d27925e8a981efbaf4"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"4671b063c1a171a0dd947d97f46cc47c2f0cca31","unresolved":false,"context_lines":[{"line_number":249,"context_line":"        }"},{"line_number":250,"context_line":"        node \u003d db_utils.get_test_node(**kw)"},{"line_number":251,"context_line":"        self.dbapi.create_node(node)"},{"line_number":252,"context_line":"        mgr_utils.mock_the_extension_manager(driver\u003d\"pxe_ssh\")"},{"line_number":253,"context_line":"        with task_manager.acquire(self.context, node[\u0027uuid\u0027]) as task:"},{"line_number":254,"context_line":"            with mock.patch(\u0027time.sleep\u0027) as mock_sleep:"},{"line_number":255,"context_line":"                neutron.wait_for_neutron_update(task)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_842cde03","line":252,"updated":"2014-06-12 08:34:19.000000000","message":"ditto fake_ssh","commit_id":"663c324f999875fd23dff2d27925e8a981efbaf4"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"4671b063c1a171a0dd947d97f46cc47c2f0cca31","unresolved":false,"context_lines":[{"line_number":251,"context_line":"        self.dbapi.create_node(node)"},{"line_number":252,"context_line":"        mgr_utils.mock_the_extension_manager(driver\u003d\"pxe_ssh\")"},{"line_number":253,"context_line":"        with task_manager.acquire(self.context, node[\u0027uuid\u0027]) as task:"},{"line_number":254,"context_line":"            with mock.patch(\u0027time.sleep\u0027) as mock_sleep:"},{"line_number":255,"context_line":"                neutron.wait_for_neutron_update(task)"},{"line_number":256,"context_line":"                mock_sleep.assert_called_once_with(15)"},{"line_number":257,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_24a14a94","line":254,"updated":"2014-06-12 08:34:19.000000000","message":"nit: just to follow the same standard as the other tests, can we make it an decorator?","commit_id":"663c324f999875fd23dff2d27925e8a981efbaf4"},{"author":{"_account_id":1420,"name":"Adam Gandelman","email":"adamg@ubuntu.com","username":"gandelman-a"},"change_message_id":"5bcd34a3c19b319972e0d854f5937f9cd7d1a4e5","unresolved":false,"context_lines":[{"line_number":251,"context_line":"        self.dbapi.create_node(node)"},{"line_number":252,"context_line":"        mgr_utils.mock_the_extension_manager(driver\u003d\"pxe_ssh\")"},{"line_number":253,"context_line":"        with task_manager.acquire(self.context, node[\u0027uuid\u0027]) as task:"},{"line_number":254,"context_line":"            with mock.patch(\u0027time.sleep\u0027) as mock_sleep:"},{"line_number":255,"context_line":"                neutron.wait_for_neutron_update(task)"},{"line_number":256,"context_line":"                mock_sleep.assert_called_once_with(15)"},{"line_number":257,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_d733e411","line":254,"in_reply_to":"1ae5cdf2_24a14a94","updated":"2014-06-12 19:30:02.000000000","message":"I actually original wanted to do the same but with no luck. When used as a decorator, the mock we end up with is a fixture used elsewhere and its attributes are polluted with calls to sleep in other places.  The only way I found to be able to create a fresh mock here is to create using context manager.","commit_id":"663c324f999875fd23dff2d27925e8a981efbaf4"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"aff56ec817a07536fd2379df09a81394be421b65","unresolved":false,"context_lines":[{"line_number":251,"context_line":"        self.dbapi.create_node(node)"},{"line_number":252,"context_line":"        mgr_utils.mock_the_extension_manager(driver\u003d\"pxe_ssh\")"},{"line_number":253,"context_line":"        with task_manager.acquire(self.context, node[\u0027uuid\u0027]) as task:"},{"line_number":254,"context_line":"            with mock.patch(\u0027time.sleep\u0027) as mock_sleep:"},{"line_number":255,"context_line":"                neutron.wait_for_neutron_update(task)"},{"line_number":256,"context_line":"                mock_sleep.assert_called_once_with(15)"},{"line_number":257,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_cc9dc40c","line":254,"in_reply_to":"1ae5cdf2_d733e411","updated":"2014-06-16 13:50:49.000000000","message":"right, ok no problem","commit_id":"663c324f999875fd23dff2d27925e8a981efbaf4"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"4671b063c1a171a0dd947d97f46cc47c2f0cca31","unresolved":false,"context_lines":[{"line_number":257,"context_line":""},{"line_number":258,"context_line":"    def test_wait_for_neutron_update_no_sleep(self):"},{"line_number":259,"context_line":"        with task_manager.acquire(self.context, self.node.uuid) as task:"},{"line_number":260,"context_line":"            with mock.patch(\u0027time.sleep\u0027) as mock_sleep:"},{"line_number":261,"context_line":"                neutron.wait_for_neutron_update(task)"},{"line_number":262,"context_line":"                self.assertFalse(mock_sleep.called)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_64a7d2a7","line":260,"updated":"2014-06-12 08:34:19.000000000","message":"ditto","commit_id":"663c324f999875fd23dff2d27925e8a981efbaf4"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"f80c595519a0821f3467efab8d4b42f2ea574232","unresolved":false,"context_lines":[{"line_number":259,"context_line":"            \u0027driver\u0027: \u0027fake_ssh\u0027"},{"line_number":260,"context_line":"        }"},{"line_number":261,"context_line":"        node \u003d db_utils.get_test_node(**kw)"},{"line_number":262,"context_line":"        self.dbapi.create_node(node)"},{"line_number":263,"context_line":"        mgr_utils.mock_the_extension_manager(driver\u003d\"fake_ssh\")"},{"line_number":264,"context_line":"        with task_manager.acquire(self.context, node[\u0027uuid\u0027]) as task:"},{"line_number":265,"context_line":"            with mock.patch(\u0027time.sleep\u0027) as mock_sleep:"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_ff6e37c7","line":262,"updated":"2014-06-25 23:55:21.000000000","message":"It seems like there are several ways to create a \u0027node\u0027. In setup() above, it is self.node \u003d object_utils.create_test_node(self.context). I don\u0027t know what the exact diffs are, but maybe we should be consistent and do node \u003d object_utils.create_test_node(self.context, kw)?","commit_id":"a8dc4961a6e6992ecf1604e21ef68404fab9697d"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"aad763476ef1fb4d0b1ea9ea2b37674ed4834d54","unresolved":false,"context_lines":[{"line_number":259,"context_line":"            \u0027driver\u0027: \u0027fake_ssh\u0027"},{"line_number":260,"context_line":"        }"},{"line_number":261,"context_line":"        node \u003d db_utils.get_test_node(**kw)"},{"line_number":262,"context_line":"        self.dbapi.create_node(node)"},{"line_number":263,"context_line":"        mgr_utils.mock_the_extension_manager(driver\u003d\"fake_ssh\")"},{"line_number":264,"context_line":"        with task_manager.acquire(self.context, node[\u0027uuid\u0027]) as task:"},{"line_number":265,"context_line":"            with mock.patch(\u0027time.sleep\u0027) as mock_sleep:"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_d916eea6","line":262,"in_reply_to":"1ae5cdf2_ff6e37c7","updated":"2014-06-26 08:25:45.000000000","message":"+1 def we should use the object_utils.create_test_node(), this was introduced and fixed by https://review.openstack.org/#/c/84823/ to remove direct calls to the dbapi","commit_id":"a8dc4961a6e6992ecf1604e21ef68404fab9697d"},{"author":{"_account_id":1420,"name":"Adam Gandelman","email":"adamg@ubuntu.com","username":"gandelman-a"},"change_message_id":"4910a11b0e059fb8f520b578ff9a8d9e58a13354","unresolved":false,"context_lines":[{"line_number":259,"context_line":"            \u0027driver\u0027: \u0027fake_ssh\u0027"},{"line_number":260,"context_line":"        }"},{"line_number":261,"context_line":"        node \u003d db_utils.get_test_node(**kw)"},{"line_number":262,"context_line":"        self.dbapi.create_node(node)"},{"line_number":263,"context_line":"        mgr_utils.mock_the_extension_manager(driver\u003d\"fake_ssh\")"},{"line_number":264,"context_line":"        with task_manager.acquire(self.context, node[\u0027uuid\u0027]) as task:"},{"line_number":265,"context_line":"            with mock.patch(\u0027time.sleep\u0027) as mock_sleep:"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_51cc5b34","line":262,"in_reply_to":"1ae5cdf2_ff6e37c7","updated":"2014-06-26 21:25:17.000000000","message":"Done","commit_id":"a8dc4961a6e6992ecf1604e21ef68404fab9697d"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"f80c595519a0821f3467efab8d4b42f2ea574232","unresolved":false,"context_lines":[{"line_number":261,"context_line":"        node \u003d db_utils.get_test_node(**kw)"},{"line_number":262,"context_line":"        self.dbapi.create_node(node)"},{"line_number":263,"context_line":"        mgr_utils.mock_the_extension_manager(driver\u003d\"fake_ssh\")"},{"line_number":264,"context_line":"        with task_manager.acquire(self.context, node[\u0027uuid\u0027]) as task:"},{"line_number":265,"context_line":"            with mock.patch(\u0027time.sleep\u0027) as mock_sleep:"},{"line_number":266,"context_line":"                neutron._wait_for_neutron_update(task)"},{"line_number":267,"context_line":"                mock_sleep.assert_called_once_with(15)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_ffa55703","line":264,"updated":"2014-06-25 23:55:21.000000000","message":"It would be more consistent with the rest of this file, if you used node.uuid instead of node[\u0027uuid\u0027].","commit_id":"a8dc4961a6e6992ecf1604e21ef68404fab9697d"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"aad763476ef1fb4d0b1ea9ea2b37674ed4834d54","unresolved":false,"context_lines":[{"line_number":261,"context_line":"        node \u003d db_utils.get_test_node(**kw)"},{"line_number":262,"context_line":"        self.dbapi.create_node(node)"},{"line_number":263,"context_line":"        mgr_utils.mock_the_extension_manager(driver\u003d\"fake_ssh\")"},{"line_number":264,"context_line":"        with task_manager.acquire(self.context, node[\u0027uuid\u0027]) as task:"},{"line_number":265,"context_line":"            with mock.patch(\u0027time.sleep\u0027) as mock_sleep:"},{"line_number":266,"context_line":"                neutron._wait_for_neutron_update(task)"},{"line_number":267,"context_line":"                mock_sleep.assert_called_once_with(15)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_b97842f9","line":264,"in_reply_to":"1ae5cdf2_ffa55703","updated":"2014-06-26 08:25:45.000000000","message":"+1","commit_id":"a8dc4961a6e6992ecf1604e21ef68404fab9697d"},{"author":{"_account_id":1420,"name":"Adam Gandelman","email":"adamg@ubuntu.com","username":"gandelman-a"},"change_message_id":"4910a11b0e059fb8f520b578ff9a8d9e58a13354","unresolved":false,"context_lines":[{"line_number":261,"context_line":"        node \u003d db_utils.get_test_node(**kw)"},{"line_number":262,"context_line":"        self.dbapi.create_node(node)"},{"line_number":263,"context_line":"        mgr_utils.mock_the_extension_manager(driver\u003d\"fake_ssh\")"},{"line_number":264,"context_line":"        with task_manager.acquire(self.context, node[\u0027uuid\u0027]) as task:"},{"line_number":265,"context_line":"            with mock.patch(\u0027time.sleep\u0027) as mock_sleep:"},{"line_number":266,"context_line":"                neutron._wait_for_neutron_update(task)"},{"line_number":267,"context_line":"                mock_sleep.assert_called_once_with(15)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_d1df8bd5","line":264,"in_reply_to":"1ae5cdf2_ffa55703","updated":"2014-06-26 21:25:17.000000000","message":"Done","commit_id":"a8dc4961a6e6992ecf1604e21ef68404fab9697d"},{"author":{"_account_id":8125,"name":"Michael Davies","email":"michael@the-davies.net","username":"mrda"},"change_message_id":"cade262419e2cf432ef4e15a068085f899fffb91","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2014 OpenStack Foundation"},{"line_number":4,"context_line":"# All Rights Reserved"},{"line_number":5,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":8,"id":"1ae5cdf2_7d09262a","line":2,"updated":"2014-06-27 02:16:11.000000000","message":"why the added blank line?","commit_id":"6588b1f4ea1fd3a6baeb4142f669c7c213b3c9f6"}],"ironic/tests/test_tftp.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d80a832eb8ce3e6b959dc03bb5147edcba0bcf9e","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        node \u003d self._create_test_node(**kw)"},{"line_number":132,"context_line":"        mgr_utils.mock_the_extension_manager(driver\u003d\"pxe_ssh\")"},{"line_number":133,"context_line":"        with task_manager.acquire(self.context, node.uuid) as task:"},{"line_number":134,"context_line":"            with mock.patch(\u0027time.sleep\u0027) as mock_sleep:"},{"line_number":135,"context_line":"                tftp.wait_for_neutron_update(task)"},{"line_number":136,"context_line":"                mock_sleep.assert_called_once_with(15)"},{"line_number":137,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9ad9bd40_2f813afb","line":134,"updated":"2014-05-06 14:15:10.000000000","message":"this mock.patch should better be a decorator to reduce indentation","commit_id":"e62c85e0daa126523c0af528e9aa6e248a95f4fb"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d80a832eb8ce3e6b959dc03bb5147edcba0bcf9e","unresolved":false,"context_lines":[{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    def test_wait_for_neutron_update_no_sleep(self):"},{"line_number":139,"context_line":"        with task_manager.acquire(self.context, self.node.uuid) as task:"},{"line_number":140,"context_line":"            with mock.patch(\u0027time.sleep\u0027) as mock_sleep:"},{"line_number":141,"context_line":"                tftp.wait_for_neutron_update(task)"},{"line_number":142,"context_line":"                self.assertFalse(mock_sleep.called)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9ad9bd40_4f867e14","line":140,"updated":"2014-05-06 14:15:10.000000000","message":"ditto","commit_id":"e62c85e0daa126523c0af528e9aa6e248a95f4fb"}]}
