)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7cb8ad7c590597f6195aa065478da3cfbad5e9ed","unresolved":false,"context_lines":[{"line_number":32,"context_line":"StandaloneNetworkPlugin is used)."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"It is recommended to rename the backend resource"},{"line_number":35,"context_line":"if possible when managing the share server, to"},{"line_number":36,"context_line":"easily allow this feature to be tested in the CI."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"This patch bumps the API microversion to 2.49."},{"line_number":39,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"9fdfeff1_1c6e7d2b","line":36,"range":{"start_line":35,"start_character":44,"end_line":36,"end_character":49},"updated":"2019-02-28 20:34:51.000000000","message":"to prevent issues with re-managing a share server that has already been managed.","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"}],"contrib/ci/post_test_hook.sh":[{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"a57d1f7cdb8800e7f1379fe74b76f6f862778aad","unresolved":false,"context_lines":[{"line_number":163,"context_line":"    RUN_MANILA_HOST_ASSISTED_MIGRATION_TESTS\u003dTrue"},{"line_number":164,"context_line":"    RUN_MANILA_MANAGE_SNAPSHOT_TESTS\u003dTrue"},{"line_number":165,"context_line":"    RUN_MANILA_CG_TESTS\u003dFalse"},{"line_number":166,"context_line":"    if [[ \"$MULTITENANCY_ENABLED\" \u003d\u003d \"True\"  ]]; then"},{"line_number":167,"context_line":"        RUN_MANILA_MANAGE_SNAPSHOT_TESTS\u003dFalse"},{"line_number":168,"context_line":"        RUN_MANILA_MANAGE_TESTS\u003dFalse"},{"line_number":169,"context_line":"    fi"},{"line_number":170,"context_line":"    if [[ \"$POSTGRES_ENABLED\" \u003d\u003d \"True\" ]]; then"},{"line_number":171,"context_line":"        # Run only CIFS tests on PostgreSQL DB backend"},{"line_number":172,"context_line":"        # to reduce amount of tests per job using \u0027generic\u0027 share driver."}],"source_content_type":"text/x-sh","patch_set":12,"id":"9fdfeff1_3e69508b","line":169,"range":{"start_line":166,"start_character":0,"end_line":169,"end_character":6},"updated":"2019-02-25 17:03:05.000000000","message":"I\u0027m probably missing something basic here but since the point of this work is to enable manage/unmanage when multitenancy support is enabled, why are we setting these to False here?","commit_id":"159e774e20c0701cb666b4928d93a082b458d690"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"a106f49d87ffd7671b128667e2a1fe0f1ad3feb5","unresolved":false,"context_lines":[{"line_number":163,"context_line":"    RUN_MANILA_HOST_ASSISTED_MIGRATION_TESTS\u003dTrue"},{"line_number":164,"context_line":"    RUN_MANILA_MANAGE_SNAPSHOT_TESTS\u003dTrue"},{"line_number":165,"context_line":"    RUN_MANILA_CG_TESTS\u003dFalse"},{"line_number":166,"context_line":"    if [[ \"$MULTITENANCY_ENABLED\" \u003d\u003d \"True\"  ]]; then"},{"line_number":167,"context_line":"        RUN_MANILA_MANAGE_SNAPSHOT_TESTS\u003dFalse"},{"line_number":168,"context_line":"        RUN_MANILA_MANAGE_TESTS\u003dFalse"},{"line_number":169,"context_line":"    fi"},{"line_number":170,"context_line":"    if [[ \"$POSTGRES_ENABLED\" \u003d\u003d \"True\" ]]; then"},{"line_number":171,"context_line":"        # Run only CIFS tests on PostgreSQL DB backend"},{"line_number":172,"context_line":"        # to reduce amount of tests per job using \u0027generic\u0027 share driver."}],"source_content_type":"text/x-sh","patch_set":12,"id":"9fdfeff1_5efbf4bc","line":169,"range":{"start_line":166,"start_character":0,"end_line":169,"end_character":6},"in_reply_to":"9fdfeff1_3e69508b","updated":"2019-02-25 17:04:56.000000000","message":"Never mind, this is in the context of the generic driver.","commit_id":"159e774e20c0701cb666b4928d93a082b458d690"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"aba166737bc0dfd74cc02151f8868686703ef07a","unresolved":false,"context_lines":[{"line_number":271,"context_line":"        # manila tempest plugin supports share protocol and rules that"},{"line_number":272,"context_line":"        # container driver uses."},{"line_number":273,"context_line":"        # MANILA_TESTS\u003d\"(^manila_tempest_tests.tests.scenario)(?\u003d.*\\btest_read_write_two_vms\\b.*)\""},{"line_number":274,"context_line":"        :"},{"line_number":275,"context_line":"    fi"},{"line_number":276,"context_line":"    MANILA_TEMPEST_CONCURRENCY\u003d8"},{"line_number":277,"context_line":"    RUN_MANILA_SG_TESTS\u003dFalse"},{"line_number":278,"context_line":"    RUN_MANILA_MANAGE_TESTS\u003dTrue"},{"line_number":279,"context_line":"    RUN_MANILA_MANAGE_SNAPSHOT_TESTS\u003dTrue"},{"line_number":280,"context_line":"    RUN_MANILA_QUOTA_TESTS\u003dFalse"},{"line_number":281,"context_line":"    RUN_MANILA_SHRINK_TESTS\u003dFalse"},{"line_number":282,"context_line":"    RUN_MANILA_SNAPSHOT_TESTS\u003dFalse"}],"source_content_type":"text/x-sh","patch_set":15,"id":"9fdfeff1_0cc2f853","line":279,"range":{"start_line":274,"start_character":1,"end_line":279,"end_character":41},"updated":"2019-02-27 12:57:28.000000000","message":"good catch","commit_id":"a12fe8c999edf61dabaf15beeb078a811cf193d2"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7cb8ad7c590597f6195aa065478da3cfbad5e9ed","unresolved":false,"context_lines":[{"line_number":164,"context_line":"    RUN_MANILA_MANAGE_SNAPSHOT_TESTS\u003dTrue"},{"line_number":165,"context_line":"    RUN_MANILA_CG_TESTS\u003dFalse"},{"line_number":166,"context_line":"    if [[ \"$MULTITENANCY_ENABLED\" \u003d\u003d \"True\"  ]]; then"},{"line_number":167,"context_line":"        RUN_MANILA_MANAGE_SNAPSHOT_TESTS\u003dFalse"},{"line_number":168,"context_line":"        RUN_MANILA_MANAGE_TESTS\u003dFalse"},{"line_number":169,"context_line":"    fi"},{"line_number":170,"context_line":"    if [[ \"$POSTGRES_ENABLED\" \u003d\u003d \"True\" ]]; then"},{"line_number":171,"context_line":"        # Run only CIFS tests on PostgreSQL DB backend"}],"source_content_type":"text/x-sh","patch_set":19,"id":"9fdfeff1_3c56e15d","line":168,"range":{"start_line":167,"start_character":0,"end_line":168,"end_character":37},"updated":"2019-02-28 20:34:51.000000000","message":"please add a note about *why* above","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"812bdc68610685d624a61099e3503c8031fa76a8","unresolved":false,"context_lines":[{"line_number":164,"context_line":"    RUN_MANILA_MANAGE_SNAPSHOT_TESTS\u003dTrue"},{"line_number":165,"context_line":"    RUN_MANILA_CG_TESTS\u003dFalse"},{"line_number":166,"context_line":"    if [[ \"$MULTITENANCY_ENABLED\" \u003d\u003d \"True\"  ]]; then"},{"line_number":167,"context_line":"        RUN_MANILA_MANAGE_SNAPSHOT_TESTS\u003dFalse"},{"line_number":168,"context_line":"        RUN_MANILA_MANAGE_TESTS\u003dFalse"},{"line_number":169,"context_line":"    fi"},{"line_number":170,"context_line":"    if [[ \"$POSTGRES_ENABLED\" \u003d\u003d \"True\" ]]; then"},{"line_number":171,"context_line":"        # Run only CIFS tests on PostgreSQL DB backend"}],"source_content_type":"text/x-sh","patch_set":19,"id":"9fdfeff1_a87dab6d","line":168,"range":{"start_line":167,"start_character":0,"end_line":168,"end_character":37},"in_reply_to":"9fdfeff1_3c56e15d","updated":"2019-02-28 22:55:50.000000000","message":"Done","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"5776fc720d29d2f2507cf89c7a20a093ee44c0fc","unresolved":false,"context_lines":[{"line_number":277,"context_line":"    fi"},{"line_number":278,"context_line":"    MANILA_TEMPEST_CONCURRENCY\u003d8"},{"line_number":279,"context_line":"    RUN_MANILA_SG_TESTS\u003dFalse"},{"line_number":280,"context_line":"    RUN_MANILA_MANAGE_TESTS\u003dFalse"},{"line_number":281,"context_line":"    RUN_MANILA_QUOTA_TESTS\u003dFalse"},{"line_number":282,"context_line":"    RUN_MANILA_SHRINK_TESTS\u003dFalse"},{"line_number":283,"context_line":"    RUN_MANILA_SNAPSHOT_TESTS\u003dFalse"}],"source_content_type":"text/x-sh","patch_set":31,"id":"9fdfeff1_97eaf6d5","line":280,"range":{"start_line":280,"start_character":4,"end_line":280,"end_character":33},"updated":"2019-03-05 14:13:46.000000000","message":"Why??","commit_id":"744a38bd3f8c9f1c41e66128cc98730eb29de838"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"534ea867f2b745844334de149107a6ac3b535126","unresolved":false,"context_lines":[{"line_number":277,"context_line":"    fi"},{"line_number":278,"context_line":"    MANILA_TEMPEST_CONCURRENCY\u003d8"},{"line_number":279,"context_line":"    RUN_MANILA_SG_TESTS\u003dFalse"},{"line_number":280,"context_line":"    RUN_MANILA_MANAGE_TESTS\u003dFalse"},{"line_number":281,"context_line":"    RUN_MANILA_QUOTA_TESTS\u003dFalse"},{"line_number":282,"context_line":"    RUN_MANILA_SHRINK_TESTS\u003dFalse"},{"line_number":283,"context_line":"    RUN_MANILA_SNAPSHOT_TESTS\u003dFalse"}],"source_content_type":"text/x-sh","patch_set":31,"id":"9fdfeff1_49c95223","line":280,"range":{"start_line":280,"start_character":4,"end_line":280,"end_character":33},"in_reply_to":"9fdfeff1_29988eca","updated":"2019-03-05 15:57:40.000000000","message":"OK, I see it there.  Thanks.","commit_id":"744a38bd3f8c9f1c41e66128cc98730eb29de838"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"c0afcca4f43cd6ab12415d54d56e39617844adfb","unresolved":false,"context_lines":[{"line_number":277,"context_line":"    fi"},{"line_number":278,"context_line":"    MANILA_TEMPEST_CONCURRENCY\u003d8"},{"line_number":279,"context_line":"    RUN_MANILA_SG_TESTS\u003dFalse"},{"line_number":280,"context_line":"    RUN_MANILA_MANAGE_TESTS\u003dFalse"},{"line_number":281,"context_line":"    RUN_MANILA_QUOTA_TESTS\u003dFalse"},{"line_number":282,"context_line":"    RUN_MANILA_SHRINK_TESTS\u003dFalse"},{"line_number":283,"context_line":"    RUN_MANILA_SNAPSHOT_TESTS\u003dFalse"}],"source_content_type":"text/x-sh","patch_set":31,"id":"9fdfeff1_29988eca","line":280,"range":{"start_line":280,"start_character":4,"end_line":280,"end_character":33},"in_reply_to":"9fdfeff1_97eaf6d5","updated":"2019-03-05 15:39:39.000000000","message":"Because as of this patch, the container driver doesn\u0027t have the implementation of manage/unmanage. The driver implementation patch is the one that should enable it.","commit_id":"744a38bd3f8c9f1c41e66128cc98730eb29de838"}],"manila/api/v1/share_servers.py":[{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"2733459ced7cc816285eb3f00f6ab58b331fcca7","unresolved":false,"context_lines":[{"line_number":33,"context_line":"class ShareServerController(wsgi.Controller):"},{"line_number":34,"context_line":"    \"\"\"The Share Server API controller for the OpenStack API.\"\"\""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    _view_builder_class \u003d share_servers_views.ViewBuilder"},{"line_number":37,"context_line":"    resource_name \u003d \u0027share_server\u0027"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def __init__(self):"},{"line_number":40,"context_line":"        self.share_api \u003d share.API()"}],"source_content_type":"text/x-python","patch_set":14,"id":"9fdfeff1_4400eb66","line":37,"range":{"start_line":36,"start_character":0,"end_line":37,"end_character":34},"updated":"2019-02-26 19:49:56.000000000","message":"Maybe a dumb question but what are you doing with the changes in this file?","commit_id":"f9944011e6e421801156b87944af7f91e5965f47"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"f0a51be6b6074752844b7da6e3e68ec78049e6dc","unresolved":false,"context_lines":[{"line_number":33,"context_line":"class ShareServerController(wsgi.Controller):"},{"line_number":34,"context_line":"    \"\"\"The Share Server API controller for the OpenStack API.\"\"\""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    _view_builder_class \u003d share_servers_views.ViewBuilder"},{"line_number":37,"context_line":"    resource_name \u003d \u0027share_server\u0027"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def __init__(self):"},{"line_number":40,"context_line":"        self.share_api \u003d share.API()"}],"source_content_type":"text/x-python","patch_set":14,"id":"9fdfeff1_67309108","line":37,"range":{"start_line":36,"start_character":0,"end_line":37,"end_character":34},"in_reply_to":"9fdfeff1_2704c913","updated":"2019-02-26 22:04:29.000000000","message":"OK, thanks for the explanation.","commit_id":"f9944011e6e421801156b87944af7f91e5965f47"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"4c2ff51dd2e411b64aacd0462b46876248c7961e","unresolved":false,"context_lines":[{"line_number":33,"context_line":"class ShareServerController(wsgi.Controller):"},{"line_number":34,"context_line":"    \"\"\"The Share Server API controller for the OpenStack API.\"\"\""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    _view_builder_class \u003d share_servers_views.ViewBuilder"},{"line_number":37,"context_line":"    resource_name \u003d \u0027share_server\u0027"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def __init__(self):"},{"line_number":40,"context_line":"        self.share_api \u003d share.API()"}],"source_content_type":"text/x-python","patch_set":14,"id":"9fdfeff1_2704c913","line":37,"range":{"start_line":36,"start_character":0,"end_line":37,"end_character":34},"in_reply_to":"9fdfeff1_4400eb66","updated":"2019-02-26 20:27:55.000000000","message":"the V2 API class is not initialized properly if this is not declared (and declared like this, I tried declaring it in __init__ and that wouldn\u0027t work). Since it inherits from V1, I believe this is something that V2 needs, while V1 doesn\u0027t. I was inspired by shares V1 and V2 from which I observed this.","commit_id":"f9944011e6e421801156b87944af7f91e5965f47"}],"manila/api/v1/share_unmanage.py":[{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"1c2e378eab62462d49f478e82ab250092bf1334d","unresolved":false,"context_lines":[{"line_number":42,"context_line":"                msg \u003d _(\"Share %s has replicas. It cannot be unmanaged \""},{"line_number":43,"context_line":"                        \"until all replicas are removed.\") % share[\u0027id\u0027]"},{"line_number":44,"context_line":"                raise exc.HTTPConflict(explanation\u003dmsg)"},{"line_number":45,"context_line":"            if (not allow_dhss_true and"},{"line_number":46,"context_line":"                    share[\u0027instance\u0027].get(\u0027share_server_id\u0027)):"},{"line_number":47,"context_line":"                msg \u003d _(\"Operation \u0027unmanage\u0027 is not supported for shares \""},{"line_number":48,"context_line":"                        \"that are created on top of share servers \""},{"line_number":49,"context_line":"                        \"(created with share-networks).\")"},{"line_number":50,"context_line":"                raise exc.HTTPForbidden(explanation\u003dmsg)"},{"line_number":51,"context_line":"            elif share[\u0027status\u0027] in constants.TRANSITIONAL_STATUSES:"},{"line_number":52,"context_line":"                msg \u003d _(\"Share with transitional state can not be unmanaged. \""},{"line_number":53,"context_line":"                        \"Share \u0027%(s_id)s\u0027 is in \u0027%(state)s\u0027 state.\") % dict("}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_7bc6f318","line":50,"range":{"start_line":45,"start_character":0,"end_line":50,"end_character":56},"updated":"2019-02-26 14:46:58.000000000","message":"So this now allows unmanage for generic, Huawei, EMC, -- DHSS True back ends that do not support manage/unmanage operations in DHSS\u003dTrue mode.","commit_id":"159e774e20c0701cb666b4928d93a082b458d690"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"5c3d4da6950734af98b94e70a85871d3e0dc8fd7","unresolved":false,"context_lines":[{"line_number":44,"context_line":"                raise exc.HTTPConflict(explanation\u003dmsg)"},{"line_number":45,"context_line":"            if (not allow_dhss_true and"},{"line_number":46,"context_line":"                    share[\u0027instance\u0027].get(\u0027share_server_id\u0027)):"},{"line_number":47,"context_line":"                msg \u003d _(\"Operation \u0027unmanage\u0027 is not supported for shares \""},{"line_number":48,"context_line":"                        \"that are created on top of share servers \""},{"line_number":49,"context_line":"                        \"(created with share-networks).\")"},{"line_number":50,"context_line":"                raise exc.HTTPForbidden(explanation\u003dmsg)"},{"line_number":51,"context_line":"            elif share[\u0027status\u0027] in constants.TRANSITIONAL_STATUSES:"},{"line_number":52,"context_line":"                msg \u003d _(\"Share with transitional state can not be unmanaged. \""}],"source_content_type":"text/x-python","patch_set":14,"id":"9fdfeff1_642acfe7","line":49,"range":{"start_line":47,"start_character":6,"end_line":49,"end_character":57},"updated":"2019-02-26 19:51:47.000000000","message":"This message is no longer correct, right?","commit_id":"f9944011e6e421801156b87944af7f91e5965f47"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"f0a51be6b6074752844b7da6e3e68ec78049e6dc","unresolved":false,"context_lines":[{"line_number":44,"context_line":"                raise exc.HTTPConflict(explanation\u003dmsg)"},{"line_number":45,"context_line":"            if (not allow_dhss_true and"},{"line_number":46,"context_line":"                    share[\u0027instance\u0027].get(\u0027share_server_id\u0027)):"},{"line_number":47,"context_line":"                msg \u003d _(\"Operation \u0027unmanage\u0027 is not supported for shares \""},{"line_number":48,"context_line":"                        \"that are created on top of share servers \""},{"line_number":49,"context_line":"                        \"(created with share-networks).\")"},{"line_number":50,"context_line":"                raise exc.HTTPForbidden(explanation\u003dmsg)"},{"line_number":51,"context_line":"            elif share[\u0027status\u0027] in constants.TRANSITIONAL_STATUSES:"},{"line_number":52,"context_line":"                msg \u003d _(\"Share with transitional state can not be unmanaged. \""}],"source_content_type":"text/x-python","patch_set":14,"id":"9fdfeff1_87501534","line":49,"range":{"start_line":47,"start_character":6,"end_line":49,"end_character":57},"in_reply_to":"9fdfeff1_64196f86","updated":"2019-02-26 22:04:29.000000000","message":"ok, got it.","commit_id":"f9944011e6e421801156b87944af7f91e5965f47"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"4c2ff51dd2e411b64aacd0462b46876248c7961e","unresolved":false,"context_lines":[{"line_number":44,"context_line":"                raise exc.HTTPConflict(explanation\u003dmsg)"},{"line_number":45,"context_line":"            if (not allow_dhss_true and"},{"line_number":46,"context_line":"                    share[\u0027instance\u0027].get(\u0027share_server_id\u0027)):"},{"line_number":47,"context_line":"                msg \u003d _(\"Operation \u0027unmanage\u0027 is not supported for shares \""},{"line_number":48,"context_line":"                        \"that are created on top of share servers \""},{"line_number":49,"context_line":"                        \"(created with share-networks).\")"},{"line_number":50,"context_line":"                raise exc.HTTPForbidden(explanation\u003dmsg)"},{"line_number":51,"context_line":"            elif share[\u0027status\u0027] in constants.TRANSITIONAL_STATUSES:"},{"line_number":52,"context_line":"                msg \u003d _(\"Share with transitional state can not be unmanaged. \""}],"source_content_type":"text/x-python","patch_set":14,"id":"9fdfeff1_64196f86","line":49,"range":{"start_line":47,"start_character":6,"end_line":49,"end_character":57},"in_reply_to":"9fdfeff1_642acfe7","updated":"2019-02-26 20:27:55.000000000","message":"It is correct in the context of \"allow_dhss_true\u003dFalse\", which will be the case if MV \u003c 2.49, so the old API behavior is preserved.","commit_id":"f9944011e6e421801156b87944af7f91e5965f47"}],"manila/api/v2/share_servers.py":[{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"ef2c9c79f9523d6cfd7db63a9b3aaa359798e5da","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    def _update(self, context, id, update):"},{"line_number":54,"context_line":"        db_api.share_server_update(context, id, update)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    @wsgi.Controller.api_version(\u00272.49\u0027)"},{"line_number":57,"context_line":"    @wsgi.action(\u0027reset_status\u0027)"},{"line_number":58,"context_line":"    def share_reset_status(self, req, id, body):"},{"line_number":59,"context_line":"        return self._reset_status(req, id, body)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    @wsgi.Controller.api_version(\"2.49\")  # noqa"},{"line_number":62,"context_line":"    @wsgi.Controller.authorize(\u0027manage_share_server\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_fc575000","line":59,"range":{"start_line":56,"start_character":0,"end_line":59,"end_character":48},"updated":"2019-02-26 00:18:36.000000000","message":"I wonder whether it actually makes sense to allow reset status to *any* status like this ...","commit_id":"159e774e20c0701cb666b4928d93a082b458d690"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"169a59a76a78de0fa051c3b13adb55646d89e5da","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    def _update(self, context, id, update):"},{"line_number":54,"context_line":"        db_api.share_server_update(context, id, update)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    @wsgi.Controller.api_version(\u00272.49\u0027)"},{"line_number":57,"context_line":"    @wsgi.action(\u0027reset_status\u0027)"},{"line_number":58,"context_line":"    def share_reset_status(self, req, id, body):"},{"line_number":59,"context_line":"        return self._reset_status(req, id, body)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    @wsgi.Controller.api_version(\"2.49\")  # noqa"},{"line_number":62,"context_line":"    @wsgi.Controller.authorize(\u0027manage_share_server\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"9fdfeff1_c4405ba5","line":59,"range":{"start_line":56,"start_character":0,"end_line":59,"end_character":48},"updated":"2019-02-26 20:08:04.000000000","message":"responding to my own query in PS#12 about the usefulness of being able to reset to any state, e.g. to \"UNMANAGING\", \"this is an admin interface and we give the administrator rope to do anything s/he wants to do.\"","commit_id":"f9944011e6e421801156b87944af7f91e5965f47"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"4c2ff51dd2e411b64aacd0462b46876248c7961e","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    def _update(self, context, id, update):"},{"line_number":54,"context_line":"        db_api.share_server_update(context, id, update)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    @wsgi.Controller.api_version(\u00272.49\u0027)"},{"line_number":57,"context_line":"    @wsgi.action(\u0027reset_status\u0027)"},{"line_number":58,"context_line":"    def share_reset_status(self, req, id, body):"},{"line_number":59,"context_line":"        return self._reset_status(req, id, body)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    @wsgi.Controller.api_version(\"2.49\")  # noqa"},{"line_number":62,"context_line":"    @wsgi.Controller.authorize(\u0027manage_share_server\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"9fdfeff1_87d6d54e","line":59,"range":{"start_line":56,"start_character":0,"end_line":59,"end_character":48},"in_reply_to":"9fdfeff1_c4405ba5","updated":"2019-02-26 20:27:55.000000000","message":"yup","commit_id":"f9944011e6e421801156b87944af7f91e5965f47"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7cb8ad7c590597f6195aa065478da3cfbad5e9ed","unresolved":false,"context_lines":[{"line_number":42,"context_line":"            constants.STATUS_ERROR,"},{"line_number":43,"context_line":"            constants.STATUS_DELETING,"},{"line_number":44,"context_line":"            constants.STATUS_CREATING,"},{"line_number":45,"context_line":"            constants.STATUS_DELETED,"},{"line_number":46,"context_line":"            constants.STATUS_MANAGING,"},{"line_number":47,"context_line":"            constants.STATUS_UNMANAGING,"},{"line_number":48,"context_line":"            constants.STATUS_UNMANAGE_ERROR,"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_8da1d9f9","line":45,"range":{"start_line":45,"start_character":0,"end_line":45,"end_character":37},"updated":"2019-02-28 20:34:51.000000000","message":"this shouldn\u0027t be a valid status to update a share server to...","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"812bdc68610685d624a61099e3503c8031fa76a8","unresolved":false,"context_lines":[{"line_number":42,"context_line":"            constants.STATUS_ERROR,"},{"line_number":43,"context_line":"            constants.STATUS_DELETING,"},{"line_number":44,"context_line":"            constants.STATUS_CREATING,"},{"line_number":45,"context_line":"            constants.STATUS_DELETED,"},{"line_number":46,"context_line":"            constants.STATUS_MANAGING,"},{"line_number":47,"context_line":"            constants.STATUS_UNMANAGING,"},{"line_number":48,"context_line":"            constants.STATUS_UNMANAGE_ERROR,"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_08bcf703","line":45,"range":{"start_line":45,"start_character":0,"end_line":45,"end_character":37},"in_reply_to":"9fdfeff1_8da1d9f9","updated":"2019-02-28 22:55:50.000000000","message":"Done","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7cb8ad7c590597f6195aa065478da3cfbad5e9ed","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    @wsgi.Controller.api_version(\u00272.49\u0027)"},{"line_number":57,"context_line":"    @wsgi.action(\u0027reset_status\u0027)"},{"line_number":58,"context_line":"    def share_reset_status(self, req, id, body):"},{"line_number":59,"context_line":"        return self._reset_status(req, id, body)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    @wsgi.Controller.api_version(\"2.49\")  # noqa"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_42d0a01f","line":58,"range":{"start_line":58,"start_character":8,"end_line":58,"end_character":26},"updated":"2019-02-28 20:34:51.000000000","message":"share_server_reset_status?","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"812bdc68610685d624a61099e3503c8031fa76a8","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    @wsgi.Controller.api_version(\u00272.49\u0027)"},{"line_number":57,"context_line":"    @wsgi.action(\u0027reset_status\u0027)"},{"line_number":58,"context_line":"    def share_reset_status(self, req, id, body):"},{"line_number":59,"context_line":"        return self._reset_status(req, id, body)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    @wsgi.Controller.api_version(\"2.49\")  # noqa"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_28b77b23","line":58,"range":{"start_line":58,"start_character":8,"end_line":58,"end_character":26},"in_reply_to":"9fdfeff1_42d0a01f","updated":"2019-02-28 22:55:50.000000000","message":"Done","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7cb8ad7c590597f6195aa065478da3cfbad5e9ed","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    @wsgi.Controller.api_version(\"2.49\")  # noqa"},{"line_number":62,"context_line":"    @wsgi.Controller.authorize(\u0027manage_share_server\u0027)"},{"line_number":63,"context_line":"    def manage(self, req, body):  # pylint: disable\u003dE0102"},{"line_number":64,"context_line":"        \"\"\"Manage a share server.\"\"\""},{"line_number":65,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":66,"context_line":"        identifier, host, share_network, driver_opts \u003d ("}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_0dbc0904","line":63,"range":{"start_line":63,"start_character":0,"end_line":63,"end_character":57},"updated":"2019-02-28 20:34:51.000000000","message":"make sure you\u0027re returning code 202","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7cb8ad7c590597f6195aa065478da3cfbad5e9ed","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    @wsgi.Controller.api_version(\"2.49\")  # noqa"},{"line_number":62,"context_line":"    @wsgi.Controller.authorize(\u0027manage_share_server\u0027)"},{"line_number":63,"context_line":"    def manage(self, req, body):  # pylint: disable\u003dE0102"},{"line_number":64,"context_line":"        \"\"\"Manage a share server.\"\"\""},{"line_number":65,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":66,"context_line":"        identifier, host, share_network, driver_opts \u003d ("}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_029b7872","line":63,"range":{"start_line":63,"start_character":33,"end_line":63,"end_character":57},"updated":"2019-02-28 20:34:51.000000000","message":"not necessary, this is the only \"manage\" function in this class","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"812bdc68610685d624a61099e3503c8031fa76a8","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    @wsgi.Controller.api_version(\"2.49\")  # noqa"},{"line_number":62,"context_line":"    @wsgi.Controller.authorize(\u0027manage_share_server\u0027)"},{"line_number":63,"context_line":"    def manage(self, req, body):  # pylint: disable\u003dE0102"},{"line_number":64,"context_line":"        \"\"\"Manage a share server.\"\"\""},{"line_number":65,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":66,"context_line":"        identifier, host, share_network, driver_opts \u003d ("}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_484bdf29","line":63,"range":{"start_line":63,"start_character":33,"end_line":63,"end_character":57},"in_reply_to":"9fdfeff1_029b7872","updated":"2019-02-28 22:55:50.000000000","message":"Done","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"812bdc68610685d624a61099e3503c8031fa76a8","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    @wsgi.Controller.api_version(\"2.49\")  # noqa"},{"line_number":62,"context_line":"    @wsgi.Controller.authorize(\u0027manage_share_server\u0027)"},{"line_number":63,"context_line":"    def manage(self, req, body):  # pylint: disable\u003dE0102"},{"line_number":64,"context_line":"        \"\"\"Manage a share server.\"\"\""},{"line_number":65,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":66,"context_line":"        identifier, host, share_network, driver_opts \u003d ("}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_883d478f","line":63,"range":{"start_line":63,"start_character":0,"end_line":63,"end_character":57},"in_reply_to":"9fdfeff1_0dbc0904","updated":"2019-02-28 22:55:50.000000000","message":"Done","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7cb8ad7c590597f6195aa065478da3cfbad5e9ed","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    def _unmanage(self, req, id, body\u003dNone):"},{"line_number":84,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        LOG.info(\"Unmanage Share Server with id: %s\", id, context\u003dcontext)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        try:"},{"line_number":89,"context_line":"            share_server \u003d db_api.share_server_get("}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_a245cc70","line":86,"range":{"start_line":86,"start_character":58,"end_line":86,"end_character":73},"updated":"2019-02-28 20:34:51.000000000","message":"Why pass the context?\nWhy not Log.debug, info is more appropriate when you finish an operation\n(or when you start a long running operation) - here you\u0027re just logging a request that might just fail per below conditions.","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"812bdc68610685d624a61099e3503c8031fa76a8","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    def _unmanage(self, req, id, body\u003dNone):"},{"line_number":84,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        LOG.info(\"Unmanage Share Server with id: %s\", id, context\u003dcontext)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        try:"},{"line_number":89,"context_line":"            share_server \u003d db_api.share_server_get("}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_c8602fa8","line":86,"range":{"start_line":86,"start_character":58,"end_line":86,"end_character":73},"in_reply_to":"9fdfeff1_a245cc70","updated":"2019-02-28 22:55:50.000000000","message":"Done","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7cb8ad7c590597f6195aa065478da3cfbad5e9ed","unresolved":false,"context_lines":[{"line_number":89,"context_line":"            share_server \u003d db_api.share_server_get("},{"line_number":90,"context_line":"                context, id)"},{"line_number":91,"context_line":"        except exception.ShareServerNotFound as e:"},{"line_number":92,"context_line":"            raise exc.HTTPNotFound(explanation\u003dsix.text_type(e))"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        allowed_statuses \u003d [constants.STATUS_ERROR, constants.STATUS_ACTIVE,"},{"line_number":95,"context_line":"                            constants.STATUS_INACTIVE,"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_422500c1","line":92,"range":{"start_line":92,"start_character":47,"end_line":92,"end_character":60},"updated":"2019-02-28 20:34:51.000000000","message":"Here and everywhere, why are you casting this to a string. This string conversion should be handled in the exception that we\u0027re raising from the lower levels... i.e, we\u0027ve already handled them and have raised them up here.","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"812bdc68610685d624a61099e3503c8031fa76a8","unresolved":false,"context_lines":[{"line_number":89,"context_line":"            share_server \u003d db_api.share_server_get("},{"line_number":90,"context_line":"                context, id)"},{"line_number":91,"context_line":"        except exception.ShareServerNotFound as e:"},{"line_number":92,"context_line":"            raise exc.HTTPNotFound(explanation\u003dsix.text_type(e))"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        allowed_statuses \u003d [constants.STATUS_ERROR, constants.STATUS_ACTIVE,"},{"line_number":95,"context_line":"                            constants.STATUS_INACTIVE,"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_a80e0be1","line":92,"range":{"start_line":92,"start_character":47,"end_line":92,"end_character":60},"in_reply_to":"9fdfeff1_422500c1","updated":"2019-02-28 22:55:50.000000000","message":"Done","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7cb8ad7c590597f6195aa065478da3cfbad5e9ed","unresolved":false,"context_lines":[{"line_number":92,"context_line":"            raise exc.HTTPNotFound(explanation\u003dsix.text_type(e))"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        allowed_statuses \u003d [constants.STATUS_ERROR, constants.STATUS_ACTIVE,"},{"line_number":95,"context_line":"                            constants.STATUS_INACTIVE,"},{"line_number":96,"context_line":"                            constants.STATUS_MANAGE_ERROR,"},{"line_number":97,"context_line":"                            constants.STATUS_UNMANAGE_ERROR]"},{"line_number":98,"context_line":"        if share_server[\u0027status\u0027] not in allowed_statuses:"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_0d196978","line":95,"range":{"start_line":95,"start_character":38,"end_line":95,"end_character":53},"updated":"2019-02-28 20:34:51.000000000","message":"kinda weird: \n\nwe\u0027re never ever setting this status on the share server.. I feel this was introduced accidentally in https://review.openstack.org/#/c/90985/\n\nUnder what conditions do we expect a share server to be \"inactive\"? I think we should just remove this wrong/invalid status everywhere rather than continuing to use it and propagate it to new APIs","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"812bdc68610685d624a61099e3503c8031fa76a8","unresolved":false,"context_lines":[{"line_number":92,"context_line":"            raise exc.HTTPNotFound(explanation\u003dsix.text_type(e))"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        allowed_statuses \u003d [constants.STATUS_ERROR, constants.STATUS_ACTIVE,"},{"line_number":95,"context_line":"                            constants.STATUS_INACTIVE,"},{"line_number":96,"context_line":"                            constants.STATUS_MANAGE_ERROR,"},{"line_number":97,"context_line":"                            constants.STATUS_UNMANAGE_ERROR]"},{"line_number":98,"context_line":"        if share_server[\u0027status\u0027] not in allowed_statuses:"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_2813fb02","line":95,"range":{"start_line":95,"start_character":38,"end_line":95,"end_character":53},"in_reply_to":"9fdfeff1_0d196978","updated":"2019-02-28 22:55:50.000000000","message":"it is the default when creating a share server LN961 in models.py. I guess we should fix it there to default to creating?","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"71b2a715e73f35a4a7e872240bf631c47971acb0","unresolved":false,"context_lines":[{"line_number":92,"context_line":"            raise exc.HTTPNotFound(explanation\u003dsix.text_type(e))"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        allowed_statuses \u003d [constants.STATUS_ERROR, constants.STATUS_ACTIVE,"},{"line_number":95,"context_line":"                            constants.STATUS_INACTIVE,"},{"line_number":96,"context_line":"                            constants.STATUS_MANAGE_ERROR,"},{"line_number":97,"context_line":"                            constants.STATUS_UNMANAGE_ERROR]"},{"line_number":98,"context_line":"        if share_server[\u0027status\u0027] not in allowed_statuses:"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_f2415d37","line":95,"range":{"start_line":95,"start_character":38,"end_line":95,"end_character":53},"in_reply_to":"9fdfeff1_2813fb02","updated":"2019-02-28 23:27:00.000000000","message":"Sure, the default\u0027s not enforced in the DB schema, so no problem changing it in the representation..","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7cb8ad7c590597f6195aa065478da3cfbad5e9ed","unresolved":false,"context_lines":[{"line_number":103,"context_line":"            msg \u003d _(\"Share server\u0027s actual status is %(status)s, allowed \""},{"line_number":104,"context_line":"                    \"statuses for unmanaging are \""},{"line_number":105,"context_line":"                    \"%(allowed_statuses)s.\") % data"},{"line_number":106,"context_line":"            raise exc.HTTPForbidden(explanation\u003dmsg)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        try:"},{"line_number":109,"context_line":"            self.share_api.unmanage_share_server(context, share_server)"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_ad7dbd6d","line":106,"range":{"start_line":106,"start_character":22,"end_line":106,"end_character":35},"updated":"2019-02-28 20:34:51.000000000","message":"BadRequest \n\nThis is an admin-by-default API, we probably don\u0027t have a higher persona in our architecture..","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"812bdc68610685d624a61099e3503c8031fa76a8","unresolved":false,"context_lines":[{"line_number":103,"context_line":"            msg \u003d _(\"Share server\u0027s actual status is %(status)s, allowed \""},{"line_number":104,"context_line":"                    \"statuses for unmanaging are \""},{"line_number":105,"context_line":"                    \"%(allowed_statuses)s.\") % data"},{"line_number":106,"context_line":"            raise exc.HTTPForbidden(explanation\u003dmsg)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        try:"},{"line_number":109,"context_line":"            self.share_api.unmanage_share_server(context, share_server)"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_68f4a3cf","line":106,"range":{"start_line":106,"start_character":22,"end_line":106,"end_character":35},"in_reply_to":"9fdfeff1_ad7dbd6d","updated":"2019-02-28 22:55:50.000000000","message":"Done","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7cb8ad7c590597f6195aa065478da3cfbad5e9ed","unresolved":false,"context_lines":[{"line_number":109,"context_line":"            self.share_api.unmanage_share_server(context, share_server)"},{"line_number":110,"context_line":"        except (exception.ShareServerInUse,"},{"line_number":111,"context_line":"                exception.PolicyNotAuthorized) as e:"},{"line_number":112,"context_line":"            raise exc.HTTPForbidden(explanation\u003dsix.text_type(e))"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        return webob.Response(status_int\u003dhttp_client.ACCEPTED)"},{"line_number":115,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_4dc6919c","line":112,"range":{"start_line":112,"start_character":22,"end_line":112,"end_character":35},"updated":"2019-02-28 20:34:51.000000000","message":"Forbidden really means someone else (with authentication or higher privilege) can use the same request and expect the request to succeed. We *NEVER* expect the request to succeed, so this is a BadRequest","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"812bdc68610685d624a61099e3503c8031fa76a8","unresolved":false,"context_lines":[{"line_number":109,"context_line":"            self.share_api.unmanage_share_server(context, share_server)"},{"line_number":110,"context_line":"        except (exception.ShareServerInUse,"},{"line_number":111,"context_line":"                exception.PolicyNotAuthorized) as e:"},{"line_number":112,"context_line":"            raise exc.HTTPForbidden(explanation\u003dsix.text_type(e))"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        return webob.Response(status_int\u003dhttp_client.ACCEPTED)"},{"line_number":115,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_08ff17ab","line":112,"range":{"start_line":112,"start_character":22,"end_line":112,"end_character":35},"in_reply_to":"9fdfeff1_4dc6919c","updated":"2019-02-28 22:55:50.000000000","message":"Done","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7cb8ad7c590597f6195aa065478da3cfbad5e9ed","unresolved":false,"context_lines":[{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        for parameter in required_parameters:"},{"line_number":132,"context_line":"            if parameter not in data:"},{"line_number":133,"context_line":"                msg \u003d _(\"Required parameter %s not found\") % parameter"},{"line_number":134,"context_line":"                raise exc.HTTPUnprocessableEntity(explanation\u003dmsg)"},{"line_number":135,"context_line":"            if not data.get(parameter):"},{"line_number":136,"context_line":"                msg \u003d _(\"Required parameter %s is empty\") % parameter"},{"line_number":137,"context_line":"                raise exc.HTTPUnprocessableEntity(explanation\u003dmsg)"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        identifier \u003d data[\u0027identifier\u0027]"},{"line_number":140,"context_line":"        host, share_network_id \u003d data[\u0027host\u0027], data[\u0027share_network_id\u0027]"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_02f05890","line":137,"range":{"start_line":133,"start_character":0,"end_line":137,"end_character":66},"updated":"2019-02-28 20:34:51.000000000","message":"isn\u0027t this just BadRequest, the request body is correct in syntax, but, you\u0027re expecting some parameters to be present \n\nhttps://tools.ietf.org/html/rfc4918#section-11.2\n\n\nAlso see your spec version: http://specs.openstack.org/openstack/manila-specs/specs/stein/manage-unmanage-with-share-servers.html#rest-api-impact","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"812bdc68610685d624a61099e3503c8031fa76a8","unresolved":false,"context_lines":[{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        for parameter in required_parameters:"},{"line_number":132,"context_line":"            if parameter not in data:"},{"line_number":133,"context_line":"                msg \u003d _(\"Required parameter %s not found\") % parameter"},{"line_number":134,"context_line":"                raise exc.HTTPUnprocessableEntity(explanation\u003dmsg)"},{"line_number":135,"context_line":"            if not data.get(parameter):"},{"line_number":136,"context_line":"                msg \u003d _(\"Required parameter %s is empty\") % parameter"},{"line_number":137,"context_line":"                raise exc.HTTPUnprocessableEntity(explanation\u003dmsg)"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        identifier \u003d data[\u0027identifier\u0027]"},{"line_number":140,"context_line":"        host, share_network_id \u003d data[\u0027host\u0027], data[\u0027share_network_id\u0027]"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_28e8dbdc","line":137,"range":{"start_line":133,"start_character":0,"end_line":137,"end_character":66},"in_reply_to":"9fdfeff1_02f05890","updated":"2019-02-28 22:55:50.000000000","message":"Done","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7cb8ad7c590597f6195aa065478da3cfbad5e9ed","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        identifier \u003d data[\u0027identifier\u0027]"},{"line_number":140,"context_line":"        host, share_network_id \u003d data[\u0027host\u0027], data[\u0027share_network_id\u0027]"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        if share_utils.extract_host(host, \u0027pool\u0027):"},{"line_number":143,"context_line":"            msg \u003d _(\"Host parameter should not contain pool.\")"},{"line_number":144,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        try:"},{"line_number":147,"context_line":"            utils.validate_service_host("}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_820a0876","line":144,"range":{"start_line":142,"start_character":8,"end_line":144,"end_character":53},"updated":"2019-02-28 20:34:51.000000000","message":"I recall we discussed this point, so, if a backend has pool level share servers, do you want that pool name to be in driver options?","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"812bdc68610685d624a61099e3503c8031fa76a8","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        identifier \u003d data[\u0027identifier\u0027]"},{"line_number":140,"context_line":"        host, share_network_id \u003d data[\u0027host\u0027], data[\u0027share_network_id\u0027]"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        if share_utils.extract_host(host, \u0027pool\u0027):"},{"line_number":143,"context_line":"            msg \u003d _(\"Host parameter should not contain pool.\")"},{"line_number":144,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        try:"},{"line_number":147,"context_line":"            utils.validate_service_host("}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_88a787bc","line":144,"range":{"start_line":142,"start_character":8,"end_line":144,"end_character":53},"in_reply_to":"9fdfeff1_820a0876","updated":"2019-02-28 22:55:50.000000000","message":"hmmm I thought the share manager always saved the host value automatically according to the hostname@backend_stanza, regardless if the share server is a pool level one or not. Do you know a driver that reports as a pool level share server and where it is handled?","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"71b2a715e73f35a4a7e872240bf631c47971acb0","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        identifier \u003d data[\u0027identifier\u0027]"},{"line_number":140,"context_line":"        host, share_network_id \u003d data[\u0027host\u0027], data[\u0027share_network_id\u0027]"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        if share_utils.extract_host(host, \u0027pool\u0027):"},{"line_number":143,"context_line":"            msg \u003d _(\"Host parameter should not contain pool.\")"},{"line_number":144,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        try:"},{"line_number":147,"context_line":"            utils.validate_service_host("}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_f2139d57","line":144,"range":{"start_line":142,"start_character":8,"end_line":144,"end_character":53},"in_reply_to":"9fdfeff1_88a787bc","updated":"2019-02-28 23:27:00.000000000","message":"Yes, you might be referring to a bug reported [1]. See the HPE Driver code added here: https://review.openstack.org/#/c/329552\n\nThe discussion I recall at that time was that we let the driver decide if the share server needs to be created on a specific pool; when a share request goes down to a driver, it lands on a pool (if the backend supports pools); if there is no share server already for that share network in that pool, a new one will be created.\n\n\n[1] https://bugs.launchpad.net/manila/+bug/1628102","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"f0a0eb95acb1a3c4052ab5b572837a6482acee44","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        identifier \u003d data[\u0027identifier\u0027]"},{"line_number":140,"context_line":"        host, share_network_id \u003d data[\u0027host\u0027], data[\u0027share_network_id\u0027]"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        if share_utils.extract_host(host, \u0027pool\u0027):"},{"line_number":143,"context_line":"            msg \u003d _(\"Host parameter should not contain pool.\")"},{"line_number":144,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        try:"},{"line_number":147,"context_line":"            utils.validate_service_host("}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_f54b8724","line":144,"range":{"start_line":142,"start_character":8,"end_line":144,"end_character":53},"in_reply_to":"9fdfeff1_f2139d57","updated":"2019-03-01 00:23:42.000000000","message":"Oh I see it now. My personal opinion is that we shouldn\u0027t change it while that bug isn\u0027t fixed. That bugfix is unrelated to this patch and would introduce additional complexity (unrelated complexity) if handled here right now. So, we validate that the API accepts what is valid today, and we change it in the future when hostname@backend#pool becomes valid for share servers.","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7cb8ad7c590597f6195aa065478da3cfbad5e9ed","unresolved":false,"context_lines":[{"line_number":147,"context_line":"            utils.validate_service_host("},{"line_number":148,"context_line":"                context, share_utils.extract_host(host))"},{"line_number":149,"context_line":"        except exception.ServiceNotFound as e:"},{"line_number":150,"context_line":"            raise exc.HTTPNotFound(explanation\u003dsix.text_type(e))"},{"line_number":151,"context_line":"        except exception.PolicyNotAuthorized as e:"},{"line_number":152,"context_line":"            raise exc.HTTPForbidden(explanation\u003dsix.text_type(e))"},{"line_number":153,"context_line":"        except exception.AdminRequired as e:"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_623a8434","line":150,"range":{"start_line":150,"start_character":0,"end_line":150,"end_character":64},"updated":"2019-02-28 20:34:51.000000000","message":"the service name isn\u0027t in the URI, please return HTTPBadRequest","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"812bdc68610685d624a61099e3503c8031fa76a8","unresolved":false,"context_lines":[{"line_number":147,"context_line":"            utils.validate_service_host("},{"line_number":148,"context_line":"                context, share_utils.extract_host(host))"},{"line_number":149,"context_line":"        except exception.ServiceNotFound as e:"},{"line_number":150,"context_line":"            raise exc.HTTPNotFound(explanation\u003dsix.text_type(e))"},{"line_number":151,"context_line":"        except exception.PolicyNotAuthorized as e:"},{"line_number":152,"context_line":"            raise exc.HTTPForbidden(explanation\u003dsix.text_type(e))"},{"line_number":153,"context_line":"        except exception.AdminRequired as e:"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_a8836b02","line":150,"range":{"start_line":150,"start_character":0,"end_line":150,"end_character":64},"in_reply_to":"9fdfeff1_623a8434","updated":"2019-02-28 22:55:50.000000000","message":"Done","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7cb8ad7c590597f6195aa065478da3cfbad5e9ed","unresolved":false,"context_lines":[{"line_number":159,"context_line":"            share_network \u003d db_api.share_network_get("},{"line_number":160,"context_line":"                context, share_network_id)"},{"line_number":161,"context_line":"        except exception.ShareNetworkNotFound as e:"},{"line_number":162,"context_line":"            raise exc.HTTPNotFound(explanation\u003dsix.text_type(e))"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        driver_opts \u003d data.get(\u0027driver_options\u0027)"},{"line_number":165,"context_line":"        if driver_opts is not None and not isinstance(driver_opts, dict):"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_a2e94c7f","line":162,"range":{"start_line":162,"start_character":22,"end_line":162,"end_character":34},"updated":"2019-02-28 20:34:51.000000000","message":"share network is not in the request, please return HTTPBadRequest, as you say in your spec: http://specs.openstack.org/openstack/manila-specs/specs/stein/manage-unmanage-with-share-servers.html#rest-api-impact","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"812bdc68610685d624a61099e3503c8031fa76a8","unresolved":false,"context_lines":[{"line_number":159,"context_line":"            share_network \u003d db_api.share_network_get("},{"line_number":160,"context_line":"                context, share_network_id)"},{"line_number":161,"context_line":"        except exception.ShareNetworkNotFound as e:"},{"line_number":162,"context_line":"            raise exc.HTTPNotFound(explanation\u003dsix.text_type(e))"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        driver_opts \u003d data.get(\u0027driver_options\u0027)"},{"line_number":165,"context_line":"        if driver_opts is not None and not isinstance(driver_opts, dict):"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_6879032d","line":162,"range":{"start_line":162,"start_character":22,"end_line":162,"end_character":34},"in_reply_to":"9fdfeff1_a2e94c7f","updated":"2019-02-28 22:55:50.000000000","message":"Done","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"4d0d5eeb421bbeb97cfdb44c3d36ba01f6d53651","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    def share_server_reset_status(self, req, id, body):"},{"line_number":56,"context_line":"        return self._reset_status(req, id, body)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    @wsgi.Controller.api_version(\"2.49\")  # noqa"},{"line_number":59,"context_line":"    @wsgi.Controller.authorize(\u0027manage_share_server\u0027)"},{"line_number":60,"context_line":"    @wsgi.response(202)"},{"line_number":61,"context_line":"    def manage(self, req, body):"}],"source_content_type":"text/x-python","patch_set":29,"id":"9fdfeff1_779c3f5b","line":58,"range":{"start_line":58,"start_character":42,"end_line":58,"end_character":48},"updated":"2019-03-05 00:57:28.000000000","message":"do you need this?","commit_id":"976e8c7f034367d3ac9307a8c393b2114153cc4b"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"f72f301614064636833941ebb1ac141f660ed2b2","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    def share_server_reset_status(self, req, id, body):"},{"line_number":56,"context_line":"        return self._reset_status(req, id, body)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    @wsgi.Controller.api_version(\"2.49\")  # noqa"},{"line_number":59,"context_line":"    @wsgi.Controller.authorize(\u0027manage_share_server\u0027)"},{"line_number":60,"context_line":"    @wsgi.response(202)"},{"line_number":61,"context_line":"    def manage(self, req, body):"}],"source_content_type":"text/x-python","patch_set":29,"id":"9fdfeff1_4d7acc25","line":58,"range":{"start_line":58,"start_character":42,"end_line":58,"end_character":48},"in_reply_to":"9fdfeff1_779c3f5b","updated":"2019-03-05 02:27:49.000000000","message":"Done","commit_id":"976e8c7f034367d3ac9307a8c393b2114153cc4b"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"5776fc720d29d2f2507cf89c7a20a093ee44c0fc","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        LOG.debug(\"Unmanage Share Server with id: %s\", id)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        force \u003d (body.get(\u0027unmanage\u0027) or {}).get(\u0027force\u0027, False)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        try:"},{"line_number":89,"context_line":"            share_server \u003d db_api.share_server_get("}],"source_content_type":"text/x-python","patch_set":31,"id":"9fdfeff1_17112605","line":86,"range":{"start_line":86,"start_character":8,"end_line":86,"end_character":64},"updated":"2019-03-05 14:13:46.000000000","message":"A comment here explaining the conditions where you set \u0027force\u0027 would be helpful.  I\u0027m not understanding right off why you set it if \u0027unmanage\u0027 is in the body.","commit_id":"744a38bd3f8c9f1c41e66128cc98730eb29de838"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"c0afcca4f43cd6ab12415d54d56e39617844adfb","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        LOG.debug(\"Unmanage Share Server with id: %s\", id)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        force \u003d (body.get(\u0027unmanage\u0027) or {}).get(\u0027force\u0027, False)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        try:"},{"line_number":89,"context_line":"            share_server \u003d db_api.share_server_get("}],"source_content_type":"text/x-python","patch_set":31,"id":"9fdfeff1_a970fe74","line":86,"range":{"start_line":86,"start_character":8,"end_line":86,"end_character":64},"in_reply_to":"9fdfeff1_17112605","updated":"2019-03-05 15:39:39.000000000","message":"hmmm not sure I understand the question. There is really no \"condition to set \u0027force\u0027\". The body should be:\n\n{\u0027unmanage\u0027: { \u0027force\u0027: True/False}}\n\nThe default value of force is False (so perhaps this should be the comment?), and in case the body is one of:\n\n1) {\u0027unmanage\u0027: None}\n2) {\u0027unmanage\u0027: {}}\n3) {\u0027unmanage\u0027: {\u0027force\u0027: False}.\n\nThe value of force will be False.\n\nIt will only be true if {\u0027unmanage\u0027: {\u0027force\u0027: True}}\n\nI should perhaps validate if it is a boolean, else it will accept force\u003dNone, although the behavior will not be changed.","commit_id":"744a38bd3f8c9f1c41e66128cc98730eb29de838"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"a2bf6d1b543ab5fd09f89591258e8327c08e6bc8","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        LOG.debug(\"Unmanage Share Server with id: %s\", id)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        force \u003d (body.get(\u0027unmanage\u0027) or {}).get(\u0027force\u0027, False)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        try:"},{"line_number":89,"context_line":"            share_server \u003d db_api.share_server_get("}],"source_content_type":"text/x-python","patch_set":31,"id":"9fdfeff1_fc42420f","line":86,"range":{"start_line":86,"start_character":8,"end_line":86,"end_character":64},"in_reply_to":"9fdfeff1_89a5fa49","updated":"2019-03-05 19:06:48.000000000","message":"Done","commit_id":"744a38bd3f8c9f1c41e66128cc98730eb29de838"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"534ea867f2b745844334de149107a6ac3b535126","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        LOG.debug(\"Unmanage Share Server with id: %s\", id)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        force \u003d (body.get(\u0027unmanage\u0027) or {}).get(\u0027force\u0027, False)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        try:"},{"line_number":89,"context_line":"            share_server \u003d db_api.share_server_get("}],"source_content_type":"text/x-python","patch_set":31,"id":"9fdfeff1_89a5fa49","line":86,"range":{"start_line":86,"start_character":8,"end_line":86,"end_character":64},"in_reply_to":"9fdfeff1_a970fe74","updated":"2019-03-05 15:57:40.000000000","message":"Got it.  Maybe just a comment:\n\n# Set force to True iff body is {\u0027unmanage\u0027: {\u0027force\u0027: True}}\u0027","commit_id":"744a38bd3f8c9f1c41e66128cc98730eb29de838"}],"manila/api/v2/share_snapshots.py":[{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"169a59a76a78de0fa051c3b13adb55646d89e5da","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"            share \u003d self.share_api.get(context, snapshot[\u0027share_id\u0027])"},{"line_number":60,"context_line":"            if not allow_dhss_true and share.get(\u0027share_server_id\u0027):"},{"line_number":61,"context_line":"                msg \u003d _(\"Operation \u0027unmanage_snapshot\u0027 is not supported for \""},{"line_number":62,"context_line":"                        \"snapshots of shares that are created with share\""},{"line_number":63,"context_line":"                        \" servers (created with share-networks).\")"},{"line_number":64,"context_line":"                raise exc.HTTPForbidden(explanation\u003dmsg)"},{"line_number":65,"context_line":"            elif share.get(\u0027has_replicas\u0027):"},{"line_number":66,"context_line":"                msg \u003d _(\"Share %s has replicas. Snapshots of this share \""}],"source_content_type":"text/x-python","patch_set":14,"id":"9fdfeff1_0424230c","line":63,"range":{"start_line":61,"start_character":0,"end_line":63,"end_character":66},"updated":"2019-02-26 20:08:04.000000000","message":"This message is no longer correct, right?","commit_id":"f9944011e6e421801156b87944af7f91e5965f47"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"4c2ff51dd2e411b64aacd0462b46876248c7961e","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"            share \u003d self.share_api.get(context, snapshot[\u0027share_id\u0027])"},{"line_number":60,"context_line":"            if not allow_dhss_true and share.get(\u0027share_server_id\u0027):"},{"line_number":61,"context_line":"                msg \u003d _(\"Operation \u0027unmanage_snapshot\u0027 is not supported for \""},{"line_number":62,"context_line":"                        \"snapshots of shares that are created with share\""},{"line_number":63,"context_line":"                        \" servers (created with share-networks).\")"},{"line_number":64,"context_line":"                raise exc.HTTPForbidden(explanation\u003dmsg)"},{"line_number":65,"context_line":"            elif share.get(\u0027has_replicas\u0027):"},{"line_number":66,"context_line":"                msg \u003d _(\"Share %s has replicas. Snapshots of this share \""}],"source_content_type":"text/x-python","patch_set":14,"id":"9fdfeff1_879fb5b2","line":63,"range":{"start_line":61,"start_character":0,"end_line":63,"end_character":66},"in_reply_to":"9fdfeff1_0424230c","updated":"2019-02-26 20:27:55.000000000","message":"same as the other similar occurrence","commit_id":"f9944011e6e421801156b87944af7f91e5965f47"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"f0a51be6b6074752844b7da6e3e68ec78049e6dc","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"            share \u003d self.share_api.get(context, snapshot[\u0027share_id\u0027])"},{"line_number":60,"context_line":"            if not allow_dhss_true and share.get(\u0027share_server_id\u0027):"},{"line_number":61,"context_line":"                msg \u003d _(\"Operation \u0027unmanage_snapshot\u0027 is not supported for \""},{"line_number":62,"context_line":"                        \"snapshots of shares that are created with share\""},{"line_number":63,"context_line":"                        \" servers (created with share-networks).\")"},{"line_number":64,"context_line":"                raise exc.HTTPForbidden(explanation\u003dmsg)"},{"line_number":65,"context_line":"            elif share.get(\u0027has_replicas\u0027):"},{"line_number":66,"context_line":"                msg \u003d _(\"Share %s has replicas. Snapshots of this share \""}],"source_content_type":"text/x-python","patch_set":14,"id":"9fdfeff1_67197186","line":63,"range":{"start_line":61,"start_character":0,"end_line":63,"end_character":66},"in_reply_to":"9fdfeff1_879fb5b2","updated":"2019-02-26 22:04:29.000000000","message":"Yup.","commit_id":"f9944011e6e421801156b87944af7f91e5965f47"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7cb8ad7c590597f6195aa065478da3cfbad5e9ed","unresolved":false,"context_lines":[{"line_number":272,"context_line":"        return self._unmanage(req, id, body)"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    @wsgi.Controller.api_version(\u00272.49\u0027)  # noqa"},{"line_number":275,"context_line":"    @wsgi.action(\u0027unmanage\u0027)  # pylint: disable\u003dE0102"},{"line_number":276,"context_line":"    def unmanage(self, req, id, body\u003dNone):"},{"line_number":277,"context_line":"        return self._unmanage(req, id, body, allow_dhss_true\u003dTrue)"},{"line_number":278,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_8d3d598f","line":275,"range":{"start_line":275,"start_character":48,"end_line":275,"end_character":53},"updated":"2019-02-28 20:34:51.000000000","message":"use the name instead:\n\n # pylint: disable\u003dfunction-redefined","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"812bdc68610685d624a61099e3503c8031fa76a8","unresolved":false,"context_lines":[{"line_number":272,"context_line":"        return self._unmanage(req, id, body)"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    @wsgi.Controller.api_version(\u00272.49\u0027)  # noqa"},{"line_number":275,"context_line":"    @wsgi.action(\u0027unmanage\u0027)  # pylint: disable\u003dE0102"},{"line_number":276,"context_line":"    def unmanage(self, req, id, body\u003dNone):"},{"line_number":277,"context_line":"        return self._unmanage(req, id, body, allow_dhss_true\u003dTrue)"},{"line_number":278,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_5ccde02d","line":275,"range":{"start_line":275,"start_character":48,"end_line":275,"end_character":53},"in_reply_to":"9fdfeff1_8d3d598f","updated":"2019-02-28 22:55:50.000000000","message":"Done","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a2af7dd886c499160e960ee4e6b04b44c008c792","unresolved":false,"context_lines":[{"line_number":271,"context_line":"        return self._unmanage(req, id, body)"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"    @wsgi.Controller.api_version(\u00272.49\u0027)  # noqa"},{"line_number":274,"context_line":"    @wsgi.action(\u0027unmanage\u0027)  # pylint: disable\u003dfunction-redefined"},{"line_number":275,"context_line":"    def unmanage(self, req, id, body\u003dNone):"},{"line_number":276,"context_line":"        return self._unmanage(req, id, body, allow_dhss_true\u003dTrue)"},{"line_number":277,"context_line":""}],"source_content_type":"text/x-python","patch_set":33,"id":"5fc1f717_c2ef90ae","line":274,"range":{"start_line":274,"start_character":30,"end_line":274,"end_character":66},"updated":"2019-03-05 23:42:00.000000000","message":"This has to go to the next line","commit_id":"d877b61c5e37ff012341194b8349af6f38155e5d"}],"manila/api/v2/shares.py":[{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"1c2e378eab62462d49f478e82ab250092bf1334d","unresolved":false,"context_lines":[{"line_number":412,"context_line":""},{"line_number":413,"context_line":"    @wsgi.Controller.api_version(\"2.8\", \"2.48\")  # noqa"},{"line_number":414,"context_line":"    def manage(self, req, body):  # pylint: disable\u003dE0102"},{"line_number":415,"context_line":"        detail \u003d self._manage(req, body)"},{"line_number":416,"context_line":"        return detail"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"    @wsgi.Controller.api_version(\"2.49\")  # noqa"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_1bf6c790","line":415,"range":{"start_line":415,"start_character":8,"end_line":415,"end_character":40},"updated":"2019-02-26 14:46:58.000000000","message":"I suggest setting allow_dhss_true\u003dFalse here just to be explicit.  That way the reader doesn\u0027t have to hunt down the definition of _manage() in v1 just to understand what is going on.","commit_id":"159e774e20c0701cb666b4928d93a082b458d690"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"359c63468b257181dd8c6119983de08956e2601b","unresolved":false,"context_lines":[{"line_number":412,"context_line":""},{"line_number":413,"context_line":"    @wsgi.Controller.api_version(\"2.8\", \"2.48\")  # noqa"},{"line_number":414,"context_line":"    def manage(self, req, body):  # pylint: disable\u003dE0102"},{"line_number":415,"context_line":"        detail \u003d self._manage(req, body)"},{"line_number":416,"context_line":"        return detail"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"    @wsgi.Controller.api_version(\"2.49\")  # noqa"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_d016d6f2","line":415,"range":{"start_line":415,"start_character":8,"end_line":415,"end_character":40},"in_reply_to":"9fdfeff1_1bf6c790","updated":"2019-02-26 18:38:19.000000000","message":"Done","commit_id":"159e774e20c0701cb666b4928d93a082b458d690"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"1c2e378eab62462d49f478e82ab250092bf1334d","unresolved":false,"context_lines":[{"line_number":423,"context_line":"    @wsgi.Controller.api_version(\u00272.7\u0027, \u00272.48\u0027)"},{"line_number":424,"context_line":"    @wsgi.action(\u0027unmanage\u0027)"},{"line_number":425,"context_line":"    def unmanage(self, req, id, body\u003dNone):"},{"line_number":426,"context_line":"        return self._unmanage(req, id, body)"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"    @wsgi.Controller.api_version(\u00272.49\u0027)  # noqa"},{"line_number":429,"context_line":"    @wsgi.action(\u0027unmanage\u0027)  # pylint: disable\u003dE0102"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_7b7833f7","line":426,"range":{"start_line":426,"start_character":2,"end_line":426,"end_character":44},"updated":"2019-02-26 14:46:58.000000000","message":"ditto","commit_id":"159e774e20c0701cb666b4928d93a082b458d690"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"359c63468b257181dd8c6119983de08956e2601b","unresolved":false,"context_lines":[{"line_number":423,"context_line":"    @wsgi.Controller.api_version(\u00272.7\u0027, \u00272.48\u0027)"},{"line_number":424,"context_line":"    @wsgi.action(\u0027unmanage\u0027)"},{"line_number":425,"context_line":"    def unmanage(self, req, id, body\u003dNone):"},{"line_number":426,"context_line":"        return self._unmanage(req, id, body)"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"    @wsgi.Controller.api_version(\u00272.49\u0027)  # noqa"},{"line_number":429,"context_line":"    @wsgi.action(\u0027unmanage\u0027)  # pylint: disable\u003dE0102"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_50b18600","line":426,"range":{"start_line":426,"start_character":2,"end_line":426,"end_character":44},"in_reply_to":"9fdfeff1_7b7833f7","updated":"2019-02-26 18:38:19.000000000","message":"Done","commit_id":"159e774e20c0701cb666b4928d93a082b458d690"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"2733459ced7cc816285eb3f00f6ab58b331fcca7","unresolved":false,"context_lines":[{"line_number":407,"context_line":"    @wsgi.Controller.api_version(\u00272.7\u0027, \u00272.7\u0027)"},{"line_number":408,"context_line":"    def manage(self, req, body):"},{"line_number":409,"context_line":"        body.get(\u0027share\u0027, {}).pop(\u0027is_public\u0027, None)"},{"line_number":410,"context_line":"        detail \u003d self._manage(req, body, allow_dhss_true\u003dFalse)"},{"line_number":411,"context_line":"        return detail"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"    @wsgi.Controller.api_version(\"2.8\", \"2.48\")  # noqa"}],"source_content_type":"text/x-python","patch_set":14,"id":"9fdfeff1_e4e55f0b","line":410,"range":{"start_line":410,"start_character":40,"end_line":410,"end_character":63},"updated":"2019-02-26 19:49:56.000000000","message":"Thanks :)","commit_id":"f9944011e6e421801156b87944af7f91e5965f47"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"4c2ff51dd2e411b64aacd0462b46876248c7961e","unresolved":false,"context_lines":[{"line_number":407,"context_line":"    @wsgi.Controller.api_version(\u00272.7\u0027, \u00272.7\u0027)"},{"line_number":408,"context_line":"    def manage(self, req, body):"},{"line_number":409,"context_line":"        body.get(\u0027share\u0027, {}).pop(\u0027is_public\u0027, None)"},{"line_number":410,"context_line":"        detail \u003d self._manage(req, body, allow_dhss_true\u003dFalse)"},{"line_number":411,"context_line":"        return detail"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"    @wsgi.Controller.api_version(\"2.8\", \"2.48\")  # noqa"}],"source_content_type":"text/x-python","patch_set":14,"id":"9fdfeff1_a7baf907","line":410,"range":{"start_line":410,"start_character":40,"end_line":410,"end_character":63},"in_reply_to":"9fdfeff1_e4e55f0b","updated":"2019-02-26 20:27:55.000000000","message":"\u003d)","commit_id":"f9944011e6e421801156b87944af7f91e5965f47"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7cb8ad7c590597f6195aa065478da3cfbad5e9ed","unresolved":false,"context_lines":[{"line_number":411,"context_line":"        return detail"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"    @wsgi.Controller.api_version(\"2.8\", \"2.48\")  # noqa"},{"line_number":414,"context_line":"    def manage(self, req, body):  # pylint: disable\u003dE0102"},{"line_number":415,"context_line":"        detail \u003d self._manage(req, body, allow_dhss_true\u003dFalse)"},{"line_number":416,"context_line":"        return detail"},{"line_number":417,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_0dede9ee","line":414,"range":{"start_line":414,"start_character":52,"end_line":414,"end_character":57},"updated":"2019-02-28 20:34:51.000000000","message":"function-redefined","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"812bdc68610685d624a61099e3503c8031fa76a8","unresolved":false,"context_lines":[{"line_number":411,"context_line":"        return detail"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"    @wsgi.Controller.api_version(\"2.8\", \"2.48\")  # noqa"},{"line_number":414,"context_line":"    def manage(self, req, body):  # pylint: disable\u003dE0102"},{"line_number":415,"context_line":"        detail \u003d self._manage(req, body, allow_dhss_true\u003dFalse)"},{"line_number":416,"context_line":"        return detail"},{"line_number":417,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_ff5a861b","line":414,"range":{"start_line":414,"start_character":52,"end_line":414,"end_character":57},"in_reply_to":"9fdfeff1_0dede9ee","updated":"2019-02-28 22:55:50.000000000","message":"Done","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7cb8ad7c590597f6195aa065478da3cfbad5e9ed","unresolved":false,"context_lines":[{"line_number":416,"context_line":"        return detail"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"    @wsgi.Controller.api_version(\"2.49\")  # noqa"},{"line_number":419,"context_line":"    def manage(self, req, body):  # pylint: disable\u003dE0102"},{"line_number":420,"context_line":"        detail \u003d self._manage(req, body, allow_dhss_true\u003dTrue)"},{"line_number":421,"context_line":"        return detail"},{"line_number":422,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_2de8eddc","line":419,"range":{"start_line":419,"start_character":52,"end_line":419,"end_character":57},"updated":"2019-02-28 20:34:51.000000000","message":"same","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"812bdc68610685d624a61099e3503c8031fa76a8","unresolved":false,"context_lines":[{"line_number":416,"context_line":"        return detail"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"    @wsgi.Controller.api_version(\"2.49\")  # noqa"},{"line_number":419,"context_line":"    def manage(self, req, body):  # pylint: disable\u003dE0102"},{"line_number":420,"context_line":"        detail \u003d self._manage(req, body, allow_dhss_true\u003dTrue)"},{"line_number":421,"context_line":"        return detail"},{"line_number":422,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_bf9e3eb5","line":419,"range":{"start_line":419,"start_character":52,"end_line":419,"end_character":57},"in_reply_to":"9fdfeff1_2de8eddc","updated":"2019-02-28 22:55:50.000000000","message":"Done","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"4d0d5eeb421bbeb97cfdb44c3d36ba01f6d53651","unresolved":false,"context_lines":[{"line_number":425,"context_line":"        return self._unmanage(req, id, body, allow_dhss_true\u003dFalse)"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"    @wsgi.Controller.api_version(\u00272.49\u0027)  # noqa"},{"line_number":428,"context_line":"    @wsgi.action(\u0027unmanage\u0027)  # pylint: disable\u003dE0102"},{"line_number":429,"context_line":"    def unmanage(self, req, id, body\u003dNone):"},{"line_number":430,"context_line":"        return self._unmanage(req, id, body, allow_dhss_true\u003dTrue)"},{"line_number":431,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"9fdfeff1_97e3e3d8","line":428,"range":{"start_line":428,"start_character":48,"end_line":428,"end_character":53},"updated":"2019-03-05 00:57:28.000000000","message":"function-redefined","commit_id":"976e8c7f034367d3ac9307a8c393b2114153cc4b"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"f72f301614064636833941ebb1ac141f660ed2b2","unresolved":false,"context_lines":[{"line_number":425,"context_line":"        return self._unmanage(req, id, body, allow_dhss_true\u003dFalse)"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"    @wsgi.Controller.api_version(\u00272.49\u0027)  # noqa"},{"line_number":428,"context_line":"    @wsgi.action(\u0027unmanage\u0027)  # pylint: disable\u003dE0102"},{"line_number":429,"context_line":"    def unmanage(self, req, id, body\u003dNone):"},{"line_number":430,"context_line":"        return self._unmanage(req, id, body, allow_dhss_true\u003dTrue)"},{"line_number":431,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"9fdfeff1_6d77903d","line":428,"range":{"start_line":428,"start_character":48,"end_line":428,"end_character":53},"in_reply_to":"9fdfeff1_97e3e3d8","updated":"2019-03-05 02:27:49.000000000","message":"Done","commit_id":"976e8c7f034367d3ac9307a8c393b2114153cc4b"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a2af7dd886c499160e960ee4e6b04b44c008c792","unresolved":false,"context_lines":[{"line_number":425,"context_line":"        return self._unmanage(req, id, body, allow_dhss_true\u003dFalse)"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"    @wsgi.Controller.api_version(\u00272.49\u0027)  # noqa"},{"line_number":428,"context_line":"    @wsgi.action(\u0027unmanage\u0027)  # pylint: disable\u003dfunction-redefined"},{"line_number":429,"context_line":"    def unmanage(self, req, id, body\u003dNone):"},{"line_number":430,"context_line":"        return self._unmanage(req, id, body, allow_dhss_true\u003dTrue)"},{"line_number":431,"context_line":""}],"source_content_type":"text/x-python","patch_set":33,"id":"5fc1f717_e23dec2c","line":428,"range":{"start_line":428,"start_character":30,"end_line":428,"end_character":66},"updated":"2019-03-05 23:42:00.000000000","message":"This has to go to the next line","commit_id":"d877b61c5e37ff012341194b8349af6f38155e5d"}],"manila/api/views/share_servers.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7cb8ad7c590597f6195aa065478da3cfbad5e9ed","unresolved":false,"context_lines":[{"line_number":56,"context_line":"            share_server_dict[\u0027created_at\u0027] \u003d share_server.created_at"},{"line_number":57,"context_line":"            share_server_dict[\u0027backend_details\u0027] \u003d share_server.backend_details"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        self.update_versioned_resource_dict("},{"line_number":60,"context_line":"            request, share_server_dict, share_server)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        return share_server_dict"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_cda121ab","line":60,"range":{"start_line":59,"start_character":8,"end_line":60,"end_character":53},"updated":"2019-02-28 20:34:51.000000000","message":"is the new key necessary for summary view?","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"812bdc68610685d624a61099e3503c8031fa76a8","unresolved":false,"context_lines":[{"line_number":56,"context_line":"            share_server_dict[\u0027created_at\u0027] \u003d share_server.created_at"},{"line_number":57,"context_line":"            share_server_dict[\u0027backend_details\u0027] \u003d share_server.backend_details"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        self.update_versioned_resource_dict("},{"line_number":60,"context_line":"            request, share_server_dict, share_server)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        return share_server_dict"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_1cb2f894","line":60,"range":{"start_line":59,"start_character":8,"end_line":60,"end_character":53},"in_reply_to":"9fdfeff1_cda121ab","updated":"2019-02-28 22:55:50.000000000","message":"Done","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7cb8ad7c590597f6195aa065478da3cfbad5e9ed","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    @common.ViewBuilder.versioned_method(\"2.49\")"},{"line_number":65,"context_line":"    def add_is_auto_deletable_field("},{"line_number":66,"context_line":"            self, context, share_server_dict, share_server):"},{"line_number":67,"context_line":"        share_server_dict[\u0027is_auto_deletable\u0027] \u003d share_server.get("},{"line_number":68,"context_line":"            \u0027is_auto_deletable\u0027, True)"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_ade61de6","line":68,"range":{"start_line":67,"start_character":49,"end_line":68,"end_character":38},"updated":"2019-02-28 20:34:51.000000000","message":"This syntax is kinda weird in behavior, I see that you want True if the value isn\u0027t set, but what happens is different:\n\n  \u003e\u003e\u003e ss \u003d {\u0027auto\u0027: None}\n  \u003e\u003e\u003e ss.get(\u0027auto\u0027, True)\n  # No output\n\n  \u003e\u003e\u003e ss1 \u003d {}\n  \u003e\u003e\u003e ss1.get(\u0027auto\u0027, True)\n  True\n\n  \u003e\u003e\u003e ss2 \u003d {\u0027auto\u0027: False}\n  \u003e\u003e\u003e ss2.get(\u0027auto\u0027, True)\n  False\n\nDo you expect, after the database migration that the \"is_auto_deletable\" field is missing from the share_server?","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"812bdc68610685d624a61099e3503c8031fa76a8","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    @common.ViewBuilder.versioned_method(\"2.49\")"},{"line_number":65,"context_line":"    def add_is_auto_deletable_field("},{"line_number":66,"context_line":"            self, context, share_server_dict, share_server):"},{"line_number":67,"context_line":"        share_server_dict[\u0027is_auto_deletable\u0027] \u003d share_server.get("},{"line_number":68,"context_line":"            \u0027is_auto_deletable\u0027, True)"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_fca2943e","line":68,"range":{"start_line":67,"start_character":49,"end_line":68,"end_character":38},"in_reply_to":"9fdfeff1_ade61de6","updated":"2019-02-28 22:55:50.000000000","message":"Done","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"4d0d5eeb421bbeb97cfdb44c3d36ba01f6d53651","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        return share_server_dict"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    @common.ViewBuilder.versioned_method(\"2.49\")"},{"line_number":65,"context_line":"    def add_is_auto_deletable_and_identifier_fields("},{"line_number":66,"context_line":"            self, context, share_server_dict, share_server):"},{"line_number":67,"context_line":"        share_server_dict[\u0027is_auto_deletable\u0027] \u003d ("},{"line_number":68,"context_line":"            share_server[\u0027is_auto_deletable\u0027])"},{"line_number":69,"context_line":"        share_server_dict[\u0027identifier\u0027] \u003d share_server[\u0027identifier\u0027]"}],"source_content_type":"text/x-python","patch_set":29,"id":"9fdfeff1_1704d317","line":69,"range":{"start_line":64,"start_character":0,"end_line":69,"end_character":68},"updated":"2019-03-05 00:57:28.000000000","message":"no unit test coverage...","commit_id":"976e8c7f034367d3ac9307a8c393b2114153cc4b"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"f72f301614064636833941ebb1ac141f660ed2b2","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        return share_server_dict"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    @common.ViewBuilder.versioned_method(\"2.49\")"},{"line_number":65,"context_line":"    def add_is_auto_deletable_and_identifier_fields("},{"line_number":66,"context_line":"            self, context, share_server_dict, share_server):"},{"line_number":67,"context_line":"        share_server_dict[\u0027is_auto_deletable\u0027] \u003d ("},{"line_number":68,"context_line":"            share_server[\u0027is_auto_deletable\u0027])"},{"line_number":69,"context_line":"        share_server_dict[\u0027identifier\u0027] \u003d share_server[\u0027identifier\u0027]"}],"source_content_type":"text/x-python","patch_set":29,"id":"9fdfeff1_0d74c435","line":69,"range":{"start_line":64,"start_character":0,"end_line":69,"end_character":68},"in_reply_to":"9fdfeff1_1704d317","updated":"2019-03-05 02:27:49.000000000","message":"Done","commit_id":"976e8c7f034367d3ac9307a8c393b2114153cc4b"}],"manila/db/migrations/alembic/versions/6a3fd2984bc31_add_is_auto_deletable_and_identifier_fields_for_share_servers.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"67cb15efa3bb174b0659cc3d4d13903b36bea3e8","unresolved":false,"context_lines":[{"line_number":48,"context_line":"                  \"and/or share_servers.identifier not created!\")"},{"line_number":49,"context_line":"        raise"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    try:"},{"line_number":52,"context_line":"        share_servers_table \u003d table("},{"line_number":53,"context_line":"            \u0027share_servers\u0027,"},{"line_number":54,"context_line":"            sa.Column(\u0027id\u0027, sa.String(length\u003d36)),"},{"line_number":55,"context_line":"            sa.Column(\u0027is_auto_deletable\u0027, sa.Boolean),"},{"line_number":56,"context_line":"            sa.Column(\u0027identifier\u0027, sa.String(length\u003d255))"},{"line_number":57,"context_line":"        )"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        update \u003d share_servers_table.update().values(is_auto_deletable\u003dTrue)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        session.execute(update)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        session.commit()"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    except Exception:"},{"line_number":66,"context_line":"        LOG.error("},{"line_number":67,"context_line":"            \"Could not initialize share_servers.is_auto_deletable to True!\")"},{"line_number":68,"context_line":"        raise"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    try:"},{"line_number":71,"context_line":"        for server in session.execute(share_servers_table.select()):"},{"line_number":72,"context_line":"            update \u003d share_servers_table.update().where("},{"line_number":73,"context_line":"                share_servers_table.c.id \u003d\u003d server[\u0027id\u0027]).values("},{"line_number":74,"context_line":"                identifier\u003dserver[\u0027id\u0027])"},{"line_number":75,"context_line":"            session.execute(update)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        session.commit()"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    except Exception:"},{"line_number":80,"context_line":"        LOG.error("},{"line_number":81,"context_line":"            \"Could not initialize share_servers.identifier with the share\""},{"line_number":82,"context_line":"            \" server ID!\")"},{"line_number":83,"context_line":"        raise"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    session.close_all()"},{"line_number":86,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"9fdfeff1_943761ff","line":83,"range":{"start_line":51,"start_character":0,"end_line":83,"end_character":13},"updated":"2019-03-05 00:10:01.000000000","message":"You really don\u0027t need DML commands here when we\u0027re already using alembic to perform all of our data definitions and manipulations.. The double commit here throws me off, you\u0027re flushing the session twice, for an update that can be done atomically in one transaction... Without sqlalchemy/DML commands, you can use the DDL extensions in alembic in a more simple manner:\n\n      connection \u003d op.get_bind()\n      share_servers_table \u003d utils.load_table(\u0027share_servers\u0027, connection)\n      for server in connection.execute(share_servers_table.select()):\n        connection.execute(\n            share_servers_table.update().where(\n                share_servers_table.c.id \u003d\u003d server.id,\n            ).values({\"identifier\": server.id, \"is_auto_deletable\": True}))","commit_id":"976e8c7f034367d3ac9307a8c393b2114153cc4b"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"f72f301614064636833941ebb1ac141f660ed2b2","unresolved":false,"context_lines":[{"line_number":48,"context_line":"                  \"and/or share_servers.identifier not created!\")"},{"line_number":49,"context_line":"        raise"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    try:"},{"line_number":52,"context_line":"        share_servers_table \u003d table("},{"line_number":53,"context_line":"            \u0027share_servers\u0027,"},{"line_number":54,"context_line":"            sa.Column(\u0027id\u0027, sa.String(length\u003d36)),"},{"line_number":55,"context_line":"            sa.Column(\u0027is_auto_deletable\u0027, sa.Boolean),"},{"line_number":56,"context_line":"            sa.Column(\u0027identifier\u0027, sa.String(length\u003d255))"},{"line_number":57,"context_line":"        )"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        update \u003d share_servers_table.update().values(is_auto_deletable\u003dTrue)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        session.execute(update)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        session.commit()"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    except Exception:"},{"line_number":66,"context_line":"        LOG.error("},{"line_number":67,"context_line":"            \"Could not initialize share_servers.is_auto_deletable to True!\")"},{"line_number":68,"context_line":"        raise"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    try:"},{"line_number":71,"context_line":"        for server in session.execute(share_servers_table.select()):"},{"line_number":72,"context_line":"            update \u003d share_servers_table.update().where("},{"line_number":73,"context_line":"                share_servers_table.c.id \u003d\u003d server[\u0027id\u0027]).values("},{"line_number":74,"context_line":"                identifier\u003dserver[\u0027id\u0027])"},{"line_number":75,"context_line":"            session.execute(update)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        session.commit()"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    except Exception:"},{"line_number":80,"context_line":"        LOG.error("},{"line_number":81,"context_line":"            \"Could not initialize share_servers.identifier with the share\""},{"line_number":82,"context_line":"            \" server ID!\")"},{"line_number":83,"context_line":"        raise"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    session.close_all()"},{"line_number":86,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"9fdfeff1_0d9b6473","line":83,"range":{"start_line":51,"start_character":0,"end_line":83,"end_character":13},"in_reply_to":"9fdfeff1_943761ff","updated":"2019-03-05 02:27:49.000000000","message":"Done","commit_id":"976e8c7f034367d3ac9307a8c393b2114153cc4b"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a2af7dd886c499160e960ee4e6b04b44c008c792","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        share_servers_table \u003d utils.load_table(\u0027share_servers\u0027, connection)"},{"line_number":53,"context_line":"        for server in connection.execute(share_servers_table.select()):"},{"line_number":54,"context_line":"            connection.execute("},{"line_number":55,"context_line":"                share_servers_table.update().where("},{"line_number":56,"context_line":"                    share_servers_table.c.id \u003d\u003d server.id,"},{"line_number":57,"context_line":"                ).values({\"identifier\": server.id, \"is_auto_deletable\": True}))"},{"line_number":58,"context_line":"    except Exception:"}],"source_content_type":"text/x-python","patch_set":33,"id":"5fc1f717_220d3490","line":55,"range":{"start_line":55,"start_character":36,"end_line":55,"end_character":42},"updated":"2019-03-05 23:42:00.000000000","message":"This needs a pylint ignore for the error no-value-for-parameter","commit_id":"d877b61c5e37ff012341194b8349af6f38155e5d"}],"manila/db/migrations/alembic/versions/6a3fd2984bc31_add_is_auto_deletable_field_for_share_servers.py":[{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"ef2c9c79f9523d6cfd7db63a9b3aaa359798e5da","unresolved":false,"context_lines":[{"line_number":22,"context_line":"\"\"\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"# revision identifiers, used by Alembic."},{"line_number":25,"context_line":"revision \u003d \u00276a3fd2984bc31\u0027"},{"line_number":26,"context_line":"down_revision \u003d \u002711ee96se625f3\u0027"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from alembic import op"},{"line_number":29,"context_line":"from oslo_log import log"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_01a191a9","line":26,"range":{"start_line":25,"start_character":17,"end_line":26,"end_character":31},"updated":"2019-02-26 00:18:36.000000000","message":"this seems right.","commit_id":"159e774e20c0701cb666b4928d93a082b458d690"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"71b2a715e73f35a4a7e872240bf631c47971acb0","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"# under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"\"\"\"add metadata for access rule"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Revision ID: 6a3fd2984bc31"},{"line_number":19,"context_line":"Revises: 11ee96se625f3"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_48b2ff95","line":16,"range":{"start_line":16,"start_character":3,"end_line":16,"end_character":31},"updated":"2019-02-28 23:27:00.000000000","message":"wrong heading","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"f0a0eb95acb1a3c4052ab5b572837a6482acee44","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"# under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"\"\"\"add metadata for access rule"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Revision ID: 6a3fd2984bc31"},{"line_number":19,"context_line":"Revises: 11ee96se625f3"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_b2667528","line":16,"range":{"start_line":16,"start_character":3,"end_line":16,"end_character":31},"in_reply_to":"9fdfeff1_48b2ff95","updated":"2019-03-01 00:23:42.000000000","message":"Done","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"71b2a715e73f35a4a7e872240bf631c47971acb0","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    try:"},{"line_number":42,"context_line":"        op.add_column(\u0027share_servers\u0027, sa.Column("},{"line_number":43,"context_line":"            \u0027is_auto_deletable\u0027, sa.Boolean, default\u003dFalse))"},{"line_number":44,"context_line":"    except Exception:"},{"line_number":45,"context_line":"        LOG.error(\"Column share_servers.is_auto_deletable not created!\")"},{"line_number":46,"context_line":"        raise"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_c8310f0d","line":43,"range":{"start_line":43,"start_character":45,"end_line":43,"end_character":58},"updated":"2019-02-28 23:27:00.000000000","message":"what\u0027s the rationale to default this to False? Wasn\u0027t the past behavior that all share servers were auto deletable if configuration required them to be?\n\nAlso, in the sqlalchemy model and the API View manager, the default value indicated is True","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"f0a0eb95acb1a3c4052ab5b572837a6482acee44","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    try:"},{"line_number":42,"context_line":"        op.add_column(\u0027share_servers\u0027, sa.Column("},{"line_number":43,"context_line":"            \u0027is_auto_deletable\u0027, sa.Boolean, default\u003dFalse))"},{"line_number":44,"context_line":"    except Exception:"},{"line_number":45,"context_line":"        LOG.error(\"Column share_servers.is_auto_deletable not created!\")"},{"line_number":46,"context_line":"        raise"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_924c919e","line":43,"range":{"start_line":43,"start_character":45,"end_line":43,"end_character":58},"in_reply_to":"9fdfeff1_c8310f0d","updated":"2019-03-01 00:23:42.000000000","message":"Yes this is a mistake leftover from renaming from is_imported","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"8ed06ddd3dbfba65f1a729822f5faa05b9ba692e","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"# under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"\"\"\"add metadata for access rule"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Revision ID: 6a3fd2984bc31"},{"line_number":19,"context_line":"Revises: 11ee96se625f3"}],"source_content_type":"text/x-python","patch_set":21,"id":"9fdfeff1_72b56dec","line":16,"range":{"start_line":16,"start_character":3,"end_line":16,"end_character":31},"updated":"2019-03-01 00:45:54.000000000","message":"wrong heading","commit_id":"330bb8b6918bc89c57002c93c2923ffd6e43df40"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"8ed06ddd3dbfba65f1a729822f5faa05b9ba692e","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    try:"},{"line_number":42,"context_line":"        op.add_column(\u0027share_servers\u0027, sa.Column("},{"line_number":43,"context_line":"            \u0027is_auto_deletable\u0027, sa.Boolean, default\u003dFalse))"},{"line_number":44,"context_line":"    except Exception:"},{"line_number":45,"context_line":"        LOG.error(\"Column share_servers.is_auto_deletable not created!\")"},{"line_number":46,"context_line":"        raise"}],"source_content_type":"text/x-python","patch_set":21,"id":"9fdfeff1_f2c07d4c","line":43,"range":{"start_line":43,"start_character":45,"end_line":43,"end_character":58},"updated":"2019-03-01 00:45:54.000000000","message":"what\u0027s the rationale to default this to False? Wasn\u0027t the past behavior that all share servers were auto deletable if configuration required them to be?\nAlso, in the sqlalchemy model and the API View manager, the default value indicated is True","commit_id":"330bb8b6918bc89c57002c93c2923ffd6e43df40"}],"manila/db/sqlalchemy/api.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"71b2a715e73f35a4a7e872240bf631c47971acb0","unresolved":false,"context_lines":[{"line_number":3747,"context_line":""},{"line_number":3748,"context_line":""},{"line_number":3749,"context_line":"@require_context"},{"line_number":3750,"context_line":"def network_allocation_get(context, id, session\u003dNone, read_deleted\u003dNone):"},{"line_number":3751,"context_line":"    if session is None:"},{"line_number":3752,"context_line":"        session \u003d get_session()"},{"line_number":3753,"context_line":"    result \u003d (model_query(context, models.NetworkAllocation, session\u003dsession,"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_ffdb66e6","line":3750,"range":{"start_line":3750,"start_character":54,"end_line":3750,"end_character":71},"updated":"2019-02-28 23:27:00.000000000","message":"curious, why is this is being exposed?","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"f0a0eb95acb1a3c4052ab5b572837a6482acee44","unresolved":false,"context_lines":[{"line_number":3747,"context_line":""},{"line_number":3748,"context_line":""},{"line_number":3749,"context_line":"@require_context"},{"line_number":3750,"context_line":"def network_allocation_get(context, id, session\u003dNone, read_deleted\u003dNone):"},{"line_number":3751,"context_line":"    if session is None:"},{"line_number":3752,"context_line":"        session \u003d get_session()"},{"line_number":3753,"context_line":"    result \u003d (model_query(context, models.NetworkAllocation, session\u003dsession,"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_9231f10d","line":3750,"range":{"start_line":3750,"start_character":54,"end_line":3750,"end_character":71},"in_reply_to":"9fdfeff1_ffdb66e6","updated":"2019-03-01 00:23:42.000000000","message":"Because in some situation I want only to read the non-deleted ones, and in some situations I only want the deleted ones. You will see in the neutron_network_plugin.","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"8ed06ddd3dbfba65f1a729822f5faa05b9ba692e","unresolved":false,"context_lines":[{"line_number":3747,"context_line":""},{"line_number":3748,"context_line":""},{"line_number":3749,"context_line":"@require_context"},{"line_number":3750,"context_line":"def network_allocation_get(context, id, session\u003dNone, read_deleted\u003dNone):"},{"line_number":3751,"context_line":"    if session is None:"},{"line_number":3752,"context_line":"        session \u003d get_session()"},{"line_number":3753,"context_line":"    result \u003d (model_query(context, models.NetworkAllocation, session\u003dsession,"}],"source_content_type":"text/x-python","patch_set":21,"id":"9fdfeff1_b28d1532","line":3750,"range":{"start_line":3750,"start_character":54,"end_line":3750,"end_character":72},"updated":"2019-03-01 00:45:54.000000000","message":"curious, why is this is being exposed?","commit_id":"330bb8b6918bc89c57002c93c2923ffd6e43df40"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"78e5b0463190691d155fb74bfd1e6e5600afaba7","unresolved":false,"context_lines":[{"line_number":3747,"context_line":""},{"line_number":3748,"context_line":""},{"line_number":3749,"context_line":"@require_context"},{"line_number":3750,"context_line":"def network_allocation_get(context, id, session\u003dNone, read_deleted\u003dNone):"},{"line_number":3751,"context_line":"    if session is None:"},{"line_number":3752,"context_line":"        session \u003d get_session()"},{"line_number":3753,"context_line":"    result \u003d (model_query(context, models.NetworkAllocation, session\u003dsession,"}],"source_content_type":"text/x-python","patch_set":21,"id":"9fdfeff1_f9f9397f","line":3750,"range":{"start_line":3750,"start_character":54,"end_line":3750,"end_character":72},"in_reply_to":"9fdfeff1_86e693e6","updated":"2019-03-01 17:44:16.000000000","message":"Done","commit_id":"330bb8b6918bc89c57002c93c2923ffd6e43df40"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"2e6e2f07b35b0aa6efcdad938cef8f29f3d21344","unresolved":false,"context_lines":[{"line_number":3747,"context_line":""},{"line_number":3748,"context_line":""},{"line_number":3749,"context_line":"@require_context"},{"line_number":3750,"context_line":"def network_allocation_get(context, id, session\u003dNone, read_deleted\u003dNone):"},{"line_number":3751,"context_line":"    if session is None:"},{"line_number":3752,"context_line":"        session \u003d get_session()"},{"line_number":3753,"context_line":"    result \u003d (model_query(context, models.NetworkAllocation, session\u003dsession,"}],"source_content_type":"text/x-python","patch_set":21,"id":"9fdfeff1_86e693e6","line":3750,"range":{"start_line":3750,"start_character":54,"end_line":3750,"end_character":72},"in_reply_to":"9fdfeff1_b28d1532","updated":"2019-03-01 04:54:47.000000000","message":"I see why you need this now.. can you default read_deleted to \"no\" please?\n\nThe valid values for this field are supposed to be \"yes\", \"no\" and \"only\", optionally allowing True or False or \u0027y\u0027 or \u0027n\u0027. \n\nHowever, in manila we don\u0027t seem to honor \"only\".","commit_id":"330bb8b6918bc89c57002c93c2923ffd6e43df40"}],"manila/db/sqlalchemy/models.py":[{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"169a59a76a78de0fa051c3b13adb55646d89e5da","unresolved":false,"context_lines":[{"line_number":951,"context_line":"    share_network_id \u003d Column(String(36), ForeignKey(\u0027share_networks.id\u0027),"},{"line_number":952,"context_line":"                              nullable\u003dTrue)"},{"line_number":953,"context_line":"    host \u003d Column(String(255), nullable\u003dFalse)"},{"line_number":954,"context_line":"    is_auto_deletable \u003d Column(Boolean, default\u003dTrue)"},{"line_number":955,"context_line":"    status \u003d Column(Enum("},{"line_number":956,"context_line":"        constants.STATUS_INACTIVE, constants.STATUS_ACTIVE,"},{"line_number":957,"context_line":"        constants.STATUS_ERROR, constants.STATUS_DELETING,"}],"source_content_type":"text/x-python","patch_set":14,"id":"9fdfeff1_24360704","line":954,"range":{"start_line":954,"start_character":0,"end_line":954,"end_character":53},"updated":"2019-02-26 20:08:04.000000000","message":"Not that I necessarily object, but the approved spec said we\u0027d have an \u0027is_imported\u0027 column with opposite sense of \u0027is_auto_deletable\u0027.  Is there a reason you decided to implement this way instead?","commit_id":"f9944011e6e421801156b87944af7f91e5965f47"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"4c2ff51dd2e411b64aacd0462b46876248c7961e","unresolved":false,"context_lines":[{"line_number":951,"context_line":"    share_network_id \u003d Column(String(36), ForeignKey(\u0027share_networks.id\u0027),"},{"line_number":952,"context_line":"                              nullable\u003dTrue)"},{"line_number":953,"context_line":"    host \u003d Column(String(255), nullable\u003dFalse)"},{"line_number":954,"context_line":"    is_auto_deletable \u003d Column(Boolean, default\u003dTrue)"},{"line_number":955,"context_line":"    status \u003d Column(Enum("},{"line_number":956,"context_line":"        constants.STATUS_INACTIVE, constants.STATUS_ACTIVE,"},{"line_number":957,"context_line":"        constants.STATUS_ERROR, constants.STATUS_DELETING,"}],"source_content_type":"text/x-python","patch_set":14,"id":"9fdfeff1_87ed7526","line":954,"range":{"start_line":954,"start_character":0,"end_line":954,"end_character":53},"in_reply_to":"9fdfeff1_24360704","updated":"2019-02-26 20:27:55.000000000","message":"Yes, because I needed to change this field to \"is_imported\u003dFalse\" to prevent the share server from being deleted whenever a share, from a share server created by manila, is unmanaged. Let\u0027s say that I create 1 share in manila, spawning a new share server, and then I unmanage it. The reason I renamed it is that for the above scenario, it is not an imported share server, so the name did not make sense.","commit_id":"f9944011e6e421801156b87944af7f91e5965f47"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"f0a51be6b6074752844b7da6e3e68ec78049e6dc","unresolved":false,"context_lines":[{"line_number":951,"context_line":"    share_network_id \u003d Column(String(36), ForeignKey(\u0027share_networks.id\u0027),"},{"line_number":952,"context_line":"                              nullable\u003dTrue)"},{"line_number":953,"context_line":"    host \u003d Column(String(255), nullable\u003dFalse)"},{"line_number":954,"context_line":"    is_auto_deletable \u003d Column(Boolean, default\u003dTrue)"},{"line_number":955,"context_line":"    status \u003d Column(Enum("},{"line_number":956,"context_line":"        constants.STATUS_INACTIVE, constants.STATUS_ACTIVE,"},{"line_number":957,"context_line":"        constants.STATUS_ERROR, constants.STATUS_DELETING,"}],"source_content_type":"text/x-python","patch_set":14,"id":"9fdfeff1_476d4d01","line":954,"range":{"start_line":954,"start_character":0,"end_line":954,"end_character":53},"in_reply_to":"9fdfeff1_87ed7526","updated":"2019-02-26 22:04:29.000000000","message":"OK, thanks for explaining.","commit_id":"f9944011e6e421801156b87944af7f91e5965f47"}],"manila/network/neutron/neutron_network_plugin.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"8ed06ddd3dbfba65f1a729822f5faa05b9ba692e","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        self._verify_share_network(share_server[\u0027id\u0027], share_network)"},{"line_number":168,"context_line":"        self._store_neutron_net_info(context, share_network)"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"        remaining_allocations \u003d list(allocations)"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        fixed_ip_filter \u003d \u0027subnet_id\u003d\u0027 + share_network[\u0027neutron_subnet_id\u0027]"},{"line_number":173,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_32d605c5","line":170,"range":{"start_line":170,"start_character":8,"end_line":170,"end_character":29},"updated":"2019-03-01 00:45:54.000000000","message":"this name is confusing.. what do you mean by remaining allocations?\n\ncan\u0027t this simply be:\n\n  if not isinstance(allocations, list):\n       allocations \u003d list(allocations)","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a896869eafb7cc2ea678c6c1d150b7b1003d99fa","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        self._verify_share_network(share_server[\u0027id\u0027], share_network)"},{"line_number":168,"context_line":"        self._store_neutron_net_info(context, share_network)"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"        remaining_allocations \u003d list(allocations)"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        fixed_ip_filter \u003d \u0027subnet_id\u003d\u0027 + share_network[\u0027neutron_subnet_id\u0027]"},{"line_number":173,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_4bc1947f","line":170,"range":{"start_line":170,"start_character":8,"end_line":170,"end_character":29},"in_reply_to":"9fdfeff1_32d605c5","updated":"2019-03-01 04:45:40.000000000","message":"ah, I see you\u0027re making a copy of the allocations... ignore my previous comment \n\nthe logic wasn\u0027t obvious right away, still don\u0027t agree with the naming.. it feels like you named your return variable here, and that\u0027s confusing for readability\u0027s sake. Can you at least add a comment above?\n\n \n\n\"Let\u0027s begin matching the allocations to known neutron ports and return the non-consumed allocations\" \n\n \n\nor something to that effect.","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"78e5b0463190691d155fb74bfd1e6e5600afaba7","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        self._verify_share_network(share_server[\u0027id\u0027], share_network)"},{"line_number":168,"context_line":"        self._store_neutron_net_info(context, share_network)"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"        remaining_allocations \u003d list(allocations)"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        fixed_ip_filter \u003d \u0027subnet_id\u003d\u0027 + share_network[\u0027neutron_subnet_id\u0027]"},{"line_number":173,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_1a3c2bbd","line":170,"range":{"start_line":170,"start_character":8,"end_line":170,"end_character":29},"in_reply_to":"9fdfeff1_4bc1947f","updated":"2019-03-01 17:44:16.000000000","message":"Done","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"8ed06ddd3dbfba65f1a729822f5faa05b9ba692e","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        selected_ports \u003d self._get_ports_respective_to_ips("},{"line_number":180,"context_line":"            remaining_allocations, port_list)"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"        LOG.debug(\"Found matching allocations in Neutron:\""},{"line_number":183,"context_line":"                  \" %s\", six.text_type(selected_ports))"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        for selected_port in selected_ports:"},{"line_number":186,"context_line":"            port_dict \u003d {"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_d2a7794f","line":183,"range":{"start_line":182,"start_character":0,"end_line":183,"end_character":55},"updated":"2019-03-01 00:45:54.000000000","message":"Maybe also log any IPs that weren\u0027t matched with their ports ... \n\nWhat if selected_ports is []?","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"75d6535ff77329fe6fbf299a260f2f5661cb4fc0","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        selected_ports \u003d self._get_ports_respective_to_ips("},{"line_number":180,"context_line":"            remaining_allocations, port_list)"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"        LOG.debug(\"Found matching allocations in Neutron:\""},{"line_number":183,"context_line":"                  \" %s\", six.text_type(selected_ports))"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        for selected_port in selected_ports:"},{"line_number":186,"context_line":"            port_dict \u003d {"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_dd43e63e","line":183,"range":{"start_line":182,"start_character":0,"end_line":183,"end_character":55},"in_reply_to":"9fdfeff1_523372c5","updated":"2019-03-03 21:11:17.000000000","message":"Done","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"78e5b0463190691d155fb74bfd1e6e5600afaba7","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        selected_ports \u003d self._get_ports_respective_to_ips("},{"line_number":180,"context_line":"            remaining_allocations, port_list)"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"        LOG.debug(\"Found matching allocations in Neutron:\""},{"line_number":183,"context_line":"                  \" %s\", six.text_type(selected_ports))"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        for selected_port in selected_ports:"},{"line_number":186,"context_line":"            port_dict \u003d {"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_aea84477","line":183,"range":{"start_line":182,"start_character":0,"end_line":183,"end_character":55},"in_reply_to":"9fdfeff1_8b821cc6","updated":"2019-03-01 17:44:16.000000000","message":"I need to error out because we don\u0027t allow unmanaged allocations.","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7fe22616934b551e642b8c65e4b185b217406f54","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        selected_ports \u003d self._get_ports_respective_to_ips("},{"line_number":180,"context_line":"            remaining_allocations, port_list)"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"        LOG.debug(\"Found matching allocations in Neutron:\""},{"line_number":183,"context_line":"                  \" %s\", six.text_type(selected_ports))"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        for selected_port in selected_ports:"},{"line_number":186,"context_line":"            port_dict \u003d {"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_523372c5","line":183,"range":{"start_line":182,"start_character":0,"end_line":183,"end_character":55},"in_reply_to":"9fdfeff1_aea84477","updated":"2019-03-01 20:36:45.000000000","message":"We (Tom Barron, Rodrigo Barbieri and I) discussed this in a meeting, and we concluded that we\u0027ll error out if there are unmatched allocations, i.e, if the number of neutron ports accounted for is less than the IP addresses matched. \n\nThis is because:\n- We want to preserve simplicity and predictability in implementation\n- We want to preserve expectations that we have around manila managed resources, i.e, they *should* not have resources (such as network allocations) that we don\u0027t know about (or that we can manage). Rodrigo will be making this clear in the documentation for this feature.","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a896869eafb7cc2ea678c6c1d150b7b1003d99fa","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        selected_ports \u003d self._get_ports_respective_to_ips("},{"line_number":180,"context_line":"            remaining_allocations, port_list)"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"        LOG.debug(\"Found matching allocations in Neutron:\""},{"line_number":183,"context_line":"                  \" %s\", six.text_type(selected_ports))"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        for selected_port in selected_ports:"},{"line_number":186,"context_line":"            port_dict \u003d {"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_8b821cc6","line":183,"range":{"start_line":182,"start_character":0,"end_line":183,"end_character":55},"in_reply_to":"9fdfeff1_d2a7794f","updated":"2019-03-01 04:45:40.000000000","message":"My concern really was about unmatched IPs .. i.e, when the backend gives you more IPs than there are matching neutron ports.... I think it is useful to know, for troubleshooting purposes what IPs don\u0027t match.. \n\nI think you can LOG those in the share manager.... rather than error out, like you\u0027re currently doing at https://review.openstack.org/#/c/635831/20/manila/share/manager.py@2707","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"78e5b0463190691d155fb74bfd1e6e5600afaba7","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        selected_ports \u003d self._get_ports_respective_to_ips("},{"line_number":180,"context_line":"            remaining_allocations, port_list)"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"        LOG.debug(\"Found matching allocations in Neutron:\""},{"line_number":183,"context_line":"                  \" %s\", six.text_type(selected_ports))"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        for selected_port in selected_ports:"},{"line_number":186,"context_line":"            port_dict \u003d {"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_4edc3844","line":183,"range":{"start_line":182,"start_character":0,"end_line":183,"end_character":55},"in_reply_to":"9fdfeff1_d2a7794f","updated":"2019-03-01 17:44:16.000000000","message":"well, we log that there were no matches, it helps debugging.","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a896869eafb7cc2ea678c6c1d150b7b1003d99fa","unresolved":false,"context_lines":[{"line_number":205,"context_line":"            except exception.NotFound:"},{"line_number":206,"context_line":"                pass"},{"line_number":207,"context_line":"            else:"},{"line_number":208,"context_line":"                msg \u003d _(\"There are existing conflicting manila network \""},{"line_number":209,"context_line":"                        \"allocations. Please cleanup share servers that are \""},{"line_number":210,"context_line":"                        \"in error state.\")"},{"line_number":211,"context_line":"                raise exception.ManageShareServerError(reason\u003dmsg)"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"            # If there are previously deleted allocations, we undelete them"},{"line_number":214,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_4bc75446","line":211,"range":{"start_line":208,"start_character":0,"end_line":211,"end_character":66},"updated":"2019-03-01 04:45:40.000000000","message":"Can you log the existing share server ID from the port information you get from the DB call above? easier to detect/cleanup if you know which one has the allocation you are duplicating...","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"78e5b0463190691d155fb74bfd1e6e5600afaba7","unresolved":false,"context_lines":[{"line_number":205,"context_line":"            except exception.NotFound:"},{"line_number":206,"context_line":"                pass"},{"line_number":207,"context_line":"            else:"},{"line_number":208,"context_line":"                msg \u003d _(\"There are existing conflicting manila network \""},{"line_number":209,"context_line":"                        \"allocations. Please cleanup share servers that are \""},{"line_number":210,"context_line":"                        \"in error state.\")"},{"line_number":211,"context_line":"                raise exception.ManageShareServerError(reason\u003dmsg)"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"            # If there are previously deleted allocations, we undelete them"},{"line_number":214,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_2eae9480","line":211,"range":{"start_line":208,"start_character":0,"end_line":211,"end_character":66},"in_reply_to":"9fdfeff1_4bc75446","updated":"2019-03-01 17:44:16.000000000","message":"Done","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a896869eafb7cc2ea678c6c1d150b7b1003d99fa","unresolved":false,"context_lines":[{"line_number":209,"context_line":"                        \"allocations. Please cleanup share servers that are \""},{"line_number":210,"context_line":"                        \"in error state.\")"},{"line_number":211,"context_line":"                raise exception.ManageShareServerError(reason\u003dmsg)"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"            # If there are previously deleted allocations, we undelete them"},{"line_number":214,"context_line":"            try:"},{"line_number":215,"context_line":"                self.db.network_allocation_get("}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_ebef28ae","line":212,"range":{"start_line":212,"start_character":0,"end_line":212,"end_character":0},"updated":"2019-03-01 04:45:40.000000000","message":"Also, I\u0027m presuming, if a share server manage operation failed here, any partially saved network allocations are going to go away if you delete the concerned share server?","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7fe22616934b551e642b8c65e4b185b217406f54","unresolved":false,"context_lines":[{"line_number":209,"context_line":"                        \"allocations. Please cleanup share servers that are \""},{"line_number":210,"context_line":"                        \"in error state.\")"},{"line_number":211,"context_line":"                raise exception.ManageShareServerError(reason\u003dmsg)"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"            # If there are previously deleted allocations, we undelete them"},{"line_number":214,"context_line":"            try:"},{"line_number":215,"context_line":"                self.db.network_allocation_get("}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_3856d206","line":212,"range":{"start_line":212,"start_character":0,"end_line":212,"end_character":0},"in_reply_to":"9fdfeff1_2ee3f4d9","updated":"2019-03-01 20:36:45.000000000","message":"I\u0027m thinking in terms of the administrator - what does the admin need to do to clean up if things fail? would unmanaging the errored share server help? Or would they need to delete the errored share server? or either?","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"75d6535ff77329fe6fbf299a260f2f5661cb4fc0","unresolved":false,"context_lines":[{"line_number":209,"context_line":"                        \"allocations. Please cleanup share servers that are \""},{"line_number":210,"context_line":"                        \"in error state.\")"},{"line_number":211,"context_line":"                raise exception.ManageShareServerError(reason\u003dmsg)"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"            # If there are previously deleted allocations, we undelete them"},{"line_number":214,"context_line":"            try:"},{"line_number":215,"context_line":"                self.db.network_allocation_get("}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_bd5f020e","line":212,"range":{"start_line":212,"start_character":0,"end_line":212,"end_character":0},"in_reply_to":"9fdfeff1_3856d206","updated":"2019-03-03 21:11:17.000000000","message":"If for some reason it fails midway through adding the manila allocations, they will need to be manually cleaned up by the administrator.\n\nTrying to unmanage the share server could perhaps perform the cleanup and then the administrator wouldn\u0027t need to do anything.\n\nSo, it is unlikely that things fail \"midway through\" that part below. Otherwise, there is nothing to clean up.","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"78e5b0463190691d155fb74bfd1e6e5600afaba7","unresolved":false,"context_lines":[{"line_number":209,"context_line":"                        \"allocations. Please cleanup share servers that are \""},{"line_number":210,"context_line":"                        \"in error state.\")"},{"line_number":211,"context_line":"                raise exception.ManageShareServerError(reason\u003dmsg)"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"            # If there are previously deleted allocations, we undelete them"},{"line_number":214,"context_line":"            try:"},{"line_number":215,"context_line":"                self.db.network_allocation_get("}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_2ee3f4d9","line":212,"range":{"start_line":212,"start_character":0,"end_line":212,"end_character":0},"in_reply_to":"9fdfeff1_ebef28ae","updated":"2019-03-01 17:44:16.000000000","message":"here as in @LN212, no changes would have been made yet, they are made below. Otherwise, if you mean that it fails below, then there might be things for the admin to clean up, but they shouldn\u0027t fail since I believe I covered all cases that could lead to problems/conflicts, that\u0027s why I use read_deleted.","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"78e5b0463190691d155fb74bfd1e6e5600afaba7","unresolved":false,"context_lines":[{"line_number":213,"context_line":"            # If there are previously deleted allocations, we undelete them"},{"line_number":214,"context_line":"            try:"},{"line_number":215,"context_line":"                self.db.network_allocation_get("},{"line_number":216,"context_line":"                    context, selected_port[\u0027port\u0027][\u0027id\u0027], read_deleted\u003dTrue)"},{"line_number":217,"context_line":"            except exception.NotFound:"},{"line_number":218,"context_line":"                self.db.network_allocation_create(context, port_dict)"},{"line_number":219,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_2efc5470","line":216,"range":{"start_line":216,"start_character":58,"end_line":216,"end_character":75},"updated":"2019-03-01 17:44:16.000000000","message":"you mentioned to default read_deleted to \"no\", but we use True/False. Doesn\u0027t it make more sense to default to False, or use \"yes\" here? I chose to use True instead of \"yes\" because it is unusual to use \"yes\" or \"no\" strings for boolean purposes.","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7fe22616934b551e642b8c65e4b185b217406f54","unresolved":false,"context_lines":[{"line_number":213,"context_line":"            # If there are previously deleted allocations, we undelete them"},{"line_number":214,"context_line":"            try:"},{"line_number":215,"context_line":"                self.db.network_allocation_get("},{"line_number":216,"context_line":"                    context, selected_port[\u0027port\u0027][\u0027id\u0027], read_deleted\u003dTrue)"},{"line_number":217,"context_line":"            except exception.NotFound:"},{"line_number":218,"context_line":"                self.db.network_allocation_create(context, port_dict)"},{"line_number":219,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_b8416238","line":216,"range":{"start_line":216,"start_character":58,"end_line":216,"end_character":75},"in_reply_to":"9fdfeff1_2efc5470","updated":"2019-03-01 20:36:45.000000000","message":"I didn\u0027t write that code, but I can presume they wanted an easier way to make a tri-valued boolean: \u0027yes\u0027, \u0027no\u0027 and \u0027only\u0027 is more obvious than True, False and None\n\nThe code doesn\u0027t call out this parameter to be a boolean, and therein lies the confusion :/\n\n\nFurther investigating, found that we changed the behavior with [1], and that could be the source of this confusion\n\n[1] https://review.openstack.org/#/c/170555/","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7fe22616934b551e642b8c65e4b185b217406f54","unresolved":false,"context_lines":[{"line_number":243,"context_line":"        selected_ports \u003d []"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"        for port in port_list:"},{"line_number":246,"context_line":"            for ip in port[\u0027fixed_ips\u0027]:"},{"line_number":247,"context_line":"                if ip[\u0027ip_address\u0027] in allocations:"},{"line_number":248,"context_line":"                    selected_ports.append("},{"line_number":249,"context_line":"                        {\u0027port\u0027: port, \u0027allocation\u0027: ip[\u0027ip_address\u0027]})"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_0f370501","line":246,"range":{"start_line":246,"start_character":0,"end_line":246,"end_character":40},"updated":"2019-03-01 20:36:45.000000000","message":"We (Tom Barron, Rodrigo Barbieri and I) discussed this further on a call, and we concluded that we may not be able to handle multiple IPs per port... we should log a warning about us selecting one of the IPs if present in the allocations and removing the port from further consideration.","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"75d6535ff77329fe6fbf299a260f2f5661cb4fc0","unresolved":false,"context_lines":[{"line_number":243,"context_line":"        selected_ports \u003d []"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"        for port in port_list:"},{"line_number":246,"context_line":"            for ip in port[\u0027fixed_ips\u0027]:"},{"line_number":247,"context_line":"                if ip[\u0027ip_address\u0027] in allocations:"},{"line_number":248,"context_line":"                    selected_ports.append("},{"line_number":249,"context_line":"                        {\u0027port\u0027: port, \u0027allocation\u0027: ip[\u0027ip_address\u0027]})"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_bd462250","line":246,"range":{"start_line":246,"start_character":0,"end_line":246,"end_character":40},"in_reply_to":"9fdfeff1_0f370501","updated":"2019-03-03 21:11:17.000000000","message":"Done","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a896869eafb7cc2ea678c6c1d150b7b1003d99fa","unresolved":false,"context_lines":[{"line_number":245,"context_line":"        for port in port_list:"},{"line_number":246,"context_line":"            for ip in port[\u0027fixed_ips\u0027]:"},{"line_number":247,"context_line":"                if ip[\u0027ip_address\u0027] in allocations:"},{"line_number":248,"context_line":"                    selected_ports.append("},{"line_number":249,"context_line":"                        {\u0027port\u0027: port, \u0027allocation\u0027: ip[\u0027ip_address\u0027]})"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"        return selected_ports"},{"line_number":252,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_ab636019","line":249,"range":{"start_line":248,"start_character":20,"end_line":249,"end_character":71},"updated":"2019-03-01 04:45:40.000000000","message":"A port can have multiple IPs, how do you determine which one to use, in this case, we create multiple port objects... \n\nhttps://developer.openstack.org/api-ref/network/v2/?expanded\u003dshow-port-details-detail#show-port-details","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7fe22616934b551e642b8c65e4b185b217406f54","unresolved":false,"context_lines":[{"line_number":245,"context_line":"        for port in port_list:"},{"line_number":246,"context_line":"            for ip in port[\u0027fixed_ips\u0027]:"},{"line_number":247,"context_line":"                if ip[\u0027ip_address\u0027] in allocations:"},{"line_number":248,"context_line":"                    selected_ports.append("},{"line_number":249,"context_line":"                        {\u0027port\u0027: port, \u0027allocation\u0027: ip[\u0027ip_address\u0027]})"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"        return selected_ports"},{"line_number":252,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_187aee75","line":249,"range":{"start_line":248,"start_character":20,"end_line":249,"end_character":71},"in_reply_to":"9fdfeff1_2ee694b1","updated":"2019-03-01 20:36:45.000000000","message":"I\u0027m not entirely familiar with neutron to take that call, but if it is different from the rest of their OpenStack workloads, wouldn\u0027t this be a limitation?","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"78e5b0463190691d155fb74bfd1e6e5600afaba7","unresolved":false,"context_lines":[{"line_number":245,"context_line":"        for port in port_list:"},{"line_number":246,"context_line":"            for ip in port[\u0027fixed_ips\u0027]:"},{"line_number":247,"context_line":"                if ip[\u0027ip_address\u0027] in allocations:"},{"line_number":248,"context_line":"                    selected_ports.append("},{"line_number":249,"context_line":"                        {\u0027port\u0027: port, \u0027allocation\u0027: ip[\u0027ip_address\u0027]})"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"        return selected_ports"},{"line_number":252,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_2ee694b1","line":249,"range":{"start_line":248,"start_character":20,"end_line":249,"end_character":71},"in_reply_to":"9fdfeff1_ab636019","updated":"2019-03-01 17:44:16.000000000","message":"If a port has 1 IP that matches an allocation, I use it. If the backend is using 2 IPs, and the admin created 1 port with the 2 IPs, then this is different than manila is used to doing in DHSS\u003dTrue, and my opinion here is that we should document that the user creates a port for each.\n\nI know I could just improve the above algorithm to consume 2 or more allocations if that was the case, but it adds additional complexity, and since we do port update, when adding to manila database we use the port[\u0027id\u0027], so we wouldn\u0027t be able to add those allocations. In other words, it would end up as an ugly workaround because of these limitations, better to keep things simple and clean, and advise the admin (through the docs) to use 1 port per IP.","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7fe22616934b551e642b8c65e4b185b217406f54","unresolved":false,"context_lines":[{"line_number":208,"context_line":"                pass"},{"line_number":209,"context_line":"            else:"},{"line_number":210,"context_line":"                msg \u003d _(\"There were existing conflicting manila network \""},{"line_number":211,"context_line":"                        \"allocations foudn while trying to manage share \""},{"line_number":212,"context_line":"                        \"server %s. Please cleanup share servers that are \""},{"line_number":213,"context_line":"                        \"in error state.\") % share_server[\u0027id\u0027]"},{"line_number":214,"context_line":"                raise exception.ManageShareServerError(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":22,"id":"9fdfeff1_9d033010","line":211,"range":{"start_line":211,"start_character":37,"end_line":211,"end_character":42},"updated":"2019-03-01 20:36:45.000000000","message":"found","commit_id":"b95b6657857460e68bedf79e21fc5287dc7cea48"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"75d6535ff77329fe6fbf299a260f2f5661cb4fc0","unresolved":false,"context_lines":[{"line_number":208,"context_line":"                pass"},{"line_number":209,"context_line":"            else:"},{"line_number":210,"context_line":"                msg \u003d _(\"There were existing conflicting manila network \""},{"line_number":211,"context_line":"                        \"allocations foudn while trying to manage share \""},{"line_number":212,"context_line":"                        \"server %s. Please cleanup share servers that are \""},{"line_number":213,"context_line":"                        \"in error state.\") % share_server[\u0027id\u0027]"},{"line_number":214,"context_line":"                raise exception.ManageShareServerError(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":22,"id":"9fdfeff1_1d3acec3","line":211,"range":{"start_line":211,"start_character":37,"end_line":211,"end_character":42},"in_reply_to":"9fdfeff1_9d033010","updated":"2019-03-03 21:11:17.000000000","message":"Done","commit_id":"b95b6657857460e68bedf79e21fc5287dc7cea48"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"4d0d5eeb421bbeb97cfdb44c3d36ba01f6d53651","unresolved":false,"context_lines":[{"line_number":210,"context_line":"                msg \u003d _(\"There were existing conflicting manila network \""},{"line_number":211,"context_line":"                        \"allocations found while trying to manage share \""},{"line_number":212,"context_line":"                        \"server %s. Please cleanup share servers that are \""},{"line_number":213,"context_line":"                        \"in error state.\") % share_server[\u0027id\u0027]"},{"line_number":214,"context_line":"                raise exception.ManageShareServerError(reason\u003dmsg)"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"            # If there are previously deleted allocations, we undelete them"}],"source_content_type":"text/x-python","patch_set":29,"id":"9fdfeff1_17fff3ab","line":213,"range":{"start_line":213,"start_character":45,"end_line":213,"end_character":63},"updated":"2019-03-05 00:57:28.000000000","message":"Still think this should be the existing share_server_id since it makes life easier for an admin to cleanup in case they forgot to:\n\n existing_port \u003d self.db.network_allocation_get(\n                                   context, selected_port[\u0027port\u0027][\u0027id\u0027], read_deleted\u003dFalse)\n\n\nLog existing_port[\u0027share_server_id\u0027] as the offending/conflicting share server.","commit_id":"976e8c7f034367d3ac9307a8c393b2114153cc4b"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"f72f301614064636833941ebb1ac141f660ed2b2","unresolved":false,"context_lines":[{"line_number":210,"context_line":"                msg \u003d _(\"There were existing conflicting manila network \""},{"line_number":211,"context_line":"                        \"allocations found while trying to manage share \""},{"line_number":212,"context_line":"                        \"server %s. Please cleanup share servers that are \""},{"line_number":213,"context_line":"                        \"in error state.\") % share_server[\u0027id\u0027]"},{"line_number":214,"context_line":"                raise exception.ManageShareServerError(reason\u003dmsg)"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"            # If there are previously deleted allocations, we undelete them"}],"source_content_type":"text/x-python","patch_set":29,"id":"9fdfeff1_2d718845","line":213,"range":{"start_line":213,"start_character":45,"end_line":213,"end_character":63},"in_reply_to":"9fdfeff1_17fff3ab","updated":"2019-03-05 02:27:49.000000000","message":"Done","commit_id":"976e8c7f034367d3ac9307a8c393b2114153cc4b"}],"manila/network/standalone_network_plugin.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a896869eafb7cc2ea678c6c1d150b7b1003d99fa","unresolved":false,"context_lines":[{"line_number":330,"context_line":"            share_network \u003d share_network or {}"},{"line_number":331,"context_line":"        self._save_network_info(context, share_network)"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"        remaining_allocations \u003d list(allocations)"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"        ips \u003d [netaddr.IPAddress(allocation) for allocation"},{"line_number":336,"context_line":"               in remaining_allocations]"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_e68d1f7c","line":333,"range":{"start_line":333,"start_character":8,"end_line":333,"end_character":29},"updated":"2019-03-01 04:45:40.000000000","message":"same comment as in the neutron network plugin... please clarify with comments/naming.","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"}],"manila/share/api.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7cb8ad7c590597f6195aa065478da3cfbad5e9ed","unresolved":false,"context_lines":[{"line_number":616,"context_line":"        share_server_id \u003d share_data.get(\u0027share_server_id\u0027)"},{"line_number":617,"context_line":""},{"line_number":618,"context_line":"        dhss \u003d share_type[\u0027extra_specs\u0027][\u0027driver_handles_share_servers\u0027]"},{"line_number":619,"context_line":"        dhss \u003d strutils.bool_from_string(dhss, strict\u003dTrue)"},{"line_number":620,"context_line":"        if dhss and not share_server_id:"},{"line_number":621,"context_line":"            msg \u003d _(\"Share Server ID parameter is required when managing a \""},{"line_number":622,"context_line":"                    \"share using a share type with driver_handles_share_server\""}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_2d40eda1","line":619,"range":{"start_line":619,"start_character":15,"end_line":619,"end_character":59},"updated":"2019-02-28 20:34:51.000000000","message":"We have a helper for this in manila/shares/share_types.py, it allows extra-specs of the form `\u003cis\u003e True` as well, see: parse_boolean_extra_spec","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"812bdc68610685d624a61099e3503c8031fa76a8","unresolved":false,"context_lines":[{"line_number":616,"context_line":"        share_server_id \u003d share_data.get(\u0027share_server_id\u0027)"},{"line_number":617,"context_line":""},{"line_number":618,"context_line":"        dhss \u003d share_type[\u0027extra_specs\u0027][\u0027driver_handles_share_servers\u0027]"},{"line_number":619,"context_line":"        dhss \u003d strutils.bool_from_string(dhss, strict\u003dTrue)"},{"line_number":620,"context_line":"        if dhss and not share_server_id:"},{"line_number":621,"context_line":"            msg \u003d _(\"Share Server ID parameter is required when managing a \""},{"line_number":622,"context_line":"                    \"share using a share type with driver_handles_share_server\""}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_5c108059","line":619,"range":{"start_line":619,"start_character":15,"end_line":619,"end_character":59},"in_reply_to":"9fdfeff1_2d40eda1","updated":"2019-02-28 22:55:50.000000000","message":"Done","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7cb8ad7c590597f6195aa065478da3cfbad5e9ed","unresolved":false,"context_lines":[{"line_number":619,"context_line":"        dhss \u003d strutils.bool_from_string(dhss, strict\u003dTrue)"},{"line_number":620,"context_line":"        if dhss and not share_server_id:"},{"line_number":621,"context_line":"            msg \u003d _(\"Share Server ID parameter is required when managing a \""},{"line_number":622,"context_line":"                    \"share using a share type with driver_handles_share_server\""},{"line_number":623,"context_line":"                    \" extra-spec enabled.\")"},{"line_number":624,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":625,"context_line":"        if not dhss and share_server_id:"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_ed1745a2","line":622,"range":{"start_line":622,"start_character":51,"end_line":622,"end_character":78},"updated":"2019-02-28 20:34:51.000000000","message":"driver_handles_share_servers","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"812bdc68610685d624a61099e3503c8031fa76a8","unresolved":false,"context_lines":[{"line_number":619,"context_line":"        dhss \u003d strutils.bool_from_string(dhss, strict\u003dTrue)"},{"line_number":620,"context_line":"        if dhss and not share_server_id:"},{"line_number":621,"context_line":"            msg \u003d _(\"Share Server ID parameter is required when managing a \""},{"line_number":622,"context_line":"                    \"share using a share type with driver_handles_share_server\""},{"line_number":623,"context_line":"                    \" extra-spec enabled.\")"},{"line_number":624,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":625,"context_line":"        if not dhss and share_server_id:"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_5c42c069","line":622,"range":{"start_line":622,"start_character":51,"end_line":622,"end_character":78},"in_reply_to":"9fdfeff1_ed1745a2","updated":"2019-02-28 22:55:50.000000000","message":"Done","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7cb8ad7c590597f6195aa065478da3cfbad5e9ed","unresolved":false,"context_lines":[{"line_number":620,"context_line":"        if dhss and not share_server_id:"},{"line_number":621,"context_line":"            msg \u003d _(\"Share Server ID parameter is required when managing a \""},{"line_number":622,"context_line":"                    \"share using a share type with driver_handles_share_server\""},{"line_number":623,"context_line":"                    \" extra-spec enabled.\")"},{"line_number":624,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":625,"context_line":"        if not dhss and share_server_id:"},{"line_number":626,"context_line":"            msg \u003d _(\"Share Server ID parameter is not expected when managing a\""}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_0d1e49ba","line":623,"range":{"start_line":623,"start_character":33,"end_line":623,"end_character":40},"updated":"2019-02-28 20:34:51.000000000","message":"set to True.","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"812bdc68610685d624a61099e3503c8031fa76a8","unresolved":false,"context_lines":[{"line_number":620,"context_line":"        if dhss and not share_server_id:"},{"line_number":621,"context_line":"            msg \u003d _(\"Share Server ID parameter is required when managing a \""},{"line_number":622,"context_line":"                    \"share using a share type with driver_handles_share_server\""},{"line_number":623,"context_line":"                    \" extra-spec enabled.\")"},{"line_number":624,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":625,"context_line":"        if not dhss and share_server_id:"},{"line_number":626,"context_line":"            msg \u003d _(\"Share Server ID parameter is not expected when managing a\""}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_7c45446e","line":623,"range":{"start_line":623,"start_character":33,"end_line":623,"end_character":40},"in_reply_to":"9fdfeff1_0d1e49ba","updated":"2019-02-28 22:55:50.000000000","message":"Done","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7cb8ad7c590597f6195aa065478da3cfbad5e9ed","unresolved":false,"context_lines":[{"line_number":625,"context_line":"        if not dhss and share_server_id:"},{"line_number":626,"context_line":"            msg \u003d _(\"Share Server ID parameter is not expected when managing a\""},{"line_number":627,"context_line":"                    \" share using a share type with \""},{"line_number":628,"context_line":"                    \"driver_handles_share_server extra-spec disabled.\")"},{"line_number":629,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":630,"context_line":""},{"line_number":631,"context_line":"        if share_server_id:"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_cd7921fc","line":628,"range":{"start_line":628,"start_character":21,"end_line":628,"end_character":48},"updated":"2019-02-28 20:34:51.000000000","message":"driver_handles_share_servers","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7cb8ad7c590597f6195aa065478da3cfbad5e9ed","unresolved":false,"context_lines":[{"line_number":625,"context_line":"        if not dhss and share_server_id:"},{"line_number":626,"context_line":"            msg \u003d _(\"Share Server ID parameter is not expected when managing a\""},{"line_number":627,"context_line":"                    \" share using a share type with \""},{"line_number":628,"context_line":"                    \"driver_handles_share_server extra-spec disabled.\")"},{"line_number":629,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":630,"context_line":""},{"line_number":631,"context_line":"        if share_server_id:"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_0d73a917","line":628,"range":{"start_line":628,"start_character":60,"end_line":628,"end_character":68},"updated":"2019-02-28 20:34:51.000000000","message":"set to False\n\n\nextra-spec value is \"enabled\" or \"disabled\" by meaning...","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"812bdc68610685d624a61099e3503c8031fa76a8","unresolved":false,"context_lines":[{"line_number":625,"context_line":"        if not dhss and share_server_id:"},{"line_number":626,"context_line":"            msg \u003d _(\"Share Server ID parameter is not expected when managing a\""},{"line_number":627,"context_line":"                    \" share using a share type with \""},{"line_number":628,"context_line":"                    \"driver_handles_share_server extra-spec disabled.\")"},{"line_number":629,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":630,"context_line":""},{"line_number":631,"context_line":"        if share_server_id:"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_3c5b3c54","line":628,"range":{"start_line":628,"start_character":60,"end_line":628,"end_character":68},"in_reply_to":"9fdfeff1_0d73a917","updated":"2019-02-28 22:55:50.000000000","message":"Done","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"812bdc68610685d624a61099e3503c8031fa76a8","unresolved":false,"context_lines":[{"line_number":625,"context_line":"        if not dhss and share_server_id:"},{"line_number":626,"context_line":"            msg \u003d _(\"Share Server ID parameter is not expected when managing a\""},{"line_number":627,"context_line":"                    \" share using a share type with \""},{"line_number":628,"context_line":"                    \"driver_handles_share_server extra-spec disabled.\")"},{"line_number":629,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":630,"context_line":""},{"line_number":631,"context_line":"        if share_server_id:"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_7fa45607","line":628,"range":{"start_line":628,"start_character":21,"end_line":628,"end_character":48},"in_reply_to":"9fdfeff1_cd7921fc","updated":"2019-02-28 22:55:50.000000000","message":"Done","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7cb8ad7c590597f6195aa065478da3cfbad5e9ed","unresolved":false,"context_lines":[{"line_number":626,"context_line":"            msg \u003d _(\"Share Server ID parameter is not expected when managing a\""},{"line_number":627,"context_line":"                    \" share using a share type with \""},{"line_number":628,"context_line":"                    \"driver_handles_share_server extra-spec disabled.\")"},{"line_number":629,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":630,"context_line":""},{"line_number":631,"context_line":"        if share_server_id:"},{"line_number":632,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_8d58f989","line":629,"range":{"start_line":629,"start_character":41,"end_line":629,"end_character":51},"updated":"2019-02-28 20:34:51.000000000","message":"See, you\u0027re processing your exception as a string here... that\u0027s why you don\u0027t need to cast it with six.text_type in the API files","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7cb8ad7c590597f6195aa065478da3cfbad5e9ed","unresolved":false,"context_lines":[{"line_number":1017,"context_line":""},{"line_number":1018,"context_line":"    def manage_share_server("},{"line_number":1019,"context_line":"            self, context, identifier, host, share_network, driver_opts):"},{"line_number":1020,"context_line":"        \"\"\"Manage a share server.\"\"\""},{"line_number":1021,"context_line":""},{"line_number":1022,"context_line":"        try:"},{"line_number":1023,"context_line":"            self.db.share_server_get(context, identifier)"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_edcae517","line":1020,"range":{"start_line":1020,"start_character":11,"end_line":1020,"end_character":33},"updated":"2019-02-28 20:34:51.000000000","message":"nit: docstring isn\u0027t useful","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7cb8ad7c590597f6195aa065478da3cfbad5e9ed","unresolved":false,"context_lines":[{"line_number":1020,"context_line":"        \"\"\"Manage a share server.\"\"\""},{"line_number":1021,"context_line":""},{"line_number":1022,"context_line":"        try:"},{"line_number":1023,"context_line":"            self.db.share_server_get(context, identifier)"},{"line_number":1024,"context_line":"        except exception.ShareServerNotFound:"},{"line_number":1025,"context_line":"            pass"},{"line_number":1026,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_2df54d51","line":1023,"range":{"start_line":1023,"start_character":46,"end_line":1023,"end_character":56},"updated":"2019-02-28 20:34:51.000000000","message":"So the identifier here is the share_server_id? I thought this ID was driver determined?\n\n  Identifier: a driver-specific share server identifier \n  required by the driver to manage the share server.\n\nfrom:\nhttp://specs.openstack.org/openstack/manila-specs/specs/stein/manage-unmanage-with-share-servers.html#proposed-change","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7fe22616934b551e642b8c65e4b185b217406f54","unresolved":false,"context_lines":[{"line_number":1020,"context_line":"        \"\"\"Manage a share server.\"\"\""},{"line_number":1021,"context_line":""},{"line_number":1022,"context_line":"        try:"},{"line_number":1023,"context_line":"            self.db.share_server_get(context, identifier)"},{"line_number":1024,"context_line":"        except exception.ShareServerNotFound:"},{"line_number":1025,"context_line":"            pass"},{"line_number":1026,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_d2aa02d2","line":1023,"range":{"start_line":1023,"start_character":46,"end_line":1023,"end_character":56},"in_reply_to":"9fdfeff1_24c8f5a5","updated":"2019-03-01 20:36:45.000000000","message":"We (Tom Barron, Rodrigo Barbieri and I) discussed this in a meeting and decided that we\u0027d introduce an identifier field that will be used for validation for preventing double manage. Adding locks over long running methods in the share manager is undesirable since locks don\u0027t prevent against deadlocks due to service failure during running that operation. \n\nIn a database migration, we\u0027ll initialize the value of the identifier to that of the share server ID... and we\u0027ll add de-duplication logic that also looks for (hyphenated and underscore delimited) share server ID in the identifier","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"812bdc68610685d624a61099e3503c8031fa76a8","unresolved":false,"context_lines":[{"line_number":1020,"context_line":"        \"\"\"Manage a share server.\"\"\""},{"line_number":1021,"context_line":""},{"line_number":1022,"context_line":"        try:"},{"line_number":1023,"context_line":"            self.db.share_server_get(context, identifier)"},{"line_number":1024,"context_line":"        except exception.ShareServerNotFound:"},{"line_number":1025,"context_line":"            pass"},{"line_number":1026,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_5f539216","line":1023,"range":{"start_line":1023,"start_character":46,"end_line":1023,"end_character":56},"in_reply_to":"9fdfeff1_2df54d51","updated":"2019-02-28 22:55:50.000000000","message":"No, this was actually the last discussion we had, that we agreed that every driver will need an identifier, regardless of what it is. The identifier CAN be a share server id, and in such cases, we can prevent a double-manage by using it.","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"71b2a715e73f35a4a7e872240bf631c47971acb0","unresolved":false,"context_lines":[{"line_number":1020,"context_line":"        \"\"\"Manage a share server.\"\"\""},{"line_number":1021,"context_line":""},{"line_number":1022,"context_line":"        try:"},{"line_number":1023,"context_line":"            self.db.share_server_get(context, identifier)"},{"line_number":1024,"context_line":"        except exception.ShareServerNotFound:"},{"line_number":1025,"context_line":"            pass"},{"line_number":1026,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_b23af594","line":1023,"range":{"start_line":1023,"start_character":46,"end_line":1023,"end_character":56},"in_reply_to":"9fdfeff1_5f539216","updated":"2019-02-28 23:27:00.000000000","message":"So, would\u0027t you need an \"identifier\" field in every share server with the initial value set to the ID of the share server? The driver can go ahead and modify this identifier for new/managed share servers. \n\n \n\nThe part I don\u0027t understand is, \n\n1) How do you expect the UUIDs assigned by manila be a known identifier on the backend? The backend can enforce any naming rules it finds necessary, for example, the container driver\u0027s identifier really is a docker container ID, which isn\u0027t a UUID assigned by manila. How does an administrator know what ID to use in manila to manage an external share server? For example, the Vserver name created by the NetApp driver is not exactly the UUID assigned by manila, it is a derivative... \n\n \n\n\n2) Say you already have a share server ID \u0027624ac424-9755-4167-8893-ae15927c72fa\u0027, and the administrator wants to manage it, your current logic prevents it, good.\n\nNow, say \u0027624ac424-9755-4167-8893-ae15927c72fa\u0027 was an external share server\u0027s identifier, the administrator manages that share server... Manila *WILL* create a new ID for this share server; and *hopefully* the driver renames the share server derived from the new ID manila assigns. \n\n \n\nThe administrator can try to manage with \u0027624ac424-9755-4167-8893-ae15927c72fa\u0027 again. If the driver has renamed the share server, it will fail the re-manage operation. If the driver didn\u0027t rename the server, this will cause the share server to be double managed. What if a driver can\u0027t rename its share servers easily?","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"8ed06ddd3dbfba65f1a729822f5faa05b9ba692e","unresolved":false,"context_lines":[{"line_number":1020,"context_line":"        \"\"\"Manage a share server.\"\"\""},{"line_number":1021,"context_line":""},{"line_number":1022,"context_line":"        try:"},{"line_number":1023,"context_line":"            self.db.share_server_get(context, identifier)"},{"line_number":1024,"context_line":"        except exception.ShareServerNotFound:"},{"line_number":1025,"context_line":"            pass"},{"line_number":1026,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_f5bce7b5","line":1023,"range":{"start_line":1023,"start_character":46,"end_line":1023,"end_character":56},"in_reply_to":"9fdfeff1_95e9db1a","updated":"2019-03-01 00:45:54.000000000","message":"\u003e If I was to create a new field \"identifier\" for the functionality to work without the above limitations, what would we do to fill this field w.r.t the existing share servers during the db migration?\n\nYou will fill it with share-server-id. ID and identifier being the same doesn\u0027t really matter for these existing servers. \n\n\u003e The container driver\u0027s identifier is \"manila_\u003cshare_server_uuid\u003e\". It can also be \"ganso_container\". Either way, it will be renamed to \"manila_\u003cnew_share_server_uuid\u003e\".\n\n \n\nThen what good is this check? You\u0027re stating that this should fail at the driver anyway? \n\n \n\nAs an administrator looking at the backend storage system\u0027s webpage/console to gather details to manage, I am going to assume that this identifier is the name of the share server; so this check should be against name of the share server rather than an UUID. \n\n \n\nWith the current design, besides the usability aspect, think of the concurrency issues. \n\n \n\nIn your analogy, if `ganso_container` is the name used to identify the external share server, I can send two requests to manila in parallel, and manila will create two records and pass it down to the share driver; Assume two concurrent driver threads that process this request. \n\n \n\nI\u0027m pointing out that we\u0027ve been down this road with managing shares and snapshots, and while we\u0027ve insulated ourselves in manila to some extent by checking against the provider location (in case of snapshots) and export location/s (in case of shares), cinder still suffers from this design flaw from not enforcing an API level check iirc.","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"f0a0eb95acb1a3c4052ab5b572837a6482acee44","unresolved":false,"context_lines":[{"line_number":1020,"context_line":"        \"\"\"Manage a share server.\"\"\""},{"line_number":1021,"context_line":""},{"line_number":1022,"context_line":"        try:"},{"line_number":1023,"context_line":"            self.db.share_server_get(context, identifier)"},{"line_number":1024,"context_line":"        except exception.ShareServerNotFound:"},{"line_number":1025,"context_line":"            pass"},{"line_number":1026,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_95e9db1a","line":1023,"range":{"start_line":1023,"start_character":46,"end_line":1023,"end_character":56},"in_reply_to":"9fdfeff1_b23af594","updated":"2019-03-01 00:23:42.000000000","message":"Goutham,\n\nThe container driver\u0027s identifier is \"manila_\u003cshare_server_uuid\u003e\". It can also be \"ganso_container\". Either way, it will be renamed to \"manila_\u003cnew_share_server_uuid\u003e\". Thus, it *COULD* prevent a double manage if the user uses \"\u003cnew_share_server_uuid\u003e\" as an identifier instead of \"manila_\u003cnew_share_server_uuid\u003e\". The implementations on both the container driver and NetApp driver accept both cases, and tries to manage with both. For example, if the identifier is \"foobar\" and there is no such container, the driver will try again with \"manila_foobar\".\n\nIf a driver cannot rename, or its share server\u0027s naming doesn\u0027t derive from the uuid, there is no way to validate double manage attempts at the API. The network plugin layer will end up validating it, since the allocations are already in manila\u0027s database, and it will not make sense to manage them again. This will prevent the request from reaching the driver\u0027s manage_server method, which could lead to some damage (like double managing a share server, leaving the old db entry and its dependent shares inconsistent).\n\nIf I was to create a new field \"identifier\" for the functionality to work without the above limitations, what would we do to fill this field w.r.t the existing share servers during the db migration?","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"75d6535ff77329fe6fbf299a260f2f5661cb4fc0","unresolved":false,"context_lines":[{"line_number":1020,"context_line":"        \"\"\"Manage a share server.\"\"\""},{"line_number":1021,"context_line":""},{"line_number":1022,"context_line":"        try:"},{"line_number":1023,"context_line":"            self.db.share_server_get(context, identifier)"},{"line_number":1024,"context_line":"        except exception.ShareServerNotFound:"},{"line_number":1025,"context_line":"            pass"},{"line_number":1026,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_fd3caac1","line":1023,"range":{"start_line":1023,"start_character":46,"end_line":1023,"end_character":56},"in_reply_to":"9fdfeff1_d2aa02d2","updated":"2019-03-03 21:11:17.000000000","message":"Done","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"78e5b0463190691d155fb74bfd1e6e5600afaba7","unresolved":false,"context_lines":[{"line_number":1020,"context_line":"        \"\"\"Manage a share server.\"\"\""},{"line_number":1021,"context_line":""},{"line_number":1022,"context_line":"        try:"},{"line_number":1023,"context_line":"            self.db.share_server_get(context, identifier)"},{"line_number":1024,"context_line":"        except exception.ShareServerNotFound:"},{"line_number":1025,"context_line":"            pass"},{"line_number":1026,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_24c8f5a5","line":1023,"range":{"start_line":1023,"start_character":46,"end_line":1023,"end_character":56},"in_reply_to":"9fdfeff1_f5bce7b5","updated":"2019-03-01 17:44:16.000000000","message":"If I just assign the share_server_id to the identifier field during the DB migration, what really prevents an admin from double managing that share server using \"os_\u003cuuid\u003e\" ? What good would this check be?\n\nI\u0027ve debated this over and over internally and haven\u0027t found a way to properly validate this, as we are already backed into a corner because we have the most important information, the identifier, in a structure that varies from driver to driver, the share server backend details.\n\nIn that situation, yes, that check above does not cover all cases, but not having it will just allow all requests with any identifier to just fail at the share manager. If you believe it is more important to be consistent here, I can just remove that check, as I\u0027ve been torn between having this check and not having it at all.\n\nRegarding the concurrency issues, I added a lock in share/manager based on the identifier, to prevent 2 or more requests from passing checks and failing midway through, possibly causing damage. With the lock, one will succeed, and the other will fail by not finding the share server anymore (if the driver does rename), thus not causing any damage.\n\nIf the driver does not rename, I think we will need to handle this case by case, for every vendor that submits a patch to support this feature, maybe we could have 2 identifiers depending on the backend, etc. As I said in the commit message, it is highly recommended to rename the resource.","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7cb8ad7c590597f6195aa065478da3cfbad5e9ed","unresolved":false,"context_lines":[{"line_number":1037,"context_line":""},{"line_number":1038,"context_line":"        server \u003d self.db.share_server_create(context, values)"},{"line_number":1039,"context_line":""},{"line_number":1040,"context_line":"        share_rpcapi.ShareAPI().manage_share_server("},{"line_number":1041,"context_line":"            context, server, identifier, driver_opts)"},{"line_number":1042,"context_line":""},{"line_number":1043,"context_line":"        return self.db.share_server_get(context, server[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_0da8891d","line":1040,"range":{"start_line":1040,"start_character":8,"end_line":1040,"end_character":31},"updated":"2019-02-28 20:34:51.000000000","message":"self.share_rpcapi","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"812bdc68610685d624a61099e3503c8031fa76a8","unresolved":false,"context_lines":[{"line_number":1037,"context_line":""},{"line_number":1038,"context_line":"        server \u003d self.db.share_server_create(context, values)"},{"line_number":1039,"context_line":""},{"line_number":1040,"context_line":"        share_rpcapi.ShareAPI().manage_share_server("},{"line_number":1041,"context_line":"            context, server, identifier, driver_opts)"},{"line_number":1042,"context_line":""},{"line_number":1043,"context_line":"        return self.db.share_server_get(context, server[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_9f76daa3","line":1040,"range":{"start_line":1040,"start_character":8,"end_line":1040,"end_character":31},"in_reply_to":"9fdfeff1_0da8891d","updated":"2019-02-28 22:55:50.000000000","message":"Done","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7cb8ad7c590597f6195aa065478da3cfbad5e9ed","unresolved":false,"context_lines":[{"line_number":1066,"context_line":"        share_server \u003d self.db.share_server_update("},{"line_number":1067,"context_line":"            context, share_server[\u0027id\u0027], update_data)"},{"line_number":1068,"context_line":""},{"line_number":1069,"context_line":"        share_rpcapi.ShareAPI().unmanage_share_server("},{"line_number":1070,"context_line":"            context, share_server)"},{"line_number":1071,"context_line":""},{"line_number":1072,"context_line":"    def create_snapshot(self, context, share, name, description,"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_6d5b5553","line":1069,"range":{"start_line":1069,"start_character":8,"end_line":1069,"end_character":31},"updated":"2019-02-28 20:34:51.000000000","message":"self.share_rpcapi","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"812bdc68610685d624a61099e3503c8031fa76a8","unresolved":false,"context_lines":[{"line_number":1066,"context_line":"        share_server \u003d self.db.share_server_update("},{"line_number":1067,"context_line":"            context, share_server[\u0027id\u0027], update_data)"},{"line_number":1068,"context_line":""},{"line_number":1069,"context_line":"        share_rpcapi.ShareAPI().unmanage_share_server("},{"line_number":1070,"context_line":"            context, share_server)"},{"line_number":1071,"context_line":""},{"line_number":1072,"context_line":"    def create_snapshot(self, context, share, name, description,"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_bf795e93","line":1069,"range":{"start_line":1069,"start_character":8,"end_line":1069,"end_character":31},"in_reply_to":"9fdfeff1_6d5b5553","updated":"2019-02-28 22:55:50.000000000","message":"Done","commit_id":"13c13192c00d4dff6b138851101f1a11fc503ac9"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"5776fc720d29d2f2507cf89c7a20a093ee44c0fc","unresolved":false,"context_lines":[{"line_number":641,"context_line":"            if share_server[\u0027status\u0027] !\u003d constants.STATUS_ACTIVE:"},{"line_number":642,"context_line":"                msg \u003d _(\"Share Server specified is not active.\")"},{"line_number":643,"context_line":"                raise exception.InvalidShareServer(message\u003dmsg)"},{"line_number":644,"context_line":"            share_data[\u0027share_network_id\u0027] \u003d share_server[\u0027share_network_id\u0027]"},{"line_number":645,"context_line":""},{"line_number":646,"context_line":"        share_data.update({"},{"line_number":647,"context_line":"            \u0027user_id\u0027: context.user_id,"}],"source_content_type":"text/x-python","patch_set":31,"id":"9fdfeff1_37fc6a0b","line":644,"range":{"start_line":644,"start_character":0,"end_line":644,"end_character":77},"updated":"2019-03-05 14:13:46.000000000","message":"Did we have managed shares with no share network value before you introduced this line in PS#26 ?","commit_id":"744a38bd3f8c9f1c41e66128cc98730eb29de838"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"c0afcca4f43cd6ab12415d54d56e39617844adfb","unresolved":false,"context_lines":[{"line_number":641,"context_line":"            if share_server[\u0027status\u0027] !\u003d constants.STATUS_ACTIVE:"},{"line_number":642,"context_line":"                msg \u003d _(\"Share Server specified is not active.\")"},{"line_number":643,"context_line":"                raise exception.InvalidShareServer(message\u003dmsg)"},{"line_number":644,"context_line":"            share_data[\u0027share_network_id\u0027] \u003d share_server[\u0027share_network_id\u0027]"},{"line_number":645,"context_line":""},{"line_number":646,"context_line":"        share_data.update({"},{"line_number":647,"context_line":"            \u0027user_id\u0027: context.user_id,"}],"source_content_type":"text/x-python","patch_set":31,"id":"9fdfeff1_c9f222e4","line":644,"range":{"start_line":644,"start_character":0,"end_line":644,"end_character":77},"in_reply_to":"9fdfeff1_37fc6a0b","updated":"2019-03-05 15:39:39.000000000","message":"yes. It didn\u0027t break anything immediately, but my team found cases where the share-server-list command caused the API to crash.","commit_id":"744a38bd3f8c9f1c41e66128cc98730eb29de838"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"534ea867f2b745844334de149107a6ac3b535126","unresolved":false,"context_lines":[{"line_number":641,"context_line":"            if share_server[\u0027status\u0027] !\u003d constants.STATUS_ACTIVE:"},{"line_number":642,"context_line":"                msg \u003d _(\"Share Server specified is not active.\")"},{"line_number":643,"context_line":"                raise exception.InvalidShareServer(message\u003dmsg)"},{"line_number":644,"context_line":"            share_data[\u0027share_network_id\u0027] \u003d share_server[\u0027share_network_id\u0027]"},{"line_number":645,"context_line":""},{"line_number":646,"context_line":"        share_data.update({"},{"line_number":647,"context_line":"            \u0027user_id\u0027: context.user_id,"}],"source_content_type":"text/x-python","patch_set":31,"id":"9fdfeff1_697d36b1","line":644,"range":{"start_line":644,"start_character":0,"end_line":644,"end_character":77},"in_reply_to":"9fdfeff1_c9f222e4","updated":"2019-03-05 15:57:40.000000000","message":"Thanks.","commit_id":"744a38bd3f8c9f1c41e66128cc98730eb29de838"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"5776fc720d29d2f2507cf89c7a20a093ee44c0fc","unresolved":false,"context_lines":[{"line_number":1050,"context_line":""},{"line_number":1051,"context_line":"        return self.db.share_server_get(context, server[\u0027id\u0027])"},{"line_number":1052,"context_line":""},{"line_number":1053,"context_line":"    def unmanage_share_server(self, context, share_server, force):"},{"line_number":1054,"context_line":"        \"\"\"Unmanage a share server.\"\"\""},{"line_number":1055,"context_line":""},{"line_number":1056,"context_line":"        shares \u003d self.db.share_instances_get_all_by_share_server("}],"source_content_type":"text/x-python","patch_set":31,"id":"9fdfeff1_cc8eb531","line":1053,"range":{"start_line":1053,"start_character":59,"end_line":1053,"end_character":64},"updated":"2019-03-05 14:13:46.000000000","message":"force\u003dFalse ?","commit_id":"744a38bd3f8c9f1c41e66128cc98730eb29de838"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"c0afcca4f43cd6ab12415d54d56e39617844adfb","unresolved":false,"context_lines":[{"line_number":1050,"context_line":""},{"line_number":1051,"context_line":"        return self.db.share_server_get(context, server[\u0027id\u0027])"},{"line_number":1052,"context_line":""},{"line_number":1053,"context_line":"    def unmanage_share_server(self, context, share_server, force):"},{"line_number":1054,"context_line":"        \"\"\"Unmanage a share server.\"\"\""},{"line_number":1055,"context_line":""},{"line_number":1056,"context_line":"        shares \u003d self.db.share_instances_get_all_by_share_server("}],"source_content_type":"text/x-python","patch_set":31,"id":"9fdfeff1_e9a7e6bb","line":1053,"range":{"start_line":1053,"start_character":59,"end_line":1053,"end_character":64},"in_reply_to":"9fdfeff1_cc8eb531","updated":"2019-03-05 15:39:39.000000000","message":"what is the argument for this to be a kwarg? I considered it when adding, but I didn\u0027t have a strong argument in favor of it, so I had decided to leave it as a required parameter, as it comes from the API, which will always have a value set to either True or False.","commit_id":"744a38bd3f8c9f1c41e66128cc98730eb29de838"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"534ea867f2b745844334de149107a6ac3b535126","unresolved":false,"context_lines":[{"line_number":1050,"context_line":""},{"line_number":1051,"context_line":"        return self.db.share_server_get(context, server[\u0027id\u0027])"},{"line_number":1052,"context_line":""},{"line_number":1053,"context_line":"    def unmanage_share_server(self, context, share_server, force):"},{"line_number":1054,"context_line":"        \"\"\"Unmanage a share server.\"\"\""},{"line_number":1055,"context_line":""},{"line_number":1056,"context_line":"        shares \u003d self.db.share_instances_get_all_by_share_server("}],"source_content_type":"text/x-python","patch_set":31,"id":"9fdfeff1_e9428668","line":1053,"range":{"start_line":1053,"start_character":59,"end_line":1053,"end_character":64},"in_reply_to":"9fdfeff1_e9a7e6bb","updated":"2019-03-05 15:57:40.000000000","message":"I prefer being able to see the default without having to look in another file and I\u0027d argue it makes the code more modular as well but I won\u0027t insist.","commit_id":"744a38bd3f8c9f1c41e66128cc98730eb29de838"}],"manila/share/driver.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a896869eafb7cc2ea678c6c1d150b7b1003d99fa","unresolved":false,"context_lines":[{"line_number":933,"context_line":""},{"line_number":934,"context_line":"        This method is invoked when the share is being managed with"},{"line_number":935,"context_line":"        a share type that has ``driver_handles_share_servers``"},{"line_number":936,"context_line":"        extra-spec disabled."},{"line_number":937,"context_line":""},{"line_number":938,"context_line":"        :param share: Share model"},{"line_number":939,"context_line":"        :param driver_options: Driver-specific options provided by admin."}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_c63a5b96","line":936,"range":{"start_line":936,"start_character":19,"end_line":936,"end_character":27},"updated":"2019-03-01 04:45:40.000000000","message":"set to False","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"78e5b0463190691d155fb74bfd1e6e5600afaba7","unresolved":false,"context_lines":[{"line_number":933,"context_line":""},{"line_number":934,"context_line":"        This method is invoked when the share is being managed with"},{"line_number":935,"context_line":"        a share type that has ``driver_handles_share_servers``"},{"line_number":936,"context_line":"        extra-spec disabled."},{"line_number":937,"context_line":""},{"line_number":938,"context_line":"        :param share: Share model"},{"line_number":939,"context_line":"        :param driver_options: Driver-specific options provided by admin."}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_7ff0c967","line":936,"range":{"start_line":936,"start_character":19,"end_line":936,"end_character":27},"in_reply_to":"9fdfeff1_c63a5b96","updated":"2019-03-01 17:44:16.000000000","message":"Done","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a896869eafb7cc2ea678c6c1d150b7b1003d99fa","unresolved":false,"context_lines":[{"line_number":960,"context_line":""},{"line_number":961,"context_line":"        This method is invoked when the share is being managed with"},{"line_number":962,"context_line":"        a share type that has ``driver_handles_share_servers``"},{"line_number":963,"context_line":"        extra-spec enabled."},{"line_number":964,"context_line":""},{"line_number":965,"context_line":"        :param share: Share model"},{"line_number":966,"context_line":"        :param driver_options: Driver-specific options provided by admin."}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_264b272b","line":963,"range":{"start_line":963,"start_character":19,"end_line":963,"end_character":26},"updated":"2019-03-01 04:45:40.000000000","message":"set to True","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"78e5b0463190691d155fb74bfd1e6e5600afaba7","unresolved":false,"context_lines":[{"line_number":960,"context_line":""},{"line_number":961,"context_line":"        This method is invoked when the share is being managed with"},{"line_number":962,"context_line":"        a share type that has ``driver_handles_share_servers``"},{"line_number":963,"context_line":"        extra-spec enabled."},{"line_number":964,"context_line":""},{"line_number":965,"context_line":"        :param share: Share model"},{"line_number":966,"context_line":"        :param driver_options: Driver-specific options provided by admin."}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_9ff32d73","line":963,"range":{"start_line":963,"start_character":19,"end_line":963,"end_character":26},"in_reply_to":"9fdfeff1_264b272b","updated":"2019-03-01 17:44:16.000000000","message":"Done","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a896869eafb7cc2ea678c6c1d150b7b1003d99fa","unresolved":false,"context_lines":[{"line_number":987,"context_line":"        a share type that has ``driver_handles_share_servers``"},{"line_number":988,"context_line":"        extra-spec disabled."},{"line_number":989,"context_line":"        \"\"\""},{"line_number":990,"context_line":""},{"line_number":991,"context_line":"    def unmanage_with_server(self, share, share_server\u003dNone):"},{"line_number":992,"context_line":"        \"\"\"Removes the specified share from Manila management."},{"line_number":993,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_c631fba3","line":990,"range":{"start_line":990,"start_character":0,"end_line":990,"end_character":0},"updated":"2019-03-01 04:45:40.000000000","message":"Strongly think we should raise NotImplementedError and implement unmanage as noops on all the drivers that implement manage today.","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"78e5b0463190691d155fb74bfd1e6e5600afaba7","unresolved":false,"context_lines":[{"line_number":987,"context_line":"        a share type that has ``driver_handles_share_servers``"},{"line_number":988,"context_line":"        extra-spec disabled."},{"line_number":989,"context_line":"        \"\"\""},{"line_number":990,"context_line":""},{"line_number":991,"context_line":"    def unmanage_with_server(self, share, share_server\u003dNone):"},{"line_number":992,"context_line":"        \"\"\"Removes the specified share from Manila management."},{"line_number":993,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_3fe6c1b1","line":990,"range":{"start_line":990,"start_character":0,"end_line":990,"end_character":0},"in_reply_to":"9fdfeff1_c631fba3","updated":"2019-03-01 17:44:16.000000000","message":"let\u0027s discuss","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a896869eafb7cc2ea678c6c1d150b7b1003d99fa","unresolved":false,"context_lines":[{"line_number":1004,"context_line":"        This method is invoked when the share is being unmanaged with"},{"line_number":1005,"context_line":"        a share type that has ``driver_handles_share_servers``"},{"line_number":1006,"context_line":"        extra-spec enabled."},{"line_number":1007,"context_line":"        \"\"\""},{"line_number":1008,"context_line":""},{"line_number":1009,"context_line":"    def manage_existing_snapshot(self, snapshot, driver_options):"},{"line_number":1010,"context_line":"        \"\"\"Brings an existing snapshot under Manila management."}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_86277363","line":1007,"range":{"start_line":1007,"start_character":0,"end_line":1007,"end_character":11},"updated":"2019-03-01 04:45:40.000000000","message":"raise NotImplementedError","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"78e5b0463190691d155fb74bfd1e6e5600afaba7","unresolved":false,"context_lines":[{"line_number":1004,"context_line":"        This method is invoked when the share is being unmanaged with"},{"line_number":1005,"context_line":"        a share type that has ``driver_handles_share_servers``"},{"line_number":1006,"context_line":"        extra-spec enabled."},{"line_number":1007,"context_line":"        \"\"\""},{"line_number":1008,"context_line":""},{"line_number":1009,"context_line":"    def manage_existing_snapshot(self, snapshot, driver_options):"},{"line_number":1010,"context_line":"        \"\"\"Brings an existing snapshot under Manila management."}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_ff035940","line":1007,"range":{"start_line":1007,"start_character":0,"end_line":1007,"end_character":11},"in_reply_to":"9fdfeff1_86277363","updated":"2019-03-01 17:44:16.000000000","message":"same as above","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a896869eafb7cc2ea678c6c1d150b7b1003d99fa","unresolved":false,"context_lines":[{"line_number":1015,"context_line":""},{"line_number":1016,"context_line":"        This method is invoked when the snapshot that is being managed"},{"line_number":1017,"context_line":"        belongs to a share that has its share type with"},{"line_number":1018,"context_line":"        ``driver_handles_share_servers`` extra-spec disabled."},{"line_number":1019,"context_line":""},{"line_number":1020,"context_line":"        :param snapshot: ShareSnapshotInstance model with ShareSnapshot data."},{"line_number":1021,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_461d0b0d","line":1018,"range":{"start_line":1018,"start_character":52,"end_line":1018,"end_character":60},"updated":"2019-03-01 04:45:40.000000000","message":"set to False","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"78e5b0463190691d155fb74bfd1e6e5600afaba7","unresolved":false,"context_lines":[{"line_number":1015,"context_line":""},{"line_number":1016,"context_line":"        This method is invoked when the snapshot that is being managed"},{"line_number":1017,"context_line":"        belongs to a share that has its share type with"},{"line_number":1018,"context_line":"        ``driver_handles_share_servers`` extra-spec disabled."},{"line_number":1019,"context_line":""},{"line_number":1020,"context_line":"        :param snapshot: ShareSnapshotInstance model with ShareSnapshot data."},{"line_number":1021,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_7f9529e3","line":1018,"range":{"start_line":1018,"start_character":52,"end_line":1018,"end_character":60},"in_reply_to":"9fdfeff1_461d0b0d","updated":"2019-03-01 17:44:16.000000000","message":"Done","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a896869eafb7cc2ea678c6c1d150b7b1003d99fa","unresolved":false,"context_lines":[{"line_number":1054,"context_line":""},{"line_number":1055,"context_line":"        This method is invoked when the snapshot that is being managed"},{"line_number":1056,"context_line":"        belongs to a share that has its share type with"},{"line_number":1057,"context_line":"        ``driver_handles_share_servers`` extra-spec enabled."},{"line_number":1058,"context_line":""},{"line_number":1059,"context_line":"        :param snapshot: ShareSnapshotInstance model with ShareSnapshot data."},{"line_number":1060,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_06138302","line":1057,"range":{"start_line":1057,"start_character":52,"end_line":1057,"end_character":59},"updated":"2019-03-01 04:45:40.000000000","message":"set to True","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"78e5b0463190691d155fb74bfd1e6e5600afaba7","unresolved":false,"context_lines":[{"line_number":1054,"context_line":""},{"line_number":1055,"context_line":"        This method is invoked when the snapshot that is being managed"},{"line_number":1056,"context_line":"        belongs to a share that has its share type with"},{"line_number":1057,"context_line":"        ``driver_handles_share_servers`` extra-spec enabled."},{"line_number":1058,"context_line":""},{"line_number":1059,"context_line":"        :param snapshot: ShareSnapshotInstance model with ShareSnapshot data."},{"line_number":1060,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_9f980d1b","line":1057,"range":{"start_line":1057,"start_character":52,"end_line":1057,"end_character":59},"in_reply_to":"9fdfeff1_06138302","updated":"2019-03-01 17:44:16.000000000","message":"Done","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a896869eafb7cc2ea678c6c1d150b7b1003d99fa","unresolved":false,"context_lines":[{"line_number":1119,"context_line":""},{"line_number":1120,"context_line":"        This method is invoked when the snapshot that is being unmanaged"},{"line_number":1121,"context_line":"        belongs to a share that has its share type with"},{"line_number":1122,"context_line":"        ``driver_handles_share_servers`` extra-spec enabled."},{"line_number":1123,"context_line":"        \"\"\""},{"line_number":1124,"context_line":""},{"line_number":1125,"context_line":"    def revert_to_snapshot(self, context, snapshot, share_access_rules,"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_26e7a714","line":1122,"range":{"start_line":1122,"start_character":52,"end_line":1122,"end_character":59},"updated":"2019-03-01 04:45:40.000000000","message":"set to True","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"78e5b0463190691d155fb74bfd1e6e5600afaba7","unresolved":false,"context_lines":[{"line_number":1119,"context_line":""},{"line_number":1120,"context_line":"        This method is invoked when the snapshot that is being unmanaged"},{"line_number":1121,"context_line":"        belongs to a share that has its share type with"},{"line_number":1122,"context_line":"        ``driver_handles_share_servers`` extra-spec enabled."},{"line_number":1123,"context_line":"        \"\"\""},{"line_number":1124,"context_line":""},{"line_number":1125,"context_line":"    def revert_to_snapshot(self, context, snapshot, share_access_rules,"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_3f9b2117","line":1122,"range":{"start_line":1122,"start_character":52,"end_line":1122,"end_character":59},"in_reply_to":"9fdfeff1_26e7a714","updated":"2019-03-01 17:44:16.000000000","message":"Done","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a896869eafb7cc2ea678c6c1d150b7b1003d99fa","unresolved":false,"context_lines":[{"line_number":1121,"context_line":"        belongs to a share that has its share type with"},{"line_number":1122,"context_line":"        ``driver_handles_share_servers`` extra-spec enabled."},{"line_number":1123,"context_line":"        \"\"\""},{"line_number":1124,"context_line":""},{"line_number":1125,"context_line":"    def revert_to_snapshot(self, context, snapshot, share_access_rules,"},{"line_number":1126,"context_line":"                           snapshot_access_rules, share_server\u003dNone):"},{"line_number":1127,"context_line":"        \"\"\"Reverts a share (in place) to the specified snapshot."}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_a6bcf7db","line":1124,"range":{"start_line":1124,"start_character":0,"end_line":1124,"end_character":0},"updated":"2019-03-01 04:45:40.000000000","message":"same comments for these methods, unmanaging snapshots is probably done less often in teh real world, but still, must make them really mean it if the driver doesn\u0027t support managing.","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a896869eafb7cc2ea678c6c1d150b7b1003d99fa","unresolved":false,"context_lines":[{"line_number":2718,"context_line":""},{"line_number":2719,"context_line":"        Example::"},{"line_number":2720,"context_line":""},{"line_number":2721,"context_line":"            {\u0027server_name\u0027: \u0027my_old_server\u0027}"},{"line_number":2722,"context_line":""},{"line_number":2723,"context_line":"        \"\"\""},{"line_number":2724,"context_line":"        raise NotImplementedError()"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_86b533ef","line":2721,"range":{"start_line":2721,"start_character":12,"end_line":2721,"end_character":44},"updated":"2019-03-01 04:45:40.000000000","message":"+ identifier to update in the database..","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"75d6535ff77329fe6fbf299a260f2f5661cb4fc0","unresolved":false,"context_lines":[{"line_number":2718,"context_line":""},{"line_number":2719,"context_line":"        Example::"},{"line_number":2720,"context_line":""},{"line_number":2721,"context_line":"            {\u0027server_name\u0027: \u0027my_old_server\u0027}"},{"line_number":2722,"context_line":""},{"line_number":2723,"context_line":"        \"\"\""},{"line_number":2724,"context_line":"        raise NotImplementedError()"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_5d585630","line":2721,"range":{"start_line":2721,"start_character":12,"end_line":2721,"end_character":44},"in_reply_to":"9fdfeff1_32426e11","updated":"2019-03-03 21:11:17.000000000","message":"Done","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"75d6535ff77329fe6fbf299a260f2f5661cb4fc0","unresolved":false,"context_lines":[{"line_number":2718,"context_line":""},{"line_number":2719,"context_line":"        Example::"},{"line_number":2720,"context_line":""},{"line_number":2721,"context_line":"            {\u0027server_name\u0027: \u0027my_old_server\u0027}"},{"line_number":2722,"context_line":""},{"line_number":2723,"context_line":"        \"\"\""},{"line_number":2724,"context_line":"        raise NotImplementedError()"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_3d531219","line":2721,"range":{"start_line":2721,"start_character":12,"end_line":2721,"end_character":44},"in_reply_to":"9fdfeff1_86b533ef","updated":"2019-03-03 21:11:17.000000000","message":"Done","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7fe22616934b551e642b8c65e4b185b217406f54","unresolved":false,"context_lines":[{"line_number":2718,"context_line":""},{"line_number":2719,"context_line":"        Example::"},{"line_number":2720,"context_line":""},{"line_number":2721,"context_line":"            {\u0027server_name\u0027: \u0027my_old_server\u0027}"},{"line_number":2722,"context_line":""},{"line_number":2723,"context_line":"        \"\"\""},{"line_number":2724,"context_line":"        raise NotImplementedError()"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_32426e11","line":2721,"range":{"start_line":2721,"start_character":12,"end_line":2721,"end_character":44},"in_reply_to":"9fdfeff1_86b533ef","updated":"2019-03-01 20:36:45.000000000","message":"^^","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"}],"manila/share/drivers/hitachi/hnas/driver.py":[{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"7711e0d86072641cd8d2d8da7dbe48e19fe19a84","unresolved":false,"context_lines":[{"line_number":1307,"context_line":"        :param snapshot: snapshot that will be managed."},{"line_number":1308,"context_line":"        :param driver_options: expects only one key \u0027size\u0027. It must be"},{"line_number":1309,"context_line":"            provided in order to manage a snapshot."},{"line_number":1310,"context_line":"        :param share_server: Data structure with share server information."},{"line_number":1311,"context_line":"            Not used by this driver."},{"line_number":1312,"context_line":"        :returns: Returns a dict with size of snapshot managed"},{"line_number":1313,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_47dfd739","line":1310,"updated":"2019-02-08 17:25:51.000000000","message":"(屮ಠ益ಠ)屮","commit_id":"fda3aeac424f07b93acf82d1ad9479322c0d1bbe"}],"manila/share/manager.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a896869eafb7cc2ea678c6c1d150b7b1003d99fa","unresolved":false,"context_lines":[{"line_number":2553,"context_line":"        dhss \u003d self.driver.driver_handles_share_servers"},{"line_number":2554,"context_line":""},{"line_number":2555,"context_line":"        try:"},{"line_number":2556,"context_line":"            if dhss:"},{"line_number":2557,"context_line":"                share_server \u003d self._get_share_server(context, share_instance)"},{"line_number":2558,"context_line":"                self.driver.unmanage_with_server(share_instance, share_server)"},{"line_number":2559,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_35f58f83","line":2556,"range":{"start_line":2556,"start_character":15,"end_line":2556,"end_character":19},"updated":"2019-03-01 04:45:40.000000000","message":"nit: like above, `if dhss is True`?","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"78e5b0463190691d155fb74bfd1e6e5600afaba7","unresolved":false,"context_lines":[{"line_number":2553,"context_line":"        dhss \u003d self.driver.driver_handles_share_servers"},{"line_number":2554,"context_line":""},{"line_number":2555,"context_line":"        try:"},{"line_number":2556,"context_line":"            if dhss:"},{"line_number":2557,"context_line":"                share_server \u003d self._get_share_server(context, share_instance)"},{"line_number":2558,"context_line":"                self.driver.unmanage_with_server(share_instance, share_server)"},{"line_number":2559,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_d96d552f","line":2556,"range":{"start_line":2556,"start_character":15,"end_line":2556,"end_character":19},"in_reply_to":"9fdfeff1_35f58f83","updated":"2019-03-01 17:44:16.000000000","message":"Done","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a896869eafb7cc2ea678c6c1d150b7b1003d99fa","unresolved":false,"context_lines":[{"line_number":2555,"context_line":"        try:"},{"line_number":2556,"context_line":"            if dhss:"},{"line_number":2557,"context_line":"                share_server \u003d self._get_share_server(context, share_instance)"},{"line_number":2558,"context_line":"                self.driver.unmanage_with_server(share_instance, share_server)"},{"line_number":2559,"context_line":"            else:"},{"line_number":2560,"context_line":"                self.driver.unmanage(share_instance)"},{"line_number":2561,"context_line":""},{"line_number":2562,"context_line":"        except exception.InvalidShare as e:"},{"line_number":2563,"context_line":"            share_manage_set_error_status("}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_46f42bcf","line":2560,"range":{"start_line":2558,"start_character":0,"end_line":2560,"end_character":52},"updated":"2019-03-01 04:45:40.000000000","message":"I will echo Tom\u0027s sentiments from a previous patchiest. I know the behavior was weird, where the base driver just allows unmanaging a share by the virtue of the backend driver not implementing it at all!\n\n \n\nThis will really let some admins shoot themselves in the foot. I think we can fix this really by making unmanage fail if manage isn\u0027t implemented. We can let them *force* the unmanage operation by specifying a force argument... however, it feels really wrong to let them make a mistake and repent without recourse because some share drivers don\u0027t implement managing shares (or share servers, see below)","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"78e5b0463190691d155fb74bfd1e6e5600afaba7","unresolved":false,"context_lines":[{"line_number":2555,"context_line":"        try:"},{"line_number":2556,"context_line":"            if dhss:"},{"line_number":2557,"context_line":"                share_server \u003d self._get_share_server(context, share_instance)"},{"line_number":2558,"context_line":"                self.driver.unmanage_with_server(share_instance, share_server)"},{"line_number":2559,"context_line":"            else:"},{"line_number":2560,"context_line":"                self.driver.unmanage(share_instance)"},{"line_number":2561,"context_line":""},{"line_number":2562,"context_line":"        except exception.InvalidShare as e:"},{"line_number":2563,"context_line":"            share_manage_set_error_status("}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_7428f084","line":2560,"range":{"start_line":2558,"start_character":0,"end_line":2560,"end_character":52},"in_reply_to":"9fdfeff1_46f42bcf","updated":"2019-03-01 17:44:16.000000000","message":"Those are not really Tom\u0027s sentiments IIRC. His concern was regarding a driver that already implements manage in DHSS\u003dFalse having the method manage invoked in DHSS\u003dTrue and thus have improper behavior, as support by it has not been implemented.\n\nI partially disagree with your comment. For a safe approach to prevent admin mistakes your concern is valid, but by definition, unmanage operations are harmless, are admin-only, and this, along with several other APIs that are admin-only, shouldn\u0027t have mechanisms to protect admins from themselves.\n\nIf we can get agreement that we really want to change this, and that it makes sense to change this as part of this feature implementation, then ok. Regarding this, I feel we are slightly going out of the scope of the spec, as we are addressing a problem that was already there and unrelated to the main change proposed.","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7fe22616934b551e642b8c65e4b185b217406f54","unresolved":false,"context_lines":[{"line_number":2555,"context_line":"        try:"},{"line_number":2556,"context_line":"            if dhss:"},{"line_number":2557,"context_line":"                share_server \u003d self._get_share_server(context, share_instance)"},{"line_number":2558,"context_line":"                self.driver.unmanage_with_server(share_instance, share_server)"},{"line_number":2559,"context_line":"            else:"},{"line_number":2560,"context_line":"                self.driver.unmanage(share_instance)"},{"line_number":2561,"context_line":""},{"line_number":2562,"context_line":"        except exception.InvalidShare as e:"},{"line_number":2563,"context_line":"            share_manage_set_error_status("}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_8fe0d599","line":2560,"range":{"start_line":2558,"start_character":0,"end_line":2560,"end_character":52},"in_reply_to":"9fdfeff1_7428f084","updated":"2019-03-01 20:36:45.000000000","message":"We (Tom Barron, Rodrigo Barbieri and I) conferred about this in a meeting, and felt that we should raise a bug to:\n\n- Implement unmanage, unmanage_with_share_server, unmanage_snapshot and unmanage_snapshot_with_server to raise NotImplementedError \n- Add a \"force\" flag to these unmanage APIs from a new micro version... and allow unmanaging only if the force flag is set in the API request. \n\nRodrigo agreed to add a \"force\" flag to the unmanage API.","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"75d6535ff77329fe6fbf299a260f2f5661cb4fc0","unresolved":false,"context_lines":[{"line_number":2555,"context_line":"        try:"},{"line_number":2556,"context_line":"            if dhss:"},{"line_number":2557,"context_line":"                share_server \u003d self._get_share_server(context, share_instance)"},{"line_number":2558,"context_line":"                self.driver.unmanage_with_server(share_instance, share_server)"},{"line_number":2559,"context_line":"            else:"},{"line_number":2560,"context_line":"                self.driver.unmanage(share_instance)"},{"line_number":2561,"context_line":""},{"line_number":2562,"context_line":"        except exception.InvalidShare as e:"},{"line_number":2563,"context_line":"            share_manage_set_error_status("}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_dd2e868b","line":2560,"range":{"start_line":2558,"start_character":0,"end_line":2560,"end_character":52},"in_reply_to":"9fdfeff1_8fe0d599","updated":"2019-03-03 21:11:17.000000000","message":"Done","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a896869eafb7cc2ea678c6c1d150b7b1003d99fa","unresolved":false,"context_lines":[{"line_number":2598,"context_line":""},{"line_number":2599,"context_line":"        self.db.share_instance_delete(context, share_instance[\u0027id\u0027])"},{"line_number":2600,"context_line":""},{"line_number":2601,"context_line":"        if share_server and share_server[\u0027is_auto_deletable\u0027]:"},{"line_number":2602,"context_line":"            self.db.share_server_update(context, share_server[\u0027id\u0027],"},{"line_number":2603,"context_line":"                                        {\u0027is_auto_deletable\u0027: False})"},{"line_number":2604,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_75347749","line":2601,"range":{"start_line":2601,"start_character":0,"end_line":2601,"end_character":62},"updated":"2019-03-01 04:45:40.000000000","message":"Can you add a note here about why this is being done?","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"78e5b0463190691d155fb74bfd1e6e5600afaba7","unresolved":false,"context_lines":[{"line_number":2598,"context_line":""},{"line_number":2599,"context_line":"        self.db.share_instance_delete(context, share_instance[\u0027id\u0027])"},{"line_number":2600,"context_line":""},{"line_number":2601,"context_line":"        if share_server and share_server[\u0027is_auto_deletable\u0027]:"},{"line_number":2602,"context_line":"            self.db.share_server_update(context, share_server[\u0027id\u0027],"},{"line_number":2603,"context_line":"                                        {\u0027is_auto_deletable\u0027: False})"},{"line_number":2604,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_9450f40b","line":2601,"range":{"start_line":2601,"start_character":0,"end_line":2601,"end_character":62},"in_reply_to":"9fdfeff1_75347749","updated":"2019-03-01 17:44:16.000000000","message":"Done","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a896869eafb7cc2ea678c6c1d150b7b1003d99fa","unresolved":false,"context_lines":[{"line_number":2674,"context_line":"    @utils.require_driver_initialized"},{"line_number":2675,"context_line":"    def manage_share_server(self, context, share_server_id, identifier,"},{"line_number":2676,"context_line":"                            driver_opts):"},{"line_number":2677,"context_line":"        context \u003d context.elevated()"},{"line_number":2678,"context_line":"        server \u003d self.db.share_server_get(context, share_server_id)"},{"line_number":2679,"context_line":""},{"line_number":2680,"context_line":"        share_network \u003d self.db.share_network_get("}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_95955be6","line":2677,"range":{"start_line":2677,"start_character":26,"end_line":2677,"end_character":34},"updated":"2019-03-01 04:45:40.000000000","message":"Any specific reason for this?","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"cfc88fafb8e6fd43db16ad6c3d23edd331a827a6","unresolved":false,"context_lines":[{"line_number":2674,"context_line":"    @utils.require_driver_initialized"},{"line_number":2675,"context_line":"    def manage_share_server(self, context, share_server_id, identifier,"},{"line_number":2676,"context_line":"                            driver_opts):"},{"line_number":2677,"context_line":"        context \u003d context.elevated()"},{"line_number":2678,"context_line":"        server \u003d self.db.share_server_get(context, share_server_id)"},{"line_number":2679,"context_line":""},{"line_number":2680,"context_line":"        share_network \u003d self.db.share_network_get("}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_1d772e3e","line":2677,"range":{"start_line":2677,"start_character":26,"end_line":2677,"end_character":34},"in_reply_to":"9fdfeff1_0f9b8517","updated":"2019-03-03 21:21:24.000000000","message":"Done","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7fe22616934b551e642b8c65e4b185b217406f54","unresolved":false,"context_lines":[{"line_number":2674,"context_line":"    @utils.require_driver_initialized"},{"line_number":2675,"context_line":"    def manage_share_server(self, context, share_server_id, identifier,"},{"line_number":2676,"context_line":"                            driver_opts):"},{"line_number":2677,"context_line":"        context \u003d context.elevated()"},{"line_number":2678,"context_line":"        server \u003d self.db.share_server_get(context, share_server_id)"},{"line_number":2679,"context_line":""},{"line_number":2680,"context_line":"        share_network \u003d self.db.share_network_get("}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_0f9b8517","line":2677,"range":{"start_line":2677,"start_character":26,"end_line":2677,"end_character":34},"in_reply_to":"9fdfeff1_54560c07","updated":"2019-03-01 20:36:45.000000000","message":"The request context policy check has been done in the API... why do we want to elevate the request context here?\n\nWhat if someone wants a different role to be able to perform this API action? We shouldn\u0027t elevate context unnecessarily. \n\nI don\u0027t know what the rationale behind adding it to manage and unmanage is, I would test without elevating context and seeing if that is a problem","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"78e5b0463190691d155fb74bfd1e6e5600afaba7","unresolved":false,"context_lines":[{"line_number":2674,"context_line":"    @utils.require_driver_initialized"},{"line_number":2675,"context_line":"    def manage_share_server(self, context, share_server_id, identifier,"},{"line_number":2676,"context_line":"                            driver_opts):"},{"line_number":2677,"context_line":"        context \u003d context.elevated()"},{"line_number":2678,"context_line":"        server \u003d self.db.share_server_get(context, share_server_id)"},{"line_number":2679,"context_line":""},{"line_number":2680,"context_line":"        share_network \u003d self.db.share_network_get("}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_54560c07","line":2677,"range":{"start_line":2677,"start_character":26,"end_line":2677,"end_character":34},"in_reply_to":"9fdfeff1_95955be6","updated":"2019-03-01 17:44:16.000000000","message":"admin APIs need elevated context. See manage and unmanage methods.","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a896869eafb7cc2ea678c6c1d150b7b1003d99fa","unresolved":false,"context_lines":[{"line_number":2676,"context_line":"                            driver_opts):"},{"line_number":2677,"context_line":"        context \u003d context.elevated()"},{"line_number":2678,"context_line":"        server \u003d self.db.share_server_get(context, share_server_id)"},{"line_number":2679,"context_line":""},{"line_number":2680,"context_line":"        share_network \u003d self.db.share_network_get("},{"line_number":2681,"context_line":"            context, server[\u0027share_network_id\u0027])"},{"line_number":2682,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_f03155ee","line":2679,"range":{"start_line":2679,"start_character":0,"end_line":2679,"end_character":0},"updated":"2019-03-01 04:45:40.000000000","message":"Since there is no scheduler interaction to validate anything, shouldn\u0027t you check here if the driver is dhss\u003dTrue and bail out if it isn\u0027t?","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"78e5b0463190691d155fb74bfd1e6e5600afaba7","unresolved":false,"context_lines":[{"line_number":2676,"context_line":"                            driver_opts):"},{"line_number":2677,"context_line":"        context \u003d context.elevated()"},{"line_number":2678,"context_line":"        server \u003d self.db.share_server_get(context, share_server_id)"},{"line_number":2679,"context_line":""},{"line_number":2680,"context_line":"        share_network \u003d self.db.share_network_get("},{"line_number":2681,"context_line":"            context, server[\u0027share_network_id\u0027])"},{"line_number":2682,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_74b8f0c6","line":2679,"range":{"start_line":2679,"start_character":0,"end_line":2679,"end_character":0},"in_reply_to":"9fdfeff1_f03155ee","updated":"2019-03-01 17:44:16.000000000","message":"Done","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a896869eafb7cc2ea678c6c1d150b7b1003d99fa","unresolved":false,"context_lines":[{"line_number":2684,"context_line":""},{"line_number":2685,"context_line":"            number_allocations \u003d self.driver.get_network_allocations_number()"},{"line_number":2686,"context_line":""},{"line_number":2687,"context_line":"            if number_allocations \u003e 0:"},{"line_number":2688,"context_line":""},{"line_number":2689,"context_line":"                remaining_allocations \u003d ("},{"line_number":2690,"context_line":"                    self.driver.get_share_server_network_info("}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_b04d0d73","line":2687,"range":{"start_line":2687,"start_character":0,"end_line":2687,"end_character":38},"updated":"2019-03-01 04:45:40.000000000","message":"If dhss\u003dTrue, do you ever expect this to be 0 or lesser?","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"78e5b0463190691d155fb74bfd1e6e5600afaba7","unresolved":false,"context_lines":[{"line_number":2684,"context_line":""},{"line_number":2685,"context_line":"            number_allocations \u003d self.driver.get_network_allocations_number()"},{"line_number":2686,"context_line":""},{"line_number":2687,"context_line":"            if number_allocations \u003e 0:"},{"line_number":2688,"context_line":""},{"line_number":2689,"context_line":"                remaining_allocations \u003d ("},{"line_number":2690,"context_line":"                    self.driver.get_share_server_network_info("}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_94bb14c2","line":2687,"range":{"start_line":2687,"start_character":0,"end_line":2687,"end_character":38},"in_reply_to":"9fdfeff1_b04d0d73","updated":"2019-03-01 17:44:16.000000000","message":"generic driver has 0. In that case, no allocationss need to be managed","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a896869eafb7cc2ea678c6c1d150b7b1003d99fa","unresolved":false,"context_lines":[{"line_number":2686,"context_line":""},{"line_number":2687,"context_line":"            if number_allocations \u003e 0:"},{"line_number":2688,"context_line":""},{"line_number":2689,"context_line":"                remaining_allocations \u003d ("},{"line_number":2690,"context_line":"                    self.driver.get_share_server_network_info("},{"line_number":2691,"context_line":"                        context, server, identifier, driver_opts))"},{"line_number":2692,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_30411d3a","line":2689,"range":{"start_line":2689,"start_character":16,"end_line":2689,"end_character":37},"updated":"2019-03-01 04:45:40.000000000","message":"confusing naming, shouldn\u0027t this be:\n\n ip_addresses \n\nor something like that?","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"78e5b0463190691d155fb74bfd1e6e5600afaba7","unresolved":false,"context_lines":[{"line_number":2686,"context_line":""},{"line_number":2687,"context_line":"            if number_allocations \u003e 0:"},{"line_number":2688,"context_line":""},{"line_number":2689,"context_line":"                remaining_allocations \u003d ("},{"line_number":2690,"context_line":"                    self.driver.get_share_server_network_info("},{"line_number":2691,"context_line":"                        context, server, identifier, driver_opts))"},{"line_number":2692,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_d4d19cf9","line":2689,"range":{"start_line":2689,"start_character":16,"end_line":2689,"end_character":37},"in_reply_to":"9fdfeff1_30411d3a","updated":"2019-03-01 17:44:16.000000000","message":"those are allocations that still need to be validated","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a896869eafb7cc2ea678c6c1d150b7b1003d99fa","unresolved":false,"context_lines":[{"line_number":2690,"context_line":"                    self.driver.get_share_server_network_info("},{"line_number":2691,"context_line":"                        context, server, identifier, driver_opts))"},{"line_number":2692,"context_line":""},{"line_number":2693,"context_line":"                if len(remaining_allocations) \u003e 0:"},{"line_number":2694,"context_line":""},{"line_number":2695,"context_line":"                    if self.driver.admin_network_api:"},{"line_number":2696,"context_line":"                        remaining_allocations \u003d ("}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_90b569ef","line":2693,"range":{"start_line":2693,"start_character":19,"end_line":2693,"end_character":49},"updated":"2019-03-01 04:45:40.000000000","message":"Shouldn\u0027t this check be against the network_allocations_number obtained above, instead of 0?\n\nI\u0027m unable to understand this portion, and below..","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"78e5b0463190691d155fb74bfd1e6e5600afaba7","unresolved":false,"context_lines":[{"line_number":2690,"context_line":"                    self.driver.get_share_server_network_info("},{"line_number":2691,"context_line":"                        context, server, identifier, driver_opts))"},{"line_number":2692,"context_line":""},{"line_number":2693,"context_line":"                if len(remaining_allocations) \u003e 0:"},{"line_number":2694,"context_line":""},{"line_number":2695,"context_line":"                    if self.driver.admin_network_api:"},{"line_number":2696,"context_line":"                        remaining_allocations \u003d ("}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_54828cc8","line":2693,"range":{"start_line":2693,"start_character":19,"end_line":2693,"end_character":49},"in_reply_to":"9fdfeff1_90b569ef","updated":"2019-03-01 17:44:16.000000000","message":"all allocations returned by the driver should be managed. The number of elements in this list decreases by each call of \"manage_network_allocations\"","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a896869eafb7cc2ea678c6c1d150b7b1003d99fa","unresolved":false,"context_lines":[{"line_number":2693,"context_line":"                if len(remaining_allocations) \u003e 0:"},{"line_number":2694,"context_line":""},{"line_number":2695,"context_line":"                    if self.driver.admin_network_api:"},{"line_number":2696,"context_line":"                        remaining_allocations \u003d ("},{"line_number":2697,"context_line":"                            self.driver.admin_network_api."},{"line_number":2698,"context_line":"                            manage_network_allocations("},{"line_number":2699,"context_line":"                                context, remaining_allocations, server))"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_0bf5cc50","line":2696,"range":{"start_line":2696,"start_character":24,"end_line":2696,"end_character":45},"updated":"2019-03-01 04:45:40.000000000","message":"unconsumed_ip_addresses or unmatched_ip_addresses or remaining_ip_addresses makes more sense... because these aren\u0027t the same as port or \"network_allocations\"","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"78e5b0463190691d155fb74bfd1e6e5600afaba7","unresolved":false,"context_lines":[{"line_number":2693,"context_line":"                if len(remaining_allocations) \u003e 0:"},{"line_number":2694,"context_line":""},{"line_number":2695,"context_line":"                    if self.driver.admin_network_api:"},{"line_number":2696,"context_line":"                        remaining_allocations \u003d ("},{"line_number":2697,"context_line":"                            self.driver.admin_network_api."},{"line_number":2698,"context_line":"                            manage_network_allocations("},{"line_number":2699,"context_line":"                                context, remaining_allocations, server))"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_34cd882f","line":2696,"range":{"start_line":2696,"start_character":24,"end_line":2696,"end_character":45},"in_reply_to":"9fdfeff1_0bf5cc50","updated":"2019-03-01 17:44:16.000000000","message":"not really, I added some comments in the code to clarify","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a896869eafb7cc2ea678c6c1d150b7b1003d99fa","unresolved":false,"context_lines":[{"line_number":2698,"context_line":"                            manage_network_allocations("},{"line_number":2699,"context_line":"                                context, remaining_allocations, server))"},{"line_number":2700,"context_line":""},{"line_number":2701,"context_line":"                    remaining_allocations \u003d ("},{"line_number":2702,"context_line":"                        self.driver.network_api."},{"line_number":2703,"context_line":"                        manage_network_allocations("},{"line_number":2704,"context_line":"                            context, remaining_allocations, server,"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_6b9b3816","line":2701,"range":{"start_line":2701,"start_character":20,"end_line":2701,"end_character":41},"updated":"2019-03-01 04:45:40.000000000","message":"same","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"78e5b0463190691d155fb74bfd1e6e5600afaba7","unresolved":false,"context_lines":[{"line_number":2698,"context_line":"                            manage_network_allocations("},{"line_number":2699,"context_line":"                                context, remaining_allocations, server))"},{"line_number":2700,"context_line":""},{"line_number":2701,"context_line":"                    remaining_allocations \u003d ("},{"line_number":2702,"context_line":"                        self.driver.network_api."},{"line_number":2703,"context_line":"                        manage_network_allocations("},{"line_number":2704,"context_line":"                            context, remaining_allocations, server,"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_54d04cc8","line":2701,"range":{"start_line":2701,"start_character":20,"end_line":2701,"end_character":41},"in_reply_to":"9fdfeff1_6b9b3816","updated":"2019-03-01 17:44:16.000000000","message":"see new comments in the code","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a896869eafb7cc2ea678c6c1d150b7b1003d99fa","unresolved":false,"context_lines":[{"line_number":2704,"context_line":"                            context, remaining_allocations, server,"},{"line_number":2705,"context_line":"                            share_network))"},{"line_number":2706,"context_line":""},{"line_number":2707,"context_line":"                    if len(remaining_allocations) \u003e 0:"},{"line_number":2708,"context_line":"                        msg \u003d (\"Failed to manage all allocations. Allocations \""},{"line_number":2709,"context_line":"                               \"%s were not managed.\" % six.text_type("},{"line_number":2710,"context_line":"                                   remaining_allocations))"},{"line_number":2711,"context_line":"                        raise exception.ManageShareServerError(reason\u003dmsg)"},{"line_number":2712,"context_line":""},{"line_number":2713,"context_line":"                else:"},{"line_number":2714,"context_line":"                    msg \u003d (\"Driver did not return required network allocations\""}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_abbe0062","line":2711,"range":{"start_line":2707,"start_character":0,"end_line":2711,"end_character":74},"updated":"2019-03-01 04:45:40.000000000","message":"Why is this an error? Why can\u0027t the Share Server be connected to something other than OpenStack (Neutron or standalone) network? This happens in many cases... On ONTAP, it\u0027s best practice to create an admin only network for mirroring and such... So, why bother erring out if there are IPs that belong elsewhere?\n\n\nThinking of a container or a VM that might have multiple IP addresses on it, only a few of which are really interesting to us.. How can we expect a driver to know which ones are interesting, especially if they aren\u0027t setup by the driver itself?\n\n\nI think you should log any unconsumed IPs though, and ensure the number of IPs matching the number claimed(network_allocations_number + admin_network_allocations_number) have matching ports...","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"78e5b0463190691d155fb74bfd1e6e5600afaba7","unresolved":false,"context_lines":[{"line_number":2704,"context_line":"                            context, remaining_allocations, server,"},{"line_number":2705,"context_line":"                            share_network))"},{"line_number":2706,"context_line":""},{"line_number":2707,"context_line":"                    if len(remaining_allocations) \u003e 0:"},{"line_number":2708,"context_line":"                        msg \u003d (\"Failed to manage all allocations. Allocations \""},{"line_number":2709,"context_line":"                               \"%s were not managed.\" % six.text_type("},{"line_number":2710,"context_line":"                                   remaining_allocations))"},{"line_number":2711,"context_line":"                        raise exception.ManageShareServerError(reason\u003dmsg)"},{"line_number":2712,"context_line":""},{"line_number":2713,"context_line":"                else:"},{"line_number":2714,"context_line":"                    msg \u003d (\"Driver did not return required network allocations\""}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_546ccc05","line":2711,"range":{"start_line":2707,"start_character":0,"end_line":2711,"end_character":74},"in_reply_to":"9fdfeff1_abbe0062","updated":"2019-03-01 17:44:16.000000000","message":"resources managed in DHSS\u003dTrue should be fully managed by manila (as opposed to the flexibility offered by DHSS\u003dFalse). If we don\u0027t bother to manage all allocations, we might have problems deleting this share server later, or tracking all allocations. Also, these allocations should have respective neutron ports, to avoid conflicts with other resources, so, if the admin is not doing things according to those rules, something bad could happen (ip conflicts and such).","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a896869eafb7cc2ea678c6c1d150b7b1003d99fa","unresolved":false,"context_lines":[{"line_number":2713,"context_line":"                else:"},{"line_number":2714,"context_line":"                    msg \u003d (\"Driver did not return required network allocations\""},{"line_number":2715,"context_line":"                           \" to be managed. Required number of allocations is \""},{"line_number":2716,"context_line":"                           \"%s.\" % number_allocations)"},{"line_number":2717,"context_line":"                    raise exception.ManageShareServerError(reason\u003dmsg)"},{"line_number":2718,"context_line":""},{"line_number":2719,"context_line":"            backend_details \u003d self.driver.manage_server("}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_2bb21095","line":2716,"range":{"start_line":2716,"start_character":35,"end_line":2716,"end_character":53},"updated":"2019-03-01 04:45:40.000000000","message":"admin network allocations number?","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"78e5b0463190691d155fb74bfd1e6e5600afaba7","unresolved":false,"context_lines":[{"line_number":2713,"context_line":"                else:"},{"line_number":2714,"context_line":"                    msg \u003d (\"Driver did not return required network allocations\""},{"line_number":2715,"context_line":"                           \" to be managed. Required number of allocations is \""},{"line_number":2716,"context_line":"                           \"%s.\" % number_allocations)"},{"line_number":2717,"context_line":"                    raise exception.ManageShareServerError(reason\u003dmsg)"},{"line_number":2718,"context_line":""},{"line_number":2719,"context_line":"            backend_details \u003d self.driver.manage_server("}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_d4775cd0","line":2716,"range":{"start_line":2716,"start_character":35,"end_line":2716,"end_character":53},"in_reply_to":"9fdfeff1_2bb21095","updated":"2019-03-01 17:44:16.000000000","message":"that is not required. I am not sure there is a driver that could only have admin_allocations and no regular allocations.","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a896869eafb7cc2ea678c6c1d150b7b1003d99fa","unresolved":false,"context_lines":[{"line_number":2719,"context_line":"            backend_details \u003d self.driver.manage_server("},{"line_number":2720,"context_line":"                context, server, identifier, driver_opts)"},{"line_number":2721,"context_line":""},{"line_number":2722,"context_line":"            if backend_details:"},{"line_number":2723,"context_line":"                self.db.share_server_backend_details_set("},{"line_number":2724,"context_line":"                    context, server[\u0027id\u0027], backend_details)"},{"line_number":2725,"context_line":""},{"line_number":2726,"context_line":"            self.db.share_server_update("},{"line_number":2727,"context_line":"                context, share_server_id,"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_1065f9ae","line":2724,"range":{"start_line":2722,"start_character":0,"end_line":2724,"end_character":59},"updated":"2019-03-01 04:45:40.000000000","message":"What about security service details? You don\u0027t expect share servers to set up *new* security services, but existing security services as configured on the share network must be saved here, like [1]?\n\nhttp://specs.openstack.org/openstack/manila-specs/specs/stein/manage-unmanage-with-share-servers.html#proposed-change\n\n\n[1] https://github.com/openstack/manila/blob/a75fe3d/manila/share/manager.py#L3449","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"78e5b0463190691d155fb74bfd1e6e5600afaba7","unresolved":false,"context_lines":[{"line_number":2719,"context_line":"            backend_details \u003d self.driver.manage_server("},{"line_number":2720,"context_line":"                context, server, identifier, driver_opts)"},{"line_number":2721,"context_line":""},{"line_number":2722,"context_line":"            if backend_details:"},{"line_number":2723,"context_line":"                self.db.share_server_backend_details_set("},{"line_number":2724,"context_line":"                    context, server[\u0027id\u0027], backend_details)"},{"line_number":2725,"context_line":""},{"line_number":2726,"context_line":"            self.db.share_server_update("},{"line_number":2727,"context_line":"                context, share_server_id,"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_bf4b91ae","line":2724,"range":{"start_line":2722,"start_character":0,"end_line":2724,"end_character":59},"in_reply_to":"9fdfeff1_1065f9ae","updated":"2019-03-01 17:44:16.000000000","message":"Done","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a896869eafb7cc2ea678c6c1d150b7b1003d99fa","unresolved":false,"context_lines":[{"line_number":2739,"context_line":""},{"line_number":2740,"context_line":"    @add_hooks"},{"line_number":2741,"context_line":"    @utils.require_driver_initialized"},{"line_number":2742,"context_line":"    def unmanage_share_server(self, context, share_server_id):"},{"line_number":2743,"context_line":"        context \u003d context.elevated()"},{"line_number":2744,"context_line":""},{"line_number":2745,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_e65f5f0c","line":2742,"range":{"start_line":2742,"start_character":0,"end_line":2742,"end_character":62},"updated":"2019-03-01 04:45:40.000000000","message":"Okay, echoing Tom\u0027s concerns from a previous path set here:\n\n1) Why is there no call down to the share driver to unmanage a share server?\n2) is there any way to prevent a rogue administrator from shooting themselves in the foot? If they unmanage a share server that can\u0027t be managed again, they\u0027re basically left with no choice but forgetting about that share server for good... This share server could have been created by manila... \n\nCan we rather implement a force flag and force unmanage if a driver does not support managing share servers?\n\nThinking out loud.. this isn\u0027t really data loss, but it can be a source of massive confusion/annoyance..","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a896869eafb7cc2ea678c6c1d150b7b1003d99fa","unresolved":false,"context_lines":[{"line_number":2740,"context_line":"    @add_hooks"},{"line_number":2741,"context_line":"    @utils.require_driver_initialized"},{"line_number":2742,"context_line":"    def unmanage_share_server(self, context, share_server_id):"},{"line_number":2743,"context_line":"        context \u003d context.elevated()"},{"line_number":2744,"context_line":""},{"line_number":2745,"context_line":"        try:"},{"line_number":2746,"context_line":"            if self.driver.get_network_allocations_number() \u003e 0:"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_8608d326","line":2743,"range":{"start_line":2743,"start_character":26,"end_line":2743,"end_character":34},"updated":"2019-03-01 04:45:40.000000000","message":"why?","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a896869eafb7cc2ea678c6c1d150b7b1003d99fa","unresolved":false,"context_lines":[{"line_number":2749,"context_line":"                    context, share_server_id)"},{"line_number":2750,"context_line":"            elif (self.driver.get_admin_network_allocations_number() \u003e 0"},{"line_number":2751,"context_line":"                    and self.driver.admin_network_api):"},{"line_number":2752,"context_line":"                # NOTE(ganso): This is here in case there are only admin"},{"line_number":2753,"context_line":"                # allocations."},{"line_number":2754,"context_line":"                self.driver.admin_network_api.unmanage_network_allocations("},{"line_number":2755,"context_line":"                    context, share_server_id)"},{"line_number":2756,"context_line":"            self.db.share_server_delete(context, share_server_id)"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_0614e33f","line":2753,"range":{"start_line":2752,"start_character":17,"end_line":2753,"end_character":30},"updated":"2019-03-01 04:45:40.000000000","message":"nice...","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a896869eafb7cc2ea678c6c1d150b7b1003d99fa","unresolved":false,"context_lines":[{"line_number":2946,"context_line":"        if CONF.delete_share_server_with_last_share:"},{"line_number":2947,"context_line":"            share_server \u003d self._get_share_server(context, share_instance)"},{"line_number":2948,"context_line":"            if (share_server and len(share_server.share_instances) \u003d\u003d 0"},{"line_number":2949,"context_line":"                    and share_server.is_auto_deletable):"},{"line_number":2950,"context_line":"                LOG.debug(\"Scheduled deletion of share-server \""},{"line_number":2951,"context_line":"                          \"with id \u0027%s\u0027 automatically by \""},{"line_number":2952,"context_line":"                          \"deletion of last share.\", share_server[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_66a12ff7","line":2949,"range":{"start_line":2949,"start_character":24,"end_line":2949,"end_character":54},"updated":"2019-03-01 04:45:40.000000000","message":"please check real Truthness, just as a responsible check... \n\n share_server.is_auto_deletable is True","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"78e5b0463190691d155fb74bfd1e6e5600afaba7","unresolved":false,"context_lines":[{"line_number":2946,"context_line":"        if CONF.delete_share_server_with_last_share:"},{"line_number":2947,"context_line":"            share_server \u003d self._get_share_server(context, share_instance)"},{"line_number":2948,"context_line":"            if (share_server and len(share_server.share_instances) \u003d\u003d 0"},{"line_number":2949,"context_line":"                    and share_server.is_auto_deletable):"},{"line_number":2950,"context_line":"                LOG.debug(\"Scheduled deletion of share-server \""},{"line_number":2951,"context_line":"                          \"with id \u0027%s\u0027 automatically by \""},{"line_number":2952,"context_line":"                          \"deletion of last share.\", share_server[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_3fcd612f","line":2949,"range":{"start_line":2949,"start_character":24,"end_line":2949,"end_character":54},"in_reply_to":"9fdfeff1_66a12ff7","updated":"2019-03-01 17:44:16.000000000","message":"Done","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7fe22616934b551e642b8c65e4b185b217406f54","unresolved":false,"context_lines":[{"line_number":2742,"context_line":""},{"line_number":2743,"context_line":"                        msg \u003d (\"Driver did not return required network \""},{"line_number":2744,"context_line":"                               \"allocations to be managed. Required number \""},{"line_number":2745,"context_line":"                               \"of allocations is %s.\" % number_allocations)"},{"line_number":2746,"context_line":"                        raise exception.ManageShareServerError(reason\u003dmsg)"},{"line_number":2747,"context_line":""},{"line_number":2748,"context_line":"                backend_details \u003d self.driver.manage_server("}],"source_content_type":"text/x-python","patch_set":22,"id":"9fdfeff1_afa4b94c","line":2745,"range":{"start_line":2745,"start_character":57,"end_line":2745,"end_character":75},"updated":"2019-03-01 20:36:45.000000000","message":"shouldn\u0027t this really be both tenant and admin network allocation numbers summed up?","commit_id":"b95b6657857460e68bedf79e21fc5287dc7cea48"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"75d6535ff77329fe6fbf299a260f2f5661cb4fc0","unresolved":false,"context_lines":[{"line_number":2742,"context_line":""},{"line_number":2743,"context_line":"                        msg \u003d (\"Driver did not return required network \""},{"line_number":2744,"context_line":"                               \"allocations to be managed. Required number \""},{"line_number":2745,"context_line":"                               \"of allocations is %s.\" % number_allocations)"},{"line_number":2746,"context_line":"                        raise exception.ManageShareServerError(reason\u003dmsg)"},{"line_number":2747,"context_line":""},{"line_number":2748,"context_line":"                backend_details \u003d self.driver.manage_server("}],"source_content_type":"text/x-python","patch_set":22,"id":"9fdfeff1_bd3142f0","line":2745,"range":{"start_line":2745,"start_character":57,"end_line":2745,"end_character":75},"in_reply_to":"9fdfeff1_afa4b94c","updated":"2019-03-03 21:11:17.000000000","message":"Done","commit_id":"b95b6657857460e68bedf79e21fc5287dc7cea48"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"67cb15efa3bb174b0659cc3d4d13903b36bea3e8","unresolved":false,"context_lines":[{"line_number":2743,"context_line":"                    raise exception.ManageShareServerError(reason\u003dmsg)"},{"line_number":2744,"context_line":""},{"line_number":2745,"context_line":"            new_identifier, backend_details \u003d self.driver.manage_server("},{"line_number":2746,"context_line":"                context, server, identifier, driver_opts) or {}"},{"line_number":2747,"context_line":""},{"line_number":2748,"context_line":"            for security_service in share_network[\u0027security_services\u0027]:"},{"line_number":2749,"context_line":"                ss_type \u003d security_service[\u0027type\u0027]"}],"source_content_type":"text/x-python","patch_set":29,"id":"9fdfeff1_346795ba","line":2746,"range":{"start_line":2746,"start_character":58,"end_line":2746,"end_character":63},"updated":"2019-03-05 00:10:01.000000000","message":"a, b \u003d {}?\n\nA tuple cannot be unpacked from a {}","commit_id":"976e8c7f034367d3ac9307a8c393b2114153cc4b"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"f72f301614064636833941ebb1ac141f660ed2b2","unresolved":false,"context_lines":[{"line_number":2743,"context_line":"                    raise exception.ManageShareServerError(reason\u003dmsg)"},{"line_number":2744,"context_line":""},{"line_number":2745,"context_line":"            new_identifier, backend_details \u003d self.driver.manage_server("},{"line_number":2746,"context_line":"                context, server, identifier, driver_opts) or {}"},{"line_number":2747,"context_line":""},{"line_number":2748,"context_line":"            for security_service in share_network[\u0027security_services\u0027]:"},{"line_number":2749,"context_line":"                ss_type \u003d security_service[\u0027type\u0027]"}],"source_content_type":"text/x-python","patch_set":29,"id":"9fdfeff1_cdb47cd7","line":2746,"range":{"start_line":2746,"start_character":58,"end_line":2746,"end_character":63},"in_reply_to":"9fdfeff1_346795ba","updated":"2019-03-05 02:27:49.000000000","message":"Done","commit_id":"976e8c7f034367d3ac9307a8c393b2114153cc4b"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"67cb15efa3bb174b0659cc3d4d13903b36bea3e8","unresolved":false,"context_lines":[{"line_number":2798,"context_line":"        try:"},{"line_number":2799,"context_line":"            self.driver.unmanage_server(server_details, security_services)"},{"line_number":2800,"context_line":"        except NotImplementedError:"},{"line_number":2801,"context_line":"            if not force:"},{"line_number":2802,"context_line":"                self.db.share_server_update("},{"line_number":2803,"context_line":"                    context, share_server_id,"},{"line_number":2804,"context_line":"                    {\u0027status\u0027: previous_status})"}],"source_content_type":"text/x-python","patch_set":29,"id":"9fdfeff1_54e33907","line":2801,"range":{"start_line":2801,"start_character":0,"end_line":2801,"end_character":25},"updated":"2019-03-05 00:10:01.000000000","message":"A log message here should state that the driver doesn\u0027t supporting managing and unmanaging share servers; but the operation can be forced to ignore this and still forcibly unmanage the share server.","commit_id":"976e8c7f034367d3ac9307a8c393b2114153cc4b"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"f72f301614064636833941ebb1ac141f660ed2b2","unresolved":false,"context_lines":[{"line_number":2798,"context_line":"        try:"},{"line_number":2799,"context_line":"            self.driver.unmanage_server(server_details, security_services)"},{"line_number":2800,"context_line":"        except NotImplementedError:"},{"line_number":2801,"context_line":"            if not force:"},{"line_number":2802,"context_line":"                self.db.share_server_update("},{"line_number":2803,"context_line":"                    context, share_server_id,"},{"line_number":2804,"context_line":"                    {\u0027status\u0027: previous_status})"}],"source_content_type":"text/x-python","patch_set":29,"id":"9fdfeff1_2d98a873","line":2801,"range":{"start_line":2801,"start_character":0,"end_line":2801,"end_character":25},"in_reply_to":"9fdfeff1_54e33907","updated":"2019-03-05 02:27:49.000000000","message":"Done","commit_id":"976e8c7f034367d3ac9307a8c393b2114153cc4b"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"67cb15efa3bb174b0659cc3d4d13903b36bea3e8","unresolved":false,"context_lines":[{"line_number":2801,"context_line":"            if not force:"},{"line_number":2802,"context_line":"                self.db.share_server_update("},{"line_number":2803,"context_line":"                    context, share_server_id,"},{"line_number":2804,"context_line":"                    {\u0027status\u0027: previous_status})"},{"line_number":2805,"context_line":"                raise exception.UnmanageShareServerNotSupported("},{"line_number":2806,"context_line":"                    server_id\u003dshare_server_id)"},{"line_number":2807,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"9fdfeff1_1418511c","line":2804,"range":{"start_line":2804,"start_character":20,"end_line":2804,"end_character":48},"updated":"2019-03-05 00:10:01.000000000","message":"We shouldn\u0027t do this. Please leave it unmanage_error; from an API perspective, silently changing the status without actually changing the resource seems wrong/inconsistent. If you leave it in unmanage_error, the administrator will have to check the logs and figure out what to do.","commit_id":"976e8c7f034367d3ac9307a8c393b2114153cc4b"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"f72f301614064636833941ebb1ac141f660ed2b2","unresolved":false,"context_lines":[{"line_number":2801,"context_line":"            if not force:"},{"line_number":2802,"context_line":"                self.db.share_server_update("},{"line_number":2803,"context_line":"                    context, share_server_id,"},{"line_number":2804,"context_line":"                    {\u0027status\u0027: previous_status})"},{"line_number":2805,"context_line":"                raise exception.UnmanageShareServerNotSupported("},{"line_number":2806,"context_line":"                    server_id\u003dshare_server_id)"},{"line_number":2807,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"9fdfeff1_cd86bc17","line":2804,"range":{"start_line":2804,"start_character":20,"end_line":2804,"end_character":48},"in_reply_to":"9fdfeff1_1418511c","updated":"2019-03-05 02:27:49.000000000","message":"Done","commit_id":"976e8c7f034367d3ac9307a8c393b2114153cc4b"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"67cb15efa3bb174b0659cc3d4d13903b36bea3e8","unresolved":false,"context_lines":[{"line_number":3630,"context_line":"            return self.db.share_server_update("},{"line_number":3631,"context_line":"                context, share_server[\u0027id\u0027],"},{"line_number":3632,"context_line":"                {\u0027status\u0027: constants.STATUS_ACTIVE,"},{"line_number":3633,"context_line":"                 \u0027identifier\u0027: share_server[\u0027id\u0027]})"},{"line_number":3634,"context_line":"        except Exception as e:"},{"line_number":3635,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":3636,"context_line":"                details \u003d getattr(e, \"detail_data\", {})"}],"source_content_type":"text/x-python","patch_set":29,"id":"9fdfeff1_b4ace59f","line":3633,"range":{"start_line":3633,"start_character":31,"end_line":3633,"end_character":49},"updated":"2019-03-05 00:10:01.000000000","message":"server_info.get(\u0027identifier\u0027, share_server[\u0027id\u0027])\n\nWe expect drivers to start using this new field more meaningfully.","commit_id":"976e8c7f034367d3ac9307a8c393b2114153cc4b"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"f72f301614064636833941ebb1ac141f660ed2b2","unresolved":false,"context_lines":[{"line_number":3630,"context_line":"            return self.db.share_server_update("},{"line_number":3631,"context_line":"                context, share_server[\u0027id\u0027],"},{"line_number":3632,"context_line":"                {\u0027status\u0027: constants.STATUS_ACTIVE,"},{"line_number":3633,"context_line":"                 \u0027identifier\u0027: share_server[\u0027id\u0027]})"},{"line_number":3634,"context_line":"        except Exception as e:"},{"line_number":3635,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":3636,"context_line":"                details \u003d getattr(e, \"detail_data\", {})"}],"source_content_type":"text/x-python","patch_set":29,"id":"9fdfeff1_ed8b801b","line":3633,"range":{"start_line":3633,"start_character":31,"end_line":3633,"end_character":49},"in_reply_to":"9fdfeff1_b4ace59f","updated":"2019-03-05 02:27:49.000000000","message":"Done","commit_id":"976e8c7f034367d3ac9307a8c393b2114153cc4b"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"5776fc720d29d2f2507cf89c7a20a093ee44c0fc","unresolved":false,"context_lines":[{"line_number":2789,"context_line":""},{"line_number":2790,"context_line":"    @add_hooks"},{"line_number":2791,"context_line":"    @utils.require_driver_initialized"},{"line_number":2792,"context_line":"    def unmanage_share_server(self, context, share_server_id, force):"},{"line_number":2793,"context_line":""},{"line_number":2794,"context_line":"        server \u003d self.db.share_server_get("},{"line_number":2795,"context_line":"            context, share_server_id)"}],"source_content_type":"text/x-python","patch_set":31,"id":"9fdfeff1_777d12b1","line":2792,"range":{"start_line":2792,"start_character":62,"end_line":2792,"end_character":68},"updated":"2019-03-05 14:13:46.000000000","message":"force\u003dFalse ?","commit_id":"744a38bd3f8c9f1c41e66128cc98730eb29de838"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"5776fc720d29d2f2507cf89c7a20a093ee44c0fc","unresolved":false,"context_lines":[{"line_number":2805,"context_line":"            self.driver.unmanage_server(server_details, security_services)"},{"line_number":2806,"context_line":"        except NotImplementedError:"},{"line_number":2807,"context_line":"            if not force:"},{"line_number":2808,"context_line":"                LOG.error(\"Did not unmanage share server %s as the driver \""},{"line_number":2809,"context_line":"                          \"does not support unmanaging of share servers. This \""},{"line_number":2810,"context_line":"                          \"share server can only be unmanaged forcibly.\","},{"line_number":2811,"context_line":"                          share_server_id)"},{"line_number":2812,"context_line":"                self.db.share_server_update("},{"line_number":2813,"context_line":"                    context, share_server_id,"}],"source_content_type":"text/x-python","patch_set":31,"id":"9fdfeff1_d7707edd","line":2810,"range":{"start_line":2808,"start_character":15,"end_line":2810,"end_character":48},"updated":"2019-03-05 14:13:46.000000000","message":"Suggest: Did not unmanage share server %s since the driver does not support managing share servers and no ``force`` option was supplied.","commit_id":"744a38bd3f8c9f1c41e66128cc98730eb29de838"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"534ea867f2b745844334de149107a6ac3b535126","unresolved":false,"context_lines":[{"line_number":2805,"context_line":"            self.driver.unmanage_server(server_details, security_services)"},{"line_number":2806,"context_line":"        except NotImplementedError:"},{"line_number":2807,"context_line":"            if not force:"},{"line_number":2808,"context_line":"                LOG.error(\"Did not unmanage share server %s as the driver \""},{"line_number":2809,"context_line":"                          \"does not support unmanaging of share servers. This \""},{"line_number":2810,"context_line":"                          \"share server can only be unmanaged forcibly.\","},{"line_number":2811,"context_line":"                          share_server_id)"},{"line_number":2812,"context_line":"                self.db.share_server_update("},{"line_number":2813,"context_line":"                    context, share_server_id,"}],"source_content_type":"text/x-python","patch_set":31,"id":"9fdfeff1_89289a97","line":2810,"range":{"start_line":2808,"start_character":15,"end_line":2810,"end_character":48},"in_reply_to":"9fdfeff1_0986ea14","updated":"2019-03-05 15:57:40.000000000","message":"Thanks.","commit_id":"744a38bd3f8c9f1c41e66128cc98730eb29de838"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"c0afcca4f43cd6ab12415d54d56e39617844adfb","unresolved":false,"context_lines":[{"line_number":2805,"context_line":"            self.driver.unmanage_server(server_details, security_services)"},{"line_number":2806,"context_line":"        except NotImplementedError:"},{"line_number":2807,"context_line":"            if not force:"},{"line_number":2808,"context_line":"                LOG.error(\"Did not unmanage share server %s as the driver \""},{"line_number":2809,"context_line":"                          \"does not support unmanaging of share servers. This \""},{"line_number":2810,"context_line":"                          \"share server can only be unmanaged forcibly.\","},{"line_number":2811,"context_line":"                          share_server_id)"},{"line_number":2812,"context_line":"                self.db.share_server_update("},{"line_number":2813,"context_line":"                    context, share_server_id,"}],"source_content_type":"text/x-python","patch_set":31,"id":"9fdfeff1_0986ea14","line":2810,"range":{"start_line":2808,"start_character":15,"end_line":2810,"end_character":48},"in_reply_to":"9fdfeff1_d7707edd","updated":"2019-03-05 15:39:39.000000000","message":"will change.","commit_id":"744a38bd3f8c9f1c41e66128cc98730eb29de838"}],"manila/share/rpcapi.py":[{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"5776fc720d29d2f2507cf89c7a20a093ee44c0fc","unresolved":false,"context_lines":[{"line_number":137,"context_line":"                          identifier\u003didentifier,"},{"line_number":138,"context_line":"                          driver_opts\u003ddriver_opts)"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def unmanage_share_server(self, context, share_server, force):"},{"line_number":141,"context_line":"        host \u003d utils.extract_host(share_server[\u0027host\u0027])"},{"line_number":142,"context_line":"        call_context \u003d self.client.prepare(server\u003dhost, version\u003d\u00271.19\u0027)"},{"line_number":143,"context_line":"        call_context.cast(context, \u0027unmanage_share_server\u0027,"}],"source_content_type":"text/x-python","patch_set":31,"id":"9fdfeff1_b75cda4c","line":140,"range":{"start_line":140,"start_character":59,"end_line":140,"end_character":64},"updated":"2019-03-05 14:13:46.000000000","message":"force\u003dFalse ?","commit_id":"744a38bd3f8c9f1c41e66128cc98730eb29de838"}],"manila/tests/api/fakes.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a896869eafb7cc2ea678c6c1d150b7b1003d99fa","unresolved":false,"context_lines":[{"line_number":302,"context_line":"share_network \u003d {"},{"line_number":303,"context_line":"    \u0027name\u0027: \u0027share-net-fake\u0027,"},{"line_number":304,"context_line":"    \u0027share_network_id\u0027: \u00275dfe0898-e2a1-4740-9177-81c7d26713b0\u0027,"},{"line_number":305,"context_line":"    \u0027project_id\u0027: \u00275dfe0898-e2a1-4740-9177-81c7d26713b0\u0027"},{"line_number":306,"context_line":"}"},{"line_number":307,"context_line":"SHARE_SERVER \u003d {"},{"line_number":308,"context_line":"    \u0027share_network\u0027: share_network,"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_06c1434e","line":305,"range":{"start_line":305,"start_character":18,"end_line":305,"end_character":56},"updated":"2019-03-01 04:45:40.000000000","message":"triggers my OCD a bit, UUID collisions are rare in the real world..","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"}],"manila/tests/api/v1/test_share_manage.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a896869eafb7cc2ea678c6c1d150b7b1003d99fa","unresolved":false,"context_lines":[{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    def test_share_manage_invalid_share_server(self):"},{"line_number":174,"context_line":"        body \u003d get_fake_manage_body()"},{"line_number":175,"context_line":"        body[\u0027share\u0027][\u0027status\u0027] \u003d constants.STATUS_ERROR"},{"line_number":176,"context_line":"        self._setup_manage_mocks()"},{"line_number":177,"context_line":"        error \u003d mock.Mock("},{"line_number":178,"context_line":"            side_effect\u003dexception.InvalidShareServer(message\u003d\"\","}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_86aa1381","line":175,"range":{"start_line":175,"start_character":8,"end_line":175,"end_character":56},"updated":"2019-03-01 04:45:40.000000000","message":"why set the share status to error?","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"78e5b0463190691d155fb74bfd1e6e5600afaba7","unresolved":false,"context_lines":[{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    def test_share_manage_invalid_share_server(self):"},{"line_number":174,"context_line":"        body \u003d get_fake_manage_body()"},{"line_number":175,"context_line":"        body[\u0027share\u0027][\u0027status\u0027] \u003d constants.STATUS_ERROR"},{"line_number":176,"context_line":"        self._setup_manage_mocks()"},{"line_number":177,"context_line":"        error \u003d mock.Mock("},{"line_number":178,"context_line":"            side_effect\u003dexception.InvalidShareServer(message\u003d\"\","}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_397fc1df","line":175,"range":{"start_line":175,"start_character":8,"end_line":175,"end_character":56},"in_reply_to":"9fdfeff1_86aa1381","updated":"2019-03-01 17:44:16.000000000","message":"Done","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"}],"manila/tests/api/v1/test_share_servers.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"4d0d5eeb421bbeb97cfdb44c3d36ba01f6d53651","unresolved":false,"context_lines":[{"line_number":170,"context_line":"        return request, ctxt"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    def test_index_no_filters(self):"},{"line_number":173,"context_line":"        request, ctxt \u003d self._prepare_request(url\u003d\u0027/index\u0027,"},{"line_number":174,"context_line":"                                              use_admin_context\u003dTrue)"},{"line_number":175,"context_line":"        result \u003d self.controller.index(request)"},{"line_number":176,"context_line":"        policy.check_policy.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":29,"id":"9fdfeff1_97cd2332","line":173,"range":{"start_line":173,"start_character":51,"end_line":173,"end_character":57},"updated":"2019-03-05 00:57:28.000000000","message":"I know this is fake, but this is a better value: \u0027/v2/share-servers/\u0027","commit_id":"976e8c7f034367d3ac9307a8c393b2114153cc4b"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"f72f301614064636833941ebb1ac141f660ed2b2","unresolved":false,"context_lines":[{"line_number":170,"context_line":"        return request, ctxt"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    def test_index_no_filters(self):"},{"line_number":173,"context_line":"        request, ctxt \u003d self._prepare_request(url\u003d\u0027/index\u0027,"},{"line_number":174,"context_line":"                                              use_admin_context\u003dTrue)"},{"line_number":175,"context_line":"        result \u003d self.controller.index(request)"},{"line_number":176,"context_line":"        policy.check_policy.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":29,"id":"9fdfeff1_cd8b1c15","line":173,"range":{"start_line":173,"start_character":51,"end_line":173,"end_character":57},"in_reply_to":"9fdfeff1_97cd2332","updated":"2019-03-05 02:27:49.000000000","message":"Done","commit_id":"976e8c7f034367d3ac9307a8c393b2114153cc4b"}],"manila/tests/api/v2/test_share_servers.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"4d0d5eeb421bbeb97cfdb44c3d36ba01f6d53651","unresolved":false,"context_lines":[{"line_number":45,"context_line":"              constants.STATUS_MANAGING, constants.STATUS_UNMANAGING,"},{"line_number":46,"context_line":"              constants.STATUS_UNMANAGE_ERROR, constants.STATUS_MANAGE_ERROR)"},{"line_number":47,"context_line":"    def test_share_server_reset_status(self, status):"},{"line_number":48,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027/reset_status\u0027, use_admin_context\u003dTrue)"},{"line_number":49,"context_line":"        body \u003d {\u0027reset_status\u0027: {\u0027status\u0027: status}}"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"}],"source_content_type":"text/x-python","patch_set":29,"id":"9fdfeff1_37deb7da","line":48,"range":{"start_line":48,"start_character":40,"end_line":48,"end_character":52},"updated":"2019-03-05 00:57:28.000000000","message":"/v2/share-servers/fake-share-server/","commit_id":"976e8c7f034367d3ac9307a8c393b2114153cc4b"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"f72f301614064636833941ebb1ac141f660ed2b2","unresolved":false,"context_lines":[{"line_number":45,"context_line":"              constants.STATUS_MANAGING, constants.STATUS_UNMANAGING,"},{"line_number":46,"context_line":"              constants.STATUS_UNMANAGE_ERROR, constants.STATUS_MANAGE_ERROR)"},{"line_number":47,"context_line":"    def test_share_server_reset_status(self, status):"},{"line_number":48,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027/reset_status\u0027, use_admin_context\u003dTrue)"},{"line_number":49,"context_line":"        body \u003d {\u0027reset_status\u0027: {\u0027status\u0027: status}}"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"}],"source_content_type":"text/x-python","patch_set":29,"id":"9fdfeff1_0da9247b","line":48,"range":{"start_line":48,"start_character":40,"end_line":48,"end_character":52},"in_reply_to":"9fdfeff1_37deb7da","updated":"2019-03-05 02:27:49.000000000","message":"Done","commit_id":"976e8c7f034367d3ac9307a8c393b2114153cc4b"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"4d0d5eeb421bbeb97cfdb44c3d36ba01f6d53651","unresolved":false,"context_lines":[{"line_number":106,"context_line":"    @ddt.data(\u0027fake_net_name\u0027, \u0027\u0027)"},{"line_number":107,"context_line":"    def test_manage(self, share_net_name):"},{"line_number":108,"context_line":"        \"\"\"Tests share server manage\"\"\""},{"line_number":109,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027/manage_share_server\u0027,"},{"line_number":110,"context_line":"                                      use_admin_context\u003dTrue)"},{"line_number":111,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":112,"context_line":"        share_network \u003d db_utils.create_share_network(name\u003dshare_net_name)"}],"source_content_type":"text/x-python","patch_set":29,"id":"9fdfeff1_f7f10f6c","line":109,"range":{"start_line":109,"start_character":40,"end_line":109,"end_character":59},"updated":"2019-03-05 00:57:28.000000000","message":"/v2/share-servers/","commit_id":"976e8c7f034367d3ac9307a8c393b2114153cc4b"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"f72f301614064636833941ebb1ac141f660ed2b2","unresolved":false,"context_lines":[{"line_number":106,"context_line":"    @ddt.data(\u0027fake_net_name\u0027, \u0027\u0027)"},{"line_number":107,"context_line":"    def test_manage(self, share_net_name):"},{"line_number":108,"context_line":"        \"\"\"Tests share server manage\"\"\""},{"line_number":109,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027/manage_share_server\u0027,"},{"line_number":110,"context_line":"                                      use_admin_context\u003dTrue)"},{"line_number":111,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":112,"context_line":"        share_network \u003d db_utils.create_share_network(name\u003dshare_net_name)"}],"source_content_type":"text/x-python","patch_set":29,"id":"9fdfeff1_4d9f2c51","line":109,"range":{"start_line":109,"start_character":40,"end_line":109,"end_character":59},"in_reply_to":"9fdfeff1_f7f10f6c","updated":"2019-03-05 02:27:49.000000000","message":"Done","commit_id":"976e8c7f034367d3ac9307a8c393b2114153cc4b"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"4d0d5eeb421bbeb97cfdb44c3d36ba01f6d53651","unresolved":false,"context_lines":[{"line_number":320,"context_line":""},{"line_number":321,"context_line":"    def test_unmanage_share_server_not_found(self):"},{"line_number":322,"context_line":"        \"\"\"Tests unmanaging share servers\"\"\""},{"line_number":323,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027/unmanage\u0027)"},{"line_number":324,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":325,"context_line":"        share_server_error \u003d mock.Mock("},{"line_number":326,"context_line":"            side_effect\u003dexception.ShareServerNotFound("}],"source_content_type":"text/x-python","patch_set":29,"id":"9fdfeff1_b7eb8776","line":323,"range":{"start_line":323,"start_character":40,"end_line":323,"end_character":48},"updated":"2019-03-05 00:57:28.000000000","message":"/v2/share-servers/fake_server_id/","commit_id":"976e8c7f034367d3ac9307a8c393b2114153cc4b"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"f72f301614064636833941ebb1ac141f660ed2b2","unresolved":false,"context_lines":[{"line_number":320,"context_line":""},{"line_number":321,"context_line":"    def test_unmanage_share_server_not_found(self):"},{"line_number":322,"context_line":"        \"\"\"Tests unmanaging share servers\"\"\""},{"line_number":323,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027/unmanage\u0027)"},{"line_number":324,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":325,"context_line":"        share_server_error \u003d mock.Mock("},{"line_number":326,"context_line":"            side_effect\u003dexception.ShareServerNotFound("}],"source_content_type":"text/x-python","patch_set":29,"id":"9fdfeff1_8d951435","line":323,"range":{"start_line":323,"start_character":40,"end_line":323,"end_character":48},"in_reply_to":"9fdfeff1_b7eb8776","updated":"2019-03-05 02:27:49.000000000","message":"Done","commit_id":"976e8c7f034367d3ac9307a8c393b2114153cc4b"}],"manila/tests/db/migrations/alembic/migrations_data_checks.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"67cb15efa3bb174b0659cc3d4d13903b36bea3e8","unresolved":false,"context_lines":[{"line_number":2789,"context_line":"        ss_table \u003d utils.load_table(\u0027share_servers\u0027, engine)"},{"line_number":2790,"context_line":"        for ss in engine.execute(ss_table.select()):"},{"line_number":2791,"context_line":"            self.test_case.assertTrue(hasattr(ss, \u0027is_auto_deletable\u0027))"},{"line_number":2792,"context_line":"            self.test_case.assertTrue(ss.is_auto_deletable)"},{"line_number":2793,"context_line":"            self.test_case.assertTrue(hasattr(ss, \u0027identifier\u0027))"},{"line_number":2794,"context_line":"            self.test_case.assertEqual(ss.id, ss.identifier)"},{"line_number":2795,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"9fdfeff1_d4864917","line":2792,"range":{"start_line":2792,"start_character":27,"end_line":2792,"end_character":37},"updated":"2019-03-05 00:10:01.000000000","message":"assertIs(True, ss.is_auto_deletable)","commit_id":"976e8c7f034367d3ac9307a8c393b2114153cc4b"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"f72f301614064636833941ebb1ac141f660ed2b2","unresolved":false,"context_lines":[{"line_number":2789,"context_line":"        ss_table \u003d utils.load_table(\u0027share_servers\u0027, engine)"},{"line_number":2790,"context_line":"        for ss in engine.execute(ss_table.select()):"},{"line_number":2791,"context_line":"            self.test_case.assertTrue(hasattr(ss, \u0027is_auto_deletable\u0027))"},{"line_number":2792,"context_line":"            self.test_case.assertTrue(ss.is_auto_deletable)"},{"line_number":2793,"context_line":"            self.test_case.assertTrue(hasattr(ss, \u0027identifier\u0027))"},{"line_number":2794,"context_line":"            self.test_case.assertEqual(ss.id, ss.identifier)"},{"line_number":2795,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"9fdfeff1_ad857809","line":2792,"range":{"start_line":2792,"start_character":27,"end_line":2792,"end_character":37},"in_reply_to":"9fdfeff1_d4864917","updated":"2019-03-05 02:27:49.000000000","message":"Done","commit_id":"976e8c7f034367d3ac9307a8c393b2114153cc4b"}],"releasenotes/notes/manage-unmanage-share-servers-cd4a6523d8e9fbdf.yaml":[{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"a57d1f7cdb8800e7f1379fe74b76f6f862778aad","unresolved":false,"context_lines":[{"line_number":11,"context_line":"    to allow unmanaging shares and snapshots in"},{"line_number":12,"context_line":"    ``driver_handles_share_servers`` enabled driver"},{"line_number":13,"context_line":"    mode."},{"line_number":14,"context_line":"     "}],"source_content_type":"text/x-yaml","patch_set":8,"id":"9fdfeff1_c428fc98","line":14,"range":{"start_line":14,"start_character":0,"end_line":14,"end_character":5},"updated":"2019-02-25 17:03:05.000000000","message":"nit: trailing whitespace","commit_id":"95ac829338b1dc1cec4f978d124f38b97f7d9868"},{"author":{"_account_id":7102,"name":"Thomas Bechtold","email":"thomas.bechtold@canonical.com","username":"toabctl"},"change_message_id":"1fda5490d0de00370f3acd22c872497e781d9ea0","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added Admin-only API that allows managing and"},{"line_number":4,"context_line":"    unmanaging share servers. Managed share servers"},{"line_number":5,"context_line":"    will not be deleted automatically."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"9fdfeff1_935cfc4b","line":2,"updated":"2019-02-25 14:01:45.000000000","message":"- Can you describe *why* this feature is useful and what users can do with it (eg. same usecase example)?\n- can you mention that this is only relevant when running a backend in DHSS\u003dTrue mode?","commit_id":"810c7248c81e88b5696414daf9c40ffa73ae769b"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"ccbac04b7450cb48c679bcf93b2a3c16e2229ff0","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added Admin-only API that allows managing and"},{"line_number":4,"context_line":"    unmanaging share servers. Managed share servers"},{"line_number":5,"context_line":"    will not be deleted automatically."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"9fdfeff1_2b6594b5","line":2,"in_reply_to":"9fdfeff1_935cfc4b","updated":"2019-02-25 16:39:07.000000000","message":"Done","commit_id":"810c7248c81e88b5696414daf9c40ffa73ae769b"},{"author":{"_account_id":7102,"name":"Thomas Bechtold","email":"thomas.bechtold@canonical.com","username":"toabctl"},"change_message_id":"1fda5490d0de00370f3acd22c872497e781d9ea0","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added Admin-only API that allows managing and"},{"line_number":4,"context_line":"    unmanaging share servers. Managed share servers"},{"line_number":5,"context_line":"    will not be deleted automatically."},{"line_number":6,"context_line":"  - Updated Manage Share API to accept the parameter"},{"line_number":7,"context_line":"    ``share_server_id``, so shares can be managed in"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"9fdfeff1_d36da403","line":4,"updated":"2019-02-25 14:01:45.000000000","message":"I guess you mean \"Unmanaged share servers will not be deleted...\" ?","commit_id":"810c7248c81e88b5696414daf9c40ffa73ae769b"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"ccbac04b7450cb48c679bcf93b2a3c16e2229ff0","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added Admin-only API that allows managing and"},{"line_number":4,"context_line":"    unmanaging share servers. Managed share servers"},{"line_number":5,"context_line":"    will not be deleted automatically."},{"line_number":6,"context_line":"  - Updated Manage Share API to accept the parameter"},{"line_number":7,"context_line":"    ``share_server_id``, so shares can be managed in"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"9fdfeff1_cb55e8c3","line":4,"in_reply_to":"9fdfeff1_d36da403","updated":"2019-02-25 16:39:07.000000000","message":"No. I improved the explanation now.","commit_id":"810c7248c81e88b5696414daf9c40ffa73ae769b"},{"author":{"_account_id":7102,"name":"Thomas Bechtold","email":"thomas.bechtold@canonical.com","username":"toabctl"},"change_message_id":"1fda5490d0de00370f3acd22c872497e781d9ea0","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - Added Admin-only API that allows managing and"},{"line_number":4,"context_line":"    unmanaging share servers. Managed share servers"},{"line_number":5,"context_line":"    will not be deleted automatically."},{"line_number":6,"context_line":"  - Updated Manage Share API to accept the parameter"},{"line_number":7,"context_line":"    ``share_server_id``, so shares can be managed in"},{"line_number":8,"context_line":"    ``driver_handles_share_servers`` enabled driver"},{"line_number":9,"context_line":"    mode."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"9fdfeff1_737638db","line":6,"updated":"2019-02-25 14:01:45.000000000","message":"I don\u0027t think the API details are relevant for the release notes.","commit_id":"810c7248c81e88b5696414daf9c40ffa73ae769b"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"ccbac04b7450cb48c679bcf93b2a3c16e2229ff0","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - Added Admin-only API that allows managing and"},{"line_number":4,"context_line":"    unmanaging share servers. Managed share servers"},{"line_number":5,"context_line":"    will not be deleted automatically."},{"line_number":6,"context_line":"  - Updated Manage Share API to accept the parameter"},{"line_number":7,"context_line":"    ``share_server_id``, so shares can be managed in"},{"line_number":8,"context_line":"    ``driver_handles_share_servers`` enabled driver"},{"line_number":9,"context_line":"    mode."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"9fdfeff1_eb5a2cf0","line":6,"in_reply_to":"9fdfeff1_737638db","updated":"2019-02-25 16:39:07.000000000","message":"Simplified the explanation.","commit_id":"810c7248c81e88b5696414daf9c40ffa73ae769b"},{"author":{"_account_id":7102,"name":"Thomas Bechtold","email":"thomas.bechtold@canonical.com","username":"toabctl"},"change_message_id":"1fda5490d0de00370f3acd22c872497e781d9ea0","unresolved":false,"context_lines":[{"line_number":11,"context_line":"    to allow unmanaging shares and snapshots in"},{"line_number":12,"context_line":"    ``driver_handles_share_servers`` enabled driver"},{"line_number":13,"context_line":"    mode."},{"line_number":14,"context_line":"     "}],"source_content_type":"text/x-yaml","patch_set":11,"id":"9fdfeff1_d3b84476","line":14,"updated":"2019-02-25 14:01:45.000000000","message":"useless spaces","commit_id":"810c7248c81e88b5696414daf9c40ffa73ae769b"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"ccbac04b7450cb48c679bcf93b2a3c16e2229ff0","unresolved":false,"context_lines":[{"line_number":11,"context_line":"    to allow unmanaging shares and snapshots in"},{"line_number":12,"context_line":"    ``driver_handles_share_servers`` enabled driver"},{"line_number":13,"context_line":"    mode."},{"line_number":14,"context_line":"     "}],"source_content_type":"text/x-yaml","patch_set":11,"id":"9fdfeff1_8b736080","line":14,"in_reply_to":"9fdfeff1_d3b84476","updated":"2019-02-25 16:39:07.000000000","message":"Done","commit_id":"810c7248c81e88b5696414daf9c40ffa73ae769b"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a896869eafb7cc2ea678c6c1d150b7b1003d99fa","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added Admin-only API that allows managing and"},{"line_number":4,"context_line":"    unmanaging share servers. Managing Share servers"},{"line_number":5,"context_line":"    is useful for importing pre-existing shares and"},{"line_number":6,"context_line":"    snapshots into Manila\u0027s management when the driver"}],"source_content_type":"text/x-yaml","patch_set":20,"id":"9fdfeff1_267ec718","line":3,"range":{"start_line":3,"start_character":10,"end_line":3,"end_character":24},"updated":"2019-03-01 04:45:40.000000000","message":"APIs with default policy set to \u0027rule:admin_api\u0027","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"78e5b0463190691d155fb74bfd1e6e5600afaba7","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added Admin-only API that allows managing and"},{"line_number":4,"context_line":"    unmanaging share servers. Managing Share servers"},{"line_number":5,"context_line":"    is useful for importing pre-existing shares and"},{"line_number":6,"context_line":"    snapshots into Manila\u0027s management when the driver"}],"source_content_type":"text/x-yaml","patch_set":20,"id":"9fdfeff1_193afd32","line":3,"range":{"start_line":3,"start_character":10,"end_line":3,"end_character":24},"in_reply_to":"9fdfeff1_267ec718","updated":"2019-03-01 17:44:16.000000000","message":"Done","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a896869eafb7cc2ea678c6c1d150b7b1003d99fa","unresolved":false,"context_lines":[{"line_number":8,"context_line":"    enabled mode. Unmanaging removes manila share"},{"line_number":9,"context_line":"    servers from the database without removing them"},{"line_number":10,"context_line":"    from the back end. Managed share servers, or share"},{"line_number":11,"context_line":"    servers that had one or more shares unmanaged will"},{"line_number":12,"context_line":"    not be deleted automatically when they do not have"},{"line_number":13,"context_line":"    any shares managed by Manila."},{"line_number":14,"context_line":"  - Updated Manage Share API to be able to manage shares"}],"source_content_type":"text/x-yaml","patch_set":20,"id":"9fdfeff1_a68f1721","line":11,"range":{"start_line":11,"start_character":17,"end_line":11,"end_character":20},"updated":"2019-03-01 04:45:40.000000000","message":"\"have had\"","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"78e5b0463190691d155fb74bfd1e6e5600afaba7","unresolved":false,"context_lines":[{"line_number":8,"context_line":"    enabled mode. Unmanaging removes manila share"},{"line_number":9,"context_line":"    servers from the database without removing them"},{"line_number":10,"context_line":"    from the back end. Managed share servers, or share"},{"line_number":11,"context_line":"    servers that had one or more shares unmanaged will"},{"line_number":12,"context_line":"    not be deleted automatically when they do not have"},{"line_number":13,"context_line":"    any shares managed by Manila."},{"line_number":14,"context_line":"  - Updated Manage Share API to be able to manage shares"}],"source_content_type":"text/x-yaml","patch_set":20,"id":"9fdfeff1_b94411b9","line":11,"range":{"start_line":11,"start_character":17,"end_line":11,"end_character":20},"in_reply_to":"9fdfeff1_a68f1721","updated":"2019-03-01 17:44:16.000000000","message":"Done","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a896869eafb7cc2ea678c6c1d150b7b1003d99fa","unresolved":false,"context_lines":[{"line_number":9,"context_line":"    servers from the database without removing them"},{"line_number":10,"context_line":"    from the back end. Managed share servers, or share"},{"line_number":11,"context_line":"    servers that had one or more shares unmanaged will"},{"line_number":12,"context_line":"    not be deleted automatically when they do not have"},{"line_number":13,"context_line":"    any shares managed by Manila."},{"line_number":14,"context_line":"  - Updated Manage Share API to be able to manage shares"},{"line_number":15,"context_line":"    in ``driver_handles_share_servers`` enabled driver"},{"line_number":16,"context_line":"    mode by supplying the Share Server ID."}],"source_content_type":"text/x-yaml","patch_set":20,"id":"9fdfeff1_8698d368","line":13,"range":{"start_line":12,"start_character":33,"end_line":13,"end_character":32},"updated":"2019-03-01 04:45:40.000000000","message":"even if the config opt [section]/xyzzy or config opt [section]/spoon have been set to True","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"78e5b0463190691d155fb74bfd1e6e5600afaba7","unresolved":false,"context_lines":[{"line_number":9,"context_line":"    servers from the database without removing them"},{"line_number":10,"context_line":"    from the back end. Managed share servers, or share"},{"line_number":11,"context_line":"    servers that had one or more shares unmanaged will"},{"line_number":12,"context_line":"    not be deleted automatically when they do not have"},{"line_number":13,"context_line":"    any shares managed by Manila."},{"line_number":14,"context_line":"  - Updated Manage Share API to be able to manage shares"},{"line_number":15,"context_line":"    in ``driver_handles_share_servers`` enabled driver"},{"line_number":16,"context_line":"    mode by supplying the Share Server ID."}],"source_content_type":"text/x-yaml","patch_set":20,"id":"9fdfeff1_1923dd06","line":13,"range":{"start_line":12,"start_character":33,"end_line":13,"end_character":32},"in_reply_to":"9fdfeff1_8698d368","updated":"2019-03-01 17:44:16.000000000","message":"Done","commit_id":"db4b8c9eb9718ec53068934b5e9542b5f68c61ca"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7fe22616934b551e642b8c65e4b185b217406f54","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added APIs with default policy set to"},{"line_number":4,"context_line":"    \u0027rule:admin_api\u0027 that allows managing and"},{"line_number":5,"context_line":"    unmanaging share servers. Managing Share servers"},{"line_number":6,"context_line":"    is useful for importing pre-existing shares and"},{"line_number":7,"context_line":"    snapshots into Manila\u0027s management when the driver"}],"source_content_type":"text/x-yaml","patch_set":22,"id":"9fdfeff1_6f15719b","line":4,"range":{"start_line":4,"start_character":26,"end_line":4,"end_character":32},"updated":"2019-03-01 20:36:45.000000000","message":"allow","commit_id":"b95b6657857460e68bedf79e21fc5287dc7cea48"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"75d6535ff77329fe6fbf299a260f2f5661cb4fc0","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added APIs with default policy set to"},{"line_number":4,"context_line":"    \u0027rule:admin_api\u0027 that allows managing and"},{"line_number":5,"context_line":"    unmanaging share servers. Managing Share servers"},{"line_number":6,"context_line":"    is useful for importing pre-existing shares and"},{"line_number":7,"context_line":"    snapshots into Manila\u0027s management when the driver"}],"source_content_type":"text/x-yaml","patch_set":22,"id":"9fdfeff1_fd37cae3","line":4,"range":{"start_line":4,"start_character":26,"end_line":4,"end_character":32},"in_reply_to":"9fdfeff1_6f15719b","updated":"2019-03-03 21:11:17.000000000","message":"Done","commit_id":"b95b6657857460e68bedf79e21fc5287dc7cea48"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7fe22616934b551e642b8c65e4b185b217406f54","unresolved":false,"context_lines":[{"line_number":11,"context_line":"    from the back end. Managed share servers, or share"},{"line_number":12,"context_line":"    servers that have had one or more shares unmanaged will"},{"line_number":13,"context_line":"    not be deleted automatically when they do not have"},{"line_number":14,"context_line":"    any shares managed by Manila, even if the config opt"},{"line_number":15,"context_line":"    [DEFAULT]/delete_share_server_with_last_share or"},{"line_number":16,"context_line":"    [DEFAULT]/automatic_share_server_cleanup have been"},{"line_number":17,"context_line":"    set to True."}],"source_content_type":"text/x-yaml","patch_set":22,"id":"9fdfeff1_2f0f6989","line":14,"range":{"start_line":14,"start_character":53,"end_line":14,"end_character":56},"updated":"2019-03-01 20:36:45.000000000","message":"options","commit_id":"b95b6657857460e68bedf79e21fc5287dc7cea48"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"75d6535ff77329fe6fbf299a260f2f5661cb4fc0","unresolved":false,"context_lines":[{"line_number":11,"context_line":"    from the back end. Managed share servers, or share"},{"line_number":12,"context_line":"    servers that have had one or more shares unmanaged will"},{"line_number":13,"context_line":"    not be deleted automatically when they do not have"},{"line_number":14,"context_line":"    any shares managed by Manila, even if the config opt"},{"line_number":15,"context_line":"    [DEFAULT]/delete_share_server_with_last_share or"},{"line_number":16,"context_line":"    [DEFAULT]/automatic_share_server_cleanup have been"},{"line_number":17,"context_line":"    set to True."}],"source_content_type":"text/x-yaml","patch_set":22,"id":"9fdfeff1_1d35eedb","line":14,"range":{"start_line":14,"start_character":53,"end_line":14,"end_character":56},"in_reply_to":"9fdfeff1_2f0f6989","updated":"2019-03-03 21:11:17.000000000","message":"Done","commit_id":"b95b6657857460e68bedf79e21fc5287dc7cea48"}]}
