)]}'
{"neutron/db/loadbalancer/loadbalancer_db.py":[{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"dfe2a1623ddcb9743e57d104168839167f34d322","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":181,"context_line":"            v_db \u003d self._get_resource(context, model, id)"},{"line_number":182,"context_line":"            v_db.status \u003d status"},{"line_number":183,"context_line":"            # update status_description in two cases:"},{"line_number":184,"context_line":"            # - new value is passed"},{"line_number":185,"context_line":"            # - old value is not None (needs to be updated anyway)"},{"line_number":186,"context_line":"            if status_description or v_db[\u0027status_description\u0027]:"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAP3%2F%2FqRk%3D","line":183,"updated":"2013-07-15 03:31:53.000000000","message":"What happens when the status changes and status_description is not passed.  Shouldn\u0027t the status_description be reset back to None.  Seems like the chances of these getting out of sync is very high.","commit_id":"32e5b054d20083edc5e6bd255505757d5793d376"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":180,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":181,"context_line":"            v_db \u003d self._get_resource(context, model, id)"},{"line_number":182,"context_line":"            v_db.status \u003d status"},{"line_number":183,"context_line":"            # update status_description in two cases:"},{"line_number":184,"context_line":"            # - new value is passed"},{"line_number":185,"context_line":"            # - old value is not None (needs to be updated anyway)"},{"line_number":186,"context_line":"            if status_description or v_db[\u0027status_description\u0027]:"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAQn%2F%2F%2BvU%3D","line":183,"in_reply_to":"AAAAP3%2F%2Fp8Y%3D","updated":"2013-07-18 03:32:32.000000000","message":"Ok I was misunderstanding the comments.","commit_id":"32e5b054d20083edc5e6bd255505757d5793d376"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"1192724e506ac27dedafbd9ade96b148a3ddd3a8","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":181,"context_line":"            v_db \u003d self._get_resource(context, model, id)"},{"line_number":182,"context_line":"            v_db.status \u003d status"},{"line_number":183,"context_line":"            # update status_description in two cases:"},{"line_number":184,"context_line":"            # - new value is passed"},{"line_number":185,"context_line":"            # - old value is not None (needs to be updated anyway)"},{"line_number":186,"context_line":"            if status_description or v_db[\u0027status_description\u0027]:"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAP3%2F%2Fp8Y%3D","line":183,"in_reply_to":"AAAAP3%2F%2FqRk%3D","updated":"2013-07-15 07:16:47.000000000","message":"Well, as stated in comment status description will be updated (set to None) even if it is not passed in case old status description is not None.","commit_id":"32e5b054d20083edc5e6bd255505757d5793d376"}],"neutron/db/migration/alembic_migrations/versions/2032abe8edac_lbaas_add_status_des.py":[{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"dfe2a1623ddcb9743e57d104168839167f34d322","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    for entity in ENTITIES:"},{"line_number":47,"context_line":"        op.add_column(entity, sa.Column(\u0027status_description\u0027, sa.String(255)))"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"def downgrade(active_plugin\u003dNone, options\u003dNone):"},{"line_number":51,"context_line":"    if not migration.should_run(active_plugin, migration_for_plugins):"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAP3%2F%2FqRc%3D","line":48,"updated":"2013-07-15 03:31:53.000000000","message":"Do you need to update the value with a default value?","commit_id":"32e5b054d20083edc5e6bd255505757d5793d376"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"1192724e506ac27dedafbd9ade96b148a3ddd3a8","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    for entity in ENTITIES:"},{"line_number":47,"context_line":"        op.add_column(entity, sa.Column(\u0027status_description\u0027, sa.String(255)))"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"def downgrade(active_plugin\u003dNone, options\u003dNone):"},{"line_number":51,"context_line":"    if not migration.should_run(active_plugin, migration_for_plugins):"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAP3%2F%2Fp8U%3D","line":48,"in_reply_to":"AAAAP3%2F%2FqRc%3D","updated":"2013-07-15 07:16:47.000000000","message":"Since this field doesn\u0027t require value I think None by default will be ok","commit_id":"32e5b054d20083edc5e6bd255505757d5793d376"}],"neutron/db/models_v2.py":[{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"dfe2a1623ddcb9743e57d104168839167f34d322","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    \"\"\"Status with description mixin.\"\"\""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    status \u003d sa.Column(sa.String(16), nullable\u003dFalse)"},{"line_number":44,"context_line":"    status_description \u003d sa.Column(sa.String(255))"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"class IPAvailabilityRange(model_base.BASEV2):"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAP3%2F%2FqRg%3D","line":44,"updated":"2013-07-15 03:31:53.000000000","message":"default\u003d\u0027\u0027 or default\u003dNone is ok?","commit_id":"32e5b054d20083edc5e6bd255505757d5793d376"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"1192724e506ac27dedafbd9ade96b148a3ddd3a8","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    \"\"\"Status with description mixin.\"\"\""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    status \u003d sa.Column(sa.String(16), nullable\u003dFalse)"},{"line_number":44,"context_line":"    status_description \u003d sa.Column(sa.String(255))"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"class IPAvailabilityRange(model_base.BASEV2):"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAP3%2F%2Fp7w%3D","line":44,"in_reply_to":"AAAAP3%2F%2FqRg%3D","updated":"2013-07-15 07:16:47.000000000","message":"I think None is ok, do you expect any problems with None?","commit_id":"32e5b054d20083edc5e6bd255505757d5793d376"}],"quantum/db/loadbalancer/loadbalancer_db.py":[{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"change_message_id":"814c5ce0e1b45755eaf7467a6b37f84d03175d4d","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                                           backref\u003d\"vips\","},{"line_number":87,"context_line":"                                           cascade\u003d\"all, delete-orphan\")"},{"line_number":88,"context_line":"    status \u003d sa.Column(sa.String(16), nullable\u003dFalse)"},{"line_number":89,"context_line":"    error_descr \u003d sa.Column(sa.String(255))"},{"line_number":90,"context_line":"    admin_state_up \u003d sa.Column(sa.Boolean(), nullable\u003dFalse)"},{"line_number":91,"context_line":"    connection_limit \u003d sa.Column(sa.Integer)"},{"line_number":92,"context_line":"    port \u003d orm.relationship(models_v2.Port)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPn%2F%2FuIM%3D","line":89,"updated":"2013-06-24 14:15:16.000000000","message":"Maybe it makes sense to use  models_v2.HasErrorDesc mixin like HasId and HasTenent","commit_id":"d87d111ec6c45effeb13e26f2876d97e88e7347a"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"4d0241ba244d9377343841d6a713db971fa18bbe","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                                           backref\u003d\"vips\","},{"line_number":87,"context_line":"                                           cascade\u003d\"all, delete-orphan\")"},{"line_number":88,"context_line":"    status \u003d sa.Column(sa.String(16), nullable\u003dFalse)"},{"line_number":89,"context_line":"    error_descr \u003d sa.Column(sa.String(255))"},{"line_number":90,"context_line":"    admin_state_up \u003d sa.Column(sa.Boolean(), nullable\u003dFalse)"},{"line_number":91,"context_line":"    connection_limit \u003d sa.Column(sa.Integer)"},{"line_number":92,"context_line":"    port \u003d orm.relationship(models_v2.Port)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPn%2F%2FuDs%3D","line":89,"in_reply_to":"AAAAPn%2F%2FuIM%3D","updated":"2013-06-24 14:42:47.000000000","message":"You mean to create that mixin first, right?","commit_id":"d87d111ec6c45effeb13e26f2876d97e88e7347a"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"change_message_id":"814c5ce0e1b45755eaf7467a6b37f84d03175d4d","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        return manager.QuantumManager.get_plugin()"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    def update_status(self, context, model, id, status, error_descr\u003dNone):"},{"line_number":183,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":184,"context_line":"            v_db \u003d self._get_resource(context, model, id)"},{"line_number":185,"context_line":"            v_db.update({\u0027status\u0027: status})"},{"line_number":186,"context_line":"            if error_descr:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPn%2F%2FuGY%3D","line":183,"updated":"2013-06-24 14:32:17.000000000","message":"It looks cleaner to call update once.\n\next_status \u003d {\"status\": status}\nif error_descr:\n     ext_status[\"error_descr\"] \u003d error_descr\nv_db.update(ext_status)","commit_id":"d87d111ec6c45effeb13e26f2876d97e88e7347a"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"4d0241ba244d9377343841d6a713db971fa18bbe","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        return manager.QuantumManager.get_plugin()"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    def update_status(self, context, model, id, status, error_descr\u003dNone):"},{"line_number":183,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":184,"context_line":"            v_db \u003d self._get_resource(context, model, id)"},{"line_number":185,"context_line":"            v_db.update({\u0027status\u0027: status})"},{"line_number":186,"context_line":"            if error_descr:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPn%2F%2FuEU%3D","line":183,"in_reply_to":"AAAAPn%2F%2FuGY%3D","updated":"2013-06-24 14:42:47.000000000","message":"Agree","commit_id":"d87d111ec6c45effeb13e26f2876d97e88e7347a"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"unresolved":false,"context_lines":[{"line_number":183,"context_line":"                      error_description\u003dNone):"},{"line_number":184,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":185,"context_line":"            v_db \u003d self._get_resource(context, model, id)"},{"line_number":186,"context_line":"            update_data \u003d {\u0027status\u0027: status}"},{"line_number":187,"context_line":"            if error_description:"},{"line_number":188,"context_line":"                update_data[\u0027error_description\u0027] \u003d error_description"},{"line_number":189,"context_line":"            v_db.update(update_data)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPn%2F%2Ft%2BY%3D","line":186,"updated":"2013-06-24 15:15:14.000000000","message":"Question:Do we need to set the error_decsription field to None is status !\u003d ERROR?","commit_id":"3926bca1cc8e7b878707b2466c98756eb1e5aea4"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"4d0241ba244d9377343841d6a713db971fa18bbe","unresolved":false,"context_lines":[{"line_number":183,"context_line":"                      error_description\u003dNone):"},{"line_number":184,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":185,"context_line":"            v_db \u003d self._get_resource(context, model, id)"},{"line_number":186,"context_line":"            update_data \u003d {\u0027status\u0027: status}"},{"line_number":187,"context_line":"            if error_description:"},{"line_number":188,"context_line":"                update_data[\u0027error_description\u0027] \u003d error_description"},{"line_number":189,"context_line":"            v_db.update(update_data)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPn%2F%2Ft8s%3D","line":186,"in_reply_to":"AAAAPn%2F%2Ft%2BY%3D","updated":"2013-06-24 15:39:03.000000000","message":"Yeah, good question! I think we should check current value of error description and if it is not empty and new value is None then we need to clear the field. What do you think?","commit_id":"3926bca1cc8e7b878707b2466c98756eb1e5aea4"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"unresolved":false,"context_lines":[{"line_number":183,"context_line":"                      error_description\u003dNone):"},{"line_number":184,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":185,"context_line":"            v_db \u003d self._get_resource(context, model, id)"},{"line_number":186,"context_line":"            update_data \u003d {\u0027status\u0027: status}"},{"line_number":187,"context_line":"            # update error_description in two cases:"},{"line_number":188,"context_line":"            # - new value is passed"},{"line_number":189,"context_line":"            # - old value is not None (needs to be updated anyway)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2Ft34%3D","line":186,"updated":"2013-06-24 15:47:52.000000000","message":"maybe the following check is better:\nif status !\u003d ERROR:\n    # it means that we dont care about the value of the incoming error_description and we should remove the error_description from the DB object","commit_id":"2b8d7f4df58b914eec53287f3cd6a6b6996ea241"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"unresolved":false,"context_lines":[{"line_number":183,"context_line":"                      error_description\u003dNone):"},{"line_number":184,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":185,"context_line":"            v_db \u003d self._get_resource(context, model, id)"},{"line_number":186,"context_line":"            update_data \u003d {\u0027status\u0027: status}"},{"line_number":187,"context_line":"            # update error_description in two cases:"},{"line_number":188,"context_line":"            # - new value is passed"},{"line_number":189,"context_line":"            # - old value is not None (needs to be updated anyway)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2FsK8%3D","line":186,"in_reply_to":"AAAAPn%2F%2Ft10%3D","updated":"2013-06-25 07:18:17.000000000","message":"I see your point.. But I think that the scope of this patch is to provide error description when the status is ERROR.\nLets wait and see what other reviewers think.","commit_id":"2b8d7f4df58b914eec53287f3cd6a6b6996ea241"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"4d0241ba244d9377343841d6a713db971fa18bbe","unresolved":false,"context_lines":[{"line_number":183,"context_line":"                      error_description\u003dNone):"},{"line_number":184,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":185,"context_line":"            v_db \u003d self._get_resource(context, model, id)"},{"line_number":186,"context_line":"            update_data \u003d {\u0027status\u0027: status}"},{"line_number":187,"context_line":"            # update error_description in two cases:"},{"line_number":188,"context_line":"            # - new value is passed"},{"line_number":189,"context_line":"            # - old value is not None (needs to be updated anyway)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2Ft10%3D","line":186,"in_reply_to":"AAAAPn%2F%2Ft34%3D","updated":"2013-06-24 16:02:50.000000000","message":"I would still provide an opportunity to update error_description even if status is not ERROR for example in case we have more statuses in future (not active or error but some middle case maybe). I also tend to think about this field as of \u0027status_description\u0027 more than error_description","commit_id":"2b8d7f4df58b914eec53287f3cd6a6b6996ea241"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"d3ba164154d698aacfcce80f0f48c2358e39f0a0","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                      status_description\u003dNone):"},{"line_number":180,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":181,"context_line":"            v_db \u003d self._get_resource(context, model, id)"},{"line_number":182,"context_line":"            update_data \u003d {\u0027status\u0027: status}"},{"line_number":183,"context_line":"            # update status_description in two cases:"},{"line_number":184,"context_line":"            # - new value is passed"},{"line_number":185,"context_line":"            # - old value is not None (needs to be updated anyway)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPn%2F%2FfkQ%3D","line":182,"updated":"2013-06-29 16:28:28.000000000","message":"Why make dict here?  You should update the attribute directly:\n\nv_db.status \u003d status","commit_id":"0bb11d418e943b8c40bd190a6555e4ecbc9b040b"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"43c46b49d7377750f51c87d1df415cce0c81086b","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                      status_description\u003dNone):"},{"line_number":180,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":181,"context_line":"            v_db \u003d self._get_resource(context, model, id)"},{"line_number":182,"context_line":"            update_data \u003d {\u0027status\u0027: status}"},{"line_number":183,"context_line":"            # update status_description in two cases:"},{"line_number":184,"context_line":"            # - new value is passed"},{"line_number":185,"context_line":"            # - old value is not None (needs to be updated anyway)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPn%2F%2FeRY%3D","line":182,"in_reply_to":"AAAAPn%2F%2FfkQ%3D","updated":"2013-07-01 07:54:37.000000000","message":"Done","commit_id":"0bb11d418e943b8c40bd190a6555e4ecbc9b040b"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"d3ba164154d698aacfcce80f0f48c2358e39f0a0","unresolved":false,"context_lines":[{"line_number":184,"context_line":"            # - new value is passed"},{"line_number":185,"context_line":"            # - old value is not None (needs to be updated anyway)"},{"line_number":186,"context_line":"            if status_description or v_db[\u0027status_description\u0027]:"},{"line_number":187,"context_line":"                update_data[\u0027status_description\u0027] \u003d status_description"},{"line_number":188,"context_line":"            v_db.update(update_data)"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    def _get_resource(self, context, model, id):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPn%2F%2FfkI%3D","line":187,"updated":"2013-06-29 16:28:28.000000000","message":"v_db.status_description \u003d status_description","commit_id":"0bb11d418e943b8c40bd190a6555e4ecbc9b040b"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"43c46b49d7377750f51c87d1df415cce0c81086b","unresolved":false,"context_lines":[{"line_number":184,"context_line":"            # - new value is passed"},{"line_number":185,"context_line":"            # - old value is not None (needs to be updated anyway)"},{"line_number":186,"context_line":"            if status_description or v_db[\u0027status_description\u0027]:"},{"line_number":187,"context_line":"                update_data[\u0027status_description\u0027] \u003d status_description"},{"line_number":188,"context_line":"            v_db.update(update_data)"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    def _get_resource(self, context, model, id):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPn%2F%2FeRU%3D","line":187,"in_reply_to":"AAAAPn%2F%2FfkI%3D","updated":"2013-07-01 07:54:37.000000000","message":"Done","commit_id":"0bb11d418e943b8c40bd190a6555e4ecbc9b040b"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"d3ba164154d698aacfcce80f0f48c2358e39f0a0","unresolved":false,"context_lines":[{"line_number":185,"context_line":"            # - old value is not None (needs to be updated anyway)"},{"line_number":186,"context_line":"            if status_description or v_db[\u0027status_description\u0027]:"},{"line_number":187,"context_line":"                update_data[\u0027status_description\u0027] \u003d status_description"},{"line_number":188,"context_line":"            v_db.update(update_data)"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    def _get_resource(self, context, model, id):"},{"line_number":191,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPn%2F%2FfkE%3D","line":188,"updated":"2013-06-29 16:28:28.000000000","message":"This line can be dropped.","commit_id":"0bb11d418e943b8c40bd190a6555e4ecbc9b040b"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"43c46b49d7377750f51c87d1df415cce0c81086b","unresolved":false,"context_lines":[{"line_number":185,"context_line":"            # - old value is not None (needs to be updated anyway)"},{"line_number":186,"context_line":"            if status_description or v_db[\u0027status_description\u0027]:"},{"line_number":187,"context_line":"                update_data[\u0027status_description\u0027] \u003d status_description"},{"line_number":188,"context_line":"            v_db.update(update_data)"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    def _get_resource(self, context, model, id):"},{"line_number":191,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPn%2F%2FeRQ%3D","line":188,"in_reply_to":"AAAAPn%2F%2FfkE%3D","updated":"2013-07-01 07:54:37.000000000","message":"Done","commit_id":"0bb11d418e943b8c40bd190a6555e4ecbc9b040b"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"d3ba164154d698aacfcce80f0f48c2358e39f0a0","unresolved":false,"context_lines":[{"line_number":238,"context_line":""},{"line_number":239,"context_line":"            res[\u0027session_persistence\u0027] \u003d s_p"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"        if vip[\u0027status_description\u0027]:"},{"line_number":242,"context_line":"            res[\u0027status_description\u0027] \u003d vip[\u0027status_description\u0027]"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"        return self._fields(res, fields)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPn%2F%2Ffj0%3D","line":241,"updated":"2013-06-29 16:28:28.000000000","message":"You now a have an optional attribute in the response.  Wouldn\u0027t it make more sense to set \n\nres[\u0027status_description\u0027] \u003d \u0027\u0027  \n\nor maybe even none to make building clients easier?","commit_id":"0bb11d418e943b8c40bd190a6555e4ecbc9b040b"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"43c46b49d7377750f51c87d1df415cce0c81086b","unresolved":false,"context_lines":[{"line_number":238,"context_line":""},{"line_number":239,"context_line":"            res[\u0027session_persistence\u0027] \u003d s_p"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"        if vip[\u0027status_description\u0027]:"},{"line_number":242,"context_line":"            res[\u0027status_description\u0027] \u003d vip[\u0027status_description\u0027]"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"        return self._fields(res, fields)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPn%2F%2FeRM%3D","line":241,"in_reply_to":"AAAAPn%2F%2Ffj0%3D","updated":"2013-07-01 07:54:37.000000000","message":"Done","commit_id":"0bb11d418e943b8c40bd190a6555e4ecbc9b040b"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"d3ba164154d698aacfcce80f0f48c2358e39f0a0","unresolved":false,"context_lines":[{"line_number":468,"context_line":"            monitor[\u0027monitor_id\u0027] for monitor in pool[\u0027monitors\u0027]]"},{"line_number":469,"context_line":""},{"line_number":470,"context_line":"        if pool[\u0027status_description\u0027]:"},{"line_number":471,"context_line":"            res[\u0027status_description\u0027] \u003d pool[\u0027status_description\u0027]"},{"line_number":472,"context_line":""},{"line_number":473,"context_line":"        return self._fields(res, fields)"},{"line_number":474,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPn%2F%2Ffj4%3D","line":471,"updated":"2013-06-29 16:28:28.000000000","message":"You now a have an optional attribute in the response.  Wouldn\u0027t it make more sense to set \n\nres[\u0027status_description\u0027] \u003d \u0027\u0027  \n\nor maybe even none to make building clients easier?","commit_id":"0bb11d418e943b8c40bd190a6555e4ecbc9b040b"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"43c46b49d7377750f51c87d1df415cce0c81086b","unresolved":false,"context_lines":[{"line_number":468,"context_line":"            monitor[\u0027monitor_id\u0027] for monitor in pool[\u0027monitors\u0027]]"},{"line_number":469,"context_line":""},{"line_number":470,"context_line":"        if pool[\u0027status_description\u0027]:"},{"line_number":471,"context_line":"            res[\u0027status_description\u0027] \u003d pool[\u0027status_description\u0027]"},{"line_number":472,"context_line":""},{"line_number":473,"context_line":"        return self._fields(res, fields)"},{"line_number":474,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPn%2F%2FeRI%3D","line":471,"in_reply_to":"AAAAPn%2F%2Ffj4%3D","updated":"2013-07-01 07:54:37.000000000","message":"Done","commit_id":"0bb11d418e943b8c40bd190a6555e4ecbc9b040b"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"d3ba164154d698aacfcce80f0f48c2358e39f0a0","unresolved":false,"context_lines":[{"line_number":608,"context_line":"               \u0027admin_state_up\u0027: member[\u0027admin_state_up\u0027],"},{"line_number":609,"context_line":"               \u0027status\u0027: member[\u0027status\u0027]}"},{"line_number":610,"context_line":""},{"line_number":611,"context_line":"        if member[\u0027status_description\u0027]:"},{"line_number":612,"context_line":"            res[\u0027status_description\u0027] \u003d member[\u0027status_description\u0027]"},{"line_number":613,"context_line":""},{"line_number":614,"context_line":"        return self._fields(res, fields)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPn%2F%2Ffjw%3D","line":611,"updated":"2013-06-29 16:28:28.000000000","message":"same question as above","commit_id":"0bb11d418e943b8c40bd190a6555e4ecbc9b040b"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"43c46b49d7377750f51c87d1df415cce0c81086b","unresolved":false,"context_lines":[{"line_number":608,"context_line":"               \u0027admin_state_up\u0027: member[\u0027admin_state_up\u0027],"},{"line_number":609,"context_line":"               \u0027status\u0027: member[\u0027status\u0027]}"},{"line_number":610,"context_line":""},{"line_number":611,"context_line":"        if member[\u0027status_description\u0027]:"},{"line_number":612,"context_line":"            res[\u0027status_description\u0027] \u003d member[\u0027status_description\u0027]"},{"line_number":613,"context_line":""},{"line_number":614,"context_line":"        return self._fields(res, fields)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPn%2F%2FeRA%3D","line":611,"in_reply_to":"AAAAPn%2F%2Ffjw%3D","updated":"2013-07-01 07:54:37.000000000","message":"Done","commit_id":"0bb11d418e943b8c40bd190a6555e4ecbc9b040b"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"d3ba164154d698aacfcce80f0f48c2358e39f0a0","unresolved":false,"context_lines":[{"line_number":674,"context_line":"            for attr in [\u0027url_path\u0027, \u0027http_method\u0027, \u0027expected_codes\u0027]:"},{"line_number":675,"context_line":"                res[attr] \u003d health_monitor[attr]"},{"line_number":676,"context_line":""},{"line_number":677,"context_line":"        if health_monitor[\u0027status_description\u0027]:"},{"line_number":678,"context_line":"            res[\u0027status_description\u0027] \u003d health_monitor[\u0027status_description\u0027]"},{"line_number":679,"context_line":""},{"line_number":680,"context_line":"        return self._fields(res, fields)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPn%2F%2Ffjs%3D","line":677,"updated":"2013-06-29 16:28:28.000000000","message":"same as above","commit_id":"0bb11d418e943b8c40bd190a6555e4ecbc9b040b"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"43c46b49d7377750f51c87d1df415cce0c81086b","unresolved":false,"context_lines":[{"line_number":674,"context_line":"            for attr in [\u0027url_path\u0027, \u0027http_method\u0027, \u0027expected_codes\u0027]:"},{"line_number":675,"context_line":"                res[attr] \u003d health_monitor[attr]"},{"line_number":676,"context_line":""},{"line_number":677,"context_line":"        if health_monitor[\u0027status_description\u0027]:"},{"line_number":678,"context_line":"            res[\u0027status_description\u0027] \u003d health_monitor[\u0027status_description\u0027]"},{"line_number":679,"context_line":""},{"line_number":680,"context_line":"        return self._fields(res, fields)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPn%2F%2FeQ8%3D","line":677,"in_reply_to":"AAAAPn%2F%2Ffjs%3D","updated":"2013-07-01 07:54:37.000000000","message":"Done","commit_id":"0bb11d418e943b8c40bd190a6555e4ecbc9b040b"}],"quantum/db/migration/alembic_migrations/versions/2032abe8edac_lbaas_add_error_desc.py":[{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"unresolved":false,"context_lines":[{"line_number":35,"context_line":"import sqlalchemy as sa"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"from quantum.db import migration"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"def upgrade(active_plugin\u003dNone, options\u003dNone):"},{"line_number":41,"context_line":"    if not migration.should_run(active_plugin, migration_for_plugins):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2FsGg%3D","line":38,"updated":"2013-06-25 07:47:07.000000000","message":"ENTITIES \u003d [\"vips\",\"pools\",\"members\",\"healthmonitors\"]","commit_id":"2b8d7f4df58b914eec53287f3cd6a6b6996ea241"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"4d0241ba244d9377343841d6a713db971fa18bbe","unresolved":false,"context_lines":[{"line_number":35,"context_line":"import sqlalchemy as sa"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"from quantum.db import migration"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"def upgrade(active_plugin\u003dNone, options\u003dNone):"},{"line_number":41,"context_line":"    if not migration.should_run(active_plugin, migration_for_plugins):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2FsBc%3D","line":38,"in_reply_to":"AAAAPn%2F%2FsGg%3D","updated":"2013-06-25 08:27:40.000000000","message":"Done","commit_id":"2b8d7f4df58b914eec53287f3cd6a6b6996ea241"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"unresolved":false,"context_lines":[{"line_number":40,"context_line":"def upgrade(active_plugin\u003dNone, options\u003dNone):"},{"line_number":41,"context_line":"    if not migration.should_run(active_plugin, migration_for_plugins):"},{"line_number":42,"context_line":"        return"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    ### commands auto generated by Alembic - please adjust! ###"},{"line_number":45,"context_line":"    op.add_column(\u0027vips\u0027, sa.Column(\u0027error_description\u0027, sa.String(255)))"},{"line_number":46,"context_line":"    op.add_column(\u0027pools\u0027, sa.Column(\u0027error_description\u0027, sa.String(255)))"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2FsGY%3D","line":43,"updated":"2013-06-25 07:47:07.000000000","message":"for entity in ENTITIES:\n    op.add_column(entity, sa.Column(\u0027error_description\u0027,sa.String(255)))","commit_id":"2b8d7f4df58b914eec53287f3cd6a6b6996ea241"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"4d0241ba244d9377343841d6a713db971fa18bbe","unresolved":false,"context_lines":[{"line_number":40,"context_line":"def upgrade(active_plugin\u003dNone, options\u003dNone):"},{"line_number":41,"context_line":"    if not migration.should_run(active_plugin, migration_for_plugins):"},{"line_number":42,"context_line":"        return"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    ### commands auto generated by Alembic - please adjust! ###"},{"line_number":45,"context_line":"    op.add_column(\u0027vips\u0027, sa.Column(\u0027error_description\u0027, sa.String(255)))"},{"line_number":46,"context_line":"    op.add_column(\u0027pools\u0027, sa.Column(\u0027error_description\u0027, sa.String(255)))"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2FsBY%3D","line":43,"in_reply_to":"AAAAPn%2F%2FsGY%3D","updated":"2013-06-25 08:27:40.000000000","message":"Done","commit_id":"2b8d7f4df58b914eec53287f3cd6a6b6996ea241"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"unresolved":false,"context_lines":[{"line_number":53,"context_line":"def downgrade(active_plugin\u003dNone, options\u003dNone):"},{"line_number":54,"context_line":"    if not migration.should_run(active_plugin, migration_for_plugins):"},{"line_number":55,"context_line":"        return"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    ### commands auto generated by Alembic - please adjust! ###"},{"line_number":58,"context_line":"    op.drop_column(\u0027vips\u0027, \u0027error_description\u0027)"},{"line_number":59,"context_line":"    op.drop_column(\u0027pools\u0027, \u0027error_description\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2FsGU%3D","line":56,"updated":"2013-06-25 07:47:07.000000000","message":"for entity in ENTITIES:\n    op.drop_column(entity, \u0027error_description\u0027)","commit_id":"2b8d7f4df58b914eec53287f3cd6a6b6996ea241"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"4d0241ba244d9377343841d6a713db971fa18bbe","unresolved":false,"context_lines":[{"line_number":53,"context_line":"def downgrade(active_plugin\u003dNone, options\u003dNone):"},{"line_number":54,"context_line":"    if not migration.should_run(active_plugin, migration_for_plugins):"},{"line_number":55,"context_line":"        return"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    ### commands auto generated by Alembic - please adjust! ###"},{"line_number":58,"context_line":"    op.drop_column(\u0027vips\u0027, \u0027error_description\u0027)"},{"line_number":59,"context_line":"    op.drop_column(\u0027pools\u0027, \u0027error_description\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2FsBU%3D","line":56,"in_reply_to":"AAAAPn%2F%2FsGU%3D","updated":"2013-06-25 08:27:40.000000000","message":"Done","commit_id":"2b8d7f4df58b914eec53287f3cd6a6b6996ea241"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"ENTITIES \u003d [\u0027vips\u0027, \u0027pools\u0027, \u0027members\u0027, \u0027healthmonitors\u0027]"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"def upgrade(active_plugin\u003dNone, options\u003dNone):"},{"line_number":43,"context_line":"    if not migration.should_run(active_plugin, migration_for_plugins):"},{"line_number":44,"context_line":"        return"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPn%2F%2Fr%2FY%3D","line":41,"updated":"2013-06-25 08:52:16.000000000","message":"I would consider replacing:\n\nif not migration.should_run(active_plugin, migration_for_plugins):\n    return\n\nwith\n\n@ShouldRun\ndef downgrade(active_plugin\u003dNone, options\u003dNone):\n\n\nI suggest this decorator since it is a common pattern in all alembic_migrations.\nThe decorator will decide if to return or to run the function.\nso you will end up with something \u0027clean\u0027:\n\n@ShouldRun\ndef downgrade(active_plugin\u003dNone, options\u003dNone):\n    for entity in ENTITIES:\n        op.drop_column(entity, \u0027error_description\u0027)\n\nUpdate: Now I understand it is generated code... so I am not sure there is a room for this decorator.","commit_id":"10a1365894550260abf0df1106ed51ac3f8c78e5"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"4d0241ba244d9377343841d6a713db971fa18bbe","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"ENTITIES \u003d [\u0027vips\u0027, \u0027pools\u0027, \u0027members\u0027, \u0027healthmonitors\u0027]"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"def upgrade(active_plugin\u003dNone, options\u003dNone):"},{"line_number":43,"context_line":"    if not migration.should_run(active_plugin, migration_for_plugins):"},{"line_number":44,"context_line":"        return"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPn%2F%2Fr84%3D","line":41,"in_reply_to":"AAAAPn%2F%2Fr%2FY%3D","updated":"2013-06-25 09:03:41.000000000","message":"I\u0027d prefer all migration to be similar","commit_id":"10a1365894550260abf0df1106ed51ac3f8c78e5"}],"quantum/db/migration/alembic_migrations/versions/2032abe8edac_lbaas_add_status_des.py":[{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"d3ba164154d698aacfcce80f0f48c2358e39f0a0","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    if not migration.should_run(active_plugin, migration_for_plugins):"},{"line_number":44,"context_line":"        return"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    ### commands auto generated by Alembic - please adjust! ###"},{"line_number":47,"context_line":"    for entity in ENTITIES:"},{"line_number":48,"context_line":"        op.add_column(entity, sa.Column(\u0027status_description\u0027, sa.String(255)))"},{"line_number":49,"context_line":"    ### end Alembic commands ###"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPn%2F%2Ffjo%3D","line":46,"updated":"2013-06-29 16:28:28.000000000","message":"This definitely not auto generated, so I think you can remove these comments.","commit_id":"0bb11d418e943b8c40bd190a6555e4ecbc9b040b"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"43c46b49d7377750f51c87d1df415cce0c81086b","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    if not migration.should_run(active_plugin, migration_for_plugins):"},{"line_number":44,"context_line":"        return"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    ### commands auto generated by Alembic - please adjust! ###"},{"line_number":47,"context_line":"    for entity in ENTITIES:"},{"line_number":48,"context_line":"        op.add_column(entity, sa.Column(\u0027status_description\u0027, sa.String(255)))"},{"line_number":49,"context_line":"    ### end Alembic commands ###"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPn%2F%2FeQ4%3D","line":46,"in_reply_to":"AAAAPn%2F%2Ffjo%3D","updated":"2013-07-01 07:54:37.000000000","message":"Done","commit_id":"0bb11d418e943b8c40bd190a6555e4ecbc9b040b"}],"quantum/db/models_v2.py":[{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"unresolved":false,"context_lines":[{"line_number":40,"context_line":"class HasErrorDescription(object):"},{"line_number":41,"context_line":"    \"\"\"Error description mixin.\"\"\""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    error_description \u003d sa.Column(sa.String(255))"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"class IPAvailabilityRange(model_base.BASEV2):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPn%2F%2FoNo%3D","line":43,"updated":"2013-06-26 13:06:36.000000000","message":"I think you should move: \n\nstatus \u003d sa.Column(sa.String(16), nullable\u003dFalse)\n\nto this class and rename it to \u0027HasStaus\u0027\nExplanation: the \u0027error_description\u0027 and \u0027status\u0027 fields are kind of pair. In general whenever you have status you want to have the error description","commit_id":"10a1365894550260abf0df1106ed51ac3f8c78e5"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"unresolved":false,"context_lines":[{"line_number":40,"context_line":"class HasErrorDescription(object):"},{"line_number":41,"context_line":"    \"\"\"Error description mixin.\"\"\""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    error_description \u003d sa.Column(sa.String(255))"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"class IPAvailabilityRange(model_base.BASEV2):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPn%2F%2FoB0%3D","line":43,"in_reply_to":"AAAAPn%2F%2FoFU%3D","updated":"2013-06-26 14:14:04.000000000","message":"I agree. You should rename it.","commit_id":"10a1365894550260abf0df1106ed51ac3f8c78e5"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"4d0241ba244d9377343841d6a713db971fa18bbe","unresolved":false,"context_lines":[{"line_number":40,"context_line":"class HasErrorDescription(object):"},{"line_number":41,"context_line":"    \"\"\"Error description mixin.\"\"\""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    error_description \u003d sa.Column(sa.String(255))"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"class IPAvailabilityRange(model_base.BASEV2):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPn%2F%2FoFU%3D","line":43,"in_reply_to":"AAAAPn%2F%2FoNo%3D","updated":"2013-06-26 13:57:33.000000000","message":"Makes sense. How about renaming error_description to status_description? I think description may be usefull not only for ERROR status.","commit_id":"10a1365894550260abf0df1106ed51ac3f8c78e5"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"unresolved":false,"context_lines":[{"line_number":37,"context_line":"                   default\u003duuidutils.generate_uuid)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class HasStatus(object):"},{"line_number":41,"context_line":"    \"\"\"Status mixin.\"\"\""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    status \u003d sa.Column(sa.String(16), nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPn%2F%2Fl6g%3D","line":40,"updated":"2013-06-27 06:29:15.000000000","message":"You can add \u0027status\u0027 validation like this:\nLBAAS_STATUS_SET \u003d (ACTIVE,PENDING_CREATE,PENDING_UPDATE,PENDING_DELETE,INACTIVE,ERROR)\nclass HasStatus(object):\n    \"\"\"Status mixin.\"\"\"\n    status \u003d sa.Column(sa.String(16), nullable\u003dFalse)\n    status_description \u003d sa.Column(sa.String(255))\n    \n    @validates(\u0027status\u0027)\n    def validate_status(self, key, value):\n        if value not in LBAAS_STATUS_SET:\n            raise ValueError(...)\n        return value\n\nand solve https://bugs.launchpad.net/neutron/+bug/1194437","commit_id":"ed2ddd0f296401c7edb07575826a01d1de51fa64"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"4d0241ba244d9377343841d6a713db971fa18bbe","unresolved":false,"context_lines":[{"line_number":37,"context_line":"                   default\u003duuidutils.generate_uuid)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class HasStatus(object):"},{"line_number":41,"context_line":"    \"\"\"Status mixin.\"\"\""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    status \u003d sa.Column(sa.String(16), nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPn%2F%2FlvA%3D","line":40,"in_reply_to":"AAAAPn%2F%2Fl6g%3D","updated":"2013-06-27 07:49:20.000000000","message":"I believe  it\u0027s out of scope of this patch. There should be a separate patch.","commit_id":"ed2ddd0f296401c7edb07575826a01d1de51fa64"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"d3ba164154d698aacfcce80f0f48c2358e39f0a0","unresolved":false,"context_lines":[{"line_number":37,"context_line":"                   default\u003duuidutils.generate_uuid)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class HasStatus(object):"},{"line_number":41,"context_line":"    \"\"\"Status mixin.\"\"\""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    status \u003d sa.Column(sa.String(16), nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPn%2F%2Ffjk%3D","line":40,"updated":"2013-06-29 16:28:28.000000000","message":"This is more than just adding a status field.  Consider:\n\nclass HasStatusDescription(object):","commit_id":"0bb11d418e943b8c40bd190a6555e4ecbc9b040b"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"43c46b49d7377750f51c87d1df415cce0c81086b","unresolved":false,"context_lines":[{"line_number":37,"context_line":"                   default\u003duuidutils.generate_uuid)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class HasStatus(object):"},{"line_number":41,"context_line":"    \"\"\"Status mixin.\"\"\""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    status \u003d sa.Column(sa.String(16), nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPn%2F%2FeQs%3D","line":40,"in_reply_to":"AAAAPn%2F%2Ffjk%3D","updated":"2013-07-01 07:54:37.000000000","message":"Done","commit_id":"0bb11d418e943b8c40bd190a6555e4ecbc9b040b"}],"quantum/extensions/loadbalancer.py":[{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":126,"context_line":"        \u0027status\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":127,"context_line":"                   \u0027is_visible\u0027: True},"},{"line_number":128,"context_line":"        \u0027status_description\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":129,"context_line":"                               \u0027is_visible\u0027: True}"},{"line_number":130,"context_line":"    },"},{"line_number":131,"context_line":"    \u0027pools\u0027: {"},{"line_number":132,"context_line":"        \u0027id\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPn%2F%2Fd1o%3D","line":129,"updated":"2013-07-01 11:44:01.000000000","message":"Is this attribute supposed to contain driver specific error messages, such as error conditions which might prevent the load balancer appliance from creating/updating an entity?","commit_id":"d34c2bdaf65d6df9790229d71c3b480208bef07c"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"43c46b49d7377750f51c87d1df415cce0c81086b","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        \u0027status\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":127,"context_line":"                   \u0027is_visible\u0027: True},"},{"line_number":128,"context_line":"        \u0027status_description\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":129,"context_line":"                               \u0027is_visible\u0027: True}"},{"line_number":130,"context_line":"    },"},{"line_number":131,"context_line":"    \u0027pools\u0027: {"},{"line_number":132,"context_line":"        \u0027id\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPn%2F%2Fdz0%3D","line":129,"in_reply_to":"AAAAPn%2F%2Fd1o%3D","updated":"2013-07-01 11:56:05.000000000","message":"I believe it may contain any info describing the status including driver specific","commit_id":"d34c2bdaf65d6df9790229d71c3b480208bef07c"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"unresolved":false,"context_lines":[{"line_number":126,"context_line":"        \u0027status\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":127,"context_line":"                   \u0027is_visible\u0027: True},"},{"line_number":128,"context_line":"        \u0027status_description\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":129,"context_line":"                               \u0027is_visible\u0027: True}"},{"line_number":130,"context_line":"    },"},{"line_number":131,"context_line":"    \u0027pools\u0027: {"},{"line_number":132,"context_line":"        \u0027id\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPn%2F%2FdyY%3D","line":129,"in_reply_to":"AAAAPn%2F%2Fdz0%3D","updated":"2013-07-01 12:03:05.000000000","message":"Yes - most of the times it will be the driver itself that will update the stats (plus the description). Only the driver \u0027understands\u0027  what is going on with the lbaas entity.","commit_id":"d34c2bdaf65d6df9790229d71c3b480208bef07c"}],"quantum/tests/unit/db/loadbalancer/test_db_loadbalancer.py":[{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"d3ba164154d698aacfcce80f0f48c2358e39f0a0","unresolved":false,"context_lines":[{"line_number":1182,"context_line":"    def test_update_status(self):"},{"line_number":1183,"context_line":"        with self.pool() as pool:"},{"line_number":1184,"context_line":"            self.assertEqual(pool[\u0027pool\u0027][\u0027status\u0027], \u0027PENDING_CREATE\u0027)"},{"line_number":1185,"context_line":"            self.assertFalse(\u0027status_description\u0027 in pool[\u0027pool\u0027])"},{"line_number":1186,"context_line":""},{"line_number":1187,"context_line":"            self.plugin.update_status(context.get_admin_context(), ldb.Pool,"},{"line_number":1188,"context_line":"                                      pool[\u0027pool\u0027][\u0027id\u0027], \u0027ERROR\u0027, \u0027unknown\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPn%2F%2Ffjc%3D","line":1185,"updated":"2013-06-29 16:28:28.000000000","message":"In prior file, I commented that we should always return this field.  Consider:\n\nself.assertFalse(pool[\u0027pool\u0027][\u0027status_description\u0027])","commit_id":"0bb11d418e943b8c40bd190a6555e4ecbc9b040b"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"43c46b49d7377750f51c87d1df415cce0c81086b","unresolved":false,"context_lines":[{"line_number":1182,"context_line":"    def test_update_status(self):"},{"line_number":1183,"context_line":"        with self.pool() as pool:"},{"line_number":1184,"context_line":"            self.assertEqual(pool[\u0027pool\u0027][\u0027status\u0027], \u0027PENDING_CREATE\u0027)"},{"line_number":1185,"context_line":"            self.assertFalse(\u0027status_description\u0027 in pool[\u0027pool\u0027])"},{"line_number":1186,"context_line":""},{"line_number":1187,"context_line":"            self.plugin.update_status(context.get_admin_context(), ldb.Pool,"},{"line_number":1188,"context_line":"                                      pool[\u0027pool\u0027][\u0027id\u0027], \u0027ERROR\u0027, \u0027unknown\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPn%2F%2FeQY%3D","line":1185,"in_reply_to":"AAAAPn%2F%2Ffjc%3D","updated":"2013-07-01 07:54:37.000000000","message":"Done","commit_id":"0bb11d418e943b8c40bd190a6555e4ecbc9b040b"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"d3ba164154d698aacfcce80f0f48c2358e39f0a0","unresolved":false,"context_lines":[{"line_number":1189,"context_line":"            updated_pool \u003d self.plugin.get_pool(context.get_admin_context(),"},{"line_number":1190,"context_line":"                                                pool[\u0027pool\u0027][\u0027id\u0027])"},{"line_number":1191,"context_line":"            self.assertEqual(updated_pool[\u0027status\u0027], \u0027ERROR\u0027)"},{"line_number":1192,"context_line":"            self.assertTrue(\u0027status_description\u0027 in updated_pool)"},{"line_number":1193,"context_line":"            self.assertEqual(updated_pool[\u0027status_description\u0027], \u0027unknown\u0027)"},{"line_number":1194,"context_line":""},{"line_number":1195,"context_line":"            # update status to ACTIVE, status_description should be cleared"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPn%2F%2FfjI%3D","line":1192,"updated":"2013-06-29 16:28:28.000000000","message":"This check is redundant with 1193.  If the key is missing a KeyError will be thrown.","commit_id":"0bb11d418e943b8c40bd190a6555e4ecbc9b040b"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"43c46b49d7377750f51c87d1df415cce0c81086b","unresolved":false,"context_lines":[{"line_number":1189,"context_line":"            updated_pool \u003d self.plugin.get_pool(context.get_admin_context(),"},{"line_number":1190,"context_line":"                                                pool[\u0027pool\u0027][\u0027id\u0027])"},{"line_number":1191,"context_line":"            self.assertEqual(updated_pool[\u0027status\u0027], \u0027ERROR\u0027)"},{"line_number":1192,"context_line":"            self.assertTrue(\u0027status_description\u0027 in updated_pool)"},{"line_number":1193,"context_line":"            self.assertEqual(updated_pool[\u0027status_description\u0027], \u0027unknown\u0027)"},{"line_number":1194,"context_line":""},{"line_number":1195,"context_line":"            # update status to ACTIVE, status_description should be cleared"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPn%2F%2FePY%3D","line":1192,"in_reply_to":"AAAAPn%2F%2FfjI%3D","updated":"2013-07-01 07:54:37.000000000","message":"Done","commit_id":"0bb11d418e943b8c40bd190a6555e4ecbc9b040b"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"d3ba164154d698aacfcce80f0f48c2358e39f0a0","unresolved":false,"context_lines":[{"line_number":1198,"context_line":"            updated_pool \u003d self.plugin.get_pool(context.get_admin_context(),"},{"line_number":1199,"context_line":"                                                pool[\u0027pool\u0027][\u0027id\u0027])"},{"line_number":1200,"context_line":"            self.assertEqual(updated_pool[\u0027status\u0027], \u0027ACTIVE\u0027)"},{"line_number":1201,"context_line":"            self.assertFalse(\u0027status_description\u0027 in pool[\u0027pool\u0027])"},{"line_number":1202,"context_line":""},{"line_number":1203,"context_line":""},{"line_number":1204,"context_line":"class TestLoadBalancerXML(TestLoadBalancer):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPn%2F%2FfjE%3D","line":1201,"updated":"2013-06-29 16:28:28.000000000","message":"Same comment as line 1185.","commit_id":"0bb11d418e943b8c40bd190a6555e4ecbc9b040b"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"43c46b49d7377750f51c87d1df415cce0c81086b","unresolved":false,"context_lines":[{"line_number":1198,"context_line":"            updated_pool \u003d self.plugin.get_pool(context.get_admin_context(),"},{"line_number":1199,"context_line":"                                                pool[\u0027pool\u0027][\u0027id\u0027])"},{"line_number":1200,"context_line":"            self.assertEqual(updated_pool[\u0027status\u0027], \u0027ACTIVE\u0027)"},{"line_number":1201,"context_line":"            self.assertFalse(\u0027status_description\u0027 in pool[\u0027pool\u0027])"},{"line_number":1202,"context_line":""},{"line_number":1203,"context_line":""},{"line_number":1204,"context_line":"class TestLoadBalancerXML(TestLoadBalancer):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPn%2F%2FePU%3D","line":1201,"in_reply_to":"AAAAPn%2F%2FfjE%3D","updated":"2013-07-01 07:54:37.000000000","message":"Done","commit_id":"0bb11d418e943b8c40bd190a6555e4ecbc9b040b"}]}
