)]}'
{"nova/db/sqlalchemy/migrate_repo/versions/313_add_host_capabilities.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"25e2aa107852eaf496d64faf02c6709d83272619","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    if hasattr(compute_nodes.c, \u0027host_capabilities\u0027):"},{"line_number":30,"context_line":"        compute_nodes.c.host_capabilities.drop()"},{"line_number":31,"context_line":"    if hasattr(shadow_compute_nodes.c, \u0027host_capabilities\u0027):"},{"line_number":32,"context_line":"        shadow_compute_nodes.c.host_capabilities.drop()"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    compute_nodes.create_column(host_capabilities)"},{"line_number":35,"context_line":"    shadow_compute_nodes.create_column(host_capabilities.copy())"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a7e1126_4b179a51","line":32,"updated":"2015-12-17 10:20:37.000000000","message":"sorry but I don\u0027t understand that defensive approach...\n\nWhy not just checking if the field is present anf if not, add it?","commit_id":"b24cd1a2ff9d40c79d7eaa56fe62f21ccbd5e6ed"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"3582e56b7753eeea01635e2d4e63670b7a17b5b0","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    if hasattr(compute_nodes.c, \u0027host_capabilities\u0027):"},{"line_number":30,"context_line":"        compute_nodes.c.host_capabilities.drop()"},{"line_number":31,"context_line":"    if hasattr(shadow_compute_nodes.c, \u0027host_capabilities\u0027):"},{"line_number":32,"context_line":"        shadow_compute_nodes.c.host_capabilities.drop()"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    compute_nodes.create_column(host_capabilities)"},{"line_number":35,"context_line":"    shadow_compute_nodes.create_column(host_capabilities.copy())"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a7e1126_84f8f34a","line":32,"in_reply_to":"3a7e1126_4b179a51","updated":"2015-12-17 15:43:14.000000000","message":"Done","commit_id":"b24cd1a2ff9d40c79d7eaa56fe62f21ccbd5e6ed"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"77cf4705ef2b7bba7ca1dea3b72202af44eb8b30","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    if hasattr(compute_nodes.c, \u0027host_capabilities\u0027):"},{"line_number":30,"context_line":"        compute_nodes.c.host_capabilities.drop()"},{"line_number":31,"context_line":"    if hasattr(shadow_compute_nodes.c, \u0027host_capabilities\u0027):"},{"line_number":32,"context_line":"        shadow_compute_nodes.c.host_capabilities.drop()"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    compute_nodes.create_column(host_capabilities)"},{"line_number":35,"context_line":"    shadow_compute_nodes.create_column(host_capabilities.copy())"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a7e1126_f7e5a037","line":32,"in_reply_to":"3a7e1126_84f8f34a","updated":"2015-12-18 17:41:20.000000000","message":"Is there a reason for checking it at all? This is unlikely to be a backported migration.","commit_id":"b24cd1a2ff9d40c79d7eaa56fe62f21ccbd5e6ed"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"be2360ddd8aeb12a0174b390d824d1856530126e","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    if hasattr(compute_nodes.c, \u0027host_capabilities\u0027):"},{"line_number":30,"context_line":"        compute_nodes.c.host_capabilities.drop()"},{"line_number":31,"context_line":"    if hasattr(shadow_compute_nodes.c, \u0027host_capabilities\u0027):"},{"line_number":32,"context_line":"        shadow_compute_nodes.c.host_capabilities.drop()"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    compute_nodes.create_column(host_capabilities)"},{"line_number":35,"context_line":"    shadow_compute_nodes.create_column(host_capabilities.copy())"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a7e1126_35854406","line":32,"in_reply_to":"3a7e1126_f7e5a037","updated":"2015-12-20 18:35:09.000000000","message":"I don\u0027t really see how it could be bad. Almost all migration scripts has a check. At the very least, in the improbable case a migration breaks due to various, unforseen problems, the columns won\u0027t have to be created again.","commit_id":"b24cd1a2ff9d40c79d7eaa56fe62f21ccbd5e6ed"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"459deced5d583a74ef6f624aa5116d155840ddc9","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    compute_nodes \u003d Table(\u0027compute_nodes\u0027, meta, autoload\u003dTrue)"},{"line_number":25,"context_line":"    shadow_compute_nodes \u003d Table(\u0027shadow_compute_nodes\u0027, meta, autoload\u003dTrue)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    host_capabilities \u003d Column(\u0027host_capabilities\u0027, Text, nullable\u003dTrue)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    if not hasattr(compute_nodes.c, \u0027host_capabilities\u0027):"},{"line_number":30,"context_line":"        compute_nodes.create_column(host_capabilities)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a7e1126_b72e3841","line":27,"updated":"2015-12-18 17:44:16.000000000","message":"I guess I don\u0027t really understand why json blob fields are nullable\u003dTrue. The other ones don\u0027t seem to be.","commit_id":"fc20fb5ade1ced7bc0d0e4e3dc79cd8386095d37"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"e617993c6cd8bddc76d6edeb94a5e79d2a09dcfb","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    compute_nodes \u003d Table(\u0027compute_nodes\u0027, meta, autoload\u003dTrue)"},{"line_number":25,"context_line":"    shadow_compute_nodes \u003d Table(\u0027shadow_compute_nodes\u0027, meta, autoload\u003dTrue)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    host_capabilities \u003d Column(\u0027host_capabilities\u0027, Text, nullable\u003dTrue)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    if not hasattr(compute_nodes.c, \u0027host_capabilities\u0027):"},{"line_number":30,"context_line":"        compute_nodes.create_column(host_capabilities)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a7e1126_cbbebc64","line":27,"in_reply_to":"3a7e1126_b72e3841","updated":"2015-12-18 21:21:50.000000000","message":"That\u0027s actually a very fair point, because serializing a NovaObject always provides a json-serialized dict with at least the object name and version.","commit_id":"fc20fb5ade1ced7bc0d0e4e3dc79cd8386095d37"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"6a361e26121dfe56e53c2a3ddcd72bf873a0e9e8","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    compute_nodes \u003d Table(\u0027compute_nodes\u0027, meta, autoload\u003dTrue)"},{"line_number":25,"context_line":"    shadow_compute_nodes \u003d Table(\u0027shadow_compute_nodes\u0027, meta, autoload\u003dTrue)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    host_capabilities \u003d Column(\u0027host_capabilities\u0027, Text, nullable\u003dTrue)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    if not hasattr(compute_nodes.c, \u0027host_capabilities\u0027):"},{"line_number":30,"context_line":"        compute_nodes.create_column(host_capabilities)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a7e1126_f5d01cf8","line":27,"in_reply_to":"3a7e1126_cbbebc64","updated":"2015-12-20 18:34:40.000000000","message":"I am not so sure this would work. the HostCapabilities object will be introduced in the next patch in the series, meaning there isn\u0027t an object to be serialized into this column yet. Having a nullable\u003dFalse column might cause the migration to fail.","commit_id":"fc20fb5ade1ced7bc0d0e4e3dc79cd8386095d37"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"9e1384b8b467aeaf10ecb21b79abc54e9abe0f11","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    compute_nodes \u003d Table(\u0027compute_nodes\u0027, meta, autoload\u003dTrue)"},{"line_number":25,"context_line":"    shadow_compute_nodes \u003d Table(\u0027shadow_compute_nodes\u0027, meta, autoload\u003dTrue)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    host_capabilities \u003d Column(\u0027host_capabilities\u0027, Text, nullable\u003dTrue)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    if not hasattr(compute_nodes.c, \u0027host_capabilities\u0027):"},{"line_number":30,"context_line":"        compute_nodes.create_column(host_capabilities)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a7e1126_35a2244c","line":27,"in_reply_to":"3a7e1126_f5d01cf8","updated":"2015-12-20 18:51:47.000000000","message":"Ok, so, nullable is by default True. I can remove it, as it is redundant.\n\nBut, I cannot set nullable\u003dFalse, as the migration would then fail, if no server_default value is presented: \n\n    sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) Cannot add a NOT NULL column with default value NULL [SQL: u\u0027\\nALTER TABLE compute_nodes ADD host_capabilities TEXT NOT NULL\u0027]","commit_id":"fc20fb5ade1ced7bc0d0e4e3dc79cd8386095d37"}],"nova/db/sqlalchemy/migrate_repo/versions/314_add_host_capabilities.py":[{"author":{"_account_id":16929,"name":"Giridhar Jayavelu","email":"gjayavelu@vmware.com","username":"gjayavelu"},"change_message_id":"786d047ffc322ab30e2cc10a8d2fdd1573d56cb8","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Cloudbase Solutions Srl"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a5de9d1_418bb8c3","line":1,"updated":"2016-01-28 22:05:16.000000000","message":"2016","commit_id":"118cbf4e092318e4cb87098059e8edd2e53cc1e6"}],"nova/db/sqlalchemy/models.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"6dcc30b91584e30a18ed56671dc61653b3cd1a33","unresolved":false,"context_lines":[{"line_number":175,"context_line":"    ram_allocation_ratio \u003d Column(Float, nullable\u003dTrue)"},{"line_number":176,"context_line":"    cpu_allocation_ratio \u003d Column(Float, nullable\u003dTrue)"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    # represents the host capabilities of a compute node."},{"line_number":179,"context_line":"    host_capabilities \u003d Column(Text, nullable\u003dTrue)"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3a7e1126_105bd92f","line":178,"range":{"start_line":178,"start_character":21,"end_line":178,"end_character":38},"updated":"2015-12-17 16:21:10.000000000","message":"nit: maybe we could just explain more that it\u0027s a JSON encoded object hence the Text type.","commit_id":"fc20fb5ade1ced7bc0d0e4e3dc79cd8386095d37"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"3544ae0c8087c77b912cd44f2d02ac97f0f2c88d","unresolved":false,"context_lines":[{"line_number":175,"context_line":"    ram_allocation_ratio \u003d Column(Float, nullable\u003dTrue)"},{"line_number":176,"context_line":"    cpu_allocation_ratio \u003d Column(Float, nullable\u003dTrue)"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    # represents the host capabilities of a compute node."},{"line_number":179,"context_line":"    host_capabilities \u003d Column(Text, nullable\u003dTrue)"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3a7e1126_15b4c87f","line":178,"range":{"start_line":178,"start_character":21,"end_line":178,"end_character":38},"in_reply_to":"3a7e1126_105bd92f","updated":"2015-12-20 18:56:24.000000000","message":"Done","commit_id":"fc20fb5ade1ced7bc0d0e4e3dc79cd8386095d37"}]}
