)]}'
{"ironic/conductor/base_manager.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"1a5309cfaa0a76ba599c8902b5ee1964ec8f41b7","unresolved":false,"context_lines":[{"line_number":276,"context_line":"        for ht_name, ht in hardware_types.items():"},{"line_number":277,"context_line":"            interface_map \u003d driver_factory.enabled_supported_interfaces(ht)"},{"line_number":278,"context_line":"            for interface_type, interface_names in interface_map.items():"},{"line_number":279,"context_line":"                default_interface \u003d driver_factory.default_interface("},{"line_number":280,"context_line":"                    ht, interface_type)"},{"line_number":281,"context_line":"                if default_interface is None:"},{"line_number":282,"context_line":"                    raise exception.NoValidDefaultForInterface("}],"source_content_type":"text/x-python","patch_set":1,"id":"3a461143_67a7300b","line":279,"updated":"2017-01-31 19:50:54.000000000","message":"if it is not possible to have no default interface, wouldn\u0027t it make more sense for driver_factory.default_interface() to raise the exception?","commit_id":"93238a72e1c7d2bb88e10bc34bb76861f031370b"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"f54b85eb640907e724e4cbf04aad0001db601dc2","unresolved":false,"context_lines":[{"line_number":276,"context_line":"        for ht_name, ht in hardware_types.items():"},{"line_number":277,"context_line":"            interface_map \u003d driver_factory.enabled_supported_interfaces(ht)"},{"line_number":278,"context_line":"            for interface_type, interface_names in interface_map.items():"},{"line_number":279,"context_line":"                default_interface \u003d driver_factory.default_interface("},{"line_number":280,"context_line":"                    ht, interface_type)"},{"line_number":281,"context_line":"                if default_interface is None:"},{"line_number":282,"context_line":"                    raise exception.NoValidDefaultForInterface("}],"source_content_type":"text/x-python","patch_set":1,"id":"3a461143_a550ff5f","line":279,"in_reply_to":"3a461143_05871313","updated":"2017-02-02 15:05:26.000000000","message":"Well, maybe not. We can\u0027t log the node ID if we raise it there, nor the name of the driver, without some hacks. I\u0027d like to leave it as is for now.","commit_id":"93238a72e1c7d2bb88e10bc34bb76861f031370b"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"7939b8a479dbb2bf77299c795202443c9791d4a5","unresolved":false,"context_lines":[{"line_number":276,"context_line":"        for ht_name, ht in hardware_types.items():"},{"line_number":277,"context_line":"            interface_map \u003d driver_factory.enabled_supported_interfaces(ht)"},{"line_number":278,"context_line":"            for interface_type, interface_names in interface_map.items():"},{"line_number":279,"context_line":"                default_interface \u003d driver_factory.default_interface("},{"line_number":280,"context_line":"                    ht, interface_type)"},{"line_number":281,"context_line":"                if default_interface is None:"},{"line_number":282,"context_line":"                    raise exception.NoValidDefaultForInterface("}],"source_content_type":"text/x-python","patch_set":1,"id":"3a461143_05871313","line":279,"in_reply_to":"3a461143_67a7300b","updated":"2017-02-01 22:36:27.000000000","message":"Yeah, makes sense to me. Done.","commit_id":"93238a72e1c7d2bb88e10bc34bb76861f031370b"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"d8bfdf0a656bee1c0ca83fe240f153b84250d516","unresolved":false,"context_lines":[{"line_number":276,"context_line":"        for ht_name, ht in hardware_types.items():"},{"line_number":277,"context_line":"            interface_map \u003d driver_factory.enabled_supported_interfaces(ht)"},{"line_number":278,"context_line":"            for interface_type, interface_names in interface_map.items():"},{"line_number":279,"context_line":"                default_interface \u003d driver_factory.default_interface("},{"line_number":280,"context_line":"                    ht, interface_type)"},{"line_number":281,"context_line":"                if default_interface is None:"},{"line_number":282,"context_line":"                    raise exception.NoValidDefaultForInterface("}],"source_content_type":"text/x-python","patch_set":1,"id":"3a461143_76cf92b3","line":279,"in_reply_to":"3a461143_a550ff5f","updated":"2017-02-02 15:34:03.000000000","message":"I still think driver_factory.default_interface() should be raising the exception. It can be caught here and reraised with a new msg.\n\nFor that matter, at this point (well, L283), the exception msg will be something like \u0027No default value found for \u003cinterface-type\u003e interface for node None with driver or hardware type \u003cdriver\u003e\u0027. In this case, I don\u0027t think we should put \u0027for node None\u0027. We either need two different exceptions or we massage the msg depending on the circumstances.","commit_id":"93238a72e1c7d2bb88e10bc34bb76861f031370b"},{"author":{"_account_id":23883,"name":"Joanna Taryma","email":"joanna.taryma@intel.com","username":"jtaryma"},"change_message_id":"b9e2c6e07c04ff71fa169760b476bd1f960aaf7f","unresolved":false,"context_lines":[{"line_number":279,"context_line":"                default_interface \u003d driver_factory.default_interface("},{"line_number":280,"context_line":"                    ht, interface_type)"},{"line_number":281,"context_line":"                if default_interface is None:"},{"line_number":282,"context_line":"                    raise exception.NoValidDefaultForInterface("},{"line_number":283,"context_line":"                        interface_type\u003dinterface_type, node\u003dNone, driver\u003dht)"},{"line_number":284,"context_line":"                self.conductor.register_hardware_interfaces(ht_name,"},{"line_number":285,"context_line":"                                                            interface_type,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a461143_2cbc2fba","line":282,"updated":"2017-01-31 19:30:50.000000000","message":"shouldn\u0027t this exception be caught \u0026 reraised in \u0027init_host\u0027 like other exceptions?\n\nI understand that the idea is to fail start, but if I inderstand init_host reraise handling properly, it seems more graceful.","commit_id":"93238a72e1c7d2bb88e10bc34bb76861f031370b"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"7939b8a479dbb2bf77299c795202443c9791d4a5","unresolved":false,"context_lines":[{"line_number":279,"context_line":"                default_interface \u003d driver_factory.default_interface("},{"line_number":280,"context_line":"                    ht, interface_type)"},{"line_number":281,"context_line":"                if default_interface is None:"},{"line_number":282,"context_line":"                    raise exception.NoValidDefaultForInterface("},{"line_number":283,"context_line":"                        interface_type\u003dinterface_type, node\u003dNone, driver\u003dht)"},{"line_number":284,"context_line":"                self.conductor.register_hardware_interfaces(ht_name,"},{"line_number":285,"context_line":"                                                            interface_type,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a461143_a5c0ff7d","line":282,"in_reply_to":"3a461143_2cbc2fba","updated":"2017-02-01 22:36:27.000000000","message":"Yep, +1, good point. This would actually be a bug because del_host wouldn\u0027t be called and the conductor would still be registered.","commit_id":"93238a72e1c7d2bb88e10bc34bb76861f031370b"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"969bd81105fe102b10b6a5fc7cc30d08c4dd6d59","unresolved":false,"context_lines":[{"line_number":277,"context_line":"                    ht, interface_type)"},{"line_number":278,"context_line":"                if default_interface is None:"},{"line_number":279,"context_line":"                    raise exception.NoValidDefaultForInterface("},{"line_number":280,"context_line":"                        interface_type\u003dinterface_type, node\u003dNone, driver\u003dht)"},{"line_number":281,"context_line":"                self.conductor.register_hardware_interfaces(ht_name,"},{"line_number":282,"context_line":"                                                            interface_type,"},{"line_number":283,"context_line":"                                                            interface_names,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a461143_eb9aaac4","line":280,"updated":"2017-02-02 22:36:52.000000000","message":"I think s/ht/ht_name/.","commit_id":"6206c47720eb16719088540a48b53fb22a4eb999"}],"ironic/tests/unit/conductor/test_manager.py":[{"author":{"_account_id":23883,"name":"Joanna Taryma","email":"joanna.taryma@intel.com","username":"jtaryma"},"change_message_id":"b9e2c6e07c04ff71fa169760b476bd1f960aaf7f","unresolved":false,"context_lines":[{"line_number":3844,"context_line":"    raid_interface \u003d \u0027fake\u0027"},{"line_number":3845,"context_line":""},{"line_number":3846,"context_line":"    def test_get_raid_logical_disk_properties_iface_not_supported(self):"},{"line_number":3847,"context_line":"        # NOTE(jroll) we don\u0027t run this test as get_logical_disk_properties"},{"line_number":3848,"context_line":"        # is supported on all RAID implementations, and we cannot have a"},{"line_number":3849,"context_line":"        # null interface for a hardware type"},{"line_number":3850,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a461143_817a4cbb","line":3847,"updated":"2017-01-31 19:30:50.000000000","message":"s/get_logical_disk_properties/get_raid_logical_disk_properties/","commit_id":"93238a72e1c7d2bb88e10bc34bb76861f031370b"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"7939b8a479dbb2bf77299c795202443c9791d4a5","unresolved":false,"context_lines":[{"line_number":3844,"context_line":"    raid_interface \u003d \u0027fake\u0027"},{"line_number":3845,"context_line":""},{"line_number":3846,"context_line":"    def test_get_raid_logical_disk_properties_iface_not_supported(self):"},{"line_number":3847,"context_line":"        # NOTE(jroll) we don\u0027t run this test as get_logical_disk_properties"},{"line_number":3848,"context_line":"        # is supported on all RAID implementations, and we cannot have a"},{"line_number":3849,"context_line":"        # null interface for a hardware type"},{"line_number":3850,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a461143_a5d9df85","line":3847,"in_reply_to":"3a461143_817a4cbb","updated":"2017-02-01 22:36:27.000000000","message":"get_logical_disk_properties() is the method on the raid interface that I\u0027m mentioning here: https://github.com/openstack/ironic/blob/master/ironic/drivers/base.py#L943","commit_id":"93238a72e1c7d2bb88e10bc34bb76861f031370b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"74207b083e0730bfb5aeafe09c82775fec7911bf","unresolved":false,"context_lines":[{"line_number":3847,"context_line":"        # NOTE(jroll) we don\u0027t run this test as get_logical_disk_properties"},{"line_number":3848,"context_line":"        # is supported on all RAID implementations, and we cannot have a"},{"line_number":3849,"context_line":"        # null interface for a hardware type"},{"line_number":3850,"context_line":"        pass"},{"line_number":3851,"context_line":""},{"line_number":3852,"context_line":"    def test_set_target_raid_config_iface_not_supported(self):"},{"line_number":3853,"context_line":"        # NOTE(jroll): it\u0027s impossible for a dynamic driver to have a null"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a461143_977b2729","line":3850,"updated":"2017-02-02 10:44:54.000000000","message":"why not just delete it?","commit_id":"6206c47720eb16719088540a48b53fb22a4eb999"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"f285d9cda7e81767113ea35c9a716123a2d44680","unresolved":false,"context_lines":[{"line_number":3847,"context_line":"        # NOTE(jroll) we don\u0027t run this test as get_logical_disk_properties"},{"line_number":3848,"context_line":"        # is supported on all RAID implementations, and we cannot have a"},{"line_number":3849,"context_line":"        # null interface for a hardware type"},{"line_number":3850,"context_line":"        pass"},{"line_number":3851,"context_line":""},{"line_number":3852,"context_line":"    def test_set_target_raid_config_iface_not_supported(self):"},{"line_number":3853,"context_line":"        # NOTE(jroll): it\u0027s impossible for a dynamic driver to have a null"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a461143_e50d8e38","line":3850,"in_reply_to":"3a461143_977b2729","updated":"2017-02-02 14:19:38.000000000","message":"This inherits from RaidTestCases, so without overriding it here, we\u0027d run the test from RaidTestCases, which definitely won\u0027t work :)","commit_id":"6206c47720eb16719088540a48b53fb22a4eb999"}],"releasenotes/notes/conductor-startup-invalid-defaults-b7bd0589a3bf474b.yaml":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"74207b083e0730bfb5aeafe09c82775fec7911bf","unresolved":false,"context_lines":[{"line_number":2,"context_line":"upgrade:"},{"line_number":3,"context_line":"  - The conductor will now fail to start up if invalid configuration is"},{"line_number":4,"context_line":"    provided, such that a default interface implementation for any enabled"},{"line_number":5,"context_line":"    hardware type cannot be found."}],"source_content_type":"text/x-yaml","patch_set":2,"id":"3a461143_7786bb14","line":5,"updated":"2017-02-02 10:44:54.000000000","message":"I\u0027d shorten it to \"The conductor will now fail to start up if a default interface implementation for any enabled hardware type cannot be found.\"\n\nand just like in the previous patch, it\u0027s not really an upgrade concern, as we did not have hardware types in previous version.","commit_id":"6206c47720eb16719088540a48b53fb22a4eb999"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"f285d9cda7e81767113ea35c9a716123a2d44680","unresolved":false,"context_lines":[{"line_number":2,"context_line":"upgrade:"},{"line_number":3,"context_line":"  - The conductor will now fail to start up if invalid configuration is"},{"line_number":4,"context_line":"    provided, such that a default interface implementation for any enabled"},{"line_number":5,"context_line":"    hardware type cannot be found."}],"source_content_type":"text/x-yaml","patch_set":2,"id":"3a461143_053a9acd","line":5,"in_reply_to":"3a461143_7786bb14","updated":"2017-02-02 14:19:38.000000000","message":"Right, see the commit message where I mention that exactly. I plan to combine all of the driver composition release notes before we release ocata.","commit_id":"6206c47720eb16719088540a48b53fb22a4eb999"}]}
