)]}'
{"nova/virt/ironic/driver.py":[{"author":{"_account_id":14027,"name":"Michal Rostecki","email":"mrostecki@suse.de","username":"mrostecki"},"change_message_id":"552b45db3584bcd8f3f8ce4c568220b907dd7ff9","unresolved":false,"context_lines":[{"line_number":219,"context_line":"            ironic_states.DEPLOYWAIT, ironic_states.DEPLOYDONE,"},{"line_number":220,"context_line":"            ironic_states.ACTIVE, ironic_states.DELETING,"},{"line_number":221,"context_line":"            ironic_states.DELETED]"},{"line_number":222,"context_line":"        return (node_obj.instance_uuid or"},{"line_number":223,"context_line":"                node_obj.provision_state in used_provision_states)"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"    def _node_resource(self, node):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a80dd14_b3374d4c","line":222,"updated":"2015-03-13 20:07:46.000000000","message":"I think that this method should always return boolean object. Could you please convert node_obj.instance_uuid to bool?","commit_id":"d727912bf34b451a74d2d2562901c93bb1fb5b10"},{"author":{"_account_id":10380,"name":"Josh Gachnang","email":"josh@pcsforeducation.com","username":"JoshNang"},"change_message_id":"b7b86cb778861ad4b5382e16cc1eea93c2ee8677","unresolved":false,"context_lines":[{"line_number":219,"context_line":"            ironic_states.DEPLOYWAIT, ironic_states.DEPLOYDONE,"},{"line_number":220,"context_line":"            ironic_states.ACTIVE, ironic_states.DELETING,"},{"line_number":221,"context_line":"            ironic_states.DELETED]"},{"line_number":222,"context_line":"        return (node_obj.instance_uuid or"},{"line_number":223,"context_line":"                node_obj.provision_state in used_provision_states)"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"    def _node_resource(self, node):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a80dd14_7fad9730","line":222,"in_reply_to":"9a80dd14_b3374d4c","updated":"2015-03-13 20:37:06.000000000","message":"Oh duh, thanks!","commit_id":"d727912bf34b451a74d2d2562901c93bb1fb5b10"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"fd2f627435e1c9594a07d01273b44e386af5adef","unresolved":false,"context_lines":[{"line_number":200,"context_line":"        bad_provision_states \u003d ["},{"line_number":201,"context_line":"            ironic_states.MANAGEABLE, ironic_states.ERROR,"},{"line_number":202,"context_line":"            ironic_states.INSPECTING, ironic_states.INSPECTFAIL,"},{"line_number":203,"context_line":"            ironic_states.CLEANFAIL, ironic_states.DEPLOYFAIL]"},{"line_number":204,"context_line":"        return (node_obj.maintenance or"},{"line_number":205,"context_line":"                node_obj.power_state in bad_power_states or"},{"line_number":206,"context_line":"                node_obj.provision_state in bad_provision_states)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_56d5e740","line":203,"updated":"2015-03-16 15:19:47.000000000","message":"I was thinking that it might be easier to list the good_provision_states since I think the list of good states won\u0027t change as much as Ironic may add more bad provision states -- every time a new bad state is added, we\u0027ll have to update this list.\n\nHmm. I see that some of the provision states that I would consider \u0027bad\u0027, are in _node_resources_used() and I was thinking that they would be included here. So ah, I\u0027m not sure what I\u0027m talking about.","commit_id":"a328422fb68875bf86225d4b281c48ad6cd77142"},{"author":{"_account_id":10380,"name":"Josh Gachnang","email":"josh@pcsforeducation.com","username":"JoshNang"},"change_message_id":"96bbf87ecffe2faa9df3c0305ae06cc21829e27b","unresolved":false,"context_lines":[{"line_number":200,"context_line":"        bad_provision_states \u003d ["},{"line_number":201,"context_line":"            ironic_states.MANAGEABLE, ironic_states.ERROR,"},{"line_number":202,"context_line":"            ironic_states.INSPECTING, ironic_states.INSPECTFAIL,"},{"line_number":203,"context_line":"            ironic_states.CLEANFAIL, ironic_states.DEPLOYFAIL]"},{"line_number":204,"context_line":"        return (node_obj.maintenance or"},{"line_number":205,"context_line":"                node_obj.power_state in bad_power_states or"},{"line_number":206,"context_line":"                node_obj.provision_state in bad_provision_states)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_0c28c095","line":203,"in_reply_to":"9a80dd14_56d5e740","updated":"2015-03-16 15:55:16.000000000","message":"So I have them split them up as \"what are part of the standard deploy cycle and what are outside of that\". We really have 3 lists: normal deploying (used), exceptional/error states here (unavailable), and [AVAILABLE,]. The only good state is AVAILABLE. From a fleet management perspective, it makes sense to split up how many of your nodes are available for immediate deployment, how many are being successfully utilized, and how many require operator intervention.","commit_id":"a328422fb68875bf86225d4b281c48ad6cd77142"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"fd2f627435e1c9594a07d01273b44e386af5adef","unresolved":false,"context_lines":[{"line_number":270,"context_line":""},{"line_number":271,"context_line":"        if self._node_resources_used(node):"},{"line_number":272,"context_line":"            # Node has an instance or is otherwise used,, report all resource"},{"line_number":273,"context_line":"            # as unavailable"},{"line_number":274,"context_line":"            vcpus_used \u003d vcpus"},{"line_number":275,"context_line":"            memory_mb_used \u003d memory_mb"},{"line_number":276,"context_line":"            local_gb_used \u003d local_gb"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_167a8fb9","line":273,"updated":"2015-03-16 15:19:47.000000000","message":"nit: I find it confusing to use \u0027unavailable\u0027 here since the method called is _node_resources_used(), and there is a ._node_resources_unavailable() call in the next elif, which I had assumed would make those resources unavailable.\n\nIn fact, both these cases make the resources unavailable, but do it in a different way. One by reporting that they are all being used, the other by reporting that there are no resources at all.","commit_id":"a328422fb68875bf86225d4b281c48ad6cd77142"},{"author":{"_account_id":10380,"name":"Josh Gachnang","email":"josh@pcsforeducation.com","username":"JoshNang"},"change_message_id":"96bbf87ecffe2faa9df3c0305ae06cc21829e27b","unresolved":false,"context_lines":[{"line_number":270,"context_line":""},{"line_number":271,"context_line":"        if self._node_resources_used(node):"},{"line_number":272,"context_line":"            # Node has an instance or is otherwise used,, report all resource"},{"line_number":273,"context_line":"            # as unavailable"},{"line_number":274,"context_line":"            vcpus_used \u003d vcpus"},{"line_number":275,"context_line":"            memory_mb_used \u003d memory_mb"},{"line_number":276,"context_line":"            local_gb_used \u003d local_gb"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_cfcdba5e","line":273,"in_reply_to":"9a80dd14_167a8fb9","updated":"2015-03-16 15:55:16.000000000","message":"Yeah that was poor wording (and there\u0027s a double comma there). I\u0027ll fix this up.","commit_id":"a328422fb68875bf86225d4b281c48ad6cd77142"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"840b22bde137d43264c2fef7973f61aa51da9eeb","unresolved":false,"context_lines":[{"line_number":205,"context_line":"                node_obj.power_state in bad_power_states or"},{"line_number":206,"context_line":"                node_obj.provision_state in bad_provision_states)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    def _node_resources_used(self, node_obj):"},{"line_number":209,"context_line":"        \"\"\"Determine whether the node\u0027s resources are currently used."},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"        Determines whether the node\u0027s resources should be considered used"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_b8cc05bd","line":208,"updated":"2015-03-17 19:21:50.000000000","message":"It seems to me that it might be easier to check if a node is free than if it is being used.  And I mainly mention it because if more used states are added it may be easy to miss adding them here, while the free states shouldn\u0027t change as much.","commit_id":"4b23aed8937378ff3ab7733c3345f88a7d7b18f3"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"f01d413eddf4f60265ba99e55e495faaedbd5abd","unresolved":false,"context_lines":[{"line_number":201,"context_line":"            ironic_states.ERROR, ironic_states.NOSTATE]"},{"line_number":202,"context_line":"        return (node_obj.maintenance or"},{"line_number":203,"context_line":"                node_obj.power_state in bad_power_states or"},{"line_number":204,"context_line":"                node_obj.provision_state !\u003d ironic_states.AVAILABLE)"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    def _node_resources_used(self, node_obj):"},{"line_number":207,"context_line":"        \"\"\"Determine whether the node\u0027s resources are currently used."}],"source_content_type":"text/x-python","patch_set":5,"id":"9a80dd14_3de63a45","line":204,"updated":"2015-03-18 00:29:14.000000000","message":"why not do \u0027not _node_resource_used(node_obj)\u0027 and delete the comment you added above about this being called after _node_resources_used.","commit_id":"af44bc7093a05d78f03c33a2ee97a0d60abf4d9b"},{"author":{"_account_id":10380,"name":"Josh Gachnang","email":"josh@pcsforeducation.com","username":"JoshNang"},"change_message_id":"95a874833f400564cdbaebc76232e7b1fb31c873","unresolved":false,"context_lines":[{"line_number":201,"context_line":"            ironic_states.ERROR, ironic_states.NOSTATE]"},{"line_number":202,"context_line":"        return (node_obj.maintenance or"},{"line_number":203,"context_line":"                node_obj.power_state in bad_power_states or"},{"line_number":204,"context_line":"                node_obj.provision_state !\u003d ironic_states.AVAILABLE)"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    def _node_resources_used(self, node_obj):"},{"line_number":207,"context_line":"        \"\"\"Determine whether the node\u0027s resources are currently used."}],"source_content_type":"text/x-python","patch_set":5,"id":"9a80dd14_fd93c259","line":204,"in_reply_to":"9a80dd14_3de63a45","updated":"2015-03-18 00:39:01.000000000","message":"I figure there is no reason to check it twice. The function is only used once, as part of an if/elif, so we know \u0027not _node_resources_used\u0027","commit_id":"af44bc7093a05d78f03c33a2ee97a0d60abf4d9b"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"3b394d00d1098f9ae0d40351ff695a4000f6e116","unresolved":false,"context_lines":[{"line_number":201,"context_line":"            ironic_states.ERROR, ironic_states.NOSTATE]"},{"line_number":202,"context_line":"        return (node_obj.maintenance or"},{"line_number":203,"context_line":"                node_obj.power_state in bad_power_states or"},{"line_number":204,"context_line":"                node_obj.provision_state !\u003d ironic_states.AVAILABLE)"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    def _node_resources_used(self, node_obj):"},{"line_number":207,"context_line":"        \"\"\"Determine whether the node\u0027s resources are currently used."}],"source_content_type":"text/x-python","patch_set":5,"id":"9a80dd14_c138dc3d","line":204,"in_reply_to":"9a80dd14_fd93c259","updated":"2015-03-18 01:21:41.000000000","message":"As long as it isn\u0027t called in a different way in the future.","commit_id":"af44bc7093a05d78f03c33a2ee97a0d60abf4d9b"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"abc98a6616e18a4e7c5c5ceed8478e4dead1d592","unresolved":false,"context_lines":[{"line_number":200,"context_line":"        bad_power_states \u003d ["},{"line_number":201,"context_line":"            ironic_states.ERROR, ironic_states.NOSTATE]"},{"line_number":202,"context_line":"        # keep NOSTATE around for compatibility"},{"line_number":203,"context_line":"        bad_provision_states \u003d [ironic_states.AVAILABLE, ironic_states.NOSTATE]"},{"line_number":204,"context_line":"        return (node_obj.maintenance or"},{"line_number":205,"context_line":"                node_obj.power_state in bad_power_states or"},{"line_number":206,"context_line":"                node_obj.provision_state not in bad_provision_states)"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a80dd14_7a63ef19","line":203,"updated":"2015-03-19 20:04:29.000000000","message":"am I tired or maybe I\u0027m dyslexic, because this seemed fine before. Shouldn\u0027t this be \u0027good_provision_states\u0027, so that the code below is \u0027not in good_provision_states\u0027?","commit_id":"1058730cfc7dfe25da39b74d2e6f065f6c9c8714"},{"author":{"_account_id":10380,"name":"Josh Gachnang","email":"josh@pcsforeducation.com","username":"JoshNang"},"change_message_id":"1cbc32170970aa92b06264a2244de36cd033dc13","unresolved":false,"context_lines":[{"line_number":200,"context_line":"        bad_power_states \u003d ["},{"line_number":201,"context_line":"            ironic_states.ERROR, ironic_states.NOSTATE]"},{"line_number":202,"context_line":"        # keep NOSTATE around for compatibility"},{"line_number":203,"context_line":"        bad_provision_states \u003d [ironic_states.AVAILABLE, ironic_states.NOSTATE]"},{"line_number":204,"context_line":"        return (node_obj.maintenance or"},{"line_number":205,"context_line":"                node_obj.power_state in bad_power_states or"},{"line_number":206,"context_line":"                node_obj.provision_state not in bad_provision_states)"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a80dd14_6e825453","line":203,"in_reply_to":"9a80dd14_7a63ef19","updated":"2015-03-19 20:09:34.000000000","message":"Nope, totally agree, I\u0027ll fix post-K-3","commit_id":"1058730cfc7dfe25da39b74d2e6f065f6c9c8714"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"95eaae8983a1c7c2ede3ffa054f5d869608cd693","unresolved":false,"context_lines":[{"line_number":206,"context_line":"                node_obj.power_state in bad_power_states or"},{"line_number":207,"context_line":"                node_obj.provision_state not in good_provision_states)"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    def _node_resources_used(self, node_obj):"},{"line_number":210,"context_line":"        \"\"\"Determine whether the node\u0027s resources are currently used."},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        Determines whether the node\u0027s resources should be considered used"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a6ced46_925aa64e","line":209,"updated":"2015-03-24 18:02:28.000000000","message":"I still think this would be better done as _node_resources_free() since the free states are likely to be more static over time.  But this is fine.","commit_id":"cd27db6e9bb882afe925ec80c1056abecf30bb2a"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"120b717ac12fff33167644b0bd0df3adf65498ac","unresolved":false,"context_lines":[{"line_number":198,"context_line":"        and unavailable for scheduling. Returns True if unacceptable."},{"line_number":199,"context_line":"        \"\"\""},{"line_number":200,"context_line":"        bad_power_states \u003d ["},{"line_number":201,"context_line":"            ironic_states.ERROR, ironic_states.NOSTATE]"},{"line_number":202,"context_line":"        # keep NOSTATE around for compatibility"},{"line_number":203,"context_line":"        good_provision_states \u003d ["},{"line_number":204,"context_line":"            ironic_states.AVAILABLE, ironic_states.NOSTATE]"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa963961_73db9f1c","line":201,"updated":"2015-03-26 18:08:51.000000000","message":"This line changed for no reason? :(","commit_id":"590957007e645ae108233d03d849fb6742ee17f7"}],"nova/virt/ironic/ironic_states.py":[{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"95eaae8983a1c7c2ede3ffa054f5d869608cd693","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"DEPLOYWAIT \u003d \u0027wait call-back\u0027"},{"line_number":57,"context_line":"\"\"\" Node is waiting to be deployed."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"This will be the node `provision_state` while the node is waiting for"},{"line_number":60,"context_line":"the driver to finish deployment."},{"line_number":61,"context_line":"\"\"\""}],"source_content_type":"text/x-python","patch_set":10,"id":"1a6ced46_d2025e0a","side":"PARENT","line":58,"updated":"2015-03-24 18:02:28.000000000","message":"Why are these whitespace lines being removed?  This should be done in a separate patch if it\u0027s worth doing.","commit_id":"b6e7a8f6b239f99c445576feac170f19dc7c429e"},{"author":{"_account_id":10380,"name":"Josh Gachnang","email":"josh@pcsforeducation.com","username":"JoshNang"},"change_message_id":"0f1e5ce4f06c7ca7f88ec120b61f41ccd62b6647","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"DEPLOYWAIT \u003d \u0027wait call-back\u0027"},{"line_number":57,"context_line":"\"\"\" Node is waiting to be deployed."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"This will be the node `provision_state` while the node is waiting for"},{"line_number":60,"context_line":"the driver to finish deployment."},{"line_number":61,"context_line":"\"\"\""}],"source_content_type":"text/x-python","patch_set":10,"id":"1a6ced46_552bb82f","side":"PARENT","line":58,"in_reply_to":"1a6ced46_d2025e0a","updated":"2015-03-24 18:20:42.000000000","message":"This file is copied from Ironic and the whitespace changed there. I\u0027ll revert it.","commit_id":"b6e7a8f6b239f99c445576feac170f19dc7c429e"}]}
