)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"988572a8985bf321f2f13f950af915b0f89ea7f9","unresolved":false,"context_lines":[{"line_number":7,"context_line":"[WIP] Test ML2 Fail-Fast feature"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Test case:"},{"line_number":10,"context_line":"  * Spoil llc data before provision and check fast failure"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Closes-Bug: #1625626"},{"line_number":13,"context_line":"Change-Id: I4173f7c9bda476fbe56003551168171e09087a35"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"7a8ec9b2_41545b53","line":10,"range":{"start_line":10,"start_character":26,"end_line":10,"end_character":35},"updated":"2016-09-20 17:57:41.000000000","message":"cleaning","commit_id":"bcd50c6f65813947a1db1416839a6a8cc0c51a98"}],"ironic_tempest_plugin/tests/scenario/baremetal_manager.py":[{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"aee0d69d6405dd15772fa8fdad0915518e1fa45e","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    DELETING \u003d \u0027deleting\u0027"},{"line_number":50,"context_line":"    DELETED \u003d \u0027deleted\u0027"},{"line_number":51,"context_line":"    ERROR \u003d \u0027error\u0027"},{"line_number":52,"context_line":"    MANAGE \u003d \u0027manage\u0027"},{"line_number":53,"context_line":"    PROVIDE \u003d \u0027provide\u0027"},{"line_number":54,"context_line":"    CLEANING \u003d \u0027cleaning\u0027"},{"line_number":55,"context_line":"    CLEANFAILED \u003d \u0027clean failed\u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a8bc5a2_c9b3ad4b","line":52,"updated":"2016-09-27 10:32:22.000000000","message":"It seems these define symbolic names for node states as returned by API [0] instead of \u0027verbs\u0027 used in API\n\n\u0027manage\u0027 is wrong, \u0027manageble\u0027 is the correct one\n\n[0] http://docs.openstack.org/developer/ironic/_images/states.svg\n\nIf you want to use symbolic names for \u0027verbs\u0027 of target provisioning states, I\u0027d say you need to create a knew structure similar to this one.","commit_id":"7b5380d172c6960d42409b2732a0a64f4bb9ce49"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"f89eaf86def5a4b6a68b8a72d77ada245fa3d9c0","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    DELETING \u003d \u0027deleting\u0027"},{"line_number":50,"context_line":"    DELETED \u003d \u0027deleted\u0027"},{"line_number":51,"context_line":"    ERROR \u003d \u0027error\u0027"},{"line_number":52,"context_line":"    MANAGE \u003d \u0027manage\u0027"},{"line_number":53,"context_line":"    PROVIDE \u003d \u0027provide\u0027"},{"line_number":54,"context_line":"    CLEANING \u003d \u0027cleaning\u0027"},{"line_number":55,"context_line":"    CLEANFAILED \u003d \u0027clean failed\u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a8bc5a2_e804da15","line":52,"in_reply_to":"5a8bc5a2_c9b3ad4b","updated":"2016-09-27 13:56:38.000000000","message":"Done","commit_id":"7b5380d172c6960d42409b2732a0a64f4bb9ce49"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"aee0d69d6405dd15772fa8fdad0915518e1fa45e","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    DELETED \u003d \u0027deleted\u0027"},{"line_number":51,"context_line":"    ERROR \u003d \u0027error\u0027"},{"line_number":52,"context_line":"    MANAGE \u003d \u0027manage\u0027"},{"line_number":53,"context_line":"    PROVIDE \u003d \u0027provide\u0027"},{"line_number":54,"context_line":"    CLEANING \u003d \u0027cleaning\u0027"},{"line_number":55,"context_line":"    CLEANFAILED \u003d \u0027clean failed\u0027"},{"line_number":56,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"5a8bc5a2_694e193c","line":53,"updated":"2016-09-27 10:32:22.000000000","message":"there\u0027s no such state. \u0027available\u0027 is the correct one (see the link above).","commit_id":"7b5380d172c6960d42409b2732a0a64f4bb9ce49"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"f89eaf86def5a4b6a68b8a72d77ada245fa3d9c0","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    DELETED \u003d \u0027deleted\u0027"},{"line_number":51,"context_line":"    ERROR \u003d \u0027error\u0027"},{"line_number":52,"context_line":"    MANAGE \u003d \u0027manage\u0027"},{"line_number":53,"context_line":"    PROVIDE \u003d \u0027provide\u0027"},{"line_number":54,"context_line":"    CLEANING \u003d \u0027cleaning\u0027"},{"line_number":55,"context_line":"    CLEANFAILED \u003d \u0027clean failed\u0027"},{"line_number":56,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"5a8bc5a2_08082627","line":53,"in_reply_to":"5a8bc5a2_694e193c","updated":"2016-09-27 13:56:38.000000000","message":"Done","commit_id":"7b5380d172c6960d42409b2732a0a64f4bb9ce49"}],"ironic_tempest_plugin/tests/scenario/test_baremetal_multitenancy.py":[{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"2111b189ed8e3e70b29872f3d7ef6c266bba7419","unresolved":false,"context_lines":[{"line_number":158,"context_line":"        * Create a keypair, network, subnet and router for the primary tenant"},{"line_number":159,"context_line":"        * Save port local-link-connection field to temporary variable"},{"line_number":160,"context_line":"        * Fill port local-link-connection with wrong data"},{"line_number":161,"context_line":"        * Try to boot 1 instance"},{"line_number":162,"context_line":"        * Check failure timeout"},{"line_number":163,"context_line":"        * Restore port local-link-connection field from temporary variable"},{"line_number":164,"context_line":"        * Delete instance"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a8ec9b2_3d188484","line":161,"range":{"start_line":161,"start_character":22,"end_line":161,"end_character":32},"updated":"2016-09-14 11:59:01.000000000","message":"\"the instance associated with the port changed in the previous step\"\n\nand herewith lies the challenge - you can not predict which node your nova server create request ends up on, unless you filter others out through flavor extra-specs/capabilities or maintenance\n\nThus IMO it would be better to flip the node with wrongly set port through manage/provide and thus start cleaning. The logic should there should hit the required functionality as well during creation of cleaning ports","commit_id":"40f911eea0c09fc2a1693097f6110c03d0599362"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"b2dda0616f308cd16493fdd8704a83fa324680c4","unresolved":false,"context_lines":[{"line_number":208,"context_line":"            self.manager, tenant_cidr)"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        # 2. Save port local-link-connection field to temporary list"},{"line_number":211,"context_line":"        _, ports \u003d self.baremetal_client.list_ports()"},{"line_number":212,"context_line":"        temp_llc_list \u003d self.save_llc(ports)"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"        # 3. Fill port local-link-connection with wrong data"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8ec9b2_d58e0ccf","line":211,"updated":"2016-09-16 14:43:36.000000000","message":"please don\u0027t shadow _","commit_id":"449590325003407ee8a96ecdb7b440cd55bb9682"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"b2dda0616f308cd16493fdd8704a83fa324680c4","unresolved":false,"context_lines":[{"line_number":212,"context_line":"        temp_llc_list \u003d self.save_llc(ports)"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"        # 3. Fill port local-link-connection with wrong data"},{"line_number":215,"context_line":"        for port in ports:"},{"line_number":216,"context_line":"            self.update_port_llc(port[\u0027uuid\u0027], negative_test_data\u003dtest)"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"        # 4. Try to boot 1 instance associated with the port changed"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8ec9b2_e7835b54","line":215,"updated":"2016-09-16 14:43:36.000000000","message":"this basically will preclude concurrent test runs - you fill _all_ ports with wrong data, so any other test running in parallel trying to boot an Ironic node will fail","commit_id":"449590325003407ee8a96ecdb7b440cd55bb9682"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"b2dda0616f308cd16493fdd8704a83fa324680c4","unresolved":false,"context_lines":[{"line_number":250,"context_line":"        1. Create a keypair, network, subnet and router for the primary tenant"},{"line_number":251,"context_line":"        2. Save ports local-link-connection field to temporary variable"},{"line_number":252,"context_line":"        3. Try to boot 1 instance"},{"line_number":253,"context_line":"        4. Wait until ironic node reaches \"deploying\" status"},{"line_number":254,"context_line":"        5. Fill ports local-link-connection with wrong data"},{"line_number":255,"context_line":"        6. Check failure timeout"},{"line_number":256,"context_line":"        7. Restore port local-link-connection field from temporary variable"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8ec9b2_8739b7d9","line":253,"updated":"2016-09-16 14:43:36.000000000","message":"veeery racy. ports are created quite early during provisioning, even before deploy images are downloaded/cached on conductor. I  doubt such test will be stable enough","commit_id":"449590325003407ee8a96ecdb7b440cd55bb9682"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"b2dda0616f308cd16493fdd8704a83fa324680c4","unresolved":false,"context_lines":[{"line_number":267,"context_line":"            self.manager, tenant_cidr)"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"        # 2. Save port local-link-connection field to temporary list"},{"line_number":270,"context_line":"        _, ports \u003d self.baremetal_client.list_ports()"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"        temp_llc_list \u003d self.save_llc(ports)"},{"line_number":273,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8ec9b2_b5a8a021","line":270,"updated":"2016-09-16 14:43:36.000000000","message":"ditto","commit_id":"449590325003407ee8a96ecdb7b440cd55bb9682"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"36db2b79cb990e46fb0518616dd3c4fb28bf8690","unresolved":false,"context_lines":[{"line_number":159,"context_line":"                    node[\u0027instance_uuid\u0027] is None or \u0027\u0027):"},{"line_number":160,"context_line":"                return node"},{"line_number":161,"context_line":"            else:"},{"line_number":162,"context_line":"                return nodes[0]"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    def restore_port_llc_data(self, node, port, patch, status):"},{"line_number":165,"context_line":"        resp, body \u003d self.baremetal_client.update_port(port[\u0027uuid\u0027], patch)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a8ec9b2_9d48b889","line":162,"updated":"2016-09-20 06:31:25.000000000","message":"why are your returning _any_ node here? it might be unavailable.\n\nthis method should be called in cycle until a free node is found","commit_id":"58764725c10be157c357a948036168ade72621d4"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"cc0d4fd591fde0142db25a1289b72eb514393d21","unresolved":false,"context_lines":[{"line_number":159,"context_line":"                    node[\u0027instance_uuid\u0027] is None or \u0027\u0027):"},{"line_number":160,"context_line":"                return node"},{"line_number":161,"context_line":"            else:"},{"line_number":162,"context_line":"                return nodes[0]"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    def restore_port_llc_data(self, node, port, patch, status):"},{"line_number":165,"context_line":"        resp, body \u003d self.baremetal_client.update_port(port[\u0027uuid\u0027], patch)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a8ec9b2_6bb0698c","line":162,"in_reply_to":"7a8ec9b2_9d48b889","updated":"2016-09-20 13:37:36.000000000","message":"How long should we wait for appearance of node if there is no spare node on first iteration?","commit_id":"58764725c10be157c357a948036168ade72621d4"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"36db2b79cb990e46fb0518616dd3c4fb28bf8690","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        8. Add cleanup to restore LLC."},{"line_number":182,"context_line":"        9. Set provision state to \u0027provide\u0027."},{"line_number":183,"context_line":"        10. Wait for \u0027clean failed\u0027 provision state."},{"line_number":184,"context_line":"        11. Restore good LLC data back."},{"line_number":185,"context_line":"        \"\"\""},{"line_number":186,"context_line":"        target_status \u003d baremetal_manager.BaremetalProvisionStates.CLEANFAILED"},{"line_number":187,"context_line":"        fail_fast_timeout \u003d 30"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a8ec9b2_fdfb7c45","line":184,"updated":"2016-09-20 06:31:25.000000000","message":".. and clean the node again so that it is available to other tests.","commit_id":"58764725c10be157c357a948036168ade72621d4"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"cc0d4fd591fde0142db25a1289b72eb514393d21","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        8. Add cleanup to restore LLC."},{"line_number":182,"context_line":"        9. Set provision state to \u0027provide\u0027."},{"line_number":183,"context_line":"        10. Wait for \u0027clean failed\u0027 provision state."},{"line_number":184,"context_line":"        11. Restore good LLC data back."},{"line_number":185,"context_line":"        \"\"\""},{"line_number":186,"context_line":"        target_status \u003d baremetal_manager.BaremetalProvisionStates.CLEANFAILED"},{"line_number":187,"context_line":"        fail_fast_timeout \u003d 30"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a8ec9b2_84177853","line":184,"in_reply_to":"7a8ec9b2_fdfb7c45","updated":"2016-09-20 13:37:36.000000000","message":"Passing CLEANING provision state via addCleanup with restore_node_port() method.","commit_id":"58764725c10be157c357a948036168ade72621d4"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"36db2b79cb990e46fb0518616dd3c4fb28bf8690","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        11. Restore good LLC data back."},{"line_number":185,"context_line":"        \"\"\""},{"line_number":186,"context_line":"        target_status \u003d baremetal_manager.BaremetalProvisionStates.CLEANFAILED"},{"line_number":187,"context_line":"        fail_fast_timeout \u003d 30"},{"line_number":188,"context_line":"        tenant_cidr \u003d \u002710.0.100.0/24\u0027"},{"line_number":189,"context_line":"        self.create_keypair()"},{"line_number":190,"context_line":"        self.create_tenant_network(self.manager, tenant_cidr)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a8ec9b2_3d9404e7","line":187,"updated":"2016-09-20 06:31:25.000000000","message":"ideally that should be configurable in tempest as it is configurable in ironic.conf","commit_id":"58764725c10be157c357a948036168ade72621d4"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"cc0d4fd591fde0142db25a1289b72eb514393d21","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        11. Restore good LLC data back."},{"line_number":185,"context_line":"        \"\"\""},{"line_number":186,"context_line":"        target_status \u003d baremetal_manager.BaremetalProvisionStates.CLEANFAILED"},{"line_number":187,"context_line":"        fail_fast_timeout \u003d 30"},{"line_number":188,"context_line":"        tenant_cidr \u003d \u002710.0.100.0/24\u0027"},{"line_number":189,"context_line":"        self.create_keypair()"},{"line_number":190,"context_line":"        self.create_tenant_network(self.manager, tenant_cidr)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a8ec9b2_6b72297e","line":187,"in_reply_to":"7a8ec9b2_3d9404e7","updated":"2016-09-20 13:37:36.000000000","message":"Is it right place for it? ironic/ironic_tempest_plugin/config.py","commit_id":"58764725c10be157c357a948036168ade72621d4"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"36db2b79cb990e46fb0518616dd3c4fb28bf8690","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        \"\"\""},{"line_number":186,"context_line":"        target_status \u003d baremetal_manager.BaremetalProvisionStates.CLEANFAILED"},{"line_number":187,"context_line":"        fail_fast_timeout \u003d 30"},{"line_number":188,"context_line":"        tenant_cidr \u003d \u002710.0.100.0/24\u0027"},{"line_number":189,"context_line":"        self.create_keypair()"},{"line_number":190,"context_line":"        self.create_tenant_network(self.manager, tenant_cidr)"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"        # 1. Get available node from list or just first node"},{"line_number":193,"context_line":"        # And get port of the available_node"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a8ec9b2_7d6ccc08","line":190,"range":{"start_line":188,"start_character":8,"end_line":190,"end_character":61},"updated":"2016-09-20 06:31:25.000000000","message":"why creating all this stuff? we do not use tenant networking in this test","commit_id":"58764725c10be157c357a948036168ade72621d4"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"cc0d4fd591fde0142db25a1289b72eb514393d21","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        \"\"\""},{"line_number":186,"context_line":"        target_status \u003d baremetal_manager.BaremetalProvisionStates.CLEANFAILED"},{"line_number":187,"context_line":"        fail_fast_timeout \u003d 30"},{"line_number":188,"context_line":"        tenant_cidr \u003d \u002710.0.100.0/24\u0027"},{"line_number":189,"context_line":"        self.create_keypair()"},{"line_number":190,"context_line":"        self.create_tenant_network(self.manager, tenant_cidr)"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"        # 1. Get available node from list or just first node"},{"line_number":193,"context_line":"        # And get port of the available_node"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a8ec9b2_19ce7583","line":190,"range":{"start_line":188,"start_character":8,"end_line":190,"end_character":61},"in_reply_to":"7a8ec9b2_7d6ccc08","updated":"2016-09-20 13:37:36.000000000","message":"Thanks.","commit_id":"58764725c10be157c357a948036168ade72621d4"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"36db2b79cb990e46fb0518616dd3c4fb28bf8690","unresolved":false,"context_lines":[{"line_number":205,"context_line":"        # 4. Set provision state to \u0027manage\u0027."},{"line_number":206,"context_line":"        resp, body \u003d self.baremetal_client.set_node_provision_state("},{"line_number":207,"context_line":"            node[\u0027uuid\u0027], baremetal_manager.BaremetalProvisionStates.MANAGE)"},{"line_number":208,"context_line":"        print resp"},{"line_number":209,"context_line":"        print body"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"        # 5. Set maintenance \u0027off\u0027."}],"source_content_type":"text/x-python","patch_set":7,"id":"7a8ec9b2_d80fae2c","line":208,"updated":"2016-09-20 06:31:25.000000000","message":"Are those prints just for your debugging? In proper testr run they would be eaten by testr anyway.","commit_id":"58764725c10be157c357a948036168ade72621d4"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"cc0d4fd591fde0142db25a1289b72eb514393d21","unresolved":false,"context_lines":[{"line_number":205,"context_line":"        # 4. Set provision state to \u0027manage\u0027."},{"line_number":206,"context_line":"        resp, body \u003d self.baremetal_client.set_node_provision_state("},{"line_number":207,"context_line":"            node[\u0027uuid\u0027], baremetal_manager.BaremetalProvisionStates.MANAGE)"},{"line_number":208,"context_line":"        print resp"},{"line_number":209,"context_line":"        print body"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"        # 5. Set maintenance \u0027off\u0027."}],"source_content_type":"text/x-python","patch_set":7,"id":"7a8ec9b2_99b9a5ef","line":208,"in_reply_to":"7a8ec9b2_d80fae2c","updated":"2016-09-20 13:37:36.000000000","message":"Yes, just for debugging.","commit_id":"58764725c10be157c357a948036168ade72621d4"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"36db2b79cb990e46fb0518616dd3c4fb28bf8690","unresolved":false,"context_lines":[{"line_number":222,"context_line":""},{"line_number":223,"context_line":"        patch \u003d [{\u0027path\u0027: \u0027/local_link_connection\u0027,"},{"line_number":224,"context_line":"                  \u0027op\u0027: \u0027replace\u0027,"},{"line_number":225,"context_line":"                  \u0027value\u0027: \u0027negative_test-value\u0027}]"},{"line_number":226,"context_line":"        resp, body \u003d self.baremetal_client.update_port(port[\u0027uuid\u0027], patch)"},{"line_number":227,"context_line":"        print resp"},{"line_number":228,"context_line":"        print body"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a8ec9b2_1d03c810","line":225,"updated":"2016-09-20 06:31:25.000000000","message":"I would rather append some wrong data to switch_id","commit_id":"58764725c10be157c357a948036168ade72621d4"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"36db2b79cb990e46fb0518616dd3c4fb28bf8690","unresolved":false,"context_lines":[{"line_number":241,"context_line":"        self.wait_provisioning_state(node[\u0027uuid\u0027], target_status,"},{"line_number":242,"context_line":"                                     timeout\u003dfail_fast_timeout * 2,"},{"line_number":243,"context_line":"                                     interval\u003d10)"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"        # 11. Restore good LLC data back."},{"line_number":246,"context_line":"        self.restore_port_llc_data(node, port, good_llc_data, target_status)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a8ec9b2_b8402237","line":244,"updated":"2016-09-20 06:31:25.000000000","message":"Now here should come the explicit main assertion of this test - that time to fail is (considerably) shorter that global cleaning timeout.\n\nfor that probably both neutron timeout and global cleaning timeout should be entries in tempest\u0027s CONF","commit_id":"58764725c10be157c357a948036168ade72621d4"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"3a7e44d1ad39e74e83daa4ea58ca7433488b503c","unresolved":false,"context_lines":[{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    def _restore_node_port(self, node, port, patch, status):"},{"line_number":170,"context_line":"        \"\"\"Restore node provision state and port data.\"\"\""},{"line_number":171,"context_line":"        self.baremetal_client.update_port(port[\u0027uuid\u0027], patch)"},{"line_number":172,"context_line":"        self.baremetal_client.set_node_provision_state("},{"line_number":173,"context_line":"            node[\u0027uuid\u0027], status)"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    @test.idempotent_id(\u0027c9fd923c-2e9e-4dd2-848b-7117ab1007ae\u0027)"},{"line_number":176,"context_line":"    @test.services(\u0027baremetal\u0027, \u0027compute\u0027, \u0027image\u0027, \u0027network\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a8ec9b2_4413895c","line":173,"range":{"start_line":171,"start_character":1,"end_line":173,"end_character":33},"updated":"2016-09-20 18:02:45.000000000","message":"see my comment below","commit_id":"bcd50c6f65813947a1db1416839a6a8cc0c51a98"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"5145b2625bc1d037ae6eba5f95f2aefb0b429488","unresolved":false,"context_lines":[{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    def _restore_node_port(self, node, port, patch, status):"},{"line_number":170,"context_line":"        \"\"\"Restore node provision state and port data.\"\"\""},{"line_number":171,"context_line":"        self.baremetal_client.update_port(port[\u0027uuid\u0027], patch)"},{"line_number":172,"context_line":"        self.baremetal_client.set_node_provision_state("},{"line_number":173,"context_line":"            node[\u0027uuid\u0027], status)"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    @test.idempotent_id(\u0027c9fd923c-2e9e-4dd2-848b-7117ab1007ae\u0027)"},{"line_number":176,"context_line":"    @test.services(\u0027baremetal\u0027, \u0027compute\u0027, \u0027image\u0027, \u0027network\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a8ec9b2_4b38bfa0","line":173,"range":{"start_line":171,"start_character":1,"end_line":173,"end_character":33},"in_reply_to":"7a8ec9b2_4413895c","updated":"2016-09-21 16:31:40.000000000","message":"Done","commit_id":"bcd50c6f65813947a1db1416839a6a8cc0c51a98"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"3a7e44d1ad39e74e83daa4ea58ca7433488b503c","unresolved":false,"context_lines":[{"line_number":226,"context_line":"        # 8. Add cleanup"},{"line_number":227,"context_line":"        self.addCleanup(self._restore_node_port, node, port,"},{"line_number":228,"context_line":"                        good_llc_data,"},{"line_number":229,"context_line":"                        baremetal_manager.BaremetalProvisionStates.CLEANING)"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        # 9. Set provision state to \u0027provide\u0027."},{"line_number":232,"context_line":"        start_time \u003d int(time.time())"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a8ec9b2_e401f505","line":229,"range":{"start_line":229,"start_character":67,"end_line":229,"end_character":75},"updated":"2016-09-20 18:02:45.000000000","message":"see below","commit_id":"bcd50c6f65813947a1db1416839a6a8cc0c51a98"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"5145b2625bc1d037ae6eba5f95f2aefb0b429488","unresolved":false,"context_lines":[{"line_number":226,"context_line":"        # 8. Add cleanup"},{"line_number":227,"context_line":"        self.addCleanup(self._restore_node_port, node, port,"},{"line_number":228,"context_line":"                        good_llc_data,"},{"line_number":229,"context_line":"                        baremetal_manager.BaremetalProvisionStates.CLEANING)"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        # 9. Set provision state to \u0027provide\u0027."},{"line_number":232,"context_line":"        start_time \u003d int(time.time())"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a8ec9b2_6b3d7b8e","line":229,"range":{"start_line":229,"start_character":67,"end_line":229,"end_character":75},"in_reply_to":"7a8ec9b2_e401f505","updated":"2016-09-21 16:31:40.000000000","message":"Done","commit_id":"bcd50c6f65813947a1db1416839a6a8cc0c51a98"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"3a7e44d1ad39e74e83daa4ea58ca7433488b503c","unresolved":false,"context_lines":[{"line_number":246,"context_line":"        # 11. Restore good LLC data back."},{"line_number":247,"context_line":"        self._restore_node_port("},{"line_number":248,"context_line":"            node, port, good_llc_data,"},{"line_number":249,"context_line":"            baremetal_manager.BaremetalProvisionStates.CLEANING)"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a8ec9b2_612077b1","line":249,"range":{"start_line":249,"start_character":55,"end_line":249,"end_character":63},"updated":"2016-09-20 18:02:45.000000000","message":"CLEANING is a transient state, you can not request a transition to it from state machine. IMO you\u0027d want again a flip of manage/maintenance off/provide after restoring LLC data.\n\nhttp://docs.openstack.org/developer/ironic/_images/states.svg","commit_id":"bcd50c6f65813947a1db1416839a6a8cc0c51a98"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"5145b2625bc1d037ae6eba5f95f2aefb0b429488","unresolved":false,"context_lines":[{"line_number":246,"context_line":"        # 11. Restore good LLC data back."},{"line_number":247,"context_line":"        self._restore_node_port("},{"line_number":248,"context_line":"            node, port, good_llc_data,"},{"line_number":249,"context_line":"            baremetal_manager.BaremetalProvisionStates.CLEANING)"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a8ec9b2_ab430312","line":249,"range":{"start_line":249,"start_character":55,"end_line":249,"end_character":63},"in_reply_to":"7a8ec9b2_612077b1","updated":"2016-09-21 16:31:40.000000000","message":"Done","commit_id":"bcd50c6f65813947a1db1416839a6a8cc0c51a98"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"aee0d69d6405dd15772fa8fdad0915518e1fa45e","unresolved":false,"context_lines":[{"line_number":193,"context_line":""},{"line_number":194,"context_line":"        self.baremetal_client.update_node(node[\u0027uuid\u0027], maintenance\u003dFalse)"},{"line_number":195,"context_line":"        self.baremetal_client.set_node_provision_state("},{"line_number":196,"context_line":"            node[\u0027uuid\u0027], baremetal_manager.BaremetalProvisionStates.PROVIDE)"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    @test.idempotent_id(\u0027c9fd923c-2e9e-4dd2-848b-7117ab1007ae\u0027)"},{"line_number":199,"context_line":"    @test.services(\u0027baremetal\u0027, \u0027compute\u0027, \u0027image\u0027, \u0027network\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a8bc5a2_98700d74","line":196,"updated":"2016-09-27 10:32:22.000000000","message":"in all the methods changing provision state I\u0027d add a check (with timeout) that node actually reaches the corresponding state.","commit_id":"7b5380d172c6960d42409b2732a0a64f4bb9ce49"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"ff2d840bf5bf03b9c1775809e2ea679aee97e51c","unresolved":false,"context_lines":[{"line_number":193,"context_line":""},{"line_number":194,"context_line":"        self.baremetal_client.update_node(node[\u0027uuid\u0027], maintenance\u003dFalse)"},{"line_number":195,"context_line":"        self.baremetal_client.set_node_provision_state("},{"line_number":196,"context_line":"            node[\u0027uuid\u0027], baremetal_manager.BaremetalProvisionStates.PROVIDE)"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    @test.idempotent_id(\u0027c9fd923c-2e9e-4dd2-848b-7117ab1007ae\u0027)"},{"line_number":199,"context_line":"    @test.services(\u0027baremetal\u0027, \u0027compute\u0027, \u0027image\u0027, \u0027network\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a8bc5a2_1a0ea78b","line":196,"in_reply_to":"5a8bc5a2_98700d74","updated":"2016-09-27 13:57:17.000000000","message":"Done","commit_id":"7b5380d172c6960d42409b2732a0a64f4bb9ce49"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"aee0d69d6405dd15772fa8fdad0915518e1fa45e","unresolved":false,"context_lines":[{"line_number":222,"context_line":"        port \u003d self.get_ports(node[\u0027uuid\u0027])[0]"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"        # 2. Set maintenance \u0027on\u0027."},{"line_number":225,"context_line":"        self.baremetal_client.update_node(node[\u0027uuid\u0027], maintenance\u003dTrue)"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"        # 3. Wait and recheck node maintenance status."},{"line_number":228,"context_line":"        self._node_state_timeout(node[\u0027uuid\u0027], \u0027maintenance\u0027, True, 10, 1)"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a8bc5a2_5db83775","line":225,"updated":"2016-09-27 10:32:22.000000000","message":"I\u0027d move this immediately after getting the available node to minimize possible races due to parallel tests, or even into the _find_free_node method itself","commit_id":"7b5380d172c6960d42409b2732a0a64f4bb9ce49"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"f89eaf86def5a4b6a68b8a72d77ada245fa3d9c0","unresolved":false,"context_lines":[{"line_number":222,"context_line":"        port \u003d self.get_ports(node[\u0027uuid\u0027])[0]"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"        # 2. Set maintenance \u0027on\u0027."},{"line_number":225,"context_line":"        self.baremetal_client.update_node(node[\u0027uuid\u0027], maintenance\u003dTrue)"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"        # 3. Wait and recheck node maintenance status."},{"line_number":228,"context_line":"        self._node_state_timeout(node[\u0027uuid\u0027], \u0027maintenance\u0027, True, 10, 1)"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a8bc5a2_c629cf9c","line":225,"in_reply_to":"5a8bc5a2_5db83775","updated":"2016-09-27 13:56:38.000000000","message":"Done","commit_id":"7b5380d172c6960d42409b2732a0a64f4bb9ce49"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"aee0d69d6405dd15772fa8fdad0915518e1fa45e","unresolved":false,"context_lines":[{"line_number":241,"context_line":"        # 7. Change LLC data"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"        fake_port_id \u003d data_utils.rand_name(prefix\u003d\u0027ovs-node-\u0027)"},{"line_number":244,"context_line":"        fake_switch_id \u003d data_utils.rand_mac_address()"},{"line_number":245,"context_line":"        patch \u003d [{\u0027path\u0027: \u0027/local_link_connection\u0027,"},{"line_number":246,"context_line":"                  \u0027op\u0027: \u0027replace\u0027,"},{"line_number":247,"context_line":"                  \u0027value\u0027: {\"switch_info\": \"brbm\","}],"source_content_type":"text/x-python","patch_set":15,"id":"5a8bc5a2_9d0abf24","line":244,"updated":"2016-09-27 10:32:22.000000000","message":"these are generally not MACs, but some identifier inside the switch","commit_id":"7b5380d172c6960d42409b2732a0a64f4bb9ce49"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"f89eaf86def5a4b6a68b8a72d77ada245fa3d9c0","unresolved":false,"context_lines":[{"line_number":241,"context_line":"        # 7. Change LLC data"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"        fake_port_id \u003d data_utils.rand_name(prefix\u003d\u0027ovs-node-\u0027)"},{"line_number":244,"context_line":"        fake_switch_id \u003d data_utils.rand_mac_address()"},{"line_number":245,"context_line":"        patch \u003d [{\u0027path\u0027: \u0027/local_link_connection\u0027,"},{"line_number":246,"context_line":"                  \u0027op\u0027: \u0027replace\u0027,"},{"line_number":247,"context_line":"                  \u0027value\u0027: {\"switch_info\": \"brbm\","}],"source_content_type":"text/x-python","patch_set":15,"id":"5a8bc5a2_c6df0fd4","line":244,"in_reply_to":"5a8bc5a2_9d0abf24","updated":"2016-09-27 13:56:38.000000000","message":"Can we still use data_utils.rand_mac_address() because it looks like MAC address?","commit_id":"7b5380d172c6960d42409b2732a0a64f4bb9ce49"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"aee0d69d6405dd15772fa8fdad0915518e1fa45e","unresolved":false,"context_lines":[{"line_number":272,"context_line":"        self.assertTrue(time_elapsed \u003c fail_fast_timeout)"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"        # 11-12. Restore good port LLC data back. Clean node again."},{"line_number":275,"context_line":"        self._restore_node_port(node, port, good_llc_data)"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a8bc5a2_58a7650a","line":275,"updated":"2016-09-27 10:32:22.000000000","message":"we probably do not need this as the same will be called in cleanup anyway","commit_id":"7b5380d172c6960d42409b2732a0a64f4bb9ce49"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"f89eaf86def5a4b6a68b8a72d77ada245fa3d9c0","unresolved":false,"context_lines":[{"line_number":272,"context_line":"        self.assertTrue(time_elapsed \u003c fail_fast_timeout)"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"        # 11-12. Restore good port LLC data back. Clean node again."},{"line_number":275,"context_line":"        self._restore_node_port(node, port, good_llc_data)"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a8bc5a2_e6624b3d","line":275,"in_reply_to":"5a8bc5a2_58a7650a","updated":"2016-09-27 13:56:38.000000000","message":"Done","commit_id":"7b5380d172c6960d42409b2732a0a64f4bb9ce49"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"959db9f9278b43b7535d5bc89da442c81d727bf3","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    def setUp(self):"},{"line_number":44,"context_line":"        super(BaremetalMultitenancy, self).setUp()"},{"line_number":45,"context_line":"        self.useFixture("},{"line_number":46,"context_line":"            api_microversion_fixture.APIMicroversionFixture(\u00271.19\u0027))"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    credentials \u003d [\u0027primary\u0027, \u0027alt\u0027, \u0027admin\u0027]"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"fa6399be_84eaee0d","line":46,"updated":"2016-10-12 17:07:19.000000000","message":"As you\u0027re using the headers, no need to use the fixture, sorry for misleading you at the beginning :(","commit_id":"2bbd25a499a5f5c375169231f9e0b63bc7908591"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"e3715b019434f90650c75112f7ce69d25f7b67eb","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    def setUp(self):"},{"line_number":44,"context_line":"        super(BaremetalMultitenancy, self).setUp()"},{"line_number":45,"context_line":"        self.useFixture("},{"line_number":46,"context_line":"            api_microversion_fixture.APIMicroversionFixture(\u00271.19\u0027))"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    credentials \u003d [\u0027primary\u0027, \u0027alt\u0027, \u0027admin\u0027]"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"fa6399be_fbab2073","line":46,"in_reply_to":"fa6399be_84eaee0d","updated":"2016-10-13 13:38:29.000000000","message":"When i try to run this test without fixture, then even finding of free nodes fails because api returns \u003c\"provision_state\": null\u003e  for that nodes instead of \"available\".","commit_id":"2bbd25a499a5f5c375169231f9e0b63bc7908591"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"959db9f9278b43b7535d5bc89da442c81d727bf3","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        resp, nodes \u003d self.baremetal_client.list_nodes()"},{"line_number":167,"context_line":"        nodes \u003d nodes[\u0027nodes\u0027]"},{"line_number":168,"context_line":"        start_time \u003d time.time()"},{"line_number":169,"context_line":"        while time.time() - start_time \u003c timeout:"},{"line_number":170,"context_line":"            for node in nodes:"},{"line_number":171,"context_line":"                if (node[\u0027provision_state\u0027] \u003d\u003d \u0027available\u0027 and"},{"line_number":172,"context_line":"                        (node[\u0027instance_uuid\u0027] is None or \u0027\u0027) and"},{"line_number":173,"context_line":"                        \u0027fake\u0027 not in node[\u0027name\u0027]):"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa6399be_440536ba","line":170,"range":{"start_line":169,"start_character":8,"end_line":170,"end_character":30},"updated":"2016-10-12 17:07:19.000000000","message":"Whoa, what\u0027s the point of that? nodes collection won\u0027t change... If it\u0027s what you want, you need to move L166 inside the while loop, and add a sleep on every iteration. You still don\u0027t exclude races here, as some other test may start deployment, you\u0027ll set maintenance, and it will fail.","commit_id":"2bbd25a499a5f5c375169231f9e0b63bc7908591"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"e3715b019434f90650c75112f7ce69d25f7b67eb","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        resp, nodes \u003d self.baremetal_client.list_nodes()"},{"line_number":167,"context_line":"        nodes \u003d nodes[\u0027nodes\u0027]"},{"line_number":168,"context_line":"        start_time \u003d time.time()"},{"line_number":169,"context_line":"        while time.time() - start_time \u003c timeout:"},{"line_number":170,"context_line":"            for node in nodes:"},{"line_number":171,"context_line":"                if (node[\u0027provision_state\u0027] \u003d\u003d \u0027available\u0027 and"},{"line_number":172,"context_line":"                        (node[\u0027instance_uuid\u0027] is None or \u0027\u0027) and"},{"line_number":173,"context_line":"                        \u0027fake\u0027 not in node[\u0027name\u0027]):"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa6399be_7be550da","line":170,"range":{"start_line":169,"start_character":8,"end_line":170,"end_character":30},"in_reply_to":"fa6399be_440536ba","updated":"2016-10-13 13:38:29.000000000","message":"Thanks!","commit_id":"2bbd25a499a5f5c375169231f9e0b63bc7908591"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"959db9f9278b43b7535d5bc89da442c81d727bf3","unresolved":false,"context_lines":[{"line_number":175,"context_line":"                    self.baremetal_client.update_node(node[\u0027uuid\u0027],"},{"line_number":176,"context_line":"                                                      maintenance\u003dTrue)"},{"line_number":177,"context_line":"                    self._node_state_timeout(node[\u0027uuid\u0027], \u0027maintenance\u0027,"},{"line_number":178,"context_line":"                                             True, 60, 10)"},{"line_number":179,"context_line":"                    return node"},{"line_number":180,"context_line":"        else:"},{"line_number":181,"context_line":"            raise lib_exc.TimeoutException(\"No available nodes found.\")"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa6399be_84d4ae20","line":178,"range":{"start_line":178,"start_character":51,"end_line":178,"end_character":53},"updated":"2016-10-12 17:07:19.000000000","message":"please use some defined constants for it. ditto in other places.","commit_id":"2bbd25a499a5f5c375169231f9e0b63bc7908591"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"e3715b019434f90650c75112f7ce69d25f7b67eb","unresolved":false,"context_lines":[{"line_number":175,"context_line":"                    self.baremetal_client.update_node(node[\u0027uuid\u0027],"},{"line_number":176,"context_line":"                                                      maintenance\u003dTrue)"},{"line_number":177,"context_line":"                    self._node_state_timeout(node[\u0027uuid\u0027], \u0027maintenance\u0027,"},{"line_number":178,"context_line":"                                             True, 60, 10)"},{"line_number":179,"context_line":"                    return node"},{"line_number":180,"context_line":"        else:"},{"line_number":181,"context_line":"            raise lib_exc.TimeoutException(\"No available nodes found.\")"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa6399be_60191bd7","line":178,"range":{"start_line":178,"start_character":51,"end_line":178,"end_character":53},"in_reply_to":"fa6399be_84d4ae20","updated":"2016-10-13 13:38:29.000000000","message":"Done new timeout for transitions.","commit_id":"2bbd25a499a5f5c375169231f9e0b63bc7908591"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"959db9f9278b43b7535d5bc89da442c81d727bf3","unresolved":false,"context_lines":[{"line_number":198,"context_line":"            port[\u0027uuid\u0027], patch, extra_headers\u003dTrue,"},{"line_number":199,"context_line":"            headers\u003d{api_base.Version.string: \u00271.19\u0027})"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"        self.baremetal_client.update_node(node[\u0027uuid\u0027], maintenance\u003dFalse)"},{"line_number":202,"context_line":"        self.baremetal_client.set_node_provision_state("},{"line_number":203,"context_line":"            node[\u0027uuid\u0027], baremetal_manager.BaremetalProvisionActions.PROVIDE)"},{"line_number":204,"context_line":"        self.wait_provisioning_state("}],"source_content_type":"text/x-python","patch_set":16,"id":"fa6399be_84de6e0f","line":201,"range":{"start_line":201,"start_character":8,"end_line":201,"end_character":74},"updated":"2016-10-12 17:07:19.000000000","message":"you\u0027ve done it already at this point, also I think maintenance fiddling is not needed here.","commit_id":"2bbd25a499a5f5c375169231f9e0b63bc7908591"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"e3715b019434f90650c75112f7ce69d25f7b67eb","unresolved":false,"context_lines":[{"line_number":198,"context_line":"            port[\u0027uuid\u0027], patch, extra_headers\u003dTrue,"},{"line_number":199,"context_line":"            headers\u003d{api_base.Version.string: \u00271.19\u0027})"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"        self.baremetal_client.update_node(node[\u0027uuid\u0027], maintenance\u003dFalse)"},{"line_number":202,"context_line":"        self.baremetal_client.set_node_provision_state("},{"line_number":203,"context_line":"            node[\u0027uuid\u0027], baremetal_manager.BaremetalProvisionActions.PROVIDE)"},{"line_number":204,"context_line":"        self.wait_provisioning_state("}],"source_content_type":"text/x-python","patch_set":16,"id":"fa6399be_b6437d41","line":201,"range":{"start_line":201,"start_character":8,"end_line":201,"end_character":74},"in_reply_to":"fa6399be_84de6e0f","updated":"2016-10-13 13:38:29.000000000","message":"It looks i forgot to set maintenance ON at beginning of this method.","commit_id":"2bbd25a499a5f5c375169231f9e0b63bc7908591"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"959db9f9278b43b7535d5bc89da442c81d727bf3","unresolved":false,"context_lines":[{"line_number":228,"context_line":"        node \u003d self._find_free_node()"},{"line_number":229,"context_line":"        port \u003d self.get_ports(node[\u0027uuid\u0027])[0]"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        # 4. Set provision state to \u0027manage\u0027."},{"line_number":232,"context_line":"        self.baremetal_client.set_node_provision_state("},{"line_number":233,"context_line":"            node[\u0027uuid\u0027], baremetal_manager.BaremetalProvisionActions.MANAGE)"},{"line_number":234,"context_line":"        self.wait_provisioning_state("},{"line_number":235,"context_line":"            node[\u0027uuid\u0027],"},{"line_number":236,"context_line":"            baremetal_manager.BaremetalProvisionStates.MANAGEABLE, 60, 10)"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"        # 5. Set maintenance \u0027off\u0027."},{"line_number":239,"context_line":"        self.baremetal_client.update_node(node[\u0027uuid\u0027], maintenance\u003dFalse)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"        # 6. Save LLC data to temporary place"},{"line_number":242,"context_line":"        resp, port \u003d self.baremetal_client.show_port(port[\u0027uuid\u0027])"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa6399be_64c5da59","line":239,"range":{"start_line":231,"start_character":9,"end_line":239,"end_character":74},"updated":"2016-10-12 17:07:19.000000000","message":"Why do you need to set maintenance before moving it to manageable? I think you can just do manage right in the beginning.","commit_id":"2bbd25a499a5f5c375169231f9e0b63bc7908591"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"e3715b019434f90650c75112f7ce69d25f7b67eb","unresolved":false,"context_lines":[{"line_number":228,"context_line":"        node \u003d self._find_free_node()"},{"line_number":229,"context_line":"        port \u003d self.get_ports(node[\u0027uuid\u0027])[0]"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        # 4. Set provision state to \u0027manage\u0027."},{"line_number":232,"context_line":"        self.baremetal_client.set_node_provision_state("},{"line_number":233,"context_line":"            node[\u0027uuid\u0027], baremetal_manager.BaremetalProvisionActions.MANAGE)"},{"line_number":234,"context_line":"        self.wait_provisioning_state("},{"line_number":235,"context_line":"            node[\u0027uuid\u0027],"},{"line_number":236,"context_line":"            baremetal_manager.BaremetalProvisionStates.MANAGEABLE, 60, 10)"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"        # 5. Set maintenance \u0027off\u0027."},{"line_number":239,"context_line":"        self.baremetal_client.update_node(node[\u0027uuid\u0027], maintenance\u003dFalse)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"        # 6. Save LLC data to temporary place"},{"line_number":242,"context_line":"        resp, port \u003d self.baremetal_client.show_port(port[\u0027uuid\u0027])"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa6399be_a001736c","line":239,"range":{"start_line":231,"start_character":9,"end_line":239,"end_character":74},"in_reply_to":"fa6399be_64c5da59","updated":"2016-10-13 13:38:29.000000000","message":"To reserve node (against race condition) before setting Manage.","commit_id":"2bbd25a499a5f5c375169231f9e0b63bc7908591"}]}
