)]}'
{"ironic/drivers/base.py":[{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"e5e0ff66d7279d6e717e6186f27d8af8660b54b3","unresolved":false,"context_lines":[{"line_number":117,"context_line":""},{"line_number":118,"context_line":"class BaseInterface(object):"},{"line_number":119,"context_line":"    \"\"\"A base interface implementing common functions for Driver Interfaces.\"\"\""},{"line_number":120,"context_line":"    driver_type \u003d \u0027base\u0027"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def get_clean_steps(self):"},{"line_number":123,"context_line":"        \"\"\"Get a list of all enabled and disabled CleanSteps for the driver.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_fb06f7cc","line":120,"updated":"2015-02-19 04:52:07.000000000","message":"interface_type sounds better to me.","commit_id":"2a46c82df3357d446b6a47a31445068a5593b4ca"},{"author":{"_account_id":10380,"name":"Josh Gachnang","email":"josh@pcsforeducation.com","username":"JoshNang"},"change_message_id":"6be08971a9eac7445270e1990e70a9b5ab70668a","unresolved":false,"context_lines":[{"line_number":117,"context_line":""},{"line_number":118,"context_line":"class BaseInterface(object):"},{"line_number":119,"context_line":"    \"\"\"A base interface implementing common functions for Driver Interfaces.\"\"\""},{"line_number":120,"context_line":"    driver_type \u003d \u0027base\u0027"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def get_clean_steps(self):"},{"line_number":123,"context_line":"        \"\"\"Get a list of all enabled and disabled CleanSteps for the driver.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_1fc5525b","line":120,"in_reply_to":"da86d52c_fb06f7cc","updated":"2015-02-23 23:51:11.000000000","message":"Done","commit_id":"2a46c82df3357d446b6a47a31445068a5593b4ca"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"e5e0ff66d7279d6e717e6186f27d8af8660b54b3","unresolved":false,"context_lines":[{"line_number":119,"context_line":"    \"\"\"A base interface implementing common functions for Driver Interfaces.\"\"\""},{"line_number":120,"context_line":"    driver_type \u003d \u0027base\u0027"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def get_clean_steps(self):"},{"line_number":123,"context_line":"        \"\"\"Get a list of all enabled and disabled CleanSteps for the driver.\"\"\""},{"line_number":124,"context_line":"        clean_steps \u003d []"},{"line_number":125,"context_line":"        for n, method in inspect.getmembers(self, inspect.ismethod):"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_5b0d438e","line":122,"updated":"2015-02-19 04:52:07.000000000","message":"Given that the clean_steps generated here doesn\u0027t change for the lifetime of the conductor, I think we just need to generate this one-time when the drivers are loaded. Can we write a __new__() method in base.BaseDriver and cache this list within the driver.  The method get_clean_steps can return just the cached list.","commit_id":"2a46c82df3357d446b6a47a31445068a5593b4ca"},{"author":{"_account_id":10380,"name":"Josh Gachnang","email":"josh@pcsforeducation.com","username":"JoshNang"},"change_message_id":"6be08971a9eac7445270e1990e70a9b5ab70668a","unresolved":false,"context_lines":[{"line_number":119,"context_line":"    \"\"\"A base interface implementing common functions for Driver Interfaces.\"\"\""},{"line_number":120,"context_line":"    driver_type \u003d \u0027base\u0027"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def get_clean_steps(self):"},{"line_number":123,"context_line":"        \"\"\"Get a list of all enabled and disabled CleanSteps for the driver.\"\"\""},{"line_number":124,"context_line":"        clean_steps \u003d []"},{"line_number":125,"context_line":"        for n, method in inspect.getmembers(self, inspect.ismethod):"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba7be1f8_0cadb09c","line":122,"in_reply_to":"da86d52c_5b0d438e","updated":"2015-02-23 23:51:11.000000000","message":"That\u0027s reasonable, except I\u0027ll use __init__() (we\u0027re not modifying the class in anyway that would require a __new__() instead of __init__())","commit_id":"2a46c82df3357d446b6a47a31445068a5593b4ca"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"1e469b92466b05b0da911daff459f991b2e36b3c","unresolved":false,"context_lines":[{"line_number":127,"context_line":"    \"\"\"A base interface implementing common functions for Driver Interfaces.\"\"\""},{"line_number":128,"context_line":"    interface_type \u003d \u0027base\u0027"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    def __init__(self):"},{"line_number":131,"context_line":"        # Cache the clean steps"},{"line_number":132,"context_line":"        self.clean_steps \u003d []"},{"line_number":133,"context_line":"        for n, method in inspect.getmembers(self, inspect.ismethod):"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba7be1f8_931efbb9","line":130,"updated":"2015-02-24 16:15:36.000000000","message":"Making this in __init__() mandates every driver to call the super method in their __init__().  I think __new__() would solve this.","commit_id":"6b3eace2743e68fd6338d0b92246728c486cd4fb"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"26b027eb866b20b37761269cc612a42e5788bca8","unresolved":false,"context_lines":[{"line_number":135,"context_line":"                # Create a CleanStep to represent this method"},{"line_number":136,"context_line":"                step \u003d CleanStep(step\u003dmethod.__name__,"},{"line_number":137,"context_line":"                                 priority\u003dmethod._clean_step_priority,"},{"line_number":138,"context_line":"                                 driver\u003dself.interface_type)"},{"line_number":139,"context_line":"                self.clean_steps.append(step)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def get_clean_steps(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba7be1f8_ca7c35b8","line":138,"updated":"2015-02-24 17:35:50.000000000","message":"Can we log debug adding of the step here?","commit_id":"6b3eace2743e68fd6338d0b92246728c486cd4fb"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"c35d95cf48ed04d5b25371451f2bfa8ba5f169b8","unresolved":false,"context_lines":[{"line_number":137,"context_line":"                # Create a CleanStep to represent this method"},{"line_number":138,"context_line":"                step \u003d CleanStep(step\u003dmethod.__name__,"},{"line_number":139,"context_line":"                                 priority\u003dmethod._clean_step_priority,"},{"line_number":140,"context_line":"                                 driver\u003dinstance.interface_type)"},{"line_number":141,"context_line":"                instance.clean_steps.append(step)"},{"line_number":142,"context_line":"        LOG.debug(\u0027Found clean steps %(steps)s for driver %(driver)s\u0027 %"},{"line_number":143,"context_line":"                  {\u0027steps\u0027: instance.clean_steps,"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba7be1f8_fe25ec5b","line":140,"updated":"2015-02-26 06:33:17.000000000","message":"nit: may be rename this also to interface.\n\n  step \u003d CleanStep(step\u003dmethod.__name__,\n                   priority\u003dmethod._clean_step_priority,\n                   interface\u003dinstance.interface_type)","commit_id":"2e582aa3cefadc2ae915152585a687c4d6e3701c"},{"author":{"_account_id":10380,"name":"Josh Gachnang","email":"josh@pcsforeducation.com","username":"JoshNang"},"change_message_id":"e7a98f91a84455fbfb9a99dc31bcf0b5822de47f","unresolved":false,"context_lines":[{"line_number":137,"context_line":"                # Create a CleanStep to represent this method"},{"line_number":138,"context_line":"                step \u003d CleanStep(step\u003dmethod.__name__,"},{"line_number":139,"context_line":"                                 priority\u003dmethod._clean_step_priority,"},{"line_number":140,"context_line":"                                 driver\u003dinstance.interface_type)"},{"line_number":141,"context_line":"                instance.clean_steps.append(step)"},{"line_number":142,"context_line":"        LOG.debug(\u0027Found clean steps %(steps)s for driver %(driver)s\u0027 %"},{"line_number":143,"context_line":"                  {\u0027steps\u0027: instance.clean_steps,"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba7be1f8_2bed6526","line":140,"in_reply_to":"ba7be1f8_b9f544ee","updated":"2015-02-26 20:31:36.000000000","message":"Done","commit_id":"2e582aa3cefadc2ae915152585a687c4d6e3701c"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"da5ba962e6ba8011d320216fae01d1051b057988","unresolved":false,"context_lines":[{"line_number":137,"context_line":"                # Create a CleanStep to represent this method"},{"line_number":138,"context_line":"                step \u003d CleanStep(step\u003dmethod.__name__,"},{"line_number":139,"context_line":"                                 priority\u003dmethod._clean_step_priority,"},{"line_number":140,"context_line":"                                 driver\u003dinstance.interface_type)"},{"line_number":141,"context_line":"                instance.clean_steps.append(step)"},{"line_number":142,"context_line":"        LOG.debug(\u0027Found clean steps %(steps)s for driver %(driver)s\u0027 %"},{"line_number":143,"context_line":"                  {\u0027steps\u0027: instance.clean_steps,"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba7be1f8_b9f544ee","line":140,"in_reply_to":"ba7be1f8_fe25ec5b","updated":"2015-02-26 11:29:10.000000000","message":"+1,\n\n\"driver\" being the interface_type but not the driver looks confusing","commit_id":"2e582aa3cefadc2ae915152585a687c4d6e3701c"},{"author":{"_account_id":11278,"name":"Anusha Ramineni","email":"anusha.ramineni@india.nec.com","username":"anusha08"},"change_message_id":"bdf1c1e6b93664321ccfb095ba5a5d1c5c00d661","unresolved":false,"context_lines":[{"line_number":138,"context_line":"                step \u003d CleanStep(step\u003dmethod.__name__,"},{"line_number":139,"context_line":"                                 priority\u003dmethod._clean_step_priority,"},{"line_number":140,"context_line":"                                 driver\u003dinstance.interface_type)"},{"line_number":141,"context_line":"                instance.clean_steps.append(step)"},{"line_number":142,"context_line":"        LOG.debug(\u0027Found clean steps %(steps)s for driver %(driver)s\u0027 %"},{"line_number":143,"context_line":"                  {\u0027steps\u0027: instance.clean_steps,"},{"line_number":144,"context_line":"                   \u0027driver\u0027: instance.interface_type})"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba7be1f8_28a2ee4a","line":141,"updated":"2015-02-26 05:12:17.000000000","message":"should also check if priority is greater than zero and append accordingly. does this not append all steps irrespective of priority?","commit_id":"2e582aa3cefadc2ae915152585a687c4d6e3701c"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"c35d95cf48ed04d5b25371451f2bfa8ba5f169b8","unresolved":false,"context_lines":[{"line_number":138,"context_line":"                step \u003d CleanStep(step\u003dmethod.__name__,"},{"line_number":139,"context_line":"                                 priority\u003dmethod._clean_step_priority,"},{"line_number":140,"context_line":"                                 driver\u003dinstance.interface_type)"},{"line_number":141,"context_line":"                instance.clean_steps.append(step)"},{"line_number":142,"context_line":"        LOG.debug(\u0027Found clean steps %(steps)s for driver %(driver)s\u0027 %"},{"line_number":143,"context_line":"                  {\u0027steps\u0027: instance.clean_steps,"},{"line_number":144,"context_line":"                   \u0027driver\u0027: instance.interface_type})"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba7be1f8_be929449","line":141,"in_reply_to":"ba7be1f8_28a2ee4a","updated":"2015-02-26 06:33:17.000000000","message":"i guess this is intentional and caller is supposed to identify the zap steps by looking at the priority of the step","commit_id":"2e582aa3cefadc2ae915152585a687c4d6e3701c"},{"author":{"_account_id":10380,"name":"Josh Gachnang","email":"josh@pcsforeducation.com","username":"JoshNang"},"change_message_id":"e7a98f91a84455fbfb9a99dc31bcf0b5822de47f","unresolved":false,"context_lines":[{"line_number":138,"context_line":"                step \u003d CleanStep(step\u003dmethod.__name__,"},{"line_number":139,"context_line":"                                 priority\u003dmethod._clean_step_priority,"},{"line_number":140,"context_line":"                                 driver\u003dinstance.interface_type)"},{"line_number":141,"context_line":"                instance.clean_steps.append(step)"},{"line_number":142,"context_line":"        LOG.debug(\u0027Found clean steps %(steps)s for driver %(driver)s\u0027 %"},{"line_number":143,"context_line":"                  {\u0027steps\u0027: instance.clean_steps,"},{"line_number":144,"context_line":"                   \u0027driver\u0027: instance.interface_type})"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba7be1f8_8bc2d184","line":141,"in_reply_to":"ba7be1f8_7ccae51b","updated":"2015-02-26 20:31:36.000000000","message":"I\u0027ll improve the comments to make it more clear.","commit_id":"2e582aa3cefadc2ae915152585a687c4d6e3701c"},{"author":{"_account_id":11278,"name":"Anusha Ramineni","email":"anusha.ramineni@india.nec.com","username":"anusha08"},"change_message_id":"1174faa3559f2dc629f2aed1710b28b198f1df38","unresolved":false,"context_lines":[{"line_number":138,"context_line":"                step \u003d CleanStep(step\u003dmethod.__name__,"},{"line_number":139,"context_line":"                                 priority\u003dmethod._clean_step_priority,"},{"line_number":140,"context_line":"                                 driver\u003dinstance.interface_type)"},{"line_number":141,"context_line":"                instance.clean_steps.append(step)"},{"line_number":142,"context_line":"        LOG.debug(\u0027Found clean steps %(steps)s for driver %(driver)s\u0027 %"},{"line_number":143,"context_line":"                  {\u0027steps\u0027: instance.clean_steps,"},{"line_number":144,"context_line":"                   \u0027driver\u0027: instance.interface_type})"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba7be1f8_7ccae51b","line":141,"in_reply_to":"ba7be1f8_be929449","updated":"2015-02-26 07:19:25.000000000","message":"right, missed the doc string below , assumed it will get only enabled clean steps.Can we rename something like get_all_clean_steps or something?","commit_id":"2e582aa3cefadc2ae915152585a687c4d6e3701c"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"493edb6ac620c4a5fd5afc3c3b268660ad1271f8","unresolved":false,"context_lines":[{"line_number":666,"context_line":""},{"line_number":667,"context_line":""},{"line_number":668,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":669,"context_line":"class InspectInterface(object):"},{"line_number":670,"context_line":"    \"\"\"Interface for inspection-related actions.\"\"\""},{"line_number":671,"context_line":""},{"line_number":672,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba7be1f8_712e868d","line":669,"updated":"2015-02-26 10:16:55.000000000","message":"should we have interface_type here? :)","commit_id":"2e582aa3cefadc2ae915152585a687c4d6e3701c"},{"author":{"_account_id":10380,"name":"Josh Gachnang","email":"josh@pcsforeducation.com","username":"JoshNang"},"change_message_id":"e7a98f91a84455fbfb9a99dc31bcf0b5822de47f","unresolved":false,"context_lines":[{"line_number":666,"context_line":""},{"line_number":667,"context_line":""},{"line_number":668,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":669,"context_line":"class InspectInterface(object):"},{"line_number":670,"context_line":"    \"\"\"Interface for inspection-related actions.\"\"\""},{"line_number":671,"context_line":""},{"line_number":672,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba7be1f8_ba51a063","line":669,"in_reply_to":"ba7be1f8_712e868d","updated":"2015-02-26 20:31:36.000000000","message":"Will Inspect have cleaning steps? The spec only called out power, deploy, and management interfaces, but I know we\u0027ll add more (RAID comes to mind).","commit_id":"2e582aa3cefadc2ae915152585a687c4d6e3701c"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"c35d95cf48ed04d5b25371451f2bfa8ba5f169b8","unresolved":false,"context_lines":[{"line_number":702,"context_line":"        \"\"\""},{"line_number":703,"context_line":""},{"line_number":704,"context_line":"# Define a namedtuple for holding clean steps"},{"line_number":705,"context_line":"CleanStep \u003d collections.namedtuple(\u0027CleanStep\u0027, [\u0027step\u0027, \u0027priority\u0027, \u0027driver\u0027])"},{"line_number":706,"context_line":""},{"line_number":707,"context_line":""},{"line_number":708,"context_line":"def clean_step(priority):"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba7be1f8_fedc0c48","line":705,"updated":"2015-02-26 06:33:17.000000000","message":"nit: s/driver/interface","commit_id":"2e582aa3cefadc2ae915152585a687c4d6e3701c"},{"author":{"_account_id":10380,"name":"Josh Gachnang","email":"josh@pcsforeducation.com","username":"JoshNang"},"change_message_id":"e7a98f91a84455fbfb9a99dc31bcf0b5822de47f","unresolved":false,"context_lines":[{"line_number":702,"context_line":"        \"\"\""},{"line_number":703,"context_line":""},{"line_number":704,"context_line":"# Define a namedtuple for holding clean steps"},{"line_number":705,"context_line":"CleanStep \u003d collections.namedtuple(\u0027CleanStep\u0027, [\u0027step\u0027, \u0027priority\u0027, \u0027driver\u0027])"},{"line_number":706,"context_line":""},{"line_number":707,"context_line":""},{"line_number":708,"context_line":"def clean_step(priority):"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba7be1f8_fad4f8e9","line":705,"in_reply_to":"ba7be1f8_7145a641","updated":"2015-02-26 20:31:36.000000000","message":"Yeah, agreed. Not a nit.","commit_id":"2e582aa3cefadc2ae915152585a687c4d6e3701c"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"493edb6ac620c4a5fd5afc3c3b268660ad1271f8","unresolved":false,"context_lines":[{"line_number":702,"context_line":"        \"\"\""},{"line_number":703,"context_line":""},{"line_number":704,"context_line":"# Define a namedtuple for holding clean steps"},{"line_number":705,"context_line":"CleanStep \u003d collections.namedtuple(\u0027CleanStep\u0027, [\u0027step\u0027, \u0027priority\u0027, \u0027driver\u0027])"},{"line_number":706,"context_line":""},{"line_number":707,"context_line":""},{"line_number":708,"context_line":"def clean_step(priority):"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba7be1f8_7145a641","line":705,"in_reply_to":"ba7be1f8_fedc0c48","updated":"2015-02-26 10:16:55.000000000","message":"actually it\u0027s not a nit, calling it \u0027driver\u0027 may confuse a lot","commit_id":"2e582aa3cefadc2ae915152585a687c4d6e3701c"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"a1731788e42df84301a78dc75ab728925bb622ed","unresolved":false,"context_lines":[{"line_number":140,"context_line":"                                 priority\u003dmethod._clean_step_priority,"},{"line_number":141,"context_line":"                                 interface\u003dinstance.interface_type)"},{"line_number":142,"context_line":"                instance.clean_steps.append(step)"},{"line_number":143,"context_line":"        LOG.debug(\u0027Found clean steps %(steps)s for driver %(driver)s\u0027 %"},{"line_number":144,"context_line":"                  {\u0027steps\u0027: instance.clean_steps,"},{"line_number":145,"context_line":"                   \u0027driver\u0027: instance.interface_type})"},{"line_number":146,"context_line":"        return instance"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba7be1f8_333e962a","line":143,"updated":"2015-02-27 13:07:31.000000000","message":"nit: s/driver/interface/g","commit_id":"d136bcf3b065c248bfe0f60e2ec7cd2abbde985c"},{"author":{"_account_id":10380,"name":"Josh Gachnang","email":"josh@pcsforeducation.com","username":"JoshNang"},"change_message_id":"1a87c98b5b6b5326da04e3d6c8134947648cee89","unresolved":false,"context_lines":[{"line_number":140,"context_line":"                                 priority\u003dmethod._clean_step_priority,"},{"line_number":141,"context_line":"                                 interface\u003dinstance.interface_type)"},{"line_number":142,"context_line":"                instance.clean_steps.append(step)"},{"line_number":143,"context_line":"        LOG.debug(\u0027Found clean steps %(steps)s for driver %(driver)s\u0027 %"},{"line_number":144,"context_line":"                  {\u0027steps\u0027: instance.clean_steps,"},{"line_number":145,"context_line":"                   \u0027driver\u0027: instance.interface_type})"},{"line_number":146,"context_line":"        return instance"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba7be1f8_9c73c7e6","line":143,"in_reply_to":"ba7be1f8_333e962a","updated":"2015-02-27 18:27:51.000000000","message":"Done","commit_id":"d136bcf3b065c248bfe0f60e2ec7cd2abbde985c"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"a1731788e42df84301a78dc75ab728925bb622ed","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        return instance"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def get_clean_steps(self):"},{"line_number":149,"context_line":"        \"\"\"Get a list of all enabled and disabled CleanSteps for the driver.\"\"\""},{"line_number":150,"context_line":"        return self.clean_steps"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def execute_clean_step(self, task, step):"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba7be1f8_934582b5","line":149,"updated":"2015-02-27 13:07:31.000000000","message":"nit: s/driver/interface","commit_id":"d136bcf3b065c248bfe0f60e2ec7cd2abbde985c"},{"author":{"_account_id":10380,"name":"Josh Gachnang","email":"josh@pcsforeducation.com","username":"JoshNang"},"change_message_id":"1a87c98b5b6b5326da04e3d6c8134947648cee89","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        return instance"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def get_clean_steps(self):"},{"line_number":149,"context_line":"        \"\"\"Get a list of all enabled and disabled CleanSteps for the driver.\"\"\""},{"line_number":150,"context_line":"        return self.clean_steps"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def execute_clean_step(self, task, step):"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba7be1f8_bc808b8c","line":149,"in_reply_to":"ba7be1f8_934582b5","updated":"2015-02-27 18:27:51.000000000","message":"Done","commit_id":"d136bcf3b065c248bfe0f60e2ec7cd2abbde985c"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"4bb260c42f795db47b0a271cabbc746e56bc62b1","unresolved":false,"context_lines":[{"line_number":710,"context_line":"def clean_step(priority):"},{"line_number":711,"context_line":"    \"\"\"Decorator for cleaning and zapping steps."},{"line_number":712,"context_line":""},{"line_number":713,"context_line":"    If priority is greater than 1, the function will be executed as part of the"},{"line_number":714,"context_line":"    CLEANING state for any node using the driver with the decorated clean step."},{"line_number":715,"context_line":"    During CLEANING, a list of steps will be ordered by priority for all"},{"line_number":716,"context_line":"    drivers associated with the node, and then execute_clean_step() will be"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba7be1f8_3cabbb8a","line":713,"updated":"2015-02-27 17:06:29.000000000","message":"This should be \u003e\u003d 1, not \u003e 1","commit_id":"d136bcf3b065c248bfe0f60e2ec7cd2abbde985c"},{"author":{"_account_id":10380,"name":"Josh Gachnang","email":"josh@pcsforeducation.com","username":"JoshNang"},"change_message_id":"1a87c98b5b6b5326da04e3d6c8134947648cee89","unresolved":false,"context_lines":[{"line_number":710,"context_line":"def clean_step(priority):"},{"line_number":711,"context_line":"    \"\"\"Decorator for cleaning and zapping steps."},{"line_number":712,"context_line":""},{"line_number":713,"context_line":"    If priority is greater than 1, the function will be executed as part of the"},{"line_number":714,"context_line":"    CLEANING state for any node using the driver with the decorated clean step."},{"line_number":715,"context_line":"    During CLEANING, a list of steps will be ordered by priority for all"},{"line_number":716,"context_line":"    drivers associated with the node, and then execute_clean_step() will be"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba7be1f8_5c406f56","line":713,"in_reply_to":"ba7be1f8_3cabbb8a","updated":"2015-02-27 18:27:51.000000000","message":"Done","commit_id":"d136bcf3b065c248bfe0f60e2ec7cd2abbde985c"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"a1731788e42df84301a78dc75ab728925bb622ed","unresolved":false,"context_lines":[{"line_number":713,"context_line":"    If priority is greater than 1, the function will be executed as part of the"},{"line_number":714,"context_line":"    CLEANING state for any node using the driver with the decorated clean step."},{"line_number":715,"context_line":"    During CLEANING, a list of steps will be ordered by priority for all"},{"line_number":716,"context_line":"    drivers associated with the node, and then execute_clean_step() will be"},{"line_number":717,"context_line":"    called on each step. Steps will be executed based on priority, with the"},{"line_number":718,"context_line":"    highest priority step being called first, the next highest priority"},{"line_number":719,"context_line":"    being call next, and so on."}],"source_content_type":"text/x-python","patch_set":10,"id":"ba7be1f8_3325b60a","line":716,"updated":"2015-02-27 13:07:31.000000000","message":"nit: s/drivers/interfaces","commit_id":"d136bcf3b065c248bfe0f60e2ec7cd2abbde985c"},{"author":{"_account_id":10380,"name":"Josh Gachnang","email":"josh@pcsforeducation.com","username":"JoshNang"},"change_message_id":"1a87c98b5b6b5326da04e3d6c8134947648cee89","unresolved":false,"context_lines":[{"line_number":713,"context_line":"    If priority is greater than 1, the function will be executed as part of the"},{"line_number":714,"context_line":"    CLEANING state for any node using the driver with the decorated clean step."},{"line_number":715,"context_line":"    During CLEANING, a list of steps will be ordered by priority for all"},{"line_number":716,"context_line":"    drivers associated with the node, and then execute_clean_step() will be"},{"line_number":717,"context_line":"    called on each step. Steps will be executed based on priority, with the"},{"line_number":718,"context_line":"    highest priority step being called first, the next highest priority"},{"line_number":719,"context_line":"    being call next, and so on."}],"source_content_type":"text/x-python","patch_set":10,"id":"ba7be1f8_1c1d1774","line":716,"in_reply_to":"ba7be1f8_3325b60a","updated":"2015-02-27 18:27:51.000000000","message":"Done","commit_id":"d136bcf3b065c248bfe0f60e2ec7cd2abbde985c"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"a1731788e42df84301a78dc75ab728925bb622ed","unresolved":false,"context_lines":[{"line_number":727,"context_line":""},{"line_number":728,"context_line":"    Example::"},{"line_number":729,"context_line":""},{"line_number":730,"context_line":"        class MyDriver(base.BaseDriver):"},{"line_number":731,"context_line":"            # CONF.example_cleaning_priority should be an int CONF option"},{"line_number":732,"context_line":"            @base.clean_step(priority\u003dCONF.example_cleaning_priority)"},{"line_number":733,"context_line":"            def example_cleaning(self, task):"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba7be1f8_1388b2e6","line":730,"updated":"2015-02-27 13:07:31.000000000","message":"nit: s/Driver/Interface","commit_id":"d136bcf3b065c248bfe0f60e2ec7cd2abbde985c"},{"author":{"_account_id":10380,"name":"Josh Gachnang","email":"josh@pcsforeducation.com","username":"JoshNang"},"change_message_id":"1a87c98b5b6b5326da04e3d6c8134947648cee89","unresolved":false,"context_lines":[{"line_number":727,"context_line":""},{"line_number":728,"context_line":"    Example::"},{"line_number":729,"context_line":""},{"line_number":730,"context_line":"        class MyDriver(base.BaseDriver):"},{"line_number":731,"context_line":"            # CONF.example_cleaning_priority should be an int CONF option"},{"line_number":732,"context_line":"            @base.clean_step(priority\u003dCONF.example_cleaning_priority)"},{"line_number":733,"context_line":"            def example_cleaning(self, task):"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba7be1f8_5fece1c7","line":730,"in_reply_to":"ba7be1f8_1388b2e6","updated":"2015-02-27 18:27:51.000000000","message":"Done","commit_id":"d136bcf3b065c248bfe0f60e2ec7cd2abbde985c"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"82c89d0aba9b1f6832ace4d8a8f6e9cd530387f4","unresolved":false,"context_lines":[{"line_number":734,"context_line":"                # do some cleaning"},{"line_number":735,"context_line":""},{"line_number":736,"context_line":"    :param priority: an integer priority, should be a CONF option"},{"line_number":737,"context_line":"    \"\"\""},{"line_number":738,"context_line":"    def decorator(func):"},{"line_number":739,"context_line":"        func._is_clean_step \u003d True"},{"line_number":740,"context_line":"        func._clean_step_priority \u003d priority"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba7be1f8_1f3189a2","line":737,"updated":"2015-02-27 17:20:02.000000000","message":"Should there be some check to make sure it is 0 or greater and an int?","commit_id":"d136bcf3b065c248bfe0f60e2ec7cd2abbde985c"},{"author":{"_account_id":10380,"name":"Josh Gachnang","email":"josh@pcsforeducation.com","username":"JoshNang"},"change_message_id":"1a87c98b5b6b5326da04e3d6c8134947648cee89","unresolved":false,"context_lines":[{"line_number":734,"context_line":"                # do some cleaning"},{"line_number":735,"context_line":""},{"line_number":736,"context_line":"    :param priority: an integer priority, should be a CONF option"},{"line_number":737,"context_line":"    \"\"\""},{"line_number":738,"context_line":"    def decorator(func):"},{"line_number":739,"context_line":"        func._is_clean_step \u003d True"},{"line_number":740,"context_line":"        func._clean_step_priority \u003d priority"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba7be1f8_bf1f9db6","line":737,"in_reply_to":"ba7be1f8_1f3189a2","updated":"2015-02-27 18:27:51.000000000","message":"Done","commit_id":"d136bcf3b065c248bfe0f60e2ec7cd2abbde985c"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"498bdbadae118391419f651f35b89cfa86d11a31","unresolved":false,"context_lines":[{"line_number":746,"context_line":""},{"line_number":747,"context_line":"        if not isinstance(priority, int):"},{"line_number":748,"context_line":"            LOG.error(_LE(\u0027Priority for @clean_step %(step)s should be an \u0027"},{"line_number":749,"context_line":"                          \u0027integer, got %(priority)s\u0027),"},{"line_number":750,"context_line":"                      {\u0027step\u0027: func.__name__, \u0027priority\u0027: priority})"},{"line_number":751,"context_line":"        elif priority \u003c 0:"},{"line_number":752,"context_line":"            LOG.error(_LE(\u0027Priority for @clean_step %(step)s should be greater\u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba7be1f8_ab4aff52","line":749,"updated":"2015-02-27 18:44:46.000000000","message":"We should do one of two things here, and I\u0027m not sure which:\n\n1) Say something that we\u0027re ignoring this step.\n2) Bomb out with an exception.\n\nI\u0027m leaning toward (2) but I would like to hear others\u0027 thoughts on this.","commit_id":"bc52d2059a099686b4ff04f7f65b2d64a7357f39"},{"author":{"_account_id":10380,"name":"Josh Gachnang","email":"josh@pcsforeducation.com","username":"JoshNang"},"change_message_id":"f20128c35d8b8984413987be1017150a77bc8cac","unresolved":false,"context_lines":[{"line_number":746,"context_line":""},{"line_number":747,"context_line":"        if not isinstance(priority, int):"},{"line_number":748,"context_line":"            LOG.error(_LE(\u0027Priority for @clean_step %(step)s should be an \u0027"},{"line_number":749,"context_line":"                          \u0027integer, got %(priority)s\u0027),"},{"line_number":750,"context_line":"                      {\u0027step\u0027: func.__name__, \u0027priority\u0027: priority})"},{"line_number":751,"context_line":"        elif priority \u003c 0:"},{"line_number":752,"context_line":"            LOG.error(_LE(\u0027Priority for @clean_step %(step)s should be greater\u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba7be1f8_607bc129","line":749,"in_reply_to":"ba7be1f8_ab4aff52","updated":"2015-02-27 19:41:57.000000000","message":"As discussed on IRC: I\u0027m going to go with option 3: these will be checked at conductor load time, along with making sure there aren\u0027t conflicts, and if so, blowing up.","commit_id":"bc52d2059a099686b4ff04f7f65b2d64a7357f39"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"498bdbadae118391419f651f35b89cfa86d11a31","unresolved":false,"context_lines":[{"line_number":750,"context_line":"                      {\u0027step\u0027: func.__name__, \u0027priority\u0027: priority})"},{"line_number":751,"context_line":"        elif priority \u003c 0:"},{"line_number":752,"context_line":"            LOG.error(_LE(\u0027Priority for @clean_step %(step)s should be greater\u0027"},{"line_number":753,"context_line":"                          \u0027 than or equal to 0, got %(priority)s.\u0027),"},{"line_number":754,"context_line":"                      {\u0027step\u0027: func.__name__, \u0027priority\u0027: priority})"},{"line_number":755,"context_line":"        else:"},{"line_number":756,"context_line":"            LOG.debug(\u0027Added @clean_step %(step) with priority %(priority\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba7be1f8_2b6e0fca","line":753,"updated":"2015-02-27 18:44:46.000000000","message":"Ditto","commit_id":"bc52d2059a099686b4ff04f7f65b2d64a7357f39"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"5a0a0a3de0829cb61a4e9c8a06b8d40651d13c8e","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        # Cache the clean step iteration. We use __new__ instead of __init___"},{"line_number":132,"context_line":"        # to avoid breaking backwards compatibility with all the drivers."},{"line_number":133,"context_line":"        # We want to return all steps, regardless of priority."},{"line_number":134,"context_line":"        instance \u003d object.__new__(cls, *args, **kwargs)"},{"line_number":135,"context_line":"        instance.clean_steps \u003d []"},{"line_number":136,"context_line":"        for n, method in inspect.getmembers(instance, inspect.ismethod):"},{"line_number":137,"context_line":"            if getattr(method, \u0027_is_clean_step\u0027, False):"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba7be1f8_f3f2229a","line":134,"updated":"2015-02-27 23:53:47.000000000","message":"Should \u0027super\u0027 be used here?  I\u0027ve seen it used other places, but I\u0027m not sure when it is used or not used.  I see it being used on line 502 of this file.\n\n instance \u003d super(BaseInterface, cls).__new__(cls, *args, **kwargs)","commit_id":"798c2edbb63abfa30c71982ba940219872b2eaf6"},{"author":{"_account_id":10380,"name":"Josh Gachnang","email":"josh@pcsforeducation.com","username":"JoshNang"},"change_message_id":"16c554d4edce420ff2592123082aa90f37ba0b91","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        # Cache the clean step iteration. We use __new__ instead of __init___"},{"line_number":132,"context_line":"        # to avoid breaking backwards compatibility with all the drivers."},{"line_number":133,"context_line":"        # We want to return all steps, regardless of priority."},{"line_number":134,"context_line":"        instance \u003d object.__new__(cls, *args, **kwargs)"},{"line_number":135,"context_line":"        instance.clean_steps \u003d []"},{"line_number":136,"context_line":"        for n, method in inspect.getmembers(instance, inspect.ismethod):"},{"line_number":137,"context_line":"            if getattr(method, \u0027_is_clean_step\u0027, False):"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba7be1f8_337cbab5","line":134,"in_reply_to":"ba7be1f8_f3f2229a","updated":"2015-02-28 00:37:17.000000000","message":"Those are in __init__(), which is Python\u0027s sort-of-constructor. __new__ is for modifying an instance before actually creating it. If we did __init__, we would break basically all downstream drivers, because they likely don\u0027t call super(). Super is used to call your parent\u0027s functions when you\u0027re overriding them.\n\nThe docs explain super() better than I can: https://docs.python.org/2/library/functions.html#super\n\nI\u0027m also pretty sure you wouldn\u0027t use super() when your parent is \u0027object\u0027.","commit_id":"798c2edbb63abfa30c71982ba940219872b2eaf6"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"5a0a0a3de0829cb61a4e9c8a06b8d40651d13c8e","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        # We want to return all steps, regardless of priority."},{"line_number":134,"context_line":"        instance \u003d object.__new__(cls, *args, **kwargs)"},{"line_number":135,"context_line":"        instance.clean_steps \u003d []"},{"line_number":136,"context_line":"        for n, method in inspect.getmembers(instance, inspect.ismethod):"},{"line_number":137,"context_line":"            if getattr(method, \u0027_is_clean_step\u0027, False):"},{"line_number":138,"context_line":"                # Create a CleanStep to represent this method"},{"line_number":139,"context_line":"                step \u003d {\u0027step\u0027: method.__name__,"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba7be1f8_33fe7aaf","line":136,"updated":"2015-02-27 23:53:47.000000000","message":"nit: if \u0027n\u0027 is not being used I think the idiom is to use \u0027_\u0027\n\n for _, method in ...","commit_id":"798c2edbb63abfa30c71982ba940219872b2eaf6"},{"author":{"_account_id":10380,"name":"Josh Gachnang","email":"josh@pcsforeducation.com","username":"JoshNang"},"change_message_id":"16c554d4edce420ff2592123082aa90f37ba0b91","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        # We want to return all steps, regardless of priority."},{"line_number":134,"context_line":"        instance \u003d object.__new__(cls, *args, **kwargs)"},{"line_number":135,"context_line":"        instance.clean_steps \u003d []"},{"line_number":136,"context_line":"        for n, method in inspect.getmembers(instance, inspect.ismethod):"},{"line_number":137,"context_line":"            if getattr(method, \u0027_is_clean_step\u0027, False):"},{"line_number":138,"context_line":"                # Create a CleanStep to represent this method"},{"line_number":139,"context_line":"                step \u003d {\u0027step\u0027: method.__name__,"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba7be1f8_b6f6d8f7","line":136,"in_reply_to":"ba7be1f8_33fe7aaf","updated":"2015-02-28 00:37:17.000000000","message":"Done","commit_id":"798c2edbb63abfa30c71982ba940219872b2eaf6"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"5ec02b403cd2824038d07f55107e9270b4e14df2","unresolved":false,"context_lines":[{"line_number":140,"context_line":"                        \u0027priority\u0027: method._clean_step_priority,"},{"line_number":141,"context_line":"                        \u0027interface\u0027: instance.interface_type}"},{"line_number":142,"context_line":"                instance.clean_steps.append(step)"},{"line_number":143,"context_line":"        LOG.debug(\u0027Found clean steps %(steps)s for interface %(interface)s\u0027 %"},{"line_number":144,"context_line":"                  {\u0027steps\u0027: instance.clean_steps,"},{"line_number":145,"context_line":"                   \u0027interface\u0027: instance.interface_type})"},{"line_number":146,"context_line":"        return instance"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba7be1f8_b086e0d9","line":143,"updated":"2015-02-27 23:09:38.000000000","message":"Is this always going to have something to output?  Maybe:\n\n if instance.clean_steps:\n  ....","commit_id":"798c2edbb63abfa30c71982ba940219872b2eaf6"},{"author":{"_account_id":10380,"name":"Josh Gachnang","email":"josh@pcsforeducation.com","username":"JoshNang"},"change_message_id":"464fd5c2365e412ee829890d3471b8daed91e511","unresolved":false,"context_lines":[{"line_number":140,"context_line":"                        \u0027priority\u0027: method._clean_step_priority,"},{"line_number":141,"context_line":"                        \u0027interface\u0027: instance.interface_type}"},{"line_number":142,"context_line":"                instance.clean_steps.append(step)"},{"line_number":143,"context_line":"        LOG.debug(\u0027Found clean steps %(steps)s for interface %(interface)s\u0027 %"},{"line_number":144,"context_line":"                  {\u0027steps\u0027: instance.clean_steps,"},{"line_number":145,"context_line":"                   \u0027interface\u0027: instance.interface_type})"},{"line_number":146,"context_line":"        return instance"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba7be1f8_d053546a","line":143,"in_reply_to":"ba7be1f8_b086e0d9","updated":"2015-02-27 23:13:01.000000000","message":"clean_steps defaults to [], and I think it\u0027s reasonable to output that, showing it found no clean_steps.","commit_id":"798c2edbb63abfa30c71982ba940219872b2eaf6"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"a67990d9c3ee1eb74ac5adb527c88f8db98f968f","unresolved":false,"context_lines":[{"line_number":140,"context_line":"                        \u0027priority\u0027: method._clean_step_priority,"},{"line_number":141,"context_line":"                        \u0027interface\u0027: instance.interface_type}"},{"line_number":142,"context_line":"                instance.clean_steps.append(step)"},{"line_number":143,"context_line":"        LOG.debug(\u0027Found clean steps %(steps)s for interface %(interface)s\u0027 %"},{"line_number":144,"context_line":"                  {\u0027steps\u0027: instance.clean_steps,"},{"line_number":145,"context_line":"                   \u0027interface\u0027: instance.interface_type})"},{"line_number":146,"context_line":"        return instance"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba7be1f8_73ec722a","line":143,"in_reply_to":"ba7be1f8_d053546a","updated":"2015-02-27 23:31:24.000000000","message":"Works for me!","commit_id":"798c2edbb63abfa30c71982ba940219872b2eaf6"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"5a0a0a3de0829cb61a4e9c8a06b8d40651d13c8e","unresolved":false,"context_lines":[{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        Clean steps should take a single argument: a TaskManager object."},{"line_number":156,"context_line":"        Steps can be executed synchronously or asynchronously. Steps should"},{"line_number":157,"context_line":"        return states.CLEANING if the method has completed synchronously"},{"line_number":158,"context_line":"        or None if the step will continue to execute asynchronously. If the"},{"line_number":159,"context_line":"        step executes asynchronously, it should call issue a"},{"line_number":160,"context_line":"        \u0027continue_node_clean\u0027 RPC, so the conductor can begin the next"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba7be1f8_b30fca87","line":157,"updated":"2015-02-27 23:53:47.000000000","message":"Is this correct?  CLEANING if it has completed?","commit_id":"798c2edbb63abfa30c71982ba940219872b2eaf6"},{"author":{"_account_id":10380,"name":"Josh Gachnang","email":"josh@pcsforeducation.com","username":"JoshNang"},"change_message_id":"16c554d4edce420ff2592123082aa90f37ba0b91","unresolved":false,"context_lines":[{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        Clean steps should take a single argument: a TaskManager object."},{"line_number":156,"context_line":"        Steps can be executed synchronously or asynchronously. Steps should"},{"line_number":157,"context_line":"        return states.CLEANING if the method has completed synchronously"},{"line_number":158,"context_line":"        or None if the step will continue to execute asynchronously. If the"},{"line_number":159,"context_line":"        step executes asynchronously, it should call issue a"},{"line_number":160,"context_line":"        \u0027continue_node_clean\u0027 RPC, so the conductor can begin the next"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba7be1f8_93448675","line":157,"in_reply_to":"ba7be1f8_b30fca87","updated":"2015-02-28 00:37:17.000000000","message":"Nope, you\u0027re correct, it\u0027s CLEANING for async. Nice catch.","commit_id":"798c2edbb63abfa30c71982ba940219872b2eaf6"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"5a0a0a3de0829cb61a4e9c8a06b8d40651d13c8e","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        Steps can be executed synchronously or asynchronously. Steps should"},{"line_number":157,"context_line":"        return states.CLEANING if the method has completed synchronously"},{"line_number":158,"context_line":"        or None if the step will continue to execute asynchronously. If the"},{"line_number":159,"context_line":"        step executes asynchronously, it should call issue a"},{"line_number":160,"context_line":"        \u0027continue_node_clean\u0027 RPC, so the conductor can begin the next"},{"line_number":161,"context_line":"        clean step."},{"line_number":162,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"ba7be1f8_331bdacb","line":159,"updated":"2015-02-27 23:53:47.000000000","message":"s/should call issue a/should issue a call to/","commit_id":"798c2edbb63abfa30c71982ba940219872b2eaf6"},{"author":{"_account_id":10380,"name":"Josh Gachnang","email":"josh@pcsforeducation.com","username":"JoshNang"},"change_message_id":"16c554d4edce420ff2592123082aa90f37ba0b91","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        Steps can be executed synchronously or asynchronously. Steps should"},{"line_number":157,"context_line":"        return states.CLEANING if the method has completed synchronously"},{"line_number":158,"context_line":"        or None if the step will continue to execute asynchronously. If the"},{"line_number":159,"context_line":"        step executes asynchronously, it should call issue a"},{"line_number":160,"context_line":"        \u0027continue_node_clean\u0027 RPC, so the conductor can begin the next"},{"line_number":161,"context_line":"        clean step."},{"line_number":162,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"ba7be1f8_9699d470","line":159,"in_reply_to":"ba7be1f8_331bdacb","updated":"2015-02-28 00:37:17.000000000","message":"Done","commit_id":"798c2edbb63abfa30c71982ba940219872b2eaf6"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"37769139881a870529c4f1801d51db766194c7cc","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        # We want to return all steps, regardless of priority."},{"line_number":134,"context_line":"        instance \u003d super(BaseInterface, cls).__new__(cls, *args, **kwargs)"},{"line_number":135,"context_line":"        instance.clean_steps \u003d []"},{"line_number":136,"context_line":"        for _, method in inspect.getmembers(instance, inspect.ismethod):"},{"line_number":137,"context_line":"            if getattr(method, \u0027_is_clean_step\u0027, False):"},{"line_number":138,"context_line":"                # Create a CleanStep to represent this method"},{"line_number":139,"context_line":"                step \u003d {\u0027step\u0027: method.__name__,"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba7be1f8_f6069020","line":136,"updated":"2015-02-28 00:53:07.000000000","message":"Not sure if using _ is a good idea, that\u0027s going to confuse the heck out of someone when they decide to translate something around here.","commit_id":"48fda7b5c2e39ea6c6e36c27e0fc5b6e406e339d"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"ba8f4bbb11dda70822f0a4a7cb56b370f95705cd","unresolved":false,"context_lines":[{"line_number":162,"context_line":""},{"line_number":163,"context_line":"        :param task: A TaskManager object"},{"line_number":164,"context_line":"        :param step: A CleanStep object to execute"},{"line_number":165,"context_line":"        :returns: states.CLEANING if the method is complete, or None if"},{"line_number":166,"context_line":"            the step will continue to execute asynchronously."},{"line_number":167,"context_line":"        \"\"\""},{"line_number":168,"context_line":"        return getattr(self, step.get(\u0027step\u0027))(task)"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba7be1f8_04f4cecd","line":165,"updated":"2015-02-28 02:02:53.000000000","message":"this needs to be correct just like you corrected above in the previous patchset.","commit_id":"74c767769fc5b11a755ec57fce6e76c4f09e2852"}],"ironic/tests/drivers/test_base.py":[{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"c35d95cf48ed04d5b25371451f2bfa8ba5f169b8","unresolved":false,"context_lines":[{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        obj \u003d TestClass()"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        self.assertEqual(2, len(obj.get_clean_steps()))"},{"line_number":138,"context_line":"        # Ensure the steps look correct"},{"line_number":139,"context_line":"        self.assertEqual(10, obj.get_clean_steps()[0].priority)"},{"line_number":140,"context_line":"        self.assertEqual(\u0027test\u0027, obj.get_clean_steps()[0].driver)"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba7be1f8_7eac9c8c","line":137,"updated":"2015-02-26 06:33:17.000000000","message":"May be add one more non-decorated method to TestClass and this assertion would be more meaningful.","commit_id":"2e582aa3cefadc2ae915152585a687c4d6e3701c"},{"author":{"_account_id":10380,"name":"Josh Gachnang","email":"josh@pcsforeducation.com","username":"JoshNang"},"change_message_id":"e7a98f91a84455fbfb9a99dc31bcf0b5822de47f","unresolved":false,"context_lines":[{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        obj \u003d TestClass()"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        self.assertEqual(2, len(obj.get_clean_steps()))"},{"line_number":138,"context_line":"        # Ensure the steps look correct"},{"line_number":139,"context_line":"        self.assertEqual(10, obj.get_clean_steps()[0].priority)"},{"line_number":140,"context_line":"        self.assertEqual(\u0027test\u0027, obj.get_clean_steps()[0].driver)"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba7be1f8_d1ef16e8","line":137,"in_reply_to":"ba7be1f8_7eac9c8c","updated":"2015-02-26 20:31:36.000000000","message":"Done","commit_id":"2e582aa3cefadc2ae915152585a687c4d6e3701c"}]}
