)]}'
{"ironic/cmd/dbsync.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"8d80f1430074b2b3892148a68325babade0ebfa4","unresolved":false,"context_lines":[{"line_number":65,"context_line":"    # Added in Pike, modified in Queens"},{"line_number":66,"context_line":"    # TODO(rloo): remove in Rocky"},{"line_number":67,"context_line":"    (dbapi, \u0027backfill_version_column\u0027),"},{"line_number":68,"context_line":"    (dbapi, \u0027migrate_to_hardware_types\u0027),"},{"line_number":69,"context_line":")"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7f96bb07_26f7dad5","line":68,"updated":"2018-01-16 23:59:48.000000000","message":"maybe put a comment above this, #TODO remove in Rocky (unless sam and julia disagree still :))","commit_id":"a688257520d4e8960a93d22f138864e58b7d7987"}],"ironic/common/driver_factory.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":"0e2c355ea6b77cf8398f27cb5278a9b0a87bcff6","unresolved":false,"context_lines":[{"line_number":588,"context_line":"    try:"},{"line_number":589,"context_line":"        hw_type, new_ifaces \u003d driver_class.to_hardware_type()"},{"line_number":590,"context_line":"    except NotImplementedError:"},{"line_number":591,"context_line":"        LOG.warning(\u0027Skipping migrating nodes with driver %s, \u0027"},{"line_number":592,"context_line":"                    \u0027migration not supported\u0027, driver_name)"},{"line_number":593,"context_line":"        return None"},{"line_number":594,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f93b717_b5d72b24","line":591,"range":{"start_line":591,"start_character":30,"end_line":591,"end_character":39},"updated":"2018-01-24 22:56:36.000000000","message":"migration of","commit_id":"fbcd5c89723b8f34e6253ad21f9fe52c6d55ee51"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"0e2c355ea6b77cf8398f27cb5278a9b0a87bcff6","unresolved":false,"context_lines":[{"line_number":595,"context_line":"        ifaces \u003d dict(defaults, **new_ifaces)"},{"line_number":596,"context_line":""},{"line_number":597,"context_line":"    if hw_type not in CONF.enabled_hardware_types:"},{"line_number":598,"context_line":"        LOG.warning(\u0027Skipping migrating nodes with driver %(drv)s: \u0027"},{"line_number":599,"context_line":"                    \u0027hardware type %(hw_type)s is not enabled\u0027,"},{"line_number":600,"context_line":"                    {\u0027drv\u0027: driver_name, \u0027hw_type\u0027: hw_type})"},{"line_number":601,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f93b717_f517f3ec","line":598,"range":{"start_line":598,"start_character":29,"end_line":598,"end_character":39},"updated":"2018-01-24 22:56:36.000000000","message":"nit: migration of","commit_id":"fbcd5c89723b8f34e6253ad21f9fe52c6d55ee51"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"0e2c355ea6b77cf8398f27cb5278a9b0a87bcff6","unresolved":false,"context_lines":[{"line_number":626,"context_line":"        not_enabled \u003d still_not_enabled"},{"line_number":627,"context_line":""},{"line_number":628,"context_line":"    if not_enabled:"},{"line_number":629,"context_line":"        LOG.warning(\u0027Skipping migrating nodes with driver %(drv)s, \u0027"},{"line_number":630,"context_line":"                    \u0027the following interfaces are not supported: \u0027"},{"line_number":631,"context_line":"                    \u0027%(ifaces)s\u0027,"},{"line_number":632,"context_line":"                    {\u0027drv\u0027: driver_name,"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f93b717_d51af715","line":629,"range":{"start_line":629,"start_character":30,"end_line":629,"end_character":39},"updated":"2018-01-24 22:56:36.000000000","message":"nit: migration","commit_id":"fbcd5c89723b8f34e6253ad21f9fe52c6d55ee51"}],"ironic/db/api.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"8d80f1430074b2b3892148a68325babade0ebfa4","unresolved":false,"context_lines":[{"line_number":899,"context_line":"        \"\"\""},{"line_number":900,"context_line":""},{"line_number":901,"context_line":"    @abc.abstractmethod"},{"line_number":902,"context_line":"    def backfill_version_column(self, max_count):"},{"line_number":903,"context_line":"        \"\"\"Backfill the Conductor version column with Pike version."},{"line_number":904,"context_line":""},{"line_number":905,"context_line":"        The version column was added to all the resource tables in the Pike"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f96bb07_46af867c","line":902,"updated":"2018-01-16 23:59:48.000000000","message":"hmm, this is incorrect, it should have context as a parameter.","commit_id":"a688257520d4e8960a93d22f138864e58b7d7987"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"8d80f1430074b2b3892148a68325babade0ebfa4","unresolved":false,"context_lines":[{"line_number":924,"context_line":"        # TODO(rloo) Delete this in Rocky cycle."},{"line_number":925,"context_line":""},{"line_number":926,"context_line":"    @abc.abstractmethod"},{"line_number":927,"context_line":"    def migrate_to_hardware_types(self, max_count):"},{"line_number":928,"context_line":"        \"\"\"Migrate nodes from classic drivers to hardware types."},{"line_number":929,"context_line":""},{"line_number":930,"context_line":"        Go through all nodes with a classic driver and try to migrate them to a"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f96bb07_66e962b5","line":927,"updated":"2018-01-16 23:59:48.000000000","message":"needs context\n\ns/max_count/context, max_count/","commit_id":"a688257520d4e8960a93d22f138864e58b7d7987"}],"ironic/db/sqlalchemy/api.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"8d80f1430074b2b3892148a68325babade0ebfa4","unresolved":false,"context_lines":[{"line_number":209,"context_line":"    \"\"\"SqlAlchemy connection.\"\"\""},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    def __init__(self):"},{"line_number":212,"context_line":"        # NOTE(dtantsur): delete this when deleing migrate_to_hardware_types"},{"line_number":213,"context_line":"        self._ignored_nodes \u003d set()"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    def _add_nodes_filters(self, query, filters):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f96bb07_66ade299","line":212,"updated":"2018-01-16 23:59:48.000000000","message":"wonder if it should be s/NOTE/TODO/\n(cuz I sometimes search on \u0027TODO\u0027)\n\ns/deleing/deleting/","commit_id":"a688257520d4e8960a93d22f138864e58b7d7987"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"8d80f1430074b2b3892148a68325babade0ebfa4","unresolved":false,"context_lines":[{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    def __init__(self):"},{"line_number":212,"context_line":"        # NOTE(dtantsur): delete this when deleing migrate_to_hardware_types"},{"line_number":213,"context_line":"        self._ignored_nodes \u003d set()"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    def _add_nodes_filters(self, query, filters):"},{"line_number":216,"context_line":"        if filters is None:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f96bb07_a690ca4b","line":213,"updated":"2018-01-16 23:59:48.000000000","message":"hmmm... this deserves a comment.","commit_id":"a688257520d4e8960a93d22f138864e58b7d7987"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"8d80f1430074b2b3892148a68325babade0ebfa4","unresolved":false,"context_lines":[{"line_number":1284,"context_line":"        return total_to_migrate, total_migrated"},{"line_number":1285,"context_line":""},{"line_number":1286,"context_line":"    @oslo_db_api.retry_on_deadlock"},{"line_number":1287,"context_line":"    def migrate_to_hardware_types(self, max_count):"},{"line_number":1288,"context_line":"        \"\"\"Migrate nodes from classic drivers to hardware types."},{"line_number":1289,"context_line":""},{"line_number":1290,"context_line":"        Go through all nodes with a classic driver and try to migrate them to a"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f96bb07_06a41ea5","line":1287,"updated":"2018-01-16 23:59:48.000000000","message":"need context as a parameter","commit_id":"a688257520d4e8960a93d22f138864e58b7d7987"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"8d80f1430074b2b3892148a68325babade0ebfa4","unresolved":false,"context_lines":[{"line_number":1324,"context_line":"            nodes \u003d (model_query(models.Node)"},{"line_number":1325,"context_line":"                     .filter_by(driver\u003ddriver)"},{"line_number":1326,"context_line":"                     .filter(~models.Node.id.in_(self._ignored_nodes))"},{"line_number":1327,"context_line":"                     .limit(max_count - total_migrated)"},{"line_number":1328,"context_line":"                     .all())"},{"line_number":1329,"context_line":"            if not nodes:"},{"line_number":1330,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f96bb07_6685e2ce","line":1327,"updated":"2018-01-16 23:59:48.000000000","message":"careful, max_count can be zero.\n\nAlso, i have a comment in the backfill_version_column() method, that I couldn\u0027t use .limit(). I didn\u0027t say why though. Just thought I\u0027d mention it; it might work here.","commit_id":"a688257520d4e8960a93d22f138864e58b7d7987"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"8d80f1430074b2b3892148a68325babade0ebfa4","unresolved":false,"context_lines":[{"line_number":1340,"context_line":"                        LOG.warning(\u0027Cannot migrate node %(node)s - \u0027"},{"line_number":1341,"context_line":"                                    \u0027migration to hardware types is not \u0027"},{"line_number":1342,"context_line":"                                    \u0027implemented for driver %(drv)s\u0027,"},{"line_number":1343,"context_line":"                                    {\u0027node\u0027: node.uuid, \u0027drv\u0027: driver})"},{"line_number":1344,"context_line":"                    else:"},{"line_number":1345,"context_line":"                        LOG.info(\u0027Migrating node %(node)s to hardware types: \u0027"},{"line_number":1346,"context_line":"                                 \u0027%(update)s\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f96bb07_06789ec1","line":1343,"updated":"2018-01-16 23:59:48.000000000","message":"a driver maps to exactly one hardware type, right? if we cannot handle the migration of a particular driver, why continue trying; might as well get out of this for loop and try the next driver.","commit_id":"a688257520d4e8960a93d22f138864e58b7d7987"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"8d80f1430074b2b3892148a68325babade0ebfa4","unresolved":false,"context_lines":[{"line_number":1343,"context_line":"                                    {\u0027node\u0027: node.uuid, \u0027drv\u0027: driver})"},{"line_number":1344,"context_line":"                    else:"},{"line_number":1345,"context_line":"                        LOG.info(\u0027Migrating node %(node)s to hardware types: \u0027"},{"line_number":1346,"context_line":"                                 \u0027%(update)s\u0027,"},{"line_number":1347,"context_line":"                                 {\u0027node\u0027: node.uuid, \u0027update\u0027: update})"},{"line_number":1348,"context_line":"                        for key, value in update.items():"},{"line_number":1349,"context_line":"                            setattr(node, key, value)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f96bb07_a6cd2a32","line":1346,"updated":"2018-01-16 23:59:48.000000000","message":"might want to mention the classic driver\n\ns/types/type/","commit_id":"a688257520d4e8960a93d22f138864e58b7d7987"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"8d80f1430074b2b3892148a68325babade0ebfa4","unresolved":false,"context_lines":[{"line_number":1349,"context_line":"                            setattr(node, key, value)"},{"line_number":1350,"context_line":""},{"line_number":1351,"context_line":"                    # Ignore the node in any case, to avoid infinitely looping"},{"line_number":1352,"context_line":"                    # on trying to udpate it"},{"line_number":1353,"context_line":"                    self._ignored_nodes.add(node.id)"},{"line_number":1354,"context_line":"                    total_migrated +\u003d 1"},{"line_number":1355,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7f96bb07_e6ded2d8","line":1352,"updated":"2018-01-16 23:59:48.000000000","message":"nit s/udpate/update/","commit_id":"a688257520d4e8960a93d22f138864e58b7d7987"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"8d80f1430074b2b3892148a68325babade0ebfa4","unresolved":false,"context_lines":[{"line_number":1351,"context_line":"                    # Ignore the node in any case, to avoid infinitely looping"},{"line_number":1352,"context_line":"                    # on trying to udpate it"},{"line_number":1353,"context_line":"                    self._ignored_nodes.add(node.id)"},{"line_number":1354,"context_line":"                    total_migrated +\u003d 1"},{"line_number":1355,"context_line":""},{"line_number":1356,"context_line":"        return total_to_migrate, total_migrated"},{"line_number":1357,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7f96bb07_e6a57248","line":1354,"updated":"2018-01-16 23:59:48.000000000","message":"I don\u0027t think we want to count the nodes that weren\u0027t migrated. Maybe we need a \u0027break\u0027 after L1343","commit_id":"a688257520d4e8960a93d22f138864e58b7d7987"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"580084f3cc96b11fd7f35a9ed26e92d168d10064","unresolved":false,"context_lines":[{"line_number":1291,"context_line":""},{"line_number":1292,"context_line":"        If migration is not possible for any reason (e.g. the target hardware"},{"line_number":1293,"context_line":"        type is not enabled), the nodes are skipped. An operator is expected to"},{"line_number":1294,"context_line":"        correct the configuration and either return online_data_migration or"},{"line_number":1295,"context_line":"        migrate the nodes manually."},{"line_number":1296,"context_line":""},{"line_number":1297,"context_line":"        :param context: the admin context (not used)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f96bb07_8c7a76ee","line":1294,"updated":"2018-01-17 15:33:41.000000000","message":"s/return/rerun/ ?","commit_id":"a8ebf0ab5126a527f48a422934ff265b6756f472"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"580084f3cc96b11fd7f35a9ed26e92d168d10064","unresolved":false,"context_lines":[{"line_number":1396,"context_line":"                                .update(hardware_type\u003dhw_type, **delta))"},{"line_number":1397,"context_line":"                total_migrated +\u003d num_migrated"},{"line_number":1398,"context_line":""},{"line_number":1399,"context_line":"        return total_to_migrate, total_migrated"},{"line_number":1400,"context_line":""},{"line_number":1401,"context_line":"    @staticmethod"},{"line_number":1402,"context_line":"    def _verify_max_traits_per_node(node_id, num_traits):"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f96bb07_6616264c","line":1399,"updated":"2018-01-17 15:33:41.000000000","message":"most of the logic looks fine, but I need to think about this because total_migrated is not the number of nodes that were migrated; it is the number of nodes that were migrated or that were attempted but could-not-be-migrated.","commit_id":"a8ebf0ab5126a527f48a422934ff265b6756f472"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"ef37d763594661f6a38cdea9f1d643b8debd3c6c","unresolved":false,"context_lines":[{"line_number":1318,"context_line":"                  of migrated objects."},{"line_number":1319,"context_line":"        \"\"\""},{"line_number":1320,"context_line":"        reset_unsupported_interfaces \u003d strutils.bool_from_string("},{"line_number":1321,"context_line":"            reset_unsupported_interfaces, strict\u003dTrue)"},{"line_number":1322,"context_line":""},{"line_number":1323,"context_line":"        drivers \u003d driver_factory.classic_drivers_to_migrate()"},{"line_number":1324,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5f93b717_355f290f","line":1321,"updated":"2018-01-30 02:30:30.000000000","message":"this could raise a ValueError exception. I don\u0027t see where it is being handled, did you mean for it to be raised to the user?","commit_id":"cc6f7bc73e2b1c9dad9624f3bc9c4c6ac3d103de"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"bcd324c2acf5ceb65873030caa4faa93bc0aacb3","unresolved":false,"context_lines":[{"line_number":1318,"context_line":"                  of migrated objects."},{"line_number":1319,"context_line":"        \"\"\""},{"line_number":1320,"context_line":"        reset_unsupported_interfaces \u003d strutils.bool_from_string("},{"line_number":1321,"context_line":"            reset_unsupported_interfaces, strict\u003dTrue)"},{"line_number":1322,"context_line":""},{"line_number":1323,"context_line":"        drivers \u003d driver_factory.classic_drivers_to_migrate()"},{"line_number":1324,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5f93b717_84681f1d","line":1321,"in_reply_to":"5f93b717_355f290f","updated":"2018-01-31 12:20:11.000000000","message":"Yep, it ends in a traceback: http://paste.openstack.org/show/658136/. I could catch it, but that would involve using sys.exit here, which does not feel right.","commit_id":"cc6f7bc73e2b1c9dad9624f3bc9c4c6ac3d103de"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"16258200cb47b117edb62e8e4a5666339ebdabc8","unresolved":false,"context_lines":[{"line_number":1318,"context_line":"                  of migrated objects."},{"line_number":1319,"context_line":"        \"\"\""},{"line_number":1320,"context_line":"        reset_unsupported_interfaces \u003d strutils.bool_from_string("},{"line_number":1321,"context_line":"            reset_unsupported_interfaces, strict\u003dTrue)"},{"line_number":1322,"context_line":""},{"line_number":1323,"context_line":"        drivers \u003d driver_factory.classic_drivers_to_migrate()"},{"line_number":1324,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5f93b717_939b8264","line":1321,"in_reply_to":"5f93b717_84681f1d","updated":"2018-01-31 15:28:21.000000000","message":"hmm, maybe we should update the ironic-dbsync online-data-migrations code to catch it and do sys.exit().","commit_id":"cc6f7bc73e2b1c9dad9624f3bc9c4c6ac3d103de"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"ef37d763594661f6a38cdea9f1d643b8debd3c6c","unresolved":false,"context_lines":[{"line_number":1346,"context_line":"                # NOTE(dtantsur): mark unsupported nodes as migrated. Otherwise"},{"line_number":1347,"context_line":"                # calling online_data_migration without --max-count will result"},{"line_number":1348,"context_line":"                # in a infinite loop."},{"line_number":1349,"context_line":"                total_migrated +\u003d len(ids)"},{"line_number":1350,"context_line":"                continue"},{"line_number":1351,"context_line":""},{"line_number":1352,"context_line":"            # UPDATE with LIMIT seems to be a MySQL-only feature, so first"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f93b717_90b5ea80","line":1349,"updated":"2018-01-30 02:30:30.000000000","message":"But if max-count IS specified, the \u0027total_migrated\u0027 number is wrong :-( It is more like \u0027total-attempted-to-migrate\u0027; it might cause confusion.","commit_id":"cc6f7bc73e2b1c9dad9624f3bc9c4c6ac3d103de"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"16258200cb47b117edb62e8e4a5666339ebdabc8","unresolved":false,"context_lines":[{"line_number":1346,"context_line":"                # NOTE(dtantsur): mark unsupported nodes as migrated. Otherwise"},{"line_number":1347,"context_line":"                # calling online_data_migration without --max-count will result"},{"line_number":1348,"context_line":"                # in a infinite loop."},{"line_number":1349,"context_line":"                total_migrated +\u003d len(ids)"},{"line_number":1350,"context_line":"                continue"},{"line_number":1351,"context_line":""},{"line_number":1352,"context_line":"            # UPDATE with LIMIT seems to be a MySQL-only feature, so first"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f93b717_33d2ae01","line":1349,"in_reply_to":"5f93b717_0402cf3d","updated":"2018-01-31 15:28:21.000000000","message":"I haven\u0027t thought about this, but it seems to me that we might need to handle this differently, depending on whether max-count is specified or not. It looks like you\u0027ve thought about it, so I\u0027ll shut up now :)","commit_id":"cc6f7bc73e2b1c9dad9624f3bc9c4c6ac3d103de"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"bcd324c2acf5ceb65873030caa4faa93bc0aacb3","unresolved":false,"context_lines":[{"line_number":1346,"context_line":"                # NOTE(dtantsur): mark unsupported nodes as migrated. Otherwise"},{"line_number":1347,"context_line":"                # calling online_data_migration without --max-count will result"},{"line_number":1348,"context_line":"                # in a infinite loop."},{"line_number":1349,"context_line":"                total_migrated +\u003d len(ids)"},{"line_number":1350,"context_line":"                continue"},{"line_number":1351,"context_line":""},{"line_number":1352,"context_line":"            # UPDATE with LIMIT seems to be a MySQL-only feature, so first"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f93b717_0402cf3d","line":1349,"in_reply_to":"5f93b717_90b5ea80","updated":"2018-01-31 12:20:11.000000000","message":"Well.. Then an outside code that expect the migration to be finished will probably loop forever.. The point here is: we cannot migrate these nodes until the configuration is changed, no matter how we try. It\u0027s different from e.g. \"Let\u0027s skip this node, because it\u0027s locked right now\".","commit_id":"cc6f7bc73e2b1c9dad9624f3bc9c4c6ac3d103de"}],"ironic/drivers/base.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"8d80f1430074b2b3892148a68325babade0ebfa4","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        :param cls: the driver class"},{"line_number":155,"context_line":"        :param node: node record from the database"},{"line_number":156,"context_line":"        :returns: dictionary containing node fields to update: ``driver`` and"},{"line_number":157,"context_line":"            all interface fields (except for ``network`` and ``storage`` which"},{"line_number":158,"context_line":"            have always been dynamic, even for nodes with a classic driver)."},{"line_number":159,"context_line":"        \"\"\""},{"line_number":160,"context_line":"        raise NotImplementedError()"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f96bb07_213a64cb","line":157,"updated":"2018-01-16 23:59:48.000000000","message":"and rescue -- object Node has a rescue_interface field now :-)","commit_id":"a688257520d4e8960a93d22f138864e58b7d7987"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"580084f3cc96b11fd7f35a9ed26e92d168d10064","unresolved":false,"context_lines":[{"line_number":151,"context_line":"    def to_hardware_type(cls):"},{"line_number":152,"context_line":"        \"\"\"Return corresponding hardware type and hardware interfaces."},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        :returns: a tuple with two items:"},{"line_number":155,"context_line":"            * new driver field - the target hardware type"},{"line_number":156,"context_line":"            * dictionary containing interfaces to update"},{"line_number":157,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"7f96bb07_ecc3fa55","line":154,"updated":"2018-01-17 15:33:41.000000000","message":"i\u0027m not fond of tuples but this is fine.","commit_id":"a8ebf0ab5126a527f48a422934ff265b6756f472"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"580084f3cc96b11fd7f35a9ed26e92d168d10064","unresolved":false,"context_lines":[{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        :returns: a tuple with two items:"},{"line_number":155,"context_line":"            * new driver field - the target hardware type"},{"line_number":156,"context_line":"            * dictionary containing interfaces to update"},{"line_number":157,"context_line":"        \"\"\""},{"line_number":158,"context_line":"        raise NotImplementedError()"},{"line_number":159,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7f96bb07_cc9b9e70","line":156,"updated":"2018-01-17 15:33:41.000000000","message":"it is worth putting your comment about \u0027except for network, storage (because ...) and rescue (not avail for classic)\u0027, to make it easier for reviewers and people looking at this.\n\nAlso mention that the keys in the dictionary are the interface types, without \u0027_interface\u0027, e.g. \u0027boot\u0027, \u0027power\u0027, ....","commit_id":"a8ebf0ab5126a527f48a422934ff265b6756f472"}],"ironic/drivers/ipmi.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"580084f3cc96b11fd7f35a9ed26e92d168d10064","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        return [ipmitool.VendorPassthru, noop.NoVendor]"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"def _to_hardware_type():"},{"line_number":62,"context_line":"    # NOTE(dtantsur): classic drivers are not affected by the"},{"line_number":63,"context_line":"    # enabled_inspect_interfaces configuration option."},{"line_number":64,"context_line":"    if CONF.inspector.enabled:"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f96bb07_6c028a71","line":61,"updated":"2018-01-17 15:33:41.000000000","message":"it is more like \u0027_to_hardware_interfaces\u0027 :)","commit_id":"a8ebf0ab5126a527f48a422934ff265b6756f472"}],"releasenotes/notes/migrate_to_hardware_types-0c85c6707c4f296d.yaml":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"ef37d763594661f6a38cdea9f1d643b8debd3c6c","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds new data migration ``migrate_to_hardware_types`` that will try to"},{"line_number":5,"context_line":"    migrate nodes from classic drivers to hardware types on upgrade. Matching"},{"line_number":6,"context_line":"    hardware types and interfaces have to be provided on classic drivers"},{"line_number":7,"context_line":"    themselves. Nodes that cannot be migrated are skipped. This can primary"},{"line_number":8,"context_line":"    happen for three reasons:"},{"line_number":9,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":8,"id":"5f93b717_f0522e3b","line":6,"updated":"2018-01-30 02:30:30.000000000","message":"what do you mean by \u0027have to be provided on classic drivers themselves\u0027? Does the user have to do anything?","commit_id":"cc6f7bc73e2b1c9dad9624f3bc9c4c6ac3d103de"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"bcd324c2acf5ceb65873030caa4faa93bc0aacb3","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds new data migration ``migrate_to_hardware_types`` that will try to"},{"line_number":5,"context_line":"    migrate nodes from classic drivers to hardware types on upgrade. Matching"},{"line_number":6,"context_line":"    hardware types and interfaces have to be provided on classic drivers"},{"line_number":7,"context_line":"    themselves. Nodes that cannot be migrated are skipped. This can primary"},{"line_number":8,"context_line":"    happen for three reasons:"},{"line_number":9,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":8,"id":"5f93b717_84c49ff6","line":6,"in_reply_to":"5f93b717_f0522e3b","updated":"2018-01-31 12:20:11.000000000","message":"No. I\u0027ll move it to \"other\"","commit_id":"cc6f7bc73e2b1c9dad9624f3bc9c4c6ac3d103de"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"ef37d763594661f6a38cdea9f1d643b8debd3c6c","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    migrate nodes from classic drivers to hardware types on upgrade. Matching"},{"line_number":6,"context_line":"    hardware types and interfaces have to be provided on classic drivers"},{"line_number":7,"context_line":"    themselves. Nodes that cannot be migrated are skipped. This can primary"},{"line_number":8,"context_line":"    happen for three reasons:"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"    * migration is not implemented for the classic driver,"},{"line_number":11,"context_line":"    * the matching hardware type is not enabled,"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"5f93b717_906acaea","line":8,"updated":"2018-01-30 02:30:30.000000000","message":"s/primary happen/primarily happen/\nor \u0027happen primarily\u0027\nor \u0027may happen due to one of these reasons\u0027 ?","commit_id":"cc6f7bc73e2b1c9dad9624f3bc9c4c6ac3d103de"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"bcd324c2acf5ceb65873030caa4faa93bc0aacb3","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    migrate nodes from classic drivers to hardware types on upgrade. Matching"},{"line_number":6,"context_line":"    hardware types and interfaces have to be provided on classic drivers"},{"line_number":7,"context_line":"    themselves. Nodes that cannot be migrated are skipped. This can primary"},{"line_number":8,"context_line":"    happen for three reasons:"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"    * migration is not implemented for the classic driver,"},{"line_number":11,"context_line":"    * the matching hardware type is not enabled,"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"5f93b717_44ba176e","line":8,"in_reply_to":"5f93b717_906acaea","updated":"2018-01-31 12:20:11.000000000","message":"Done","commit_id":"cc6f7bc73e2b1c9dad9624f3bc9c4c6ac3d103de"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"ef37d763594661f6a38cdea9f1d643b8debd3c6c","unresolved":false,"context_lines":[{"line_number":15,"context_line":"    ``reset_unsupported_interfaces`` can be used to reset optional interfaces"},{"line_number":16,"context_line":"    (all except for ``boot``, ``deploy``, ``management`` and ``power``) to"},{"line_number":17,"context_line":"    their no-op implementations (e.g. ``no-inspect``) if the matching"},{"line_number":18,"context_line":"    implementation is not enabled. Use it like::"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"        ironic-dbsync online_data_migrations --option migrate_to_hardware_types.reset_unsupported_interfaces\u003dtrue"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":8,"id":"5f93b717_90116a60","line":18,"updated":"2018-01-30 02:30:30.000000000","message":"maybe s/implementation/interface/","commit_id":"cc6f7bc73e2b1c9dad9624f3bc9c4c6ac3d103de"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"bcd324c2acf5ceb65873030caa4faa93bc0aacb3","unresolved":false,"context_lines":[{"line_number":15,"context_line":"    ``reset_unsupported_interfaces`` can be used to reset optional interfaces"},{"line_number":16,"context_line":"    (all except for ``boot``, ``deploy``, ``management`` and ``power``) to"},{"line_number":17,"context_line":"    their no-op implementations (e.g. ``no-inspect``) if the matching"},{"line_number":18,"context_line":"    implementation is not enabled. Use it like::"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"        ironic-dbsync online_data_migrations --option migrate_to_hardware_types.reset_unsupported_interfaces\u003dtrue"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":8,"id":"5f93b717_04b08f89","line":18,"in_reply_to":"5f93b717_90116a60","updated":"2018-01-31 12:20:11.000000000","message":"We always confuse these two, here I want to emphasize that we\u0027re talking about implementations.","commit_id":"cc6f7bc73e2b1c9dad9624f3bc9c4c6ac3d103de"}]}
