)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"43a12a14331c7273f094aadfeb323fa708385ee4","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This patch add the db migration script to add the"},{"line_number":10,"context_line":"description column for registred limit/project limit"},{"line_number":11,"context_line":"table."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I29d0c054fc6aa72c34564d0169e45090ebd8f13e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"df7087c5_f82911f2","line":12,"updated":"2018-03-19 14:33:41.000000000","message":"Partial-Bug: 1754185","commit_id":"255a4b43286b670a9bca99fc2e60ae01cc5aa1b8"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"8f99b76e513808c76b75b81294c84bddd6f9526b","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This patch add the db migration script to add the"},{"line_number":10,"context_line":"description column for registred limit/project limit"},{"line_number":11,"context_line":"table."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I29d0c054fc6aa72c34564d0169e45090ebd8f13e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"df7087c5_587d87e5","line":12,"in_reply_to":"df7087c5_f82911f2","updated":"2018-03-26 04:17:04.000000000","message":"Done","commit_id":"255a4b43286b670a9bca99fc2e60ae01cc5aa1b8"}],"keystone/common/sql/expand_repo/versions/045_expand_add_description_to_limit.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"43a12a14331c7273f094aadfeb323fa708385ee4","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    registered_limit_table \u003d sql.Table("},{"line_number":22,"context_line":"        \u0027registered_limit\u0027, meta, autoload\u003dTrue"},{"line_number":23,"context_line":"    )"},{"line_number":24,"context_line":"    description \u003d sql.Column(\u0027description\u0027, sql.String(255), nullable\u003dFalse,"},{"line_number":25,"context_line":"                             default\u003d\u0027\u0027, server_default\u003d\u0027\u0027)"},{"line_number":26,"context_line":"    registered_limit_table.create_column(description)"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"df7087c5_187ac587","line":24,"range":{"start_line":24,"start_character":61,"end_line":24,"end_character":75},"updated":"2018-03-19 14:33:41.000000000","message":"Is there a difference here between setting this as nullable and having the default be None?\n\nWe sometimes only make columns non-nullable if they *must* be populated (IDs or unique constraints of a resource).","commit_id":"255a4b43286b670a9bca99fc2e60ae01cc5aa1b8"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"c9b3b8348eab3cd367b103307890d2fa802bcb4e","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    registered_limit_table \u003d sql.Table("},{"line_number":22,"context_line":"        \u0027registered_limit\u0027, meta, autoload\u003dTrue"},{"line_number":23,"context_line":"    )"},{"line_number":24,"context_line":"    description \u003d sql.Column(\u0027description\u0027, sql.String(255), nullable\u003dFalse,"},{"line_number":25,"context_line":"                             default\u003d\u0027\u0027, server_default\u003d\u0027\u0027)"},{"line_number":26,"context_line":"    registered_limit_table.create_column(description)"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"df7087c5_e672c2e3","line":24,"range":{"start_line":24,"start_character":61,"end_line":24,"end_character":75},"in_reply_to":"df7087c5_187ac587","updated":"2018-03-20 02:03:54.000000000","message":"Just keep the same with the \"description\" in \"regions\" or \"projects\"(both of them are nullable\u003dFalse), then it can  ensure that  \"description\" is always be returned.","commit_id":"255a4b43286b670a9bca99fc2e60ae01cc5aa1b8"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"43a12a14331c7273f094aadfeb323fa708385ee4","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    registered_limit_table.create_column(description)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    limit_table \u003d sql.Table(\u0027limit\u0027, meta, autoload\u003dTrue)"},{"line_number":29,"context_line":"    description \u003d sql.Column(\u0027description\u0027, sql.String(255), nullable\u003dFalse,"},{"line_number":30,"context_line":"                             default\u003d\u0027\u0027, server_default\u003d\u0027\u0027)"},{"line_number":31,"context_line":"    limit_table.create_column(description)"}],"source_content_type":"text/x-python","patch_set":4,"id":"df7087c5_750c2c42","line":30,"range":{"start_line":29,"start_character":0,"end_line":30,"end_character":59},"updated":"2018-03-19 14:33:41.000000000","message":"Does this need to be defined again? We should be able to use it for both tables:\n\n  registered_limit_table.create_column(description)\n  limit_table.create_column(description)","commit_id":"255a4b43286b670a9bca99fc2e60ae01cc5aa1b8"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"c9b3b8348eab3cd367b103307890d2fa802bcb4e","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    registered_limit_table.create_column(description)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    limit_table \u003d sql.Table(\u0027limit\u0027, meta, autoload\u003dTrue)"},{"line_number":29,"context_line":"    description \u003d sql.Column(\u0027description\u0027, sql.String(255), nullable\u003dFalse,"},{"line_number":30,"context_line":"                             default\u003d\u0027\u0027, server_default\u003d\u0027\u0027)"},{"line_number":31,"context_line":"    limit_table.create_column(description)"}],"source_content_type":"text/x-python","patch_set":4,"id":"df7087c5_a6a7ea4f","line":30,"range":{"start_line":29,"start_character":0,"end_line":30,"end_character":59},"in_reply_to":"df7087c5_750c2c42","updated":"2018-03-20 02:03:54.000000000","message":"yeah, it should be redefined, otherwise it will raise error, patch set 1 is the example:\nhttp://logs.openstack.org/31/553131/1/check/openstack-tox-py27/29853d2/testr_results.html.gz","commit_id":"255a4b43286b670a9bca99fc2e60ae01cc5aa1b8"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"bcdee5d766f8e0968ba8839b711e8fe66f6012dc","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    registered_limit_table \u003d sql.Table("},{"line_number":22,"context_line":"        \u0027registered_limit\u0027, meta, autoload\u003dTrue"},{"line_number":23,"context_line":"    )"},{"line_number":24,"context_line":"    description \u003d sql.Column(\u0027description\u0027, sql.String(255), nullable\u003dFalse,"},{"line_number":25,"context_line":"                             default\u003d\u0027\u0027, server_default\u003d\u0027\u0027)"},{"line_number":26,"context_line":"    registered_limit_table.create_column(description)"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"df7087c5_ce0dde3e","line":24,"range":{"start_line":24,"start_character":61,"end_line":24,"end_character":75},"updated":"2018-03-23 15:41:59.000000000","message":"I guess we\u0027re inconsistent about this, the project and group tables allows a null description. I have a slight preference for allowing it to be null but you have a good point about consistency in the object returned to the user.","commit_id":"88b733215eeeaa09ec8428b76a51ff901e8909e6"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"bcdee5d766f8e0968ba8839b711e8fe66f6012dc","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    registered_limit_table \u003d sql.Table("},{"line_number":22,"context_line":"        \u0027registered_limit\u0027, meta, autoload\u003dTrue"},{"line_number":23,"context_line":"    )"},{"line_number":24,"context_line":"    description \u003d sql.Column(\u0027description\u0027, sql.String(255), nullable\u003dFalse,"},{"line_number":25,"context_line":"                             default\u003d\u0027\u0027, server_default\u003d\u0027\u0027)"},{"line_number":26,"context_line":"    registered_limit_table.create_column(description)"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"df7087c5_6e9a9214","line":24,"range":{"start_line":24,"start_character":44,"end_line":24,"end_character":59},"updated":"2018-03-23 15:41:59.000000000","message":"use sql.Text","commit_id":"88b733215eeeaa09ec8428b76a51ff901e8909e6"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"8f99b76e513808c76b75b81294c84bddd6f9526b","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    registered_limit_table \u003d sql.Table("},{"line_number":22,"context_line":"        \u0027registered_limit\u0027, meta, autoload\u003dTrue"},{"line_number":23,"context_line":"    )"},{"line_number":24,"context_line":"    description \u003d sql.Column(\u0027description\u0027, sql.String(255), nullable\u003dFalse,"},{"line_number":25,"context_line":"                             default\u003d\u0027\u0027, server_default\u003d\u0027\u0027)"},{"line_number":26,"context_line":"    registered_limit_table.create_column(description)"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"bf659307_d48738d7","line":24,"range":{"start_line":24,"start_character":61,"end_line":24,"end_character":75},"in_reply_to":"df7087c5_ce0dde3e","updated":"2018-03-26 04:17:04.000000000","message":"emm. My fault. even the description is None in DB, it still can be returned to user. So we can leave nullable\u003dTrue here.","commit_id":"88b733215eeeaa09ec8428b76a51ff901e8909e6"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"bcdee5d766f8e0968ba8839b711e8fe66f6012dc","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    registered_limit_table.create_column(description)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    limit_table \u003d sql.Table(\u0027limit\u0027, meta, autoload\u003dTrue)"},{"line_number":29,"context_line":"    description \u003d sql.Column(\u0027description\u0027, sql.String(255), nullable\u003dFalse,"},{"line_number":30,"context_line":"                             default\u003d\u0027\u0027, server_default\u003d\u0027\u0027)"},{"line_number":31,"context_line":"    limit_table.create_column(description)"}],"source_content_type":"text/x-python","patch_set":5,"id":"df7087c5_0e6996f6","line":29,"range":{"start_line":29,"start_character":44,"end_line":29,"end_character":59},"updated":"2018-03-23 15:41:59.000000000","message":"use sql.Text","commit_id":"88b733215eeeaa09ec8428b76a51ff901e8909e6"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"8f99b76e513808c76b75b81294c84bddd6f9526b","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    registered_limit_table.create_column(description)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    limit_table \u003d sql.Table(\u0027limit\u0027, meta, autoload\u003dTrue)"},{"line_number":29,"context_line":"    description \u003d sql.Column(\u0027description\u0027, sql.String(255), nullable\u003dFalse,"},{"line_number":30,"context_line":"                             default\u003d\u0027\u0027, server_default\u003d\u0027\u0027)"},{"line_number":31,"context_line":"    limit_table.create_column(description)"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf659307_746c2c36","line":29,"range":{"start_line":29,"start_character":44,"end_line":29,"end_character":59},"in_reply_to":"df7087c5_0e6996f6","updated":"2018-03-26 04:17:04.000000000","message":"Done","commit_id":"88b733215eeeaa09ec8428b76a51ff901e8909e6"}],"keystone/tests/unit/test_sql_upgrade.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"43a12a14331c7273f094aadfeb323fa708385ee4","unresolved":false,"context_lines":[{"line_number":2930,"context_line":"                                                  self.metadata, autoload\u003dTrue)"},{"line_number":2931,"context_line":"        self.assertEqual(set([]), registered_limit_table.foreign_keys)"},{"line_number":2932,"context_line":""},{"line_number":2933,"context_line":"    def test_migration_045_add_description_to_limit(self):"},{"line_number":2934,"context_line":"        self.expand(45)"},{"line_number":2935,"context_line":"        self.migrate(45)"},{"line_number":2936,"context_line":"        self.contract(45)"}],"source_content_type":"text/x-python","patch_set":4,"id":"df7087c5_b85879fa","line":2933,"updated":"2018-03-19 14:33:41.000000000","message":"We can assert that the description column doesn\u0027t exist prior to running migration 45:\n\n \n  self.assertTableColumns(application_credential_table_name,\n      [\u0027id\u0027, \u0027service_id\u0027, \u0027region_id\u0027, \u0027resource_name\u0027,\n       \u0027default_limit\u0027]","commit_id":"255a4b43286b670a9bca99fc2e60ae01cc5aa1b8"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"c9b3b8348eab3cd367b103307890d2fa802bcb4e","unresolved":false,"context_lines":[{"line_number":2930,"context_line":"                                                  self.metadata, autoload\u003dTrue)"},{"line_number":2931,"context_line":"        self.assertEqual(set([]), registered_limit_table.foreign_keys)"},{"line_number":2932,"context_line":""},{"line_number":2933,"context_line":"    def test_migration_045_add_description_to_limit(self):"},{"line_number":2934,"context_line":"        self.expand(45)"},{"line_number":2935,"context_line":"        self.migrate(45)"},{"line_number":2936,"context_line":"        self.contract(45)"}],"source_content_type":"text/x-python","patch_set":4,"id":"df7087c5_464b6e86","line":2933,"in_reply_to":"df7087c5_b85879fa","updated":"2018-03-20 02:03:54.000000000","message":"Done","commit_id":"255a4b43286b670a9bca99fc2e60ae01cc5aa1b8"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"43a12a14331c7273f094aadfeb323fa708385ee4","unresolved":false,"context_lines":[{"line_number":2942,"context_line":"        limit_table \u003d sqlalchemy.Table(limit_table_name,"},{"line_number":2943,"context_line":"                                       self.metadata, autoload\u003dTrue)"},{"line_number":2944,"context_line":""},{"line_number":2945,"context_line":"        self.assertIn(\u0027description\u0027, [column.name for column in"},{"line_number":2946,"context_line":"                                      registered_limit_table.columns])"},{"line_number":2947,"context_line":"        self.assertIn(\u0027description\u0027, [column.name for column in"},{"line_number":2948,"context_line":"                                      limit_table.columns])"}],"source_content_type":"text/x-python","patch_set":4,"id":"df7087c5_18d64551","line":2945,"updated":"2018-03-19 14:33:41.000000000","message":"We can also perform this check by using a built in assertion, which can be handy:\n\n  self.assertTableColumns(application_credential_table_name,\n      [\u0027id\u0027, \u0027service_id\u0027, \u0027region_id\u0027, \u0027resource_name\u0027,\n       \u0027default_limit\u0027, \u0027description\u0027]\n      \n\nThat checks that each column passed in is included in the schema.","commit_id":"255a4b43286b670a9bca99fc2e60ae01cc5aa1b8"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"c9b3b8348eab3cd367b103307890d2fa802bcb4e","unresolved":false,"context_lines":[{"line_number":2942,"context_line":"        limit_table \u003d sqlalchemy.Table(limit_table_name,"},{"line_number":2943,"context_line":"                                       self.metadata, autoload\u003dTrue)"},{"line_number":2944,"context_line":""},{"line_number":2945,"context_line":"        self.assertIn(\u0027description\u0027, [column.name for column in"},{"line_number":2946,"context_line":"                                      registered_limit_table.columns])"},{"line_number":2947,"context_line":"        self.assertIn(\u0027description\u0027, [column.name for column in"},{"line_number":2948,"context_line":"                                      limit_table.columns])"}],"source_content_type":"text/x-python","patch_set":4,"id":"df7087c5_6650f233","line":2945,"in_reply_to":"df7087c5_18d64551","updated":"2018-03-20 02:03:54.000000000","message":"Done","commit_id":"255a4b43286b670a9bca99fc2e60ae01cc5aa1b8"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"43a12a14331c7273f094aadfeb323fa708385ee4","unresolved":false,"context_lines":[{"line_number":2987,"context_line":"            \u0027region_id\u0027: \u0027RegionOne\u0027,"},{"line_number":2988,"context_line":"            \u0027resource_name\u0027: \u0027cores\u0027,"},{"line_number":2989,"context_line":"            \u0027resource_limit\u0027: 5,"},{"line_number":2990,"context_line":"            \u0027description\u0027: \u0027\u0027"},{"line_number":2991,"context_line":"        }"},{"line_number":2992,"context_line":"        limit_table.insert().values(limit).execute()"},{"line_number":2993,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"df7087c5_180ac589","line":2990,"updated":"2018-03-19 14:33:41.000000000","message":"Because the schema always expects this to be defined, the application will always have to populate this before handing things off.\n\nI don\u0027t think there is much of a difference between setting description.nullable \u003d False and always passing it in like this, or allowing it to be nullable.\n\nI just know we don\u0027t typically set nullable\u003dFalse unless the property always has to be present. On the other side of the coin, being super explicit about what gets inserted or updated can\u0027t hurt either.","commit_id":"255a4b43286b670a9bca99fc2e60ae01cc5aa1b8"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"c9b3b8348eab3cd367b103307890d2fa802bcb4e","unresolved":false,"context_lines":[{"line_number":2987,"context_line":"            \u0027region_id\u0027: \u0027RegionOne\u0027,"},{"line_number":2988,"context_line":"            \u0027resource_name\u0027: \u0027cores\u0027,"},{"line_number":2989,"context_line":"            \u0027resource_limit\u0027: 5,"},{"line_number":2990,"context_line":"            \u0027description\u0027: \u0027\u0027"},{"line_number":2991,"context_line":"        }"},{"line_number":2992,"context_line":"        limit_table.insert().values(limit).execute()"},{"line_number":2993,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"df7087c5_264afa7f","line":2990,"in_reply_to":"df7087c5_180ac589","updated":"2018-03-20 02:03:54.000000000","message":"ditto, see my comment in the migration script","commit_id":"255a4b43286b670a9bca99fc2e60ae01cc5aa1b8"}]}
