)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"da14f653a92ba3ca26b695267d311b719b8308c8","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Zenghui Shi \u003czshi@redhat.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2018-03-16 11:26:28 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add DB model for bios setting table"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Ia2c14c5674e34decaa075c2754e7a552bbb1beab"},{"line_number":10,"context_line":"Partial-Bug: #1712032"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"df7087c5_2afbe2c0","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":35},"updated":"2018-03-16 06:32:27.000000000","message":"Add summary of things done in this patch, like add bios_settings table, database migration,\nand object entry for BIOS settings operations.","commit_id":"205b4d6134b20cb1ce54c502e674db037117309e"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"b32ab43196b2b9dd6a45f84c050c2bf19cadf0fe","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Co-Authored-By: Yolanda Robla Mota \u003cyroblamo@redhat.com\u003e"},{"line_number":16,"context_line":"Change-Id: Ia2c14c5674e34decaa075c2754e7a552bbb1beab"},{"line_number":17,"context_line":"Partial-Bug: #1712032"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":39,"id":"bf659307_713156a2","line":17,"updated":"2018-04-10 04:59:52.000000000","message":"I wonder if we need to use Story and Task here because Storyboard was introduced.","commit_id":"1eb91bb12c1b428ab34679f72f2b681a9eacc956"}],"ironic/db/sqlalchemy/alembic/versions/82c315d60161_add_bios_settings.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b75dd73e5c124c1c204b0f5e74b8e012a1a530d8","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        sa.Column(\u0027created_at\u0027, sa.DateTime(), nullable\u003dTrue),"},{"line_number":34,"context_line":"        sa.Column(\u0027updated_at\u0027, sa.DateTime(), nullable\u003dTrue),"},{"line_number":35,"context_line":"        sa.Column(\u0027name\u0027, sa.String(length\u003d255), nullable\u003dFalse),"},{"line_number":36,"context_line":"        sa.Column(\u0027value\u0027, sa.Text(), nullable\u003dTrue),"},{"line_number":37,"context_line":"        sa.Column(\u0027version\u0027, sa.String(length\u003d15), nullable\u003dTrue),"},{"line_number":38,"context_line":"        sa.ForeignKeyConstraint([\u0027node_id\u0027], [\u0027nodes.id\u0027], ),"},{"line_number":39,"context_line":"        sa.PrimaryKeyConstraint(\u0027node_id\u0027, \u0027name\u0027),"}],"source_content_type":"text/x-python","patch_set":28,"id":"df7087c5_d02de2fd","line":36,"updated":"2018-03-20 16:05:46.000000000","message":"see my comment on models.py","commit_id":"04eaebd73c548941f3013f88e641534383561777"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"4638b686a6d8e9652ce712ea5a3397b2c77d1db5","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        sa.Column(\u0027created_at\u0027, sa.DateTime(), nullable\u003dTrue),"},{"line_number":34,"context_line":"        sa.Column(\u0027updated_at\u0027, sa.DateTime(), nullable\u003dTrue),"},{"line_number":35,"context_line":"        sa.Column(\u0027name\u0027, sa.String(length\u003d255), nullable\u003dFalse),"},{"line_number":36,"context_line":"        sa.Column(\u0027value\u0027, sa.Text(), nullable\u003dTrue),"},{"line_number":37,"context_line":"        sa.Column(\u0027version\u0027, sa.String(length\u003d15), nullable\u003dTrue),"},{"line_number":38,"context_line":"        sa.ForeignKeyConstraint([\u0027node_id\u0027], [\u0027nodes.id\u0027], ),"},{"line_number":39,"context_line":"        sa.PrimaryKeyConstraint(\u0027node_id\u0027, \u0027name\u0027),"}],"source_content_type":"text/x-python","patch_set":28,"id":"df7087c5_b8aa8716","line":36,"in_reply_to":"df7087c5_d02de2fd","updated":"2018-03-21 02:46:53.000000000","message":"Done","commit_id":"04eaebd73c548941f3013f88e641534383561777"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"5e3396377bc94c2a4ccb02a150660443157232f8","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        sa.Column(\u0027created_at\u0027, sa.DateTime(), nullable\u003dTrue),"},{"line_number":35,"context_line":"        sa.Column(\u0027updated_at\u0027, sa.DateTime(), nullable\u003dTrue),"},{"line_number":36,"context_line":"        sa.Column(\u0027name\u0027, sa.String(length\u003d255), nullable\u003dFalse),"},{"line_number":37,"context_line":"        sa.Column(\u0027value\u0027,"},{"line_number":38,"context_line":"                  db_types.JsonEncodedDict(mysql_as_medium\u003dTrue),"},{"line_number":39,"context_line":"                  nullable\u003dTrue),"},{"line_number":40,"context_line":"        sa.Column(\u0027version\u0027, sa.String(length\u003d15), nullable\u003dTrue),"},{"line_number":41,"context_line":"        sa.ForeignKeyConstraint([\u0027node_id\u0027], [\u0027nodes.id\u0027], ),"},{"line_number":42,"context_line":"        sa.PrimaryKeyConstraint(\u0027node_id\u0027, \u0027name\u0027),"}],"source_content_type":"text/x-python","patch_set":36,"id":"bf659307_f206a5ce","line":39,"range":{"start_line":37,"start_character":18,"end_line":39,"end_character":31},"updated":"2018-03-29 02:06:34.000000000","message":"This is a quite large value range (almost 16M), from the example in unit test, it\u0027s just value corresponding to one BIOS option, e.g., virtualization \u003d on\nI suppose TEXT would fit here, unless there is proof to do so.","commit_id":"4c2b9707e6121aa2c050289eb47f70e4f2bb24e9"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a4a930dd729641fdad22cc7936195d26c311c03c","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        sa.Column(\u0027created_at\u0027, sa.DateTime(), nullable\u003dTrue),"},{"line_number":35,"context_line":"        sa.Column(\u0027updated_at\u0027, sa.DateTime(), nullable\u003dTrue),"},{"line_number":36,"context_line":"        sa.Column(\u0027name\u0027, sa.String(length\u003d255), nullable\u003dFalse),"},{"line_number":37,"context_line":"        sa.Column(\u0027value\u0027,"},{"line_number":38,"context_line":"                  db_types.JsonEncodedDict(mysql_as_medium\u003dTrue),"},{"line_number":39,"context_line":"                  nullable\u003dTrue),"},{"line_number":40,"context_line":"        sa.Column(\u0027version\u0027, sa.String(length\u003d15), nullable\u003dTrue),"},{"line_number":41,"context_line":"        sa.ForeignKeyConstraint([\u0027node_id\u0027], [\u0027nodes.id\u0027], ),"},{"line_number":42,"context_line":"        sa.PrimaryKeyConstraint(\u0027node_id\u0027, \u0027name\u0027),"}],"source_content_type":"text/x-python","patch_set":36,"id":"bf659307_6c1b4ec9","line":39,"range":{"start_line":37,"start_character":18,"end_line":39,"end_character":31},"in_reply_to":"bf659307_0cbf32d1","updated":"2018-04-03 08:59:13.000000000","message":"I guess I\u0027m fine with keeping is small for now. We have to use JsonEncodedDict because not all values may be strings, and we probably don\u0027t want to lose their type.","commit_id":"4c2b9707e6121aa2c050289eb47f70e4f2bb24e9"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"3d753162771e70fe106209e371bf075c4d23c4f9","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        sa.Column(\u0027created_at\u0027, sa.DateTime(), nullable\u003dTrue),"},{"line_number":35,"context_line":"        sa.Column(\u0027updated_at\u0027, sa.DateTime(), nullable\u003dTrue),"},{"line_number":36,"context_line":"        sa.Column(\u0027name\u0027, sa.String(length\u003d255), nullable\u003dFalse),"},{"line_number":37,"context_line":"        sa.Column(\u0027value\u0027,"},{"line_number":38,"context_line":"                  db_types.JsonEncodedDict(mysql_as_medium\u003dTrue),"},{"line_number":39,"context_line":"                  nullable\u003dTrue),"},{"line_number":40,"context_line":"        sa.Column(\u0027version\u0027, sa.String(length\u003d15), nullable\u003dTrue),"},{"line_number":41,"context_line":"        sa.ForeignKeyConstraint([\u0027node_id\u0027], [\u0027nodes.id\u0027], ),"},{"line_number":42,"context_line":"        sa.PrimaryKeyConstraint(\u0027node_id\u0027, \u0027name\u0027),"}],"source_content_type":"text/x-python","patch_set":36,"id":"bf659307_fd0bd120","line":39,"range":{"start_line":37,"start_character":18,"end_line":39,"end_character":31},"in_reply_to":"bf659307_65141145","updated":"2018-03-29 09:01:21.000000000","message":"If we really have such amount of json contents, performance counts.\nIIRC the only text field changed to use mediumtext is instance_info, because configdrive can exceed 64K limits, but the processing all happens at shell level without parsing cost.\nI\u0027m kind of curious what kind of bios option can hold up to this amount of data, probably firmware? but that doesn\u0027t seem fit in this feature.","commit_id":"4c2b9707e6121aa2c050289eb47f70e4f2bb24e9"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"87a71c0d3af06b1a8215d2ec7b7a4ae3764816d5","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        sa.Column(\u0027created_at\u0027, sa.DateTime(), nullable\u003dTrue),"},{"line_number":35,"context_line":"        sa.Column(\u0027updated_at\u0027, sa.DateTime(), nullable\u003dTrue),"},{"line_number":36,"context_line":"        sa.Column(\u0027name\u0027, sa.String(length\u003d255), nullable\u003dFalse),"},{"line_number":37,"context_line":"        sa.Column(\u0027value\u0027,"},{"line_number":38,"context_line":"                  db_types.JsonEncodedDict(mysql_as_medium\u003dTrue),"},{"line_number":39,"context_line":"                  nullable\u003dTrue),"},{"line_number":40,"context_line":"        sa.Column(\u0027version\u0027, sa.String(length\u003d15), nullable\u003dTrue),"},{"line_number":41,"context_line":"        sa.ForeignKeyConstraint([\u0027node_id\u0027], [\u0027nodes.id\u0027], ),"},{"line_number":42,"context_line":"        sa.PrimaryKeyConstraint(\u0027node_id\u0027, \u0027name\u0027),"}],"source_content_type":"text/x-python","patch_set":36,"id":"bf659307_be52d3dc","line":39,"range":{"start_line":37,"start_character":18,"end_line":39,"end_character":31},"in_reply_to":"bf659307_6c1b4ec9","updated":"2018-04-04 02:07:45.000000000","message":"Done","commit_id":"4c2b9707e6121aa2c050289eb47f70e4f2bb24e9"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"4684b8c2b48b2d615048edefb7ce45b31afdec76","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        sa.Column(\u0027created_at\u0027, sa.DateTime(), nullable\u003dTrue),"},{"line_number":35,"context_line":"        sa.Column(\u0027updated_at\u0027, sa.DateTime(), nullable\u003dTrue),"},{"line_number":36,"context_line":"        sa.Column(\u0027name\u0027, sa.String(length\u003d255), nullable\u003dFalse),"},{"line_number":37,"context_line":"        sa.Column(\u0027value\u0027,"},{"line_number":38,"context_line":"                  db_types.JsonEncodedDict(mysql_as_medium\u003dTrue),"},{"line_number":39,"context_line":"                  nullable\u003dTrue),"},{"line_number":40,"context_line":"        sa.Column(\u0027version\u0027, sa.String(length\u003d15), nullable\u003dTrue),"},{"line_number":41,"context_line":"        sa.ForeignKeyConstraint([\u0027node_id\u0027], [\u0027nodes.id\u0027], ),"},{"line_number":42,"context_line":"        sa.PrimaryKeyConstraint(\u0027node_id\u0027, \u0027name\u0027),"}],"source_content_type":"text/x-python","patch_set":36,"id":"bf659307_6747ce78","line":39,"range":{"start_line":37,"start_character":18,"end_line":39,"end_character":31},"in_reply_to":"bf659307_6c1b4ec9","updated":"2018-04-04 06:20:21.000000000","message":"Yes that is defined in the model, but from what I see from other tables, they use Text() in the migration script. Probably it doesn\u0027t matter.","commit_id":"4c2b9707e6121aa2c050289eb47f70e4f2bb24e9"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"d0370df549c836146128695670a9a0579e26d00b","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        sa.Column(\u0027created_at\u0027, sa.DateTime(), nullable\u003dTrue),"},{"line_number":35,"context_line":"        sa.Column(\u0027updated_at\u0027, sa.DateTime(), nullable\u003dTrue),"},{"line_number":36,"context_line":"        sa.Column(\u0027name\u0027, sa.String(length\u003d255), nullable\u003dFalse),"},{"line_number":37,"context_line":"        sa.Column(\u0027value\u0027,"},{"line_number":38,"context_line":"                  db_types.JsonEncodedDict(mysql_as_medium\u003dTrue),"},{"line_number":39,"context_line":"                  nullable\u003dTrue),"},{"line_number":40,"context_line":"        sa.Column(\u0027version\u0027, sa.String(length\u003d15), nullable\u003dTrue),"},{"line_number":41,"context_line":"        sa.ForeignKeyConstraint([\u0027node_id\u0027], [\u0027nodes.id\u0027], ),"},{"line_number":42,"context_line":"        sa.PrimaryKeyConstraint(\u0027node_id\u0027, \u0027name\u0027),"}],"source_content_type":"text/x-python","patch_set":36,"id":"bf659307_0cbf32d1","line":39,"range":{"start_line":37,"start_character":18,"end_line":39,"end_character":31},"in_reply_to":"bf659307_d686aa66","updated":"2018-04-03 08:51:23.000000000","message":"\u003e This was changed from String to Text to JsonEncodedDict,\nYou changed from text to medium text at PS29, I just noticed it\u0027s the suggestion from Dmitry.\nbtw JsonEncodedDict is an oslo stuff, not a term in mysql.\n\n \u003e One thing I\u0027m not sure is that whether we have bios values that may\n \u003e expand to such a big size(e.g the value is a list or a dict\n \u003e containing multiple values associated with one key name), if yes,\n \u003e it may still make sense to cover it but with performance penalty?\n\nIf we are not sure, usually it means we have no evidence supports. Actually this field is a String in the spec, but I agree it\u0027s too small. I have two considerations:\n1. increase storage size is easy, but it is not from the opposite, in case we have data to migrate.\n2. if one bios option can hold this amount of data, IMHO it\u0027s probably not an appropriate solution by storing it to database.","commit_id":"4c2b9707e6121aa2c050289eb47f70e4f2bb24e9"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"39f177821bf340c7031f245cff4d80d9743639ba","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        sa.Column(\u0027created_at\u0027, sa.DateTime(), nullable\u003dTrue),"},{"line_number":35,"context_line":"        sa.Column(\u0027updated_at\u0027, sa.DateTime(), nullable\u003dTrue),"},{"line_number":36,"context_line":"        sa.Column(\u0027name\u0027, sa.String(length\u003d255), nullable\u003dFalse),"},{"line_number":37,"context_line":"        sa.Column(\u0027value\u0027,"},{"line_number":38,"context_line":"                  db_types.JsonEncodedDict(mysql_as_medium\u003dTrue),"},{"line_number":39,"context_line":"                  nullable\u003dTrue),"},{"line_number":40,"context_line":"        sa.Column(\u0027version\u0027, sa.String(length\u003d15), nullable\u003dTrue),"},{"line_number":41,"context_line":"        sa.ForeignKeyConstraint([\u0027node_id\u0027], [\u0027nodes.id\u0027], ),"},{"line_number":42,"context_line":"        sa.PrimaryKeyConstraint(\u0027node_id\u0027, \u0027name\u0027),"}],"source_content_type":"text/x-python","patch_set":36,"id":"bf659307_d686aa66","line":39,"range":{"start_line":37,"start_character":18,"end_line":39,"end_character":31},"in_reply_to":"bf659307_da1fba05","updated":"2018-04-03 03:57:44.000000000","message":"Thanks for the comments!\nThis was changed from String to Text to JsonEncodedDict,\nOne thing I\u0027m not sure is that whether we have bios values that may expand to such a big size(e.g the value is a list or a dict containing multiple values associated with one key name), if yes, it may still make sense to cover it but with performance penalty?","commit_id":"4c2b9707e6121aa2c050289eb47f70e4f2bb24e9"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"78ca54a17c2e4e0d34b4c052cf1e12eb80eeb7a0","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        sa.Column(\u0027created_at\u0027, sa.DateTime(), nullable\u003dTrue),"},{"line_number":35,"context_line":"        sa.Column(\u0027updated_at\u0027, sa.DateTime(), nullable\u003dTrue),"},{"line_number":36,"context_line":"        sa.Column(\u0027name\u0027, sa.String(length\u003d255), nullable\u003dFalse),"},{"line_number":37,"context_line":"        sa.Column(\u0027value\u0027,"},{"line_number":38,"context_line":"                  db_types.JsonEncodedDict(mysql_as_medium\u003dTrue),"},{"line_number":39,"context_line":"                  nullable\u003dTrue),"},{"line_number":40,"context_line":"        sa.Column(\u0027version\u0027, sa.String(length\u003d15), nullable\u003dTrue),"},{"line_number":41,"context_line":"        sa.ForeignKeyConstraint([\u0027node_id\u0027], [\u0027nodes.id\u0027], ),"},{"line_number":42,"context_line":"        sa.PrimaryKeyConstraint(\u0027node_id\u0027, \u0027name\u0027),"}],"source_content_type":"text/x-python","patch_set":36,"id":"bf659307_65141145","line":39,"range":{"start_line":37,"start_character":18,"end_line":39,"end_character":31},"in_reply_to":"bf659307_f206a5ce","updated":"2018-03-29 02:34:32.000000000","message":"Yes, it\u0027s a large size, and one BIOS option in unit test is for testing purpose.\nI think with this db_type, we are expecting some nested values which may contain a long size of text.","commit_id":"4c2b9707e6121aa2c050289eb47f70e4f2bb24e9"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"66158880163dff47d94265b5548afb19e6ee0fde","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        sa.Column(\u0027created_at\u0027, sa.DateTime(), nullable\u003dTrue),"},{"line_number":35,"context_line":"        sa.Column(\u0027updated_at\u0027, sa.DateTime(), nullable\u003dTrue),"},{"line_number":36,"context_line":"        sa.Column(\u0027name\u0027, sa.String(length\u003d255), nullable\u003dFalse),"},{"line_number":37,"context_line":"        sa.Column(\u0027value\u0027,"},{"line_number":38,"context_line":"                  db_types.JsonEncodedDict(mysql_as_medium\u003dTrue),"},{"line_number":39,"context_line":"                  nullable\u003dTrue),"},{"line_number":40,"context_line":"        sa.Column(\u0027version\u0027, sa.String(length\u003d15), nullable\u003dTrue),"},{"line_number":41,"context_line":"        sa.ForeignKeyConstraint([\u0027node_id\u0027], [\u0027nodes.id\u0027], ),"},{"line_number":42,"context_line":"        sa.PrimaryKeyConstraint(\u0027node_id\u0027, \u0027name\u0027),"}],"source_content_type":"text/x-python","patch_set":36,"id":"bf659307_da1fba05","line":39,"range":{"start_line":37,"start_character":18,"end_line":39,"end_character":31},"in_reply_to":"bf659307_fd0bd120","updated":"2018-04-02 14:46:25.000000000","message":"I agree, a smaller text field would be ideal. Mysql won\u0027t beyond an initial first portion of the field without explicit indexing, but still...","commit_id":"4c2b9707e6121aa2c050289eb47f70e4f2bb24e9"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"92b0afa5e1633b0d194dbc81c77eaa2e053db5dd","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        sa.Column(\u0027updated_at\u0027, sa.DateTime(), nullable\u003dTrue),"},{"line_number":36,"context_line":"        sa.Column(\u0027name\u0027, sa.String(length\u003d255), nullable\u003dFalse),"},{"line_number":37,"context_line":"        sa.Column(\u0027value\u0027,"},{"line_number":38,"context_line":"                  db_types.JsonEncodedDict(mysql_as_medium\u003dTrue),"},{"line_number":39,"context_line":"                  nullable\u003dTrue),"},{"line_number":40,"context_line":"        sa.Column(\u0027version\u0027, sa.String(length\u003d15), nullable\u003dTrue),"},{"line_number":41,"context_line":"        sa.ForeignKeyConstraint([\u0027node_id\u0027], [\u0027nodes.id\u0027], ),"}],"source_content_type":"text/x-python","patch_set":42,"id":"bf659307_39b5e032","line":38,"updated":"2018-04-11 09:28:20.000000000","message":"We also need to change back this to Text.","commit_id":"7d703242c3563d3f91a51ecf42b8c23c382c5120"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"d408aa848dc0ebde4021cb17e82b8f048304f592","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        sa.Column(\u0027updated_at\u0027, sa.DateTime(), nullable\u003dTrue),"},{"line_number":36,"context_line":"        sa.Column(\u0027name\u0027, sa.String(length\u003d255), nullable\u003dFalse),"},{"line_number":37,"context_line":"        sa.Column(\u0027value\u0027,"},{"line_number":38,"context_line":"                  db_types.JsonEncodedDict(mysql_as_medium\u003dTrue),"},{"line_number":39,"context_line":"                  nullable\u003dTrue),"},{"line_number":40,"context_line":"        sa.Column(\u0027version\u0027, sa.String(length\u003d15), nullable\u003dTrue),"},{"line_number":41,"context_line":"        sa.ForeignKeyConstraint([\u0027node_id\u0027], [\u0027nodes.id\u0027], ),"}],"source_content_type":"text/x-python","patch_set":42,"id":"bf659307_73d35e39","line":38,"in_reply_to":"bf659307_2a31ef59","updated":"2018-04-12 02:42:49.000000000","message":"Done","commit_id":"7d703242c3563d3f91a51ecf42b8c23c382c5120"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f408335dcafeda05e224af96f8a27907b38d7ff4","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        sa.Column(\u0027updated_at\u0027, sa.DateTime(), nullable\u003dTrue),"},{"line_number":36,"context_line":"        sa.Column(\u0027name\u0027, sa.String(length\u003d255), nullable\u003dFalse),"},{"line_number":37,"context_line":"        sa.Column(\u0027value\u0027,"},{"line_number":38,"context_line":"                  db_types.JsonEncodedDict(mysql_as_medium\u003dTrue),"},{"line_number":39,"context_line":"                  nullable\u003dTrue),"},{"line_number":40,"context_line":"        sa.Column(\u0027version\u0027, sa.String(length\u003d15), nullable\u003dTrue),"},{"line_number":41,"context_line":"        sa.ForeignKeyConstraint([\u0027node_id\u0027], [\u0027nodes.id\u0027], ),"}],"source_content_type":"text/x-python","patch_set":42,"id":"bf659307_2a31ef59","line":38,"in_reply_to":"bf659307_39b5e032","updated":"2018-04-11 22:21:58.000000000","message":"Yeah, likely. It does not help that we seem to use them interchangeably :\\\n\nI seem to remember that they are basically both medium length text fields under the hood.","commit_id":"7d703242c3563d3f91a51ecf42b8c23c382c5120"}],"ironic/db/sqlalchemy/alembic/versions/82c315d60161_add_node_bios.py":[{"author":{"_account_id":10206,"name":"Madhuri Kumari","email":"madhuri.kumari@intel.com","username":"Madhuri"},"change_message_id":"f2a6d9be88c5dbefb422a5e0fde9126e91278d87","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        sa.Column(\u0027node_uuid\u0027, sa.String(length\u003d36), nullable\u003dTrue),"},{"line_number":34,"context_line":"        sa.Column(\u0027created_at\u0027, sa.DateTime(), nullable\u003dTrue),"},{"line_number":35,"context_line":"        sa.Column(\u0027updated_at\u0027, sa.DateTime(), nullable\u003dTrue),"},{"line_number":36,"context_line":"        sa.Column(\u0027settings\u0027, sa.Text(), nullable\u003dTrue),"},{"line_number":37,"context_line":"        sa.Column(\u0027version\u0027, sa.String(length\u003d15), nullable\u003dTrue),"},{"line_number":38,"context_line":"        sa.PrimaryKeyConstraint(\u0027id\u0027),"},{"line_number":39,"context_line":"        sa.UniqueConstraint(\u0027node_uuid\u0027, name\u003d\u0027uniq_nodesbios0node_uuid0\u0027),"}],"source_content_type":"text/x-python","patch_set":13,"id":"bf8cb3f7_1404887a","line":36,"range":{"start_line":36,"start_character":30,"end_line":36,"end_character":39},"updated":"2017-12-27 10:28:22.000000000","message":"The model says it is a dictionary.","commit_id":"98d2fb760d5df567e062ee06c55938797169a7de"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"239dbaae208b72fa56e8fe2de73235275a0698f1","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        sa.Column(\u0027node_uuid\u0027, sa.String(length\u003d36), nullable\u003dTrue),"},{"line_number":34,"context_line":"        sa.Column(\u0027created_at\u0027, sa.DateTime(), nullable\u003dTrue),"},{"line_number":35,"context_line":"        sa.Column(\u0027updated_at\u0027, sa.DateTime(), nullable\u003dTrue),"},{"line_number":36,"context_line":"        sa.Column(\u0027settings\u0027, sa.Text(), nullable\u003dTrue),"},{"line_number":37,"context_line":"        sa.Column(\u0027version\u0027, sa.String(length\u003d15), nullable\u003dTrue),"},{"line_number":38,"context_line":"        sa.PrimaryKeyConstraint(\u0027id\u0027),"},{"line_number":39,"context_line":"        sa.UniqueConstraint(\u0027node_uuid\u0027, name\u003d\u0027uniq_nodesbios0node_uuid0\u0027),"}],"source_content_type":"text/x-python","patch_set":13,"id":"9f91af0f_7ab50bee","line":36,"range":{"start_line":36,"start_character":30,"end_line":36,"end_character":39},"in_reply_to":"bf8cb3f7_1404887a","updated":"2017-12-29 13:32:21.000000000","message":"A dictionary is stored as a text in DB.","commit_id":"98d2fb760d5df567e062ee06c55938797169a7de"}],"ironic/db/sqlalchemy/models.py":[{"author":{"_account_id":22255,"name":"Tuan","email":"tuanla@vn.fujitsu.com","username":"Tuan"},"change_message_id":"1a61589517b611dacf5799ef7e8b927c8c9df23e","unresolved":false,"context_lines":[{"line_number":280,"context_line":""},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"class NodeBIOS(Base):"},{"line_number":283,"context_line":"    \"\"\"Represents bios config of a bare metal node.\"\"\""},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"    __tablename__ \u003d \u0027nodes_bios\u0027"},{"line_number":286,"context_line":"    __table_args__ \u003d ("}],"source_content_type":"text/x-python","patch_set":7,"id":"1f485f77_e2971a90","line":283,"range":{"start_line":283,"start_character":18,"end_line":283,"end_character":29},"updated":"2017-11-13 04:49:37.000000000","message":"/s a bios configuration /bios config","commit_id":"15933831969ca7bcbdc7389a8c2978eeaf64d4d9"},{"author":{"_account_id":22255,"name":"Tuan","email":"tuanla@vn.fujitsu.com","username":"Tuan"},"change_message_id":"1a61589517b611dacf5799ef7e8b927c8c9df23e","unresolved":false,"context_lines":[{"line_number":283,"context_line":"    \"\"\"Represents bios config of a bare metal node.\"\"\""},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"    __tablename__ \u003d \u0027nodes_bios\u0027"},{"line_number":286,"context_line":"    __table_args__ \u003d ("},{"line_number":287,"context_line":"        schema.UniqueConstraint(\u0027node_id\u0027,"},{"line_number":288,"context_line":"                                name\u003d\u0027uniq_nodesbios0node_id0\u0027),"},{"line_number":289,"context_line":"        table_args())"},{"line_number":290,"context_line":"    id \u003d Column(Integer, primary_key\u003dTrue)"},{"line_number":291,"context_line":"    node_id \u003d Column(String(36), nullable\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1f485f77_428f0e2a","line":288,"range":{"start_line":286,"start_character":0,"end_line":288,"end_character":64},"updated":"2017-11-13 04:49:37.000000000","message":"Should we need uuid as a UniqueConstraint for NodeBIOs","commit_id":"15933831969ca7bcbdc7389a8c2978eeaf64d4d9"},{"author":{"_account_id":22255,"name":"Tuan","email":"tuanla@vn.fujitsu.com","username":"Tuan"},"change_message_id":"1a61589517b611dacf5799ef7e8b927c8c9df23e","unresolved":false,"context_lines":[{"line_number":288,"context_line":"                                name\u003d\u0027uniq_nodesbios0node_id0\u0027),"},{"line_number":289,"context_line":"        table_args())"},{"line_number":290,"context_line":"    id \u003d Column(Integer, primary_key\u003dTrue)"},{"line_number":291,"context_line":"    node_id \u003d Column(String(36), nullable\u003dTrue)"},{"line_number":292,"context_line":"    created_at \u003d Column(DateTime, nullable\u003dTrue)"},{"line_number":293,"context_line":"    updated_at \u003d Column(DateTime, nullable\u003dTrue)"},{"line_number":294,"context_line":"    settings \u003d Column(db_types.JsonEncodedDict, nullable\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1f485f77_62a1eaa9","line":291,"range":{"start_line":291,"start_character":14,"end_line":291,"end_character":47},"updated":"2017-11-13 04:49:37.000000000","message":"I\u0027m wonder why node_id is not ForeignKey?","commit_id":"15933831969ca7bcbdc7389a8c2978eeaf64d4d9"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"7cdfb0a0225ecc9f9a083d44a41260812c03a5dc","unresolved":false,"context_lines":[{"line_number":289,"context_line":"                                name\u003d\u0027uniq_nodesbios0node_uuid0\u0027),"},{"line_number":290,"context_line":"        table_args())"},{"line_number":291,"context_line":"    id \u003d Column(Integer, primary_key\u003dTrue)"},{"line_number":292,"context_line":"    node_uuid \u003d Column(String(36), nullable\u003dTrue)"},{"line_number":293,"context_line":"    created_at \u003d Column(DateTime, nullable\u003dTrue)"},{"line_number":294,"context_line":"    updated_at \u003d Column(DateTime, nullable\u003dTrue)"},{"line_number":295,"context_line":"    settings \u003d Column(db_types.JsonEncodedDict, nullable\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":12,"id":"df87a7cf_aa95e1e5","line":292,"updated":"2017-12-20 03:33:08.000000000","message":"Shouldn\u0027t we use the node_id value to enforce a foreign key constraint?","commit_id":"6a3a44d9def3894d857de02cbcfcd8e4a596ddac"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"239dbaae208b72fa56e8fe2de73235275a0698f1","unresolved":false,"context_lines":[{"line_number":290,"context_line":"        table_args())"},{"line_number":291,"context_line":"    id \u003d Column(Integer, primary_key\u003dTrue)"},{"line_number":292,"context_line":"    node_uuid \u003d Column(String(36), nullable\u003dTrue)"},{"line_number":293,"context_line":"    created_at \u003d Column(DateTime, nullable\u003dTrue)"},{"line_number":294,"context_line":"    updated_at \u003d Column(DateTime, nullable\u003dTrue)"},{"line_number":295,"context_line":"    settings \u003d Column(db_types.JsonEncodedDict, nullable\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9f91af0f_7a7d0b6d","line":294,"range":{"start_line":293,"start_character":0,"end_line":294,"end_character":48},"updated":"2017-12-29 13:32:21.000000000","message":"These timestamps are not necessary because they are defined in the superclass.","commit_id":"98d2fb760d5df567e062ee06c55938797169a7de"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"ff62c1ee24fc7a16ef1730a4aa5ced896c3f178a","unresolved":false,"context_lines":[{"line_number":306,"context_line":"    node_id \u003d Column(Integer, ForeignKey(\u0027nodes.id\u0027),"},{"line_number":307,"context_line":"                     primary_key\u003dTrue, nullable\u003dFalse)"},{"line_number":308,"context_line":"    name \u003d Column(String(255), primary_key\u003dTrue, nullable\u003dFalse)"},{"line_number":309,"context_line":"    value \u003d Column(String(255), nullable\u003dTrue)"},{"line_number":310,"context_line":"    created_at \u003d Column(DateTime, nullable\u003dTrue)"},{"line_number":311,"context_line":"    updated_at \u003d Column(DateTime, nullable\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":27,"id":"df7087c5_fc990f79","line":309,"range":{"start_line":309,"start_character":19,"end_line":309,"end_character":30},"updated":"2018-03-19 08:11:54.000000000","message":"I doubt if this length is enough. A vendor interface may require larger size for storing a longer value like a list or a dict containing multiple values associated with one key name. Text type might be safer, IMHO.","commit_id":"2962ad6afdcec0e0a2f14d13d827a146471ebe6e"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"62ca004fd941f22f80f3211009eab5334c4d195e","unresolved":false,"context_lines":[{"line_number":306,"context_line":"    node_id \u003d Column(Integer, ForeignKey(\u0027nodes.id\u0027),"},{"line_number":307,"context_line":"                     primary_key\u003dTrue, nullable\u003dFalse)"},{"line_number":308,"context_line":"    name \u003d Column(String(255), primary_key\u003dTrue, nullable\u003dFalse)"},{"line_number":309,"context_line":"    value \u003d Column(String(255), nullable\u003dTrue)"},{"line_number":310,"context_line":"    created_at \u003d Column(DateTime, nullable\u003dTrue)"},{"line_number":311,"context_line":"    updated_at \u003d Column(DateTime, nullable\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":27,"id":"df7087c5_29716be1","line":309,"range":{"start_line":309,"start_character":19,"end_line":309,"end_character":30},"in_reply_to":"df7087c5_fc990f79","updated":"2018-03-20 04:53:15.000000000","message":"Done","commit_id":"2962ad6afdcec0e0a2f14d13d827a146471ebe6e"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"ff62c1ee24fc7a16ef1730a4aa5ced896c3f178a","unresolved":false,"context_lines":[{"line_number":307,"context_line":"                     primary_key\u003dTrue, nullable\u003dFalse)"},{"line_number":308,"context_line":"    name \u003d Column(String(255), primary_key\u003dTrue, nullable\u003dFalse)"},{"line_number":309,"context_line":"    value \u003d Column(String(255), nullable\u003dTrue)"},{"line_number":310,"context_line":"    created_at \u003d Column(DateTime, nullable\u003dTrue)"},{"line_number":311,"context_line":"    updated_at \u003d Column(DateTime, nullable\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":27,"id":"df7087c5_fc5eef10","line":311,"range":{"start_line":310,"start_character":0,"end_line":311,"end_character":48},"updated":"2018-03-19 08:11:54.000000000","message":"These columns are not necessary because they are inherited from the parent base class.","commit_id":"2962ad6afdcec0e0a2f14d13d827a146471ebe6e"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"62ca004fd941f22f80f3211009eab5334c4d195e","unresolved":false,"context_lines":[{"line_number":307,"context_line":"                     primary_key\u003dTrue, nullable\u003dFalse)"},{"line_number":308,"context_line":"    name \u003d Column(String(255), primary_key\u003dTrue, nullable\u003dFalse)"},{"line_number":309,"context_line":"    value \u003d Column(String(255), nullable\u003dTrue)"},{"line_number":310,"context_line":"    created_at \u003d Column(DateTime, nullable\u003dTrue)"},{"line_number":311,"context_line":"    updated_at \u003d Column(DateTime, nullable\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":27,"id":"df7087c5_29a3ab51","line":311,"range":{"start_line":310,"start_character":0,"end_line":311,"end_character":48},"in_reply_to":"df7087c5_fc5eef10","updated":"2018-03-20 04:53:15.000000000","message":"Done","commit_id":"2962ad6afdcec0e0a2f14d13d827a146471ebe6e"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b75dd73e5c124c1c204b0f5e74b8e012a1a530d8","unresolved":false,"context_lines":[{"line_number":306,"context_line":"    node_id \u003d Column(Integer, ForeignKey(\u0027nodes.id\u0027),"},{"line_number":307,"context_line":"                     primary_key\u003dTrue, nullable\u003dFalse)"},{"line_number":308,"context_line":"    name \u003d Column(String(255), primary_key\u003dTrue, nullable\u003dFalse)"},{"line_number":309,"context_line":"    value \u003d Column(Text, nullable\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":28,"id":"df7087c5_7034164b","line":309,"updated":"2018-03-20 16:05:46.000000000","message":"This should be a JSON type, and special care should be taked to make sure that it\u0027s at least MEDIUMTEXT on MySQL, otherwise it may be too small. See https://github.com/openstack/ironic/commit/8fdf752ae9688c581fe8c977e8a5ffb9432583f3 for the context","commit_id":"04eaebd73c548941f3013f88e641534383561777"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"4638b686a6d8e9652ce712ea5a3397b2c77d1db5","unresolved":false,"context_lines":[{"line_number":306,"context_line":"    node_id \u003d Column(Integer, ForeignKey(\u0027nodes.id\u0027),"},{"line_number":307,"context_line":"                     primary_key\u003dTrue, nullable\u003dFalse)"},{"line_number":308,"context_line":"    name \u003d Column(String(255), primary_key\u003dTrue, nullable\u003dFalse)"},{"line_number":309,"context_line":"    value \u003d Column(Text, nullable\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":28,"id":"df7087c5_7862af18","line":309,"in_reply_to":"df7087c5_7034164b","updated":"2018-03-21 02:46:53.000000000","message":"Done","commit_id":"04eaebd73c548941f3013f88e641534383561777"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"5e3396377bc94c2a4ccb02a150660443157232f8","unresolved":false,"context_lines":[{"line_number":304,"context_line":"    __tablename__ \u003d \u0027bios_settings\u0027"},{"line_number":305,"context_line":"    __table_args__ \u003d (table_args())"},{"line_number":306,"context_line":"    node_id \u003d Column(Integer, ForeignKey(\u0027nodes.id\u0027),"},{"line_number":307,"context_line":"                     primary_key\u003dTrue, nullable\u003dFalse)"},{"line_number":308,"context_line":"    name \u003d Column(String(255), primary_key\u003dTrue, nullable\u003dFalse)"},{"line_number":309,"context_line":"    value \u003d Column(db_types.JsonEncodedDict(mysql_as_medium\u003dTrue),"},{"line_number":310,"context_line":"                   nullable\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":36,"id":"bf659307_8f0ce641","line":307,"range":{"start_line":307,"start_character":21,"end_line":307,"end_character":53},"updated":"2018-03-29 02:06:34.000000000","message":"I see other tables don\u0027t impose primary key to the foreign key and it\u0027s nullable, though I\u0027m not sure why, but I don\u0027t see any difference between bios_settings and other tables, is there any reason to do so? If no, I guess we can keep it consistent.","commit_id":"4c2b9707e6121aa2c050289eb47f70e4f2bb24e9"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"78ca54a17c2e4e0d34b4c052cf1e12eb80eeb7a0","unresolved":false,"context_lines":[{"line_number":304,"context_line":"    __tablename__ \u003d \u0027bios_settings\u0027"},{"line_number":305,"context_line":"    __table_args__ \u003d (table_args())"},{"line_number":306,"context_line":"    node_id \u003d Column(Integer, ForeignKey(\u0027nodes.id\u0027),"},{"line_number":307,"context_line":"                     primary_key\u003dTrue, nullable\u003dFalse)"},{"line_number":308,"context_line":"    name \u003d Column(String(255), primary_key\u003dTrue, nullable\u003dFalse)"},{"line_number":309,"context_line":"    value \u003d Column(db_types.JsonEncodedDict(mysql_as_medium\u003dTrue),"},{"line_number":310,"context_line":"                   nullable\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":36,"id":"bf659307_9223a9bd","line":307,"range":{"start_line":307,"start_character":21,"end_line":307,"end_character":53},"in_reply_to":"bf659307_8f0ce641","updated":"2018-03-29 02:34:32.000000000","message":"NodeTrait above has the same usage of primary key and foreign key.\n\nBoth node_id and name are primary keys because with these two items, we could identify a unique record in db for a certain bios option in a given node.\n\nIt\u0027s using foreign key for nodes.id, because we don\u0027t have node_uuid in the table.","commit_id":"4c2b9707e6121aa2c050289eb47f70e4f2bb24e9"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"3d753162771e70fe106209e371bf075c4d23c4f9","unresolved":false,"context_lines":[{"line_number":304,"context_line":"    __tablename__ \u003d \u0027bios_settings\u0027"},{"line_number":305,"context_line":"    __table_args__ \u003d (table_args())"},{"line_number":306,"context_line":"    node_id \u003d Column(Integer, ForeignKey(\u0027nodes.id\u0027),"},{"line_number":307,"context_line":"                     primary_key\u003dTrue, nullable\u003dFalse)"},{"line_number":308,"context_line":"    name \u003d Column(String(255), primary_key\u003dTrue, nullable\u003dFalse)"},{"line_number":309,"context_line":"    value \u003d Column(db_types.JsonEncodedDict(mysql_as_medium\u003dTrue),"},{"line_number":310,"context_line":"                   nullable\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":36,"id":"bf659307_fd2431b1","line":307,"range":{"start_line":307,"start_character":21,"end_line":307,"end_character":53},"in_reply_to":"bf659307_9223a9bd","updated":"2018-03-29 09:01:21.000000000","message":"Got it, thanks","commit_id":"4c2b9707e6121aa2c050289eb47f70e4f2bb24e9"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"53aeede9fb2861d4bdf6c0a01a8ba63975cb8bfe","unresolved":false,"context_lines":[{"line_number":302,"context_line":"    \"\"\"Represents a bios setting of a bare metal node.\"\"\""},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"    __tablename__ \u003d \u0027bios_settings\u0027"},{"line_number":305,"context_line":"    __table_args__ \u003d (table_args())"},{"line_number":306,"context_line":"    node_id \u003d Column(Integer, ForeignKey(\u0027nodes.id\u0027),"},{"line_number":307,"context_line":"                     primary_key\u003dTrue, nullable\u003dFalse)"},{"line_number":308,"context_line":"    name \u003d Column(String(255), primary_key\u003dTrue, nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":37,"id":"bf659307_811c5278","line":305,"range":{"start_line":305,"start_character":21,"end_line":305,"end_character":22},"updated":"2018-04-04 04:01:24.000000000","message":"ohh, this is redundant","commit_id":"dae65192da776b18dac9ca342895a70774561391"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"e3949aed67f7cbe380ae30480a6e7018833e4f97","unresolved":false,"context_lines":[{"line_number":302,"context_line":"    \"\"\"Represents a bios setting of a bare metal node.\"\"\""},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"    __tablename__ \u003d \u0027bios_settings\u0027"},{"line_number":305,"context_line":"    __table_args__ \u003d (table_args())"},{"line_number":306,"context_line":"    node_id \u003d Column(Integer, ForeignKey(\u0027nodes.id\u0027),"},{"line_number":307,"context_line":"                     primary_key\u003dTrue, nullable\u003dFalse)"},{"line_number":308,"context_line":"    name \u003d Column(String(255), primary_key\u003dTrue, nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":37,"id":"bf659307_8072beac","line":305,"range":{"start_line":305,"start_character":21,"end_line":305,"end_character":22},"in_reply_to":"bf659307_07ddb2de","updated":"2018-04-08 09:27:30.000000000","message":"Done","commit_id":"dae65192da776b18dac9ca342895a70774561391"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"4684b8c2b48b2d615048edefb7ce45b31afdec76","unresolved":false,"context_lines":[{"line_number":302,"context_line":"    \"\"\"Represents a bios setting of a bare metal node.\"\"\""},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"    __tablename__ \u003d \u0027bios_settings\u0027"},{"line_number":305,"context_line":"    __table_args__ \u003d (table_args())"},{"line_number":306,"context_line":"    node_id \u003d Column(Integer, ForeignKey(\u0027nodes.id\u0027),"},{"line_number":307,"context_line":"                     primary_key\u003dTrue, nullable\u003dFalse)"},{"line_number":308,"context_line":"    name \u003d Column(String(255), primary_key\u003dTrue, nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":37,"id":"bf659307_07ddb2de","line":305,"range":{"start_line":305,"start_character":21,"end_line":305,"end_character":22},"in_reply_to":"bf659307_811c5278","updated":"2018-04-04 06:20:21.000000000","message":"++","commit_id":"dae65192da776b18dac9ca342895a70774561391"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"f853a8f614110a18296c96d2cc8c9e53a5dead24","unresolved":false,"context_lines":[{"line_number":306,"context_line":"    node_id \u003d Column(Integer, ForeignKey(\u0027nodes.id\u0027),"},{"line_number":307,"context_line":"                     primary_key\u003dTrue, nullable\u003dFalse)"},{"line_number":308,"context_line":"    name \u003d Column(String(255), primary_key\u003dTrue, nullable\u003dFalse)"},{"line_number":309,"context_line":"    value \u003d Column(db_types.JsonEncodedDict(), nullable\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":37,"id":"bf659307_de3c5532","line":309,"updated":"2018-04-04 16:57:59.000000000","message":"I\u0027m a bit unsure about this being a JSON type. Apart from anything it will hurt readability.\n\nDo we have any examples of BIOS config that would require this?","commit_id":"dae65192da776b18dac9ca342895a70774561391"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"141d948f8d3a0b5bdfbc51e407724cd6f3707df7","unresolved":false,"context_lines":[{"line_number":306,"context_line":"    node_id \u003d Column(Integer, ForeignKey(\u0027nodes.id\u0027),"},{"line_number":307,"context_line":"                     primary_key\u003dTrue, nullable\u003dFalse)"},{"line_number":308,"context_line":"    name \u003d Column(String(255), primary_key\u003dTrue, nullable\u003dFalse)"},{"line_number":309,"context_line":"    value \u003d Column(db_types.JsonEncodedDict(), nullable\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":37,"id":"bf659307_161b491b","line":309,"in_reply_to":"bf659307_a6b7dad8","updated":"2018-04-09 09:22:24.000000000","message":"Thanks for explaining.\n\nThe type is JSON dict, so I guess it won\u0027t accept a list. Something like this would work though:\n\n{\u0027boot_device_priority\u0027: [\u0027hard_disk\u0027, \u0027CD/DVD\u0027]}\n\nI\u0027d quite like to see some standardisation/recommendation for the format of the common case of a single scalar value. This will creep into the unit tests etc., and would be nice to be consistent.\n\nHow about\n\n{\u0027\u003csetting name\u003e\u0027: \u003cvalue\u003e}\n\nOr\n\n{\u0027value\u0027: \u003cvalue\u003e}\n\nIt seems if JSONEncodedDict does enforce the top level type to be a dict (does it?) then we\u0027re always going to have this single redundant top level key. In the case where the value is actually a dict we could avoid the top level key, but I\u0027d suggest keeping it for consistency.","commit_id":"dae65192da776b18dac9ca342895a70774561391"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"e3949aed67f7cbe380ae30480a6e7018833e4f97","unresolved":false,"context_lines":[{"line_number":306,"context_line":"    node_id \u003d Column(Integer, ForeignKey(\u0027nodes.id\u0027),"},{"line_number":307,"context_line":"                     primary_key\u003dTrue, nullable\u003dFalse)"},{"line_number":308,"context_line":"    name \u003d Column(String(255), primary_key\u003dTrue, nullable\u003dFalse)"},{"line_number":309,"context_line":"    value \u003d Column(db_types.JsonEncodedDict(), nullable\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":37,"id":"bf659307_a6b7dad8","line":309,"in_reply_to":"bf659307_de3c5532","updated":"2018-04-08 09:27:30.000000000","message":"I think this may depend on vendors that whether a unique identifier is assigned to the bios option and whether the root/parent option needs to be specified. take below for example:\n\nTo configure boot device priority, there may be several boot options: boot option #1, boot option #2 ...\nit may be wrapped in a single dict when configuring the priority : \n\n{\u0027boot_device_priority\u0027: \u0027{\u0027boot_option_1\u0027: \u0027hard disk\u0027, \u0027boot_option_2\u0027: \u0027CD/DVD\u0027}\u0027 ... };\n\nIt could also be exposed and configured with a list of settings as long as \u0027boot_option_1\u0027 \u0026 \u0027boot_option_2\u0027 are unique names and \u0027boot_device_priority\u0027 is not need to be specified when configuring, such as :\n\n[\n  {\u0027boot_option_1\u0027: \u0027hard disk\u0027},\n  {\u0027boot_option_2\u0027: \u0027CD/DVD\u0027},\n  ...\n]","commit_id":"dae65192da776b18dac9ca342895a70774561391"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"f853a8f614110a18296c96d2cc8c9e53a5dead24","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":37,"id":"bf659307_be7ba1bc","line":310,"updated":"2018-04-04 16:57:59.000000000","message":"Will an ORM relationship with the node be added later?","commit_id":"dae65192da776b18dac9ca342895a70774561391"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"e3949aed67f7cbe380ae30480a6e7018833e4f97","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":37,"id":"bf659307_26218a4e","line":310,"in_reply_to":"bf659307_be7ba1bc","updated":"2018-04-08 09:27:30.000000000","message":"added","commit_id":"dae65192da776b18dac9ca342895a70774561391"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"141d948f8d3a0b5bdfbc51e407724cd6f3707df7","unresolved":false,"context_lines":[{"line_number":309,"context_line":"    value \u003d Column(db_types.JsonEncodedDict(), nullable\u003dTrue)"},{"line_number":310,"context_line":"    node \u003d orm.relationship("},{"line_number":311,"context_line":"        \"Node\","},{"line_number":312,"context_line":"        backref\u003d\u0027bios_setting\u0027,"},{"line_number":313,"context_line":"        primaryjoin\u003d\u0027and_(BIOSSetting.node_id \u003d\u003d Node.id)\u0027,"},{"line_number":314,"context_line":"        foreign_keys\u003dnode_id"},{"line_number":315,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":38,"id":"bf659307_b6729dac","line":312,"updated":"2018-04-09 09:22:24.000000000","message":"It will be a list -\u003e bios_settings","commit_id":"c06a21371de787d01f5be21e03423625697b517a"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"38862469c7a4a2da4b539e3031ffda26f34af019","unresolved":false,"context_lines":[{"line_number":309,"context_line":"                     primary_key\u003dTrue, nullable\u003dFalse)"},{"line_number":310,"context_line":"    name \u003d Column(String(255), primary_key\u003dTrue, nullable\u003dFalse)"},{"line_number":311,"context_line":"    value \u003d Column(db_types.JsonEncodedDict(mysql_as_medium\u003dTrue),"},{"line_number":312,"context_line":"                   nullable\u003dTrue)"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"def get_class(model_name):"}],"source_content_type":"text/x-python","patch_set":39,"id":"bf659307_47026671","line":312,"updated":"2018-04-09 15:34:14.000000000","message":"The spec says that this is a string, not a json blob. When did we decide to change this (or did we)?","commit_id":"1eb91bb12c1b428ab34679f72f2b681a9eacc956"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"3a5dd43e14d31130147ee23b5cc385de424b1a7f","unresolved":false,"context_lines":[{"line_number":309,"context_line":"                     primary_key\u003dTrue, nullable\u003dFalse)"},{"line_number":310,"context_line":"    name \u003d Column(String(255), primary_key\u003dTrue, nullable\u003dFalse)"},{"line_number":311,"context_line":"    value \u003d Column(db_types.JsonEncodedDict(mysql_as_medium\u003dTrue),"},{"line_number":312,"context_line":"                   nullable\u003dTrue)"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"def get_class(model_name):"}],"source_content_type":"text/x-python","patch_set":39,"id":"bf659307_7d282196","line":312,"in_reply_to":"bf659307_1e532219","updated":"2018-04-11 12:02:32.000000000","message":"We can always add it back if/when we need it :)","commit_id":"1eb91bb12c1b428ab34679f72f2b681a9eacc956"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"7f8d11e4a14513a828be8798f15bb0e68c0cc1c9","unresolved":false,"context_lines":[{"line_number":309,"context_line":"                     primary_key\u003dTrue, nullable\u003dFalse)"},{"line_number":310,"context_line":"    name \u003d Column(String(255), primary_key\u003dTrue, nullable\u003dFalse)"},{"line_number":311,"context_line":"    value \u003d Column(db_types.JsonEncodedDict(mysql_as_medium\u003dTrue),"},{"line_number":312,"context_line":"                   nullable\u003dTrue)"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"def get_class(model_name):"}],"source_content_type":"text/x-python","patch_set":39,"id":"bf659307_4d7da46c","line":312,"in_reply_to":"bf659307_270df28f","updated":"2018-04-09 18:19:25.000000000","message":"Will the ORM relationship be added back at some point? Perhaps it\u0027s not required as we\u0027re not going to include BIOS settings in GET /nodes/\u003cnode\u003e.","commit_id":"1eb91bb12c1b428ab34679f72f2b681a9eacc956"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"e10daa756f50e7e2c1e7a21c75306137956086c6","unresolved":false,"context_lines":[{"line_number":309,"context_line":"                     primary_key\u003dTrue, nullable\u003dFalse)"},{"line_number":310,"context_line":"    name \u003d Column(String(255), primary_key\u003dTrue, nullable\u003dFalse)"},{"line_number":311,"context_line":"    value \u003d Column(db_types.JsonEncodedDict(mysql_as_medium\u003dTrue),"},{"line_number":312,"context_line":"                   nullable\u003dTrue)"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"def get_class(model_name):"}],"source_content_type":"text/x-python","patch_set":39,"id":"bf659307_270df28f","line":312,"in_reply_to":"bf659307_47026671","updated":"2018-04-09 15:35:08.000000000","message":"Oh, Dmitry asked for this in patchset 28: https://review.openstack.org/#/c/511162/28/ironic/db/sqlalchemy/models.py\n\nCan I ask why? :)","commit_id":"1eb91bb12c1b428ab34679f72f2b681a9eacc956"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"b32ab43196b2b9dd6a45f84c050c2bf19cadf0fe","unresolved":false,"context_lines":[{"line_number":309,"context_line":"                     primary_key\u003dTrue, nullable\u003dFalse)"},{"line_number":310,"context_line":"    name \u003d Column(String(255), primary_key\u003dTrue, nullable\u003dFalse)"},{"line_number":311,"context_line":"    value \u003d Column(db_types.JsonEncodedDict(mysql_as_medium\u003dTrue),"},{"line_number":312,"context_line":"                   nullable\u003dTrue)"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"def get_class(model_name):"}],"source_content_type":"text/x-python","patch_set":39,"id":"bf659307_f16ec694","line":312,"in_reply_to":"bf659307_4d7da46c","updated":"2018-04-10 04:59:52.000000000","message":"I prefer using Text here. Just \u0027on\u0027 would be better as a result of the test[1].\n\nA vendor implementation may store a list or a dictionary for complicated configuration as I mentioned before. However, I think there are quite few cases requiring such complexity. A list or a dictionary could be stored as a text if necessary. Probably, we should introduce another dedicated interface and like a RAID interface for complicated configuration.\n\n[1] https://review.openstack.org/#/c/511402/40/ironic/tests/unit/db/test_bios_settings.py@31","commit_id":"1eb91bb12c1b428ab34679f72f2b681a9eacc956"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"298524cf123fd3ae79dbaad95ef09b28ab9ea3b5","unresolved":false,"context_lines":[{"line_number":309,"context_line":"                     primary_key\u003dTrue, nullable\u003dFalse)"},{"line_number":310,"context_line":"    name \u003d Column(String(255), primary_key\u003dTrue, nullable\u003dFalse)"},{"line_number":311,"context_line":"    value \u003d Column(db_types.JsonEncodedDict(mysql_as_medium\u003dTrue),"},{"line_number":312,"context_line":"                   nullable\u003dTrue)"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"def get_class(model_name):"}],"source_content_type":"text/x-python","patch_set":39,"id":"bf659307_e2783e2c","line":312,"in_reply_to":"bf659307_4d7da46c","updated":"2018-04-11 02:21:03.000000000","message":"Since it wont be in the get, I don\u0027t see it as being really needed. Is there a case where you could see it as desirable?","commit_id":"1eb91bb12c1b428ab34679f72f2b681a9eacc956"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"0cce1159119a73c5d52af0e21a9d4fcde589afeb","unresolved":false,"context_lines":[{"line_number":309,"context_line":"                     primary_key\u003dTrue, nullable\u003dFalse)"},{"line_number":310,"context_line":"    name \u003d Column(String(255), primary_key\u003dTrue, nullable\u003dFalse)"},{"line_number":311,"context_line":"    value \u003d Column(db_types.JsonEncodedDict(mysql_as_medium\u003dTrue),"},{"line_number":312,"context_line":"                   nullable\u003dTrue)"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"def get_class(model_name):"}],"source_content_type":"text/x-python","patch_set":39,"id":"bf659307_1e532219","line":312,"in_reply_to":"bf659307_e2783e2c","updated":"2018-04-11 08:38:58.000000000","message":"I think I was just cargo culting :) On further thought it shouldn\u0027t be required.","commit_id":"1eb91bb12c1b428ab34679f72f2b681a9eacc956"}],"ironic/tests/unit/db/sqlalchemy/test_migrations.py":[{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"239dbaae208b72fa56e8fe2de73235275a0698f1","unresolved":false,"context_lines":[{"line_number":640,"context_line":"        self.assertIsInstance(nodes.c.rescue_interface.type,"},{"line_number":641,"context_line":"                              sqlalchemy.types.String)"},{"line_number":642,"context_line":""},{"line_number":643,"context_line":"    def _check_2d13bc3d6bba(self, engine, data):"},{"line_number":644,"context_line":"        nodes \u003d db_utils.get_table(engine, \u0027nodes\u0027)"},{"line_number":645,"context_line":"        col_names \u003d [column.name for column in nodes.c]"},{"line_number":646,"context_line":"        self.assertIn(\u0027bios_interface\u0027, col_names)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9f91af0f_fa1a7b15","line":643,"updated":"2017-12-29 13:32:21.000000000","message":"This test should be moved to the patch to add bios_interface[1].\n\n[1] https://review.openstack.org/#/c/528609/","commit_id":"98d2fb760d5df567e062ee06c55938797169a7de"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"da14f653a92ba3ca26b695267d311b719b8308c8","unresolved":false,"context_lines":[{"line_number":670,"context_line":"    def _check_82c315d60161(self, engine, data):"},{"line_number":671,"context_line":"        bios_settings \u003d db_utils.get_table(engine, \u0027bios_settings\u0027)"},{"line_number":672,"context_line":"        col_names \u003d [column.name for column in bios_settings.c]"},{"line_number":673,"context_line":"        self.assertIn(\u0027node_id\u0027, col_names)"},{"line_number":674,"context_line":"        self.assertIn(\u0027created_at\u0027, col_names)"},{"line_number":675,"context_line":"        self.assertIn(\u0027updated_at\u0027, col_names)"},{"line_number":676,"context_line":"        self.assertIn(\u0027name\u0027, col_names)"},{"line_number":677,"context_line":"        self.assertIn(\u0027value\u0027, col_names)"},{"line_number":678,"context_line":"        self.assertIn(\u0027version\u0027, col_names)"},{"line_number":679,"context_line":"        self.assertIsInstance(bios_settings.c.node_id.type,"},{"line_number":680,"context_line":"                              sqlalchemy.types.Integer)"},{"line_number":681,"context_line":"        self.assertIsInstance(bios_settings.c.created_at.type,"}],"source_content_type":"text/x-python","patch_set":23,"id":"df7087c5_0fe950e4","line":678,"range":{"start_line":673,"start_character":8,"end_line":678,"end_character":43},"updated":"2018-03-16 06:32:27.000000000","message":"nit: may be we can avoid repetition:-\n    expected_names \u003d [\u0027node_id\u0027, \u0027created_at\u0027, \u0027updated_at\u0027, \u0027name\u0027, \u0027value\u0027, \u0027version\u0027]\n    self.assertEqual(sorted(expected_names), sorted(col_names))","commit_id":"205b4d6134b20cb1ce54c502e674db037117309e"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"88620821ada06231bdce12c58f66aad82c054036","unresolved":false,"context_lines":[{"line_number":670,"context_line":"    def _check_82c315d60161(self, engine, data):"},{"line_number":671,"context_line":"        bios_settings \u003d db_utils.get_table(engine, \u0027bios_settings\u0027)"},{"line_number":672,"context_line":"        col_names \u003d [column.name for column in bios_settings.c]"},{"line_number":673,"context_line":"        self.assertIn(\u0027node_id\u0027, col_names)"},{"line_number":674,"context_line":"        self.assertIn(\u0027created_at\u0027, col_names)"},{"line_number":675,"context_line":"        self.assertIn(\u0027updated_at\u0027, col_names)"},{"line_number":676,"context_line":"        self.assertIn(\u0027name\u0027, col_names)"},{"line_number":677,"context_line":"        self.assertIn(\u0027value\u0027, col_names)"},{"line_number":678,"context_line":"        self.assertIn(\u0027version\u0027, col_names)"},{"line_number":679,"context_line":"        self.assertIsInstance(bios_settings.c.node_id.type,"},{"line_number":680,"context_line":"                              sqlalchemy.types.Integer)"},{"line_number":681,"context_line":"        self.assertIsInstance(bios_settings.c.created_at.type,"}],"source_content_type":"text/x-python","patch_set":23,"id":"df7087c5_617fbc65","line":678,"range":{"start_line":673,"start_character":8,"end_line":678,"end_character":43},"in_reply_to":"df7087c5_0fe950e4","updated":"2018-03-16 10:09:03.000000000","message":"Done","commit_id":"205b4d6134b20cb1ce54c502e674db037117309e"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"ff62c1ee24fc7a16ef1730a4aa5ced896c3f178a","unresolved":false,"context_lines":[{"line_number":685,"context_line":"                              sqlalchemy.types.String)"},{"line_number":686,"context_line":"        self.assertIsInstance(bios_settings.c.version.type,"},{"line_number":687,"context_line":"                              sqlalchemy.types.String)"},{"line_number":688,"context_line":""},{"line_number":689,"context_line":"    def test_upgrade_and_version(self):"},{"line_number":690,"context_line":"        with patch_with_engine(self.engine):"},{"line_number":691,"context_line":"            self.migration_api.upgrade(\u0027head\u0027)"}],"source_content_type":"text/x-python","patch_set":27,"id":"df7087c5_1cb0838b","line":688,"updated":"2018-03-19 08:11:54.000000000","message":"Why don\u0027t we test it with inserting data like testing node_traits creation[1]?\n\n[1] https://review.openstack.org/#/c/528238/7/ironic/tests/unit/db/sqlalchemy/test_migrations.py","commit_id":"2962ad6afdcec0e0a2f14d13d827a146471ebe6e"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"62ca004fd941f22f80f3211009eab5334c4d195e","unresolved":false,"context_lines":[{"line_number":685,"context_line":"                              sqlalchemy.types.String)"},{"line_number":686,"context_line":"        self.assertIsInstance(bios_settings.c.version.type,"},{"line_number":687,"context_line":"                              sqlalchemy.types.String)"},{"line_number":688,"context_line":""},{"line_number":689,"context_line":"    def test_upgrade_and_version(self):"},{"line_number":690,"context_line":"        with patch_with_engine(self.engine):"},{"line_number":691,"context_line":"            self.migration_api.upgrade(\u0027head\u0027)"}],"source_content_type":"text/x-python","patch_set":27,"id":"df7087c5_0cb115e2","line":688,"in_reply_to":"df7087c5_1cb0838b","updated":"2018-03-20 04:53:15.000000000","message":"Done","commit_id":"2962ad6afdcec0e0a2f14d13d827a146471ebe6e"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"77c4ea48e3f920c5475197dfadee331c0cdb2b0d","unresolved":false,"context_lines":[{"line_number":667,"context_line":"            node_traits.c.node_id \u003d\u003d data[\u0027id\u0027]).execute().first()"},{"line_number":668,"context_line":"        self.assertEqual(\u0027trait1\u0027, trait[\u0027trait\u0027])"},{"line_number":669,"context_line":""},{"line_number":670,"context_line":"    def _pre_upgrade_82c315d60161(self, engine):"},{"line_number":671,"context_line":"        nodes \u003d db_utils.get_table(engine, \u0027nodes\u0027)"},{"line_number":672,"context_line":""},{"line_number":673,"context_line":"        mediumtext \u003d \u0027a\u0027 * (pow(2, 16) + 1)"}],"source_content_type":"text/x-python","patch_set":29,"id":"df7087c5_a9cf847d","line":670,"range":{"start_line":670,"start_character":8,"end_line":670,"end_character":33},"updated":"2018-03-21 17:37:46.000000000","message":"this whole function seems like a copypaste, please remove","commit_id":"2ac8c8d7d40ff00dac0748e911d700b917df0829"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"3136524c9f329d7aa3b372b2c263dfdd4d2ab565","unresolved":false,"context_lines":[{"line_number":667,"context_line":"            node_traits.c.node_id \u003d\u003d data[\u0027id\u0027]).execute().first()"},{"line_number":668,"context_line":"        self.assertEqual(\u0027trait1\u0027, trait[\u0027trait\u0027])"},{"line_number":669,"context_line":""},{"line_number":670,"context_line":"    def _pre_upgrade_82c315d60161(self, engine):"},{"line_number":671,"context_line":"        nodes \u003d db_utils.get_table(engine, \u0027nodes\u0027)"},{"line_number":672,"context_line":""},{"line_number":673,"context_line":"        mediumtext \u003d \u0027a\u0027 * (pow(2, 16) + 1)"}],"source_content_type":"text/x-python","patch_set":29,"id":"df7087c5_91cbc251","line":670,"range":{"start_line":670,"start_character":8,"end_line":670,"end_character":33},"in_reply_to":"df7087c5_a9cf847d","updated":"2018-03-22 00:30:09.000000000","message":"Thanks, Vladyslav!\nI\u0027m changing the table name as bios_settings so that it points to the right table; if this still makes no sense, I\u0027ll remove.","commit_id":"2ac8c8d7d40ff00dac0748e911d700b917df0829"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"77c4ea48e3f920c5475197dfadee331c0cdb2b0d","unresolved":false,"context_lines":[{"line_number":671,"context_line":"        nodes \u003d db_utils.get_table(engine, \u0027nodes\u0027)"},{"line_number":672,"context_line":""},{"line_number":673,"context_line":"        mediumtext \u003d \u0027a\u0027 * (pow(2, 16) + 1)"},{"line_number":674,"context_line":"        expected_to_fail_data \u003d {\u0027node_id\u0027: nodes.c.id,"},{"line_number":675,"context_line":"                                 \u0027name\u0027: \u0027bios_name\u0027,"},{"line_number":676,"context_line":"                                 \u0027value\u0027: mediumtext}"},{"line_number":677,"context_line":"        self.assertRaises(db_exc.DBError,"},{"line_number":678,"context_line":"                          nodes.insert().execute, expected_to_fail_data)"},{"line_number":679,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"df7087c5_0912300a","line":676,"range":{"start_line":674,"start_character":32,"end_line":676,"end_character":53},"updated":"2018-03-21 17:37:46.000000000","message":"why are you trying to insert these into nodes table?","commit_id":"2ac8c8d7d40ff00dac0748e911d700b917df0829"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"3136524c9f329d7aa3b372b2c263dfdd4d2ab565","unresolved":false,"context_lines":[{"line_number":671,"context_line":"        nodes \u003d db_utils.get_table(engine, \u0027nodes\u0027)"},{"line_number":672,"context_line":""},{"line_number":673,"context_line":"        mediumtext \u003d \u0027a\u0027 * (pow(2, 16) + 1)"},{"line_number":674,"context_line":"        expected_to_fail_data \u003d {\u0027node_id\u0027: nodes.c.id,"},{"line_number":675,"context_line":"                                 \u0027name\u0027: \u0027bios_name\u0027,"},{"line_number":676,"context_line":"                                 \u0027value\u0027: mediumtext}"},{"line_number":677,"context_line":"        self.assertRaises(db_exc.DBError,"},{"line_number":678,"context_line":"                          nodes.insert().execute, expected_to_fail_data)"},{"line_number":679,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"df7087c5_51e68a46","line":676,"range":{"start_line":674,"start_character":32,"end_line":676,"end_character":53},"in_reply_to":"df7087c5_0912300a","updated":"2018-03-22 00:30:09.000000000","message":"Done\nI forgot to change the table name","commit_id":"2ac8c8d7d40ff00dac0748e911d700b917df0829"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"f0fa3ac876e2acc5b205a59c85e23d3fee215767","unresolved":false,"context_lines":[{"line_number":667,"context_line":"            node_traits.c.node_id \u003d\u003d data[\u0027id\u0027]).execute().first()"},{"line_number":668,"context_line":"        self.assertEqual(\u0027trait1\u0027, trait[\u0027trait\u0027])"},{"line_number":669,"context_line":""},{"line_number":670,"context_line":"    def _pre_upgrade_82c315d60161(self, engine):"},{"line_number":671,"context_line":"        bios \u003d db_utils.get_table(engine, \u0027bios_settings\u0027)"},{"line_number":672,"context_line":""},{"line_number":673,"context_line":"        mediumtext \u003d \u0027a\u0027 * (pow(2, 16) + 1)"}],"source_content_type":"text/x-python","patch_set":30,"id":"df7087c5_65c0a42b","line":670,"updated":"2018-03-22 04:57:38.000000000","message":"A bios record cannot be inserted here because this method is called before update, where the bios_settings table is created. It\u0027s enough only to insert a node record here like _pre_upgrade_b4130a7fc904() at line 645. Then, we can add a bios setting to this node after upgrading like line 664 in traits case.","commit_id":"ed41e05d45704efb9c708d5a7da0581be59ecd7d"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"6212261002e6fd039dedd9733ed314acffafb83d","unresolved":false,"context_lines":[{"line_number":667,"context_line":"            node_traits.c.node_id \u003d\u003d data[\u0027id\u0027]).execute().first()"},{"line_number":668,"context_line":"        self.assertEqual(\u0027trait1\u0027, trait[\u0027trait\u0027])"},{"line_number":669,"context_line":""},{"line_number":670,"context_line":"    def _pre_upgrade_82c315d60161(self, engine):"},{"line_number":671,"context_line":"        bios \u003d db_utils.get_table(engine, \u0027bios_settings\u0027)"},{"line_number":672,"context_line":""},{"line_number":673,"context_line":"        mediumtext \u003d \u0027a\u0027 * (pow(2, 16) + 1)"}],"source_content_type":"text/x-python","patch_set":30,"id":"df7087c5_806cc636","line":670,"in_reply_to":"df7087c5_65c0a42b","updated":"2018-03-22 06:24:31.000000000","message":"Thanks for the explanation, Hironori! Appreciated.\nI didn\u0027t get the relation between pre_upgrade and check before. it\u0027s more clear now. the data param in check func is returned from pre_upgrade.","commit_id":"ed41e05d45704efb9c708d5a7da0581be59ecd7d"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"ae2a42c01d3c3980990e4258f17270d814f03dc7","unresolved":false,"context_lines":[{"line_number":691,"context_line":"        self.assertIsInstance(bios_settings.c.name.type,"},{"line_number":692,"context_line":"                              sqlalchemy.types.String)"},{"line_number":693,"context_line":"        self.assertIsInstance(bios_settings.c.value.type,"},{"line_number":694,"context_line":"                              sqlalchemy.types.Text)"},{"line_number":695,"context_line":"        self.assertIsInstance(bios_settings.c.version.type,"},{"line_number":696,"context_line":"                              sqlalchemy.types.String)"},{"line_number":697,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"df7087c5_a07a09b7","line":694,"updated":"2018-03-23 05:40:51.000000000","message":"Probably, we can validate MediumText like this[1] for MySQL. We can use this current code as is for other engines in an else clause (Referred nova code is used when extending size only for MySQL).\n\n[1] https://github.com/openstack/nova/blob/master/nova/tests/functional/db/api/test_migrations.py#L579","commit_id":"73e99a8c4ecc24ca8986feca3a451fbf35c5bd00"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"8e03cc19ff8bb465972aba2805556e09138cf897","unresolved":false,"context_lines":[{"line_number":691,"context_line":"        self.assertIsInstance(bios_settings.c.name.type,"},{"line_number":692,"context_line":"                              sqlalchemy.types.String)"},{"line_number":693,"context_line":"        self.assertIsInstance(bios_settings.c.value.type,"},{"line_number":694,"context_line":"                              sqlalchemy.types.Text)"},{"line_number":695,"context_line":"        self.assertIsInstance(bios_settings.c.version.type,"},{"line_number":696,"context_line":"                              sqlalchemy.types.String)"},{"line_number":697,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"df7087c5_8ab27c48","line":694,"in_reply_to":"df7087c5_a07a09b7","updated":"2018-03-23 09:32:09.000000000","message":"Done","commit_id":"73e99a8c4ecc24ca8986feca3a451fbf35c5bd00"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"ae2a42c01d3c3980990e4258f17270d814f03dc7","unresolved":false,"context_lines":[{"line_number":700,"context_line":"                   \u0027value\u0027: \u0027on\u0027}"},{"line_number":701,"context_line":"        bios_settings.insert().execute(setting)"},{"line_number":702,"context_line":"        setting \u003d bios_settings.select("},{"line_number":703,"context_line":"            bios_settings.c.node_id \u003d\u003d data[\u0027id\u0027],"},{"line_number":704,"context_line":"            bios_settings.c.name \u003d\u003d data[\u0027name\u0027]).execute().first()"},{"line_number":705,"context_line":"        self.assertEqual(\u0027on\u0027, setting[\u0027value\u0027])"},{"line_number":706,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"df7087c5_40bf6d60","line":703,"updated":"2018-03-23 05:40:51.000000000","message":"Probably, sqlalchemy.sql.and_() is necessary for using 2 conditions.","commit_id":"73e99a8c4ecc24ca8986feca3a451fbf35c5bd00"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"2b65c258939b85433495f9ee68905e14d598c503","unresolved":false,"context_lines":[{"line_number":700,"context_line":"                   \u0027value\u0027: \u0027on\u0027}"},{"line_number":701,"context_line":"        bios_settings.insert().execute(setting)"},{"line_number":702,"context_line":"        setting \u003d bios_settings.select("},{"line_number":703,"context_line":"            bios_settings.c.node_id \u003d\u003d data[\u0027id\u0027],"},{"line_number":704,"context_line":"            bios_settings.c.name \u003d\u003d data[\u0027name\u0027]).execute().first()"},{"line_number":705,"context_line":"        self.assertEqual(\u0027on\u0027, setting[\u0027value\u0027])"},{"line_number":706,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"df7087c5_4fa1d6f7","line":703,"in_reply_to":"df7087c5_40bf6d60","updated":"2018-03-23 09:31:14.000000000","message":"Done","commit_id":"73e99a8c4ecc24ca8986feca3a451fbf35c5bd00"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"ae2a42c01d3c3980990e4258f17270d814f03dc7","unresolved":false,"context_lines":[{"line_number":701,"context_line":"        bios_settings.insert().execute(setting)"},{"line_number":702,"context_line":"        setting \u003d bios_settings.select("},{"line_number":703,"context_line":"            bios_settings.c.node_id \u003d\u003d data[\u0027id\u0027],"},{"line_number":704,"context_line":"            bios_settings.c.name \u003d\u003d data[\u0027name\u0027]).execute().first()"},{"line_number":705,"context_line":"        self.assertEqual(\u0027on\u0027, setting[\u0027value\u0027])"},{"line_number":706,"context_line":""},{"line_number":707,"context_line":"    def test_upgrade_and_version(self):"}],"source_content_type":"text/x-python","patch_set":31,"id":"df7087c5_808fc5cb","line":704,"range":{"start_line":704,"start_character":36,"end_line":704,"end_character":40},"updated":"2018-03-23 05:40:51.000000000","message":"s/data/setting/","commit_id":"73e99a8c4ecc24ca8986feca3a451fbf35c5bd00"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"2b65c258939b85433495f9ee68905e14d598c503","unresolved":false,"context_lines":[{"line_number":701,"context_line":"        bios_settings.insert().execute(setting)"},{"line_number":702,"context_line":"        setting \u003d bios_settings.select("},{"line_number":703,"context_line":"            bios_settings.c.node_id \u003d\u003d data[\u0027id\u0027],"},{"line_number":704,"context_line":"            bios_settings.c.name \u003d\u003d data[\u0027name\u0027]).execute().first()"},{"line_number":705,"context_line":"        self.assertEqual(\u0027on\u0027, setting[\u0027value\u0027])"},{"line_number":706,"context_line":""},{"line_number":707,"context_line":"    def test_upgrade_and_version(self):"}],"source_content_type":"text/x-python","patch_set":31,"id":"df7087c5_94f7075a","line":704,"range":{"start_line":704,"start_character":36,"end_line":704,"end_character":40},"in_reply_to":"df7087c5_808fc5cb","updated":"2018-03-23 09:31:14.000000000","message":"Done","commit_id":"73e99a8c4ecc24ca8986feca3a451fbf35c5bd00"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"f853a8f614110a18296c96d2cc8c9e53a5dead24","unresolved":false,"context_lines":[{"line_number":697,"context_line":""},{"line_number":698,"context_line":"        setting \u003d {\u0027node_id\u0027: data[\u0027id\u0027],"},{"line_number":699,"context_line":"                   \u0027name\u0027: \u0027virtualization\u0027,"},{"line_number":700,"context_line":"                   \u0027value\u0027: \u0027on\u0027}"},{"line_number":701,"context_line":"        bios_settings.insert().execute(setting)"},{"line_number":702,"context_line":"        setting \u003d bios_settings.select("},{"line_number":703,"context_line":"            sqlalchemy.sql.and_("}],"source_content_type":"text/x-python","patch_set":37,"id":"bf659307_de6a151a","line":700,"updated":"2018-04-04 16:57:59.000000000","message":"The value is currently defined to be a dict.","commit_id":"dae65192da776b18dac9ca342895a70774561391"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"e3949aed67f7cbe380ae30480a6e7018833e4f97","unresolved":false,"context_lines":[{"line_number":697,"context_line":""},{"line_number":698,"context_line":"        setting \u003d {\u0027node_id\u0027: data[\u0027id\u0027],"},{"line_number":699,"context_line":"                   \u0027name\u0027: \u0027virtualization\u0027,"},{"line_number":700,"context_line":"                   \u0027value\u0027: \u0027on\u0027}"},{"line_number":701,"context_line":"        bios_settings.insert().execute(setting)"},{"line_number":702,"context_line":"        setting \u003d bios_settings.select("},{"line_number":703,"context_line":"            sqlalchemy.sql.and_("}],"source_content_type":"text/x-python","patch_set":37,"id":"bf659307_206972bd","line":700,"in_reply_to":"bf659307_de6a151a","updated":"2018-04-08 09:27:30.000000000","message":"Done","commit_id":"dae65192da776b18dac9ca342895a70774561391"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"4bacbae5d302fcf7b3e78cb589c0e8a45008572f","unresolved":false,"context_lines":[{"line_number":695,"context_line":"        self.assertIsInstance(bios_settings.c.value.type,"},{"line_number":696,"context_line":"                              sqlalchemy.types.Text)"},{"line_number":697,"context_line":""},{"line_number":698,"context_line":"        setting \u003d {\u0027node_id\u0027: data[\u0027id\u0027],"},{"line_number":699,"context_line":"                   \u0027name\u0027: \u0027virtualization\u0027,"},{"line_number":700,"context_line":"                   \u0027value\u0027: {\u0027virtualization\u0027: \u0027on\u0027}}"},{"line_number":701,"context_line":"        bios_settings.insert().execute(setting)"},{"line_number":702,"context_line":"        setting \u003d bios_settings.select("},{"line_number":703,"context_line":"            sqlalchemy.sql.and_("}],"source_content_type":"text/x-python","patch_set":38,"id":"bf659307_9bdf7d0b","line":700,"range":{"start_line":698,"start_character":0,"end_line":700,"end_character":53},"updated":"2018-04-09 13:54:46.000000000","message":"This appears to throw a syntax failure on postgres.\n\nhttp://logs.openstack.org/62/511162/38/check/openstack-tox-py27/87e9c66/job-output.txt.gz#_2018-04-08_09_30_44_429843\n\nPart of me wonders if the postgres filter is expecting json, and not a dict object in memory...","commit_id":"c06a21371de787d01f5be21e03423625697b517a"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"aa61e8b7ff9977a67d7e339489f5d639877e2cca","unresolved":false,"context_lines":[{"line_number":695,"context_line":"        self.assertIsInstance(bios_settings.c.value.type,"},{"line_number":696,"context_line":"                              sqlalchemy.types.Text)"},{"line_number":697,"context_line":""},{"line_number":698,"context_line":"        setting \u003d {\u0027node_id\u0027: data[\u0027id\u0027],"},{"line_number":699,"context_line":"                   \u0027name\u0027: \u0027virtualization\u0027,"},{"line_number":700,"context_line":"                   \u0027value\u0027: {\u0027virtualization\u0027: \u0027on\u0027}}"},{"line_number":701,"context_line":"        bios_settings.insert().execute(setting)"},{"line_number":702,"context_line":"        setting \u003d bios_settings.select("},{"line_number":703,"context_line":"            sqlalchemy.sql.and_("}],"source_content_type":"text/x-python","patch_set":38,"id":"bf659307_a6902897","line":700,"range":{"start_line":698,"start_character":0,"end_line":700,"end_character":53},"in_reply_to":"bf659307_9bdf7d0b","updated":"2018-04-09 13:59:47.000000000","message":"correct: it is on both postgres and mysql.","commit_id":"c06a21371de787d01f5be21e03423625697b517a"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"38862469c7a4a2da4b539e3031ffda26f34af019","unresolved":false,"context_lines":[{"line_number":701,"context_line":""},{"line_number":702,"context_line":"        setting \u003d {\u0027node_id\u0027: data[\u0027id\u0027],"},{"line_number":703,"context_line":"                   \u0027name\u0027: \u0027virtualization\u0027,"},{"line_number":704,"context_line":"                   \u0027value\u0027: \u0027on\u0027}"},{"line_number":705,"context_line":"        bios_settings.insert().execute(setting)"},{"line_number":706,"context_line":"        setting \u003d bios_settings.select("},{"line_number":707,"context_line":"            sqlalchemy.sql.and_("}],"source_content_type":"text/x-python","patch_set":39,"id":"bf659307_c7719646","line":704,"updated":"2018-04-09 15:34:14.000000000","message":"Making this field a string will make this a valid setting to store, and unit tests will pass. If the \u0027value\u0027 column is going to be a json blob, we need to change \u0027on\u0027 to a dictionary, I believe.","commit_id":"1eb91bb12c1b428ab34679f72f2b681a9eacc956"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"7f8d11e4a14513a828be8798f15bb0e68c0cc1c9","unresolved":false,"context_lines":[{"line_number":701,"context_line":""},{"line_number":702,"context_line":"        setting \u003d {\u0027node_id\u0027: data[\u0027id\u0027],"},{"line_number":703,"context_line":"                   \u0027name\u0027: \u0027virtualization\u0027,"},{"line_number":704,"context_line":"                   \u0027value\u0027: \u0027on\u0027}"},{"line_number":705,"context_line":"        bios_settings.insert().execute(setting)"},{"line_number":706,"context_line":"        setting \u003d bios_settings.select("},{"line_number":707,"context_line":"            sqlalchemy.sql.and_("}],"source_content_type":"text/x-python","patch_set":39,"id":"bf659307_cd90d498","line":704,"in_reply_to":"bf659307_c7719646","updated":"2018-04-09 18:19:25.000000000","message":"As it stands, the value is a JSON encoded dict, so this should be also.\n\nIf the value goes back to being a string, then a string here is fine.","commit_id":"1eb91bb12c1b428ab34679f72f2b681a9eacc956"}],"ironic/tests/unit/db/utils.py":[{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"ff62c1ee24fc7a16ef1730a4aa5ced896c3f178a","unresolved":false,"context_lines":[{"line_number":557,"context_line":"    \"\"\""},{"line_number":558,"context_line":"    bios_setting \u003d get_test_bios_settings(**kw)"},{"line_number":559,"context_line":"    dbapi \u003d db_api.get_instance()"},{"line_number":560,"context_line":"    return dbapi.create_bios_settings(bios_setting)"},{"line_number":561,"context_line":""},{"line_number":562,"context_line":""},{"line_number":563,"context_line":"def get_test_bios_settings(**kw):"}],"source_content_type":"text/x-python","patch_set":27,"id":"df7087c5_dce20ba1","line":560,"range":{"start_line":560,"start_character":17,"end_line":560,"end_character":37},"updated":"2018-03-19 08:11:54.000000000","message":"This method will be added in the next patch. So, the changes in this file should be moved to the next patch.","commit_id":"2962ad6afdcec0e0a2f14d13d827a146471ebe6e"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"62ca004fd941f22f80f3211009eab5334c4d195e","unresolved":false,"context_lines":[{"line_number":557,"context_line":"    \"\"\""},{"line_number":558,"context_line":"    bios_setting \u003d get_test_bios_settings(**kw)"},{"line_number":559,"context_line":"    dbapi \u003d db_api.get_instance()"},{"line_number":560,"context_line":"    return dbapi.create_bios_settings(bios_setting)"},{"line_number":561,"context_line":""},{"line_number":562,"context_line":""},{"line_number":563,"context_line":"def get_test_bios_settings(**kw):"}],"source_content_type":"text/x-python","patch_set":27,"id":"df7087c5_6950c333","line":560,"range":{"start_line":560,"start_character":17,"end_line":560,"end_character":37},"in_reply_to":"df7087c5_dce20ba1","updated":"2018-03-20 04:53:15.000000000","message":"Done","commit_id":"2962ad6afdcec0e0a2f14d13d827a146471ebe6e"}]}
