)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a74a71edd38a4f4f69acccdb9c3efdbe69e00158","unresolved":true,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Set the conductor online after we have register hardare"},{"line_number":10,"context_line":"interfaces, to prevent each driver comming online one"},{"line_number":11,"context_line":"at a time."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I6ef3e6e36b96106faf4581509d9219e5c535a6d8"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"6b07fa8b_b8323d69","line":11,"updated":"2020-12-03 17:04:21.000000000","message":"It would be good to have a story or bug or something that explains why this is desirable. As I\u0027m not sure this is an attempt to work around a bug, or alter the designed behavior to make a consumer engaging Ironic happier in a case that would end up possibly changing/breaking if \u003e1 conductors were in the mix.","commit_id":"c7784da05725e11567433b4fe7b292fb86916eac"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"6f2470d7b4a0f36190056baa9a460e17f3fad157","unresolved":false,"context_lines":[{"line_number":7,"context_line":"WIP: Register all hardware_interfaces together"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Prevent each driver comming online one at a time. So that"},{"line_number":10,"context_line":"/driver returns nothign until all interfaces are registered"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Story: #2008423"},{"line_number":13,"context_line":"Task: #41368"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"0ea4bb65_be3be593","line":10,"updated":"2020-12-11 12:42:28.000000000","message":"nit: /v1/drivers, \"nothing\"","commit_id":"a2d5bcfb642d422f1e4b9024145e4923606852c3"}],"ironic/conductor/base_manager.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a74a71edd38a4f4f69acccdb9c3efdbe69e00158","unresolved":true,"context_lines":[{"line_number":187,"context_line":"        # register hardware types and interfaces supported by this conductor"},{"line_number":188,"context_line":"        # and validate them against other conductors"},{"line_number":189,"context_line":"        try:"},{"line_number":190,"context_line":"            self._register_and_validate_hardware_interfaces(hardware_types)"},{"line_number":191,"context_line":"        except (exception.DriverLoadError, exception.DriverNotFound,"},{"line_number":192,"context_line":"                exception.ConductorHardwareInterfacesAlreadyRegistered,"},{"line_number":193,"context_line":"                exception.InterfaceNotFoundInEntrypoint,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3265d169_f9f92678","side":"PARENT","line":190,"updated":"2020-12-03 17:04:21.000000000","message":"FWIW, this should be exiting with the drivers table populated. I guess we\u0027re trying to just push the conductor being marked online before the drivers are running.","commit_id":"a08da8551a66815bedef7c6444fde5f9082a6aea"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"6f2470d7b4a0f36190056baa9a460e17f3fad157","unresolved":false,"context_lines":[{"line_number":374,"context_line":"        self.conductor.unregister_all_hardware_interfaces()"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"        interfaces \u003d []"},{"line_number":377,"context_line":"        for ht_name, ht in hardware_types.items():"},{"line_number":378,"context_line":"            interface_map \u003d driver_factory.enabled_supported_interfaces(ht)"},{"line_number":379,"context_line":"            for interface_type, interface_names in interface_map.items():"},{"line_number":380,"context_line":"                default_interface \u003d driver_factory.default_interface("}],"source_content_type":"text/x-python","patch_set":3,"id":"78b91275_d3ffa80a","line":377,"updated":"2020-12-11 12:42:28.000000000","message":"Ideally, I\u0027d prefer us to register each hardware type separately. I don\u0027t have any strict objections against your approach, but I have a feeling that registering per type is cleaner.\n\nI think the crux of the problem that BMO faces is that some drivers are not fully usable even though they are shown in /v1/drivers? If so, registering each hardware type automically will solve it.","commit_id":"a2d5bcfb642d422f1e4b9024145e4923606852c3"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a28021018683e464c0c924f4f6eae856c9e91949","unresolved":false,"context_lines":[{"line_number":374,"context_line":"        self.conductor.unregister_all_hardware_interfaces()"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"        interfaces \u003d []"},{"line_number":377,"context_line":"        for ht_name, ht in hardware_types.items():"},{"line_number":378,"context_line":"            interface_map \u003d driver_factory.enabled_supported_interfaces(ht)"},{"line_number":379,"context_line":"            for interface_type, interface_names in interface_map.items():"},{"line_number":380,"context_line":"                default_interface \u003d driver_factory.default_interface("}],"source_content_type":"text/x-python","patch_set":3,"id":"af79fcbb_c7cb6dc6","line":377,"in_reply_to":"1d34ab78_ef0fc77a","updated":"2020-12-16 15:57:47.000000000","message":"I\u0027d slightly prefer it to be fixed in BMO then. Do you think it\u0027s possible?\n\nI still think it\u0027s useful to register a hardware type complete in ironic, just not so sure about registering everything. It\u0027s a minor problem, of course, I won\u0027t block the patch based on that.","commit_id":"a2d5bcfb642d422f1e4b9024145e4923606852c3"},{"author":{"_account_id":1926,"name":"Derek Higgins","email":"derekh@redhat.com","username":"derekh"},"change_message_id":"c5938785d614e53b4aae66a7bd367a9b69c35980","unresolved":false,"context_lines":[{"line_number":374,"context_line":"        self.conductor.unregister_all_hardware_interfaces()"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"        interfaces \u003d []"},{"line_number":377,"context_line":"        for ht_name, ht in hardware_types.items():"},{"line_number":378,"context_line":"            interface_map \u003d driver_factory.enabled_supported_interfaces(ht)"},{"line_number":379,"context_line":"            for interface_type, interface_names in interface_map.items():"},{"line_number":380,"context_line":"                default_interface \u003d driver_factory.default_interface("}],"source_content_type":"text/x-python","patch_set":3,"id":"1d34ab78_ef0fc77a","line":377,"in_reply_to":"78b91275_d3ffa80a","updated":"2020-12-16 15:50:06.000000000","message":"\u003e I think the crux of the problem that BMO faces is that some drivers are not fully usable even though they are shown in /v1/drivers? If so, registering each hardware type automically will solve it.\n\nNo (although I did think this at one stage), the problem is that drivers are registered one at a time, once the BMO sees the first one it starts creating nodes but the one it needs might not be there yet. This isn\u0027t necessarily an ironic bug but registering all drivers together ensures BMO doesn\u0027t prematurely use one that isn\u0027t registered.","commit_id":"a2d5bcfb642d422f1e4b9024145e4923606852c3"},{"author":{"_account_id":1926,"name":"Derek Higgins","email":"derekh@redhat.com","username":"derekh"},"change_message_id":"8032eecdb099024f2e98bfe4bd0570d47b79565e","unresolved":false,"context_lines":[{"line_number":374,"context_line":"        self.conductor.unregister_all_hardware_interfaces()"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"        interfaces \u003d []"},{"line_number":377,"context_line":"        for ht_name, ht in hardware_types.items():"},{"line_number":378,"context_line":"            interface_map \u003d driver_factory.enabled_supported_interfaces(ht)"},{"line_number":379,"context_line":"            for interface_type, interface_names in interface_map.items():"},{"line_number":380,"context_line":"                default_interface \u003d driver_factory.default_interface("}],"source_content_type":"text/x-python","patch_set":3,"id":"062bc1cb_3716fb71","line":377,"in_reply_to":"af79fcbb_c7cb6dc6","updated":"2020-12-21 18:14:01.000000000","message":"The BMO fix will also need a similar fix a terraform provider that I\u0027m told would be more complicated. We now have a workaround in metal3 to deal with our problem so there is no urgency. I\u0027ll push an updated version of this patch so we can see what the finished patch might look like.","commit_id":"a2d5bcfb642d422f1e4b9024145e4923606852c3"}],"ironic/db/sqlalchemy/api.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"8b0af6f848d4935a3449304b676d07fbe3d7d6f6","unresolved":false,"context_lines":[{"line_number":983,"context_line":"            # always set online and updated_at fields when registering"},{"line_number":984,"context_line":"            # a conductor, especially when updating an existing one"},{"line_number":985,"context_line":"            ref.update({\u0027updated_at\u0027: timeutils.utcnow(),"},{"line_number":986,"context_line":"                        \u0027online\u0027: True})"},{"line_number":987,"context_line":"        return ref"},{"line_number":988,"context_line":""},{"line_number":989,"context_line":"    def get_conductor_list(self, limit\u003dNone, marker\u003dNone,"}],"source_content_type":"text/x-python","patch_set":2,"id":"6c83296e_080d4981","side":"PARENT","line":986,"updated":"2020-12-01 11:26:50.000000000","message":"Creating a conductor as offline may cause it to be treated as dead by other conductors.","commit_id":"a08da8551a66815bedef7c6444fde5f9082a6aea"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"055cf14eabb0604f51c428de44a043ab439fe2db","unresolved":false,"context_lines":[{"line_number":983,"context_line":"            # always set online and updated_at fields when registering"},{"line_number":984,"context_line":"            # a conductor, especially when updating an existing one"},{"line_number":985,"context_line":"            ref.update({\u0027updated_at\u0027: timeutils.utcnow(),"},{"line_number":986,"context_line":"                        \u0027online\u0027: True})"},{"line_number":987,"context_line":"        return ref"},{"line_number":988,"context_line":""},{"line_number":989,"context_line":"    def get_conductor_list(self, limit\u003dNone, marker\u003dNone,"}],"source_content_type":"text/x-python","patch_set":2,"id":"f3217cbb_6aede450","side":"PARENT","line":986,"in_reply_to":"3d65a576_185888f0","updated":"2020-12-01 18:09:19.000000000","message":"There is a very snall possibility that another conductor will try a take-over. I\u0027d rather move us to a model where we register hardware types together with interfaces. Maybe we can start with a conductor with no drivers, then register everything at once separately?","commit_id":"a08da8551a66815bedef7c6444fde5f9082a6aea"},{"author":{"_account_id":1926,"name":"Derek Higgins","email":"derekh@redhat.com","username":"derekh"},"change_message_id":"20522ee0a20cce6861b7a456f24fdf07589f0d35","unresolved":false,"context_lines":[{"line_number":983,"context_line":"            # always set online and updated_at fields when registering"},{"line_number":984,"context_line":"            # a conductor, especially when updating an existing one"},{"line_number":985,"context_line":"            ref.update({\u0027updated_at\u0027: timeutils.utcnow(),"},{"line_number":986,"context_line":"                        \u0027online\u0027: True})"},{"line_number":987,"context_line":"        return ref"},{"line_number":988,"context_line":""},{"line_number":989,"context_line":"    def get_conductor_list(self, limit\u003dNone, marker\u003dNone,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3d65a576_185888f0","side":"PARENT","line":986,"in_reply_to":"6c83296e_080d4981","updated":"2020-12-01 16:14:51.000000000","message":"So touching it in init_host to set it online would be too late?","commit_id":"a08da8551a66815bedef7c6444fde5f9082a6aea"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a74a71edd38a4f4f69acccdb9c3efdbe69e00158","unresolved":true,"context_lines":[{"line_number":983,"context_line":"            # always set online and updated_at fields when registering"},{"line_number":984,"context_line":"            # a conductor, especially when updating an existing one"},{"line_number":985,"context_line":"            ref.update({\u0027updated_at\u0027: timeutils.utcnow(),"},{"line_number":986,"context_line":"                        \u0027online\u0027: True})"},{"line_number":987,"context_line":"        return ref"},{"line_number":988,"context_line":""},{"line_number":989,"context_line":"    def get_conductor_list(self, limit\u003dNone, marker\u003dNone,"}],"source_content_type":"text/x-python","patch_set":2,"id":"589758a0_ef80b099","side":"PARENT","line":986,"in_reply_to":"f3217cbb_6aede450","updated":"2020-12-03 17:04:21.000000000","message":"it could make sense to batch them, but why is each driver appearing one at a time an issue? And why is the conductor coming online and taking on it\u0027s role a problem?\n\nI don\u0027t see an issue with trying to batch all the driver table entry loads, fwiw. Just it is going to be a bit much on refactoring.","commit_id":"a08da8551a66815bedef7c6444fde5f9082a6aea"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"73da556a1e7525113805415d88d57aa9015bc271","unresolved":true,"context_lines":[{"line_number":1122,"context_line":"                session.flush()"},{"line_number":1123,"context_line":"            except db_exc.DBDuplicateEntry as e:"},{"line_number":1124,"context_line":"                r \u003d exception.ConductorHardwareInterfacesAlreadyRegistered("},{"line_number":1125,"context_line":"                    row\u003dstr(e.inner_exception.params))"},{"line_number":1126,"context_line":"                raise r"},{"line_number":1127,"context_line":""},{"line_number":1128,"context_line":"    @oslo_db_api.retry_on_deadlock"}],"source_content_type":"text/x-python","patch_set":5,"id":"78a4679a_187bca30","line":1125,"updated":"2021-01-06 15:19:32.000000000","message":"How exactly does this look? Won\u0027t it expose internal values like numeric IDs?","commit_id":"498d5790f8a92179e9ec9185e64b2fecd63c6283"},{"author":{"_account_id":1926,"name":"Derek Higgins","email":"derekh@redhat.com","username":"derekh"},"change_message_id":"1c45c5f42841765a531f594949eb6772de398f33","unresolved":true,"context_lines":[{"line_number":1122,"context_line":"                session.flush()"},{"line_number":1123,"context_line":"            except db_exc.DBDuplicateEntry as e:"},{"line_number":1124,"context_line":"                r \u003d exception.ConductorHardwareInterfacesAlreadyRegistered("},{"line_number":1125,"context_line":"                    row\u003dstr(e.inner_exception.params))"},{"line_number":1126,"context_line":"                raise r"},{"line_number":1127,"context_line":""},{"line_number":1128,"context_line":"    @oslo_db_api.retry_on_deadlock"}],"source_content_type":"text/x-python","patch_set":5,"id":"96f568ab_d2004eb8","line":1125,"in_reply_to":"78a4679a_187bca30","updated":"2021-01-06 16:15:36.000000000","message":"It would look like this\n    Duplication detected for hardware_type, interface_type and interface combinations for this conductor while registering the row (\u00272021-01-06 16:12:17.622522\u0027, None, None, 6, \u0027generic\u0027, \u0027deploy\u0027, \u0027direct\u0027, 0)","commit_id":"498d5790f8a92179e9ec9185e64b2fecd63c6283"}],"ironic/objects/conductor.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"e5e52e16590943c5d65d421902816ca6670faec2","unresolved":true,"context_lines":[{"line_number":159,"context_line":"    def register_hardware_interfaces(self, interfaces):"},{"line_number":160,"context_line":"        \"\"\"Register hardware interfaces with the conductor."},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        :param hardware_type: Name of hardware type for the interfaces."},{"line_number":163,"context_line":"        :param interface_type: Type of interfaces, e.g. \u0027deploy\u0027 or \u0027boot\u0027."},{"line_number":164,"context_line":"        :param interfaces: List of interface names to register."},{"line_number":165,"context_line":"        :param default_interface: String, the default interface for this"},{"line_number":166,"context_line":"                                  hardware type and interface type."},{"line_number":167,"context_line":"        \"\"\""},{"line_number":168,"context_line":"        self.dbapi.register_conductor_hardware_interfaces(self.id, interfaces)"}],"source_content_type":"text/x-python","patch_set":4,"id":"f75ad39c_df03152f","line":165,"range":{"start_line":162,"start_character":0,"end_line":165,"end_character":72},"updated":"2020-12-31 16:13:59.000000000","message":"Docstring needs to be updated.","commit_id":"90a232a7b361b99daaec3dca67f85dc53fc53afd"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"bf1ee25debf07e6d563a397f2285f27eaf23bfb6","unresolved":true,"context_lines":[{"line_number":160,"context_line":"        \"\"\"Register hardware interfaces with the conductor."},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        :param interfaces: List of interface to register, each entry should"},{"line_number":163,"context_line":"            be a dictionary conaining \"hardware_type\", \"interface_type\","},{"line_number":164,"context_line":"            \"interface_name\" and \"default\", e.g."},{"line_number":165,"context_line":"            {\u0027hardware_type\u0027: \u0027hardware-type\u0027, \u0027interface_type\u0027: \u0027deploy\u0027,"},{"line_number":166,"context_line":"            \u0027interface_name\u0027: \u0027iscsi\u0027, \u0027default\u0027: True}"}],"source_content_type":"text/x-python","patch_set":7,"id":"aa24608a_036b873b","line":163,"range":{"start_line":163,"start_character":28,"end_line":163,"end_character":37},"updated":"2021-01-11 16:47:54.000000000","message":"nit, \u0027containing\u0027.","commit_id":"7d85b35c8425f10a2fff64dfc82008a93c3a7b98"}]}
