)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"5bcb8840b1dd56067ce4fe02b8ba69cc0ce4d523","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"df41e64f_bc419abd","updated":"2022-11-02 14:15:57.000000000","message":"let\u0027s merge the release note files?","commit_id":"311f14c160e09416f7ae378e60cbd42785b93a52"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"cf77d82cc346af673507f295b763f01b40e9f6e8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"ebe2163d_cf5875d1","updated":"2022-10-10 16:38:28.000000000","message":"non-standalone job passed introspection, but failed to deploy after the fact. It looks like it hit an internal timeout.","commit_id":"311f14c160e09416f7ae378e60cbd42785b93a52"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"1ad9602f97c5a3db7727eba7c5a7915138958dd2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":22,"id":"bd546edd_43306ebd","updated":"2022-11-30 14:50:04.000000000","message":"Dmitry, I can see your point of view and do agree with you, but the follow-up patch should address almost all of this. The conundrum is if you want them fixed in the same patch, we will need to just merge the two patches together since the underlying testing substrate will need to be swapped out as in the follow-up patch in order to support session.query calls. I view this as a meaning to an end without introducing sqlalchemy 2.0 support quite yet.","commit_id":"239b0328ffa244ac849fc0b0d10dada180bf7b1d"}],"ironic_inspector/db/api.py":[{"author":{"_account_id":18653,"name":"Milan Kováčik","email":"mkovacik@redhat.com","username":"dparalen"},"change_message_id":"d7f18cefd8022c1a35d73261a31860e8e63a9a57","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    :returns: The transaction context manager."},{"line_number":82,"context_line":"    \"\"\""},{"line_number":83,"context_line":"    global _CTX_MANAGER"},{"line_number":84,"context_line":"    if _CTX_MANAGER is None:"},{"line_number":85,"context_line":"        _CTX_MANAGER \u003d _create_context_manager()"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    return _CTX_MANAGER"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f201791_7cccf188","line":84,"range":{"start_line":84,"start_character":0,"end_line":84,"end_character":28},"updated":"2017-06-21 12:25:05.000000000","message":"I\u0027d protect this with a lock","commit_id":"59e0898928ef2c18395864de301d6a630d6c47d6"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"fa83531dfb6f0dfae0dfb47cc1e0ddc17471003b","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    :returns: The transaction context manager."},{"line_number":82,"context_line":"    \"\"\""},{"line_number":83,"context_line":"    global _CTX_MANAGER"},{"line_number":84,"context_line":"    if _CTX_MANAGER is None:"},{"line_number":85,"context_line":"        _CTX_MANAGER \u003d _create_context_manager()"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    return _CTX_MANAGER"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f201791_0236b404","line":84,"range":{"start_line":84,"start_character":0,"end_line":84,"end_character":28},"in_reply_to":"5f201791_7cccf188","updated":"2017-06-21 12:50:29.000000000","message":"I guess we have discussed this in prev patch, \nwe are using explicit init at start up, there shouldn\u0027t be any races. Anyway creating context manager is locked.","commit_id":"59e0898928ef2c18395864de301d6a630d6c47d6"},{"author":{"_account_id":18653,"name":"Milan Kováčik","email":"mkovacik@redhat.com","username":"dparalen"},"change_message_id":"d7f18cefd8022c1a35d73261a31860e8e63a9a57","unresolved":false,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"@reader_session"},{"line_number":134,"context_line":"def get_nodes(session, **fields):"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    # TODO(aarefiev): make order configurable"},{"line_number":137,"context_line":"    return model_query(model.Node, session\u003dsession).filter_by("}],"source_content_type":"text/x-python","patch_set":3,"id":"5f201791_e2b178e3","line":134,"range":{"start_line":134,"start_character":4,"end_line":134,"end_character":13},"updated":"2017-06-21 12:25:05.000000000","message":"I\u0027m unsure about these functions bringing some benefits as they move the logic away from it\u0027s origin. I\u0027d rather have these part of the node_cache:NodeInfo type.","commit_id":"59e0898928ef2c18395864de301d6a630d6c47d6"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"fa83531dfb6f0dfae0dfb47cc1e0ddc17471003b","unresolved":false,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"@reader_session"},{"line_number":134,"context_line":"def get_nodes(session, **fields):"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    # TODO(aarefiev): make order configurable"},{"line_number":137,"context_line":"    return model_query(model.Node, session\u003dsession).filter_by("}],"source_content_type":"text/x-python","patch_set":3,"id":"5f201791_ed34c94c","line":134,"range":{"start_line":134,"start_character":4,"end_line":134,"end_character":13},"in_reply_to":"5f201791_e2b178e3","updated":"2017-06-21 12:50:29.000000000","message":"This is the main purpose of this patch. We create objects without exposing the creation logic to the client. Which simplifies using declarative reader/writer session, allows to avoid code duplication.","commit_id":"59e0898928ef2c18395864de301d6a630d6c47d6"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"b912665ae2c6041077f12dee093345f6e41f5cf2","unresolved":false,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"@reader_session"},{"line_number":134,"context_line":"def get_nodes(session, **fields):"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    # TODO(aarefiev): make order configurable"},{"line_number":137,"context_line":"    return model_query(model.Node, session\u003dsession).filter_by("}],"source_content_type":"text/x-python","patch_set":3,"id":"5f201791_ec54ab23","line":134,"range":{"start_line":134,"start_character":4,"end_line":134,"end_character":13},"in_reply_to":"5f201791_ed34c94c","updated":"2017-06-22 10:48:15.000000000","message":"Also, keep in mind that we will call db from both, api and worker","commit_id":"59e0898928ef2c18395864de301d6a630d6c47d6"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"31c6ba3f07263b0e3d4e36f0bdce799f28e215a0","unresolved":false,"context_lines":[{"line_number":165,"context_line":"    fields_ver \u003d values.copy()"},{"line_number":166,"context_line":"    with session_for_write() as session:"},{"line_number":167,"context_line":"        try:"},{"line_number":168,"context_line":"            node \u003d model_query(model.Node).filter_by(uuid\u003duuid).one()"},{"line_number":169,"context_line":"        except orm.exc.NoResultFound:"},{"line_number":170,"context_line":"            raise utils.NodeNotFoundInDBError()"},{"line_number":171,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"86fc7e71_4d496420","line":168,"updated":"2022-11-18 13:39:16.000000000","message":"Why introduce the known-to-be-broken behavior, even if temporary, when a not-so-much-broken approach is just a few letters apart:\n\n session.query(model.Node)....\n\n?","commit_id":"66a133cd0d9d3d182b0f13c768cf1897354a9508"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bd88806cbad81c5649dc012cfce748b081612c76","unresolved":false,"context_lines":[{"line_number":165,"context_line":"    fields_ver \u003d values.copy()"},{"line_number":166,"context_line":"    with session_for_write() as session:"},{"line_number":167,"context_line":"        try:"},{"line_number":168,"context_line":"            node \u003d model_query(model.Node).filter_by(uuid\u003duuid).one()"},{"line_number":169,"context_line":"        except orm.exc.NoResultFound:"},{"line_number":170,"context_line":"            raise utils.NodeNotFoundInDBError()"},{"line_number":171,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"1daff2a0_7e319d82","line":168,"in_reply_to":"86fc7e71_4d496420","updated":"2022-11-21 20:21:50.000000000","message":"ahh, yeah. good catch!","commit_id":"66a133cd0d9d3d182b0f13c768cf1897354a9508"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"030102c353a0f6769b95623baf7d2487cb7d324e","unresolved":false,"context_lines":[{"line_number":170,"context_line":"            raise utils.NodeNotFoundInDBError()"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        node.update(fields_ver)"},{"line_number":173,"context_line":"        session.flush()"},{"line_number":174,"context_line":"    return node"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"fd9e7e6c_9c1e539b","line":173,"updated":"2022-11-25 15:19:38.000000000","message":"We should eventually get rid of all flushes, I cannot imagine why a commit would not do that","commit_id":"239b0328ffa244ac849fc0b0d10dada180bf7b1d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"030102c353a0f6769b95623baf7d2487cb7d324e","unresolved":false,"context_lines":[{"line_number":238,"context_line":"    with session_for_write() as session:"},{"line_number":239,"context_line":"        delete_attributes(node_uuid\u003duuid)"},{"line_number":240,"context_line":"        delete_introspection(uuid)"},{"line_number":241,"context_line":"        session.flush()"},{"line_number":242,"context_line":"        model_query(model.Node).filter_by(uuid\u003duuid).delete()"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"f4364424_e209c86f","line":241,"updated":"2022-11-25 15:19:38.000000000","message":"This flushes an empty session since no actions have been done as part of it","commit_id":"239b0328ffa244ac849fc0b0d10dada180bf7b1d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"030102c353a0f6769b95623baf7d2487cb7d324e","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        delete_attributes(node_uuid\u003duuid)"},{"line_number":240,"context_line":"        delete_introspection(uuid)"},{"line_number":241,"context_line":"        session.flush()"},{"line_number":242,"context_line":"        model_query(model.Node).filter_by(uuid\u003duuid).delete()"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"def delete_introspection(uuid):"}],"source_content_type":"text/x-python","patch_set":22,"id":"9360e442_f3e327b2","line":242,"updated":"2022-11-25 15:19:38.000000000","message":"This place opens another write session","commit_id":"239b0328ffa244ac849fc0b0d10dada180bf7b1d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"030102c353a0f6769b95623baf7d2487cb7d324e","unresolved":false,"context_lines":[{"line_number":249,"context_line":"    :returns: None"},{"line_number":250,"context_line":"    \"\"\""},{"line_number":251,"context_line":"    for db_model in (model.Option, model.IntrospectionData):"},{"line_number":252,"context_line":"        model_query(db_model).filter_by(uuid\u003duuid).delete()"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"def delete_nodes(finished_until\u003dNone):"}],"source_content_type":"text/x-python","patch_set":22,"id":"8ba9b991_b921592d","line":252,"updated":"2022-11-25 15:19:38.000000000","message":"This place relies on autocommit too","commit_id":"239b0328ffa244ac849fc0b0d10dada180bf7b1d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"030102c353a0f6769b95623baf7d2487cb7d324e","unresolved":false,"context_lines":[{"line_number":329,"context_line":"    # FIXME(TheJulia): This is going to be difficult to match"},{"line_number":330,"context_line":"    # in later versions of sqlalchemy since query needs to move"},{"line_number":331,"context_line":"    # to use the object model instead of free form attribute name."},{"line_number":332,"context_line":"    model_query(model.Attribute).filter_by(**fields).delete()"},{"line_number":333,"context_line":""},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"def get_attributes(order_by\u003dNone, **fields):"}],"source_content_type":"text/x-python","patch_set":22,"id":"e1fe3ce3_fc724c6b","line":332,"updated":"2022-11-25 15:19:38.000000000","message":"autocommit","commit_id":"239b0328ffa244ac849fc0b0d10dada180bf7b1d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"030102c353a0f6769b95623baf7d2487cb7d324e","unresolved":false,"context_lines":[{"line_number":443,"context_line":"    :raises: RuleNotFoundError in case rule not found"},{"line_number":444,"context_line":"    :returns: None"},{"line_number":445,"context_line":"    \"\"\""},{"line_number":446,"context_line":"    with session_for_write():"},{"line_number":447,"context_line":"        model_query(model.RuleAction).filter_by(rule\u003duuid).delete()"},{"line_number":448,"context_line":"        model_query(model.RuleCondition).filter_by(rule\u003duuid).delete()"},{"line_number":449,"context_line":"        count \u003d (model_query(model.Rule).filter_by(uuid\u003duuid).delete())"}],"source_content_type":"text/x-python","patch_set":22,"id":"31aea051_41d7dc80","line":446,"updated":"2022-11-25 15:19:38.000000000","message":"Unused session","commit_id":"239b0328ffa244ac849fc0b0d10dada180bf7b1d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"030102c353a0f6769b95623baf7d2487cb7d324e","unresolved":false,"context_lines":[{"line_number":456,"context_line":""},{"line_number":457,"context_line":"    :returns: None"},{"line_number":458,"context_line":"    \"\"\""},{"line_number":459,"context_line":"    with session_for_write():"},{"line_number":460,"context_line":"        model_query(model.RuleAction).delete()"},{"line_number":461,"context_line":"        model_query(model.RuleCondition).delete()"},{"line_number":462,"context_line":"        model_query(model.Rule).delete()"}],"source_content_type":"text/x-python","patch_set":22,"id":"5481f8ab_fda66d3e","line":459,"updated":"2022-11-25 15:19:38.000000000","message":"ditto","commit_id":"239b0328ffa244ac849fc0b0d10dada180bf7b1d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"030102c353a0f6769b95623baf7d2487cb7d324e","unresolved":false,"context_lines":[{"line_number":472,"context_line":"                      indicates the data is unprocessed."},{"line_number":473,"context_line":"    \"\"\""},{"line_number":474,"context_line":"    with session_for_write() as session:"},{"line_number":475,"context_line":"        record \u003d model_query(model.IntrospectionData,"},{"line_number":476,"context_line":"                             session\u003dsession).filter_by("},{"line_number":477,"context_line":"            uuid\u003dnode_id, processed\u003dprocessed).first()"},{"line_number":478,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"d063e770_89585cee","line":475,"updated":"2022-11-25 15:19:38.000000000","message":"session.query","commit_id":"239b0328ffa244ac849fc0b0d10dada180bf7b1d"}],"ironic_inspector/db/model.py":[{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"8b6016a6a8433e8dea7d0788d4d04c4fffa25953","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"Base \u003d declarative_base(cls\u003dModelBase)"},{"line_number":37,"context_line":"CONF \u003d cfg.CONF"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class Node(Base):"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f231b9d_c84ff468","line":37,"range":{"start_line":37,"start_character":0,"end_line":37,"end_character":15},"updated":"2017-06-19 08:46:57.000000000","message":"not needed","commit_id":"beeeb661c2cf57bf48e26c0747283177beb255f4"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"030102c353a0f6769b95623baf7d2487cb7d324e","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    # NOTE(TheJulia): Version ID use has been removed from inspector."},{"line_number":41,"context_line":"    # At some point, we can safely remove the column, but most likely"},{"line_number":42,"context_line":"    # the project will encourage migration to a combined service as"},{"line_number":43,"context_line":"    # opposed to a standalone service."},{"line_number":44,"context_line":"    version_id \u003d Column(String(36), server_default\u003d\u0027\u0027)"},{"line_number":45,"context_line":"    state \u003d Column(Enum(*istate.States.all()), nullable\u003dFalse,"},{"line_number":46,"context_line":"                   default\u003distate.States.finished,"}],"source_content_type":"text/x-python","patch_set":22,"id":"91399f3f_3315b0a5","line":43,"updated":"2022-11-25 15:19:38.000000000","message":"*nod*","commit_id":"239b0328ffa244ac849fc0b0d10dada180bf7b1d"}],"ironic_inspector/dbsync.py":[{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"720991bd1454e0fe497e0d3c164eb6bcc4621f1c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"7f231b9d_c8d5b41d","side":"PARENT","updated":"2017-06-19 08:50:10.000000000","message":"we already have cmd dir, so move this file to it","commit_id":"fcec378594388eff0fec4437fd55f001a6a173a7"}],"ironic_inspector/main.py":[{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"8b6016a6a8433e8dea7d0788d4d04c4fffa25953","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        except utils.Error as exc:"},{"line_number":77,"context_line":"            return error_response(exc, exc.http_code)"},{"line_number":78,"context_line":"        except werkzeug.exceptions.HTTPException as exc:"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"            return error_response(exc, exc.code or 400)"},{"line_number":81,"context_line":"        except Exception as exc:"},{"line_number":82,"context_line":"            LOG.exception(\u0027Internal server error \u0027)"},{"line_number":83,"context_line":"            msg \u003d _(\u0027Internal server error\u0027)"},{"line_number":84,"context_line":"            if CONF.debug:"},{"line_number":85,"context_line":"                msg +\u003d \u0027 (%s): %s\u0027 % (exc.__class__.__name__, exc)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f231b9d_6858e02f","line":82,"range":{"start_line":79,"start_character":0,"end_line":82,"end_character":51},"updated":"2017-06-19 08:46:57.000000000","message":"oops","commit_id":"beeeb661c2cf57bf48e26c0747283177beb255f4"}],"ironic_inspector/node_cache.py":[{"author":{"_account_id":18653,"name":"Milan Kováčik","email":"mkovacik@redhat.com","username":"dparalen"},"change_message_id":"d7f18cefd8022c1a35d73261a31860e8e63a9a57","unresolved":false,"context_lines":[{"line_number":148,"context_line":"        return self._version_id"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    def _set_version_id(self, value):"},{"line_number":151,"context_line":"        self._row()"},{"line_number":152,"context_line":"        db.update_node(self.uuid, {\u0027version_id\u0027: value})"},{"line_number":153,"context_line":"        self._version_id \u003d value"},{"line_number":154,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5f201791_b9185b81","line":151,"range":{"start_line":151,"start_character":0,"end_line":151,"end_character":19},"updated":"2017-06-21 12:25:05.000000000","message":"is this some sort of a DB record existence check?","commit_id":"59e0898928ef2c18395864de301d6a630d6c47d6"},{"author":{"_account_id":18653,"name":"Milan Kováčik","email":"mkovacik@redhat.com","username":"dparalen"},"change_message_id":"d7f18cefd8022c1a35d73261a31860e8e63a9a57","unresolved":false,"context_lines":[{"line_number":164,"context_line":"        \"\"\"Commit the fields into the DB.\"\"\""},{"line_number":165,"context_line":"        LOG.debug(\u0027Committing fields: %s\u0027, fields, node_info\u003dself)"},{"line_number":166,"context_line":"        self._set_version_id(uuidutils.generate_uuid())"},{"line_number":167,"context_line":"        self._row()"},{"line_number":168,"context_line":"        db.update_node(self.uuid, fields)"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    def commit(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f201791_7921a3b4","line":167,"range":{"start_line":167,"start_character":7,"end_line":167,"end_character":19},"updated":"2017-06-21 12:25:05.000000000","message":"ditto","commit_id":"59e0898928ef2c18395864de301d6a630d6c47d6"},{"author":{"_account_id":18653,"name":"Milan Kováčik","email":"mkovacik@redhat.com","username":"dparalen"},"change_message_id":"d7f18cefd8022c1a35d73261a31860e8e63a9a57","unresolved":false,"context_lines":[{"line_number":277,"context_line":"        self.finished_at \u003d timeutils.utcnow()"},{"line_number":278,"context_line":"        self.error \u003d error"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"        self._commit(finished_at\u003dself.finished_at, error\u003dself.error)"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"        db.delete_attributes(node_uuid\u003dself.uuid)"},{"line_number":283,"context_line":"        db.delete_options(uuid\u003dself.uuid)"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"    def add_attribute(self, name, value):"},{"line_number":286,"context_line":"        \"\"\"Store look up attribute for a node in the database."}],"source_content_type":"text/x-python","patch_set":3,"id":"5f201791_dc08a529","line":283,"range":{"start_line":280,"start_character":8,"end_line":283,"end_character":41},"updated":"2017-06-21 12:25:05.000000000","message":"this isn\u0027t part of a single transaction any more, is it?","commit_id":"59e0898928ef2c18395864de301d6a630d6c47d6"},{"author":{"_account_id":18653,"name":"Milan Kováčik","email":"mkovacik@redhat.com","username":"dparalen"},"change_message_id":"d7f18cefd8022c1a35d73261a31860e8e63a9a57","unresolved":false,"context_lines":[{"line_number":291,"context_line":"        if not isinstance(value, list):"},{"line_number":292,"context_line":"            value \u003d [value]"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"        for v in value:"},{"line_number":295,"context_line":"            db.set_attribute(uuid\u003duuidutils.generate_uuid(), name\u003dname,"},{"line_number":296,"context_line":"                             value\u003dv, node_uuid\u003dself.uuid)"},{"line_number":297,"context_line":"        # Invalidate attributes so they\u0027re loaded on next usage"},{"line_number":298,"context_line":"        self._attributes \u003d None"},{"line_number":299,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5f201791_3c19d978","line":296,"range":{"start_line":294,"start_character":8,"end_line":296,"end_character":58},"updated":"2017-06-21 12:25:05.000000000","message":"ditto","commit_id":"59e0898928ef2c18395864de301d6a630d6c47d6"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"030102c353a0f6769b95623baf7d2487cb7d324e","unresolved":false,"context_lines":[{"line_number":260,"context_line":"        self.release_lock()"},{"line_number":261,"context_line":"        self.finished_at \u003d timeutils.utcnow()"},{"line_number":262,"context_line":"        self.error \u003d error"},{"line_number":263,"context_line":"        with db.session_for_write() as session:"},{"line_number":264,"context_line":"            self.fsm_event(event)"},{"line_number":265,"context_line":"            self._commit(finished_at\u003dself.finished_at,"},{"line_number":266,"context_line":"                         error\u003dself.error)"}],"source_content_type":"text/x-python","patch_set":22,"id":"89017935_433c402d","line":263,"updated":"2022-11-25 15:19:38.000000000","message":"Should be eventually moved to dbapi","commit_id":"239b0328ffa244ac849fc0b0d10dada180bf7b1d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"030102c353a0f6769b95623baf7d2487cb7d324e","unresolved":false,"context_lines":[{"line_number":266,"context_line":"                         error\u003dself.error)"},{"line_number":267,"context_line":"            db.delete_attributes(node_uuid\u003dself.uuid)"},{"line_number":268,"context_line":"            db.delete_options(uuid\u003dself.uuid)"},{"line_number":269,"context_line":"            session.flush()"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"    def add_attribute(self, name, value):"},{"line_number":272,"context_line":"        \"\"\"Store look up attribute for a node in the database."}],"source_content_type":"text/x-python","patch_set":22,"id":"f6d9839e_f5649b95","line":269,"updated":"2022-11-25 15:19:38.000000000","message":"flushing of an empty session","commit_id":"239b0328ffa244ac849fc0b0d10dada180bf7b1d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"030102c353a0f6769b95623baf7d2487cb7d324e","unresolved":false,"context_lines":[{"line_number":692,"context_line":"    :returns: NodeInfo"},{"line_number":693,"context_line":"    \"\"\""},{"line_number":694,"context_line":"    started_at \u003d timeutils.utcnow()"},{"line_number":695,"context_line":"    db.delete_node(uuid\u003duuid)"},{"line_number":696,"context_line":"    db.add_node(uuid\u003duuid, state\u003dstate, started_at\u003dstarted_at,"},{"line_number":697,"context_line":"                manage_boot\u003dmanage_boot)"},{"line_number":698,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"52133d1f_0db7e819","line":695,"updated":"2022-11-25 15:19:38.000000000","message":"Without transactions this is potentially racy, although I doubt such a race can be triggered through the API","commit_id":"239b0328ffa244ac849fc0b0d10dada180bf7b1d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"030102c353a0f6769b95623baf7d2487cb7d324e","unresolved":false,"context_lines":[{"line_number":694,"context_line":"    started_at \u003d timeutils.utcnow()"},{"line_number":695,"context_line":"    db.delete_node(uuid\u003duuid)"},{"line_number":696,"context_line":"    db.add_node(uuid\u003duuid, state\u003dstate, started_at\u003dstarted_at,"},{"line_number":697,"context_line":"                manage_boot\u003dmanage_boot)"},{"line_number":698,"context_line":""},{"line_number":699,"context_line":"    node_info \u003d NodeInfo(uuid\u003duuid, state\u003dstate,"},{"line_number":700,"context_line":"                         started_at\u003dstarted_at,"}],"source_content_type":"text/x-python","patch_set":22,"id":"f52e4513_f9906941","line":697,"updated":"2022-11-25 15:19:38.000000000","message":"although... if any of these calls fail, we end up with a node record just gone.. not great :(","commit_id":"239b0328ffa244ac849fc0b0d10dada180bf7b1d"}],"ironic_inspector/rules.py":[{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"812df3ccd017eae96112eb017eb1a64ab26ecfce","unresolved":false,"context_lines":[{"line_number":338,"context_line":""},{"line_number":339,"context_line":"def delete(uuid):"},{"line_number":340,"context_line":"    \"\"\"Delete a rule by its UUID.\"\"\""},{"line_number":341,"context_line":"    db.delete_rule(uuid)"},{"line_number":342,"context_line":""},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"def delete_all():"}],"source_content_type":"text/x-python","patch_set":4,"id":"ff346bd7_bbfaf43f","line":341,"range":{"start_line":341,"start_character":0,"end_line":341,"end_character":24},"updated":"2017-07-27 12:09:43.000000000","message":"move log back","commit_id":"ee2844524f92b5d496bbbdd967cc9acfdfbb4b04"}],"ironic_inspector/test/functional.py":[{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"812df3ccd017eae96112eb017eb1a64ab26ecfce","unresolved":false,"context_lines":[{"line_number":645,"context_line":"        # waiting -\u003e processing is a strict state transition"},{"line_number":646,"context_line":"        self.call_introspect(self.uuid)"},{"line_number":647,"context_line":"        eventlet.greenthread.sleep(DEFAULT_SLEEP)"},{"line_number":648,"context_line":"        # row \u003d self.db_row()"},{"line_number":649,"context_line":"        # row.state \u003d istate.States.processing"},{"line_number":650,"context_line":"        # with db.session_for_write() as session:"},{"line_number":651,"context_line":"        #     row.save(session)"},{"line_number":652,"context_line":"        db.update_node(self.uuid, state\u003distate.States.processing)"},{"line_number":653,"context_line":"        self.call_continue(self.data, expect_error\u003d400)"},{"line_number":654,"context_line":"        status \u003d self.call_get_status(self.uuid)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ff346bd7_9b4970b8","line":651,"range":{"start_line":648,"start_character":0,"end_line":651,"end_character":31},"updated":"2017-07-27 12:09:43.000000000","message":"missed","commit_id":"ee2844524f92b5d496bbbdd967cc9acfdfbb4b04"}],"releasenotes/notes/db-model-updates-a1f6285675b2b965.yaml":[{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"3f00fb9dc75e060cea084a4aaff984a4946ca814","unresolved":true,"context_lines":[{"line_number":4,"context_line":"    Plugin maintainers should be aware that the Node Cache object field"},{"line_number":5,"context_line":"    ``version_id`` filed is no longer in use. It is still returned"},{"line_number":6,"context_line":"    by the data model if stored for the purposes of compatability, but"},{"line_number":7,"context_line":"    Inspector will not update the field through the normal course of it\u0027s"},{"line_number":8,"context_line":"    operation."},{"line_number":9,"context_line":"other:"},{"line_number":10,"context_line":"  - |"}],"source_content_type":"text/x-yaml","patch_set":22,"id":"cbfb3771_6b0bee5f","line":7,"range":{"start_line":7,"start_character":69,"end_line":7,"end_character":73},"updated":"2022-11-23 14:36:10.000000000","message":"nit: its","commit_id":"239b0328ffa244ac849fc0b0d10dada180bf7b1d"}],"releasenotes/notes/no-upgrade-from-prior-to-rocky-38fd4a17c3b06ac1.yaml":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"0610fed79eaeb6a3352c8e2a8030451f9677da11","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"upgrade:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Database schema upgrades from versions prior to ``7.3.0`` are not"},{"line_number":5,"context_line":"    supported. Please upgrade to an intermediate release prior to upgrading"}],"source_content_type":"text/x-yaml","patch_set":18,"id":"f2e544de_39f0baae","line":2,"updated":"2022-10-28 15:19:25.000000000","message":"I don\u0027t think this needs to be in a separate release note file?","commit_id":"311f14c160e09416f7ae378e60cbd42785b93a52"}]}
