)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bfc39c6f4157be791ccb265ed19b03643e79515f","unresolved":false,"context_lines":[{"line_number":16,"context_line":"Renamed method get_service_instance to set_up_service_instance."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Removed discover_service_instance method."},{"line_number":19,"context_line":"Added method ensure_seervice_instance to check if"},{"line_number":20,"context_line":"instance is running."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Partially-Implements bp implement-backend-details-in-drivers"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1ae5cdf2_be4ad124","line":19,"updated":"2014-06-19 05:07:16.000000000","message":"typo: ensure_service","commit_id":"952171edfefc3ef93a8aa058e6f0655df75e2eb2"}],"manila/share/drivers/generic.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bfc39c6f4157be791ccb265ed19b03643e79515f","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        context \u003d args[0]"},{"line_number":79,"context_line":"        if not server:"},{"line_number":80,"context_line":"            # For now generic driver does not support flat networking."},{"line_number":81,"context_line":"            raise exception.ManilaException(_(\u0027Share sever not found.\u0027))"},{"line_number":82,"context_line":"        if not self.service_instance_manager.ensure_service_instance("},{"line_number":83,"context_line":"                context, server[\u0027backend_details\u0027]):"},{"line_number":84,"context_line":"            raise exception.ServiceInstanceUnavailable()"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_7e54c9c5","line":81,"updated":"2014-06-19 05:07:16.000000000","message":"typo: \"sever\" should be \"server\"","commit_id":"952171edfefc3ef93a8aa058e6f0655df75e2eb2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bfc39c6f4157be791ccb265ed19b03643e79515f","unresolved":false,"context_lines":[{"line_number":157,"context_line":"    @ensure_server"},{"line_number":158,"context_line":"    def create_share(self, context, share, share_server\u003dNone):"},{"line_number":159,"context_line":"        \"\"\"Creates share.\"\"\""},{"line_number":160,"context_line":"        server_details \u003d share_server[\u0027backend_details\u0027]"},{"line_number":161,"context_line":"        volume \u003d self._allocate_container(self.admin_context, share)"},{"line_number":162,"context_line":"        volume \u003d self._attach_volume("},{"line_number":163,"context_line":"            self.admin_context,"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_5ebf0dd0","line":160,"updated":"2014-06-19 05:07:16.000000000","message":"If share_server[\u0027backend_details\u0027] is not populated, you\u0027ll get a KeyError.  It\u0027s better to do share_server.get(\u0027backend_detail\u0027).\n\nAlso should check if share_server is None before referencing it.","commit_id":"952171edfefc3ef93a8aa058e6f0655df75e2eb2"},{"author":{"_account_id":7534,"name":"Yulia Portnova","email":"yportnova@mirantis.com","username":"yportnova"},"change_message_id":"1631e07dc34bc63f1ae1c1c63e10a0fe861a36d6","unresolved":false,"context_lines":[{"line_number":157,"context_line":"    @ensure_server"},{"line_number":158,"context_line":"    def create_share(self, context, share, share_server\u003dNone):"},{"line_number":159,"context_line":"        \"\"\"Creates share.\"\"\""},{"line_number":160,"context_line":"        server_details \u003d share_server[\u0027backend_details\u0027]"},{"line_number":161,"context_line":"        volume \u003d self._allocate_container(self.admin_context, share)"},{"line_number":162,"context_line":"        volume \u003d self._attach_volume("},{"line_number":163,"context_line":"            self.admin_context,"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_91f8a3c5","line":160,"in_reply_to":"1ae5cdf2_5ebf0dd0","updated":"2014-06-19 08:43:28.000000000","message":"Actually we have decorator @ensure_server that is checking if share_server is provided. \nWill add there check that backend_details key exists in share_server.","commit_id":"952171edfefc3ef93a8aa058e6f0655df75e2eb2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bfc39c6f4157be791ccb265ed19b03643e79515f","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        try:"},{"line_number":185,"context_line":"            self._ssh_exec(server_details, command)"},{"line_number":186,"context_line":"        except exception.ProcessExecutionError as e:"},{"line_number":187,"context_line":"            if \u0027already mounted\u0027 not in e.stderr:"},{"line_number":188,"context_line":"                raise"},{"line_number":189,"context_line":"            LOG.debug(\u0027Share %s is already mounted\u0027 % share[\u0027name\u0027])"},{"line_number":190,"context_line":"        command \u003d [\u0027sudo\u0027, \u0027chmod\u0027, \u0027777\u0027, mount_path]"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_be53b16a","line":187,"updated":"2014-06-19 05:07:16.000000000","message":"Is there an error code we can check, rather than search for hard coded text?","commit_id":"952171edfefc3ef93a8aa058e6f0655df75e2eb2"},{"author":{"_account_id":7534,"name":"Yulia Portnova","email":"yportnova@mirantis.com","username":"yportnova"},"change_message_id":"1631e07dc34bc63f1ae1c1c63e10a0fe861a36d6","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        try:"},{"line_number":185,"context_line":"            self._ssh_exec(server_details, command)"},{"line_number":186,"context_line":"        except exception.ProcessExecutionError as e:"},{"line_number":187,"context_line":"            if \u0027already mounted\u0027 not in e.stderr:"},{"line_number":188,"context_line":"                raise"},{"line_number":189,"context_line":"            LOG.debug(\u0027Share %s is already mounted\u0027 % share[\u0027name\u0027])"},{"line_number":190,"context_line":"        command \u003d [\u0027sudo\u0027, \u0027chmod\u0027, \u0027777\u0027, mount_path]"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_f1dd67de","line":187,"in_reply_to":"1ae5cdf2_be53b16a","updated":"2014-06-19 08:43:28.000000000","message":"The error code in this case is 32.\nFor case \"access denied by server while mounting\" it is also 32.\nSo we cannot check error by its code.","commit_id":"952171edfefc3ef93a8aa058e6f0655df75e2eb2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bfc39c6f4157be791ccb265ed19b03643e79515f","unresolved":false,"context_lines":[{"line_number":198,"context_line":"        try:"},{"line_number":199,"context_line":"            self._ssh_exec(server_details, command)"},{"line_number":200,"context_line":"        except exception.ProcessExecutionError as e:"},{"line_number":201,"context_line":"            if \u0027not found\u0027 in e.stderr:"},{"line_number":202,"context_line":"                LOG.debug(\u0027%s is not mounted\u0027 % share[\u0027name\u0027])"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    def _get_mount_path(self, share):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_3eeec18b","line":201,"updated":"2014-06-19 05:07:16.000000000","message":"Error code?","commit_id":"952171edfefc3ef93a8aa058e6f0655df75e2eb2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bfc39c6f4157be791ccb265ed19b03643e79515f","unresolved":false,"context_lines":[{"line_number":372,"context_line":"        volume \u003d self._allocate_container(self.admin_context, share, snapshot)"},{"line_number":373,"context_line":"        volume \u003d self._attach_volume("},{"line_number":374,"context_line":"            self.admin_context, share,"},{"line_number":375,"context_line":"            share_server[\u0027backend_details\u0027][\u0027instance_id\u0027], volume)"},{"line_number":376,"context_line":"        self._mount_device(context, share, share_server, volume)"},{"line_number":377,"context_line":"        location \u003d self._get_helper(share).create_export("},{"line_number":378,"context_line":"            share_server[\u0027backend_details\u0027],"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_fea53948","line":375,"updated":"2014-06-19 05:07:16.000000000","message":"share_server.get(\u0027backend_details\u0027).\n\nOtherwise should check if it is populated.\n\nShould check if share_server is None too.","commit_id":"952171edfefc3ef93a8aa058e6f0655df75e2eb2"},{"author":{"_account_id":7534,"name":"Yulia Portnova","email":"yportnova@mirantis.com","username":"yportnova"},"change_message_id":"1631e07dc34bc63f1ae1c1c63e10a0fe861a36d6","unresolved":false,"context_lines":[{"line_number":372,"context_line":"        volume \u003d self._allocate_container(self.admin_context, share, snapshot)"},{"line_number":373,"context_line":"        volume \u003d self._attach_volume("},{"line_number":374,"context_line":"            self.admin_context, share,"},{"line_number":375,"context_line":"            share_server[\u0027backend_details\u0027][\u0027instance_id\u0027], volume)"},{"line_number":376,"context_line":"        self._mount_device(context, share, share_server, volume)"},{"line_number":377,"context_line":"        location \u003d self._get_helper(share).create_export("},{"line_number":378,"context_line":"            share_server[\u0027backend_details\u0027],"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_314fcf93","line":375,"in_reply_to":"1ae5cdf2_fea53948","updated":"2014-06-19 08:43:28.000000000","message":"Answered before","commit_id":"952171edfefc3ef93a8aa058e6f0655df75e2eb2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bfc39c6f4157be791ccb265ed19b03643e79515f","unresolved":false,"context_lines":[{"line_number":382,"context_line":"    @ensure_server"},{"line_number":383,"context_line":"    def delete_share(self, context, share, share_server\u003dNone):"},{"line_number":384,"context_line":"        \"\"\"Deletes share.\"\"\""},{"line_number":385,"context_line":"        self._get_helper(share).remove_export(share_server[\u0027backend_details\u0027],"},{"line_number":386,"context_line":"                                              share[\u0027name\u0027])"},{"line_number":387,"context_line":"        self._unmount_device(share, share_server[\u0027backend_details\u0027])"},{"line_number":388,"context_line":"        self._detach_volume(self.admin_context, share,"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_7eb20997","line":385,"updated":"2014-06-19 05:07:16.000000000","message":"Same as above.","commit_id":"952171edfefc3ef93a8aa058e6f0655df75e2eb2"},{"author":{"_account_id":7534,"name":"Yulia Portnova","email":"yportnova@mirantis.com","username":"yportnova"},"change_message_id":"1631e07dc34bc63f1ae1c1c63e10a0fe861a36d6","unresolved":false,"context_lines":[{"line_number":382,"context_line":"    @ensure_server"},{"line_number":383,"context_line":"    def delete_share(self, context, share, share_server\u003dNone):"},{"line_number":384,"context_line":"        \"\"\"Deletes share.\"\"\""},{"line_number":385,"context_line":"        self._get_helper(share).remove_export(share_server[\u0027backend_details\u0027],"},{"line_number":386,"context_line":"                                              share[\u0027name\u0027])"},{"line_number":387,"context_line":"        self._unmount_device(share, share_server[\u0027backend_details\u0027])"},{"line_number":388,"context_line":"        self._detach_volume(self.admin_context, share,"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_5140db5e","line":385,"in_reply_to":"1ae5cdf2_7eb20997","updated":"2014-06-19 08:43:28.000000000","message":"Same","commit_id":"952171edfefc3ef93a8aa058e6f0655df75e2eb2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bfc39c6f4157be791ccb265ed19b03643e79515f","unresolved":false,"context_lines":[{"line_number":442,"context_line":"        volume \u003d self._attach_volume("},{"line_number":443,"context_line":"            context,"},{"line_number":444,"context_line":"            share,"},{"line_number":445,"context_line":"            share_server[\u0027backend_details\u0027][\u0027instance_id\u0027],"},{"line_number":446,"context_line":"            volume)"},{"line_number":447,"context_line":"        self._mount_device(context, share, share_server[\u0027backend_details\u0027],"},{"line_number":448,"context_line":"                           volume)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_7e40495f","line":445,"updated":"2014-06-19 05:07:16.000000000","message":"Same.","commit_id":"952171edfefc3ef93a8aa058e6f0655df75e2eb2"},{"author":{"_account_id":7534,"name":"Yulia Portnova","email":"yportnova@mirantis.com","username":"yportnova"},"change_message_id":"1631e07dc34bc63f1ae1c1c63e10a0fe861a36d6","unresolved":false,"context_lines":[{"line_number":442,"context_line":"        volume \u003d self._attach_volume("},{"line_number":443,"context_line":"            context,"},{"line_number":444,"context_line":"            share,"},{"line_number":445,"context_line":"            share_server[\u0027backend_details\u0027][\u0027instance_id\u0027],"},{"line_number":446,"context_line":"            volume)"},{"line_number":447,"context_line":"        self._mount_device(context, share, share_server[\u0027backend_details\u0027],"},{"line_number":448,"context_line":"                           volume)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_7145d76d","line":445,"in_reply_to":"1ae5cdf2_7e40495f","updated":"2014-06-19 08:43:28.000000000","message":"Same","commit_id":"952171edfefc3ef93a8aa058e6f0655df75e2eb2"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"cf6ff3ccbea2257c52012462be7f0acaa812249b","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        server \u003d kwargs.get(\u0027share_server\u0027)"},{"line_number":78,"context_line":"        context \u003d args[0]"},{"line_number":79,"context_line":"        if not server:"},{"line_number":80,"context_line":"            # For now generic driver does not support flat networking."},{"line_number":81,"context_line":"            raise exception.ManilaException(_(\u0027Share server not found.\u0027))"},{"line_number":82,"context_line":"        if not server.get(\u0027backend_details\u0027):"},{"line_number":83,"context_line":"            raise exception.ManilaException(_(\u0027Share server backend \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_f6ce0282","line":80,"updated":"2014-06-20 18:12:31.000000000","message":"What does this comment mean? Does this imply that, in the future when the generic driver supports flat networking, we won\u0027t need a share server? And so we will have to change this logic?\nI find this comment to be confusing.","commit_id":"b3667c73612c52cb033f9db4bd58a4eaebdf4814"},{"author":{"_account_id":7534,"name":"Yulia Portnova","email":"yportnova@mirantis.com","username":"yportnova"},"change_message_id":"ac06f6b28074ec2c326db9f0e61f79d85da9bff2","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        server \u003d kwargs.get(\u0027share_server\u0027)"},{"line_number":78,"context_line":"        context \u003d args[0]"},{"line_number":79,"context_line":"        if not server:"},{"line_number":80,"context_line":"            # For now generic driver does not support flat networking."},{"line_number":81,"context_line":"            raise exception.ManilaException(_(\u0027Share server not found.\u0027))"},{"line_number":82,"context_line":"        if not server.get(\u0027backend_details\u0027):"},{"line_number":83,"context_line":"            raise exception.ManilaException(_(\u0027Share server backend \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_02979945","line":80,"in_reply_to":"1ae5cdf2_f6ce0282","updated":"2014-06-22 09:14:47.000000000","message":"Exactly. When we implement flat networking in generic we will not need share server","commit_id":"b3667c73612c52cb033f9db4bd58a4eaebdf4814"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"cf6ff3ccbea2257c52012462be7f0acaa812249b","unresolved":false,"context_lines":[{"line_number":281,"context_line":"        volume \u003d self._get_volume(context, share[\u0027id\u0027])"},{"line_number":282,"context_line":"        if volume and volume[\u0027id\u0027] in attached_volumes:"},{"line_number":283,"context_line":"            self.compute_api.instance_volume_detach("},{"line_number":284,"context_line":"                self.admin_context, server_details[\u0027instance_id\u0027],"},{"line_number":285,"context_line":"                volume[\u0027id\u0027])"},{"line_number":286,"context_line":"            t \u003d time.time()"},{"line_number":287,"context_line":"            while time.time() - t \u003c self.configuration.max_time_to_attach:"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_16fe0e38","line":284,"updated":"2014-06-20 18:12:31.000000000","message":"It is always nice to split these onto separate lines.","commit_id":"b3667c73612c52cb033f9db4bd58a4eaebdf4814"}],"manila/share/drivers/service_instance.py":[{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"cf6ff3ccbea2257c52012462be7f0acaa812249b","unresolved":false,"context_lines":[{"line_number":317,"context_line":"    @lockutils.synchronized(\"_get_key\", external\u003dTrue,"},{"line_number":318,"context_line":"                            lock_path\u003d\"service_instance_locks\")"},{"line_number":319,"context_line":"    def _get_key(self, context):"},{"line_number":320,"context_line":"        \"\"\"Returns name of key, that will be injected to service vm.\"\"\""},{"line_number":321,"context_line":"        if not (self.path_to_public_key or self.path_to_private_key):"},{"line_number":322,"context_line":"            return"},{"line_number":323,"context_line":"        path_to_public_key \u003d os.path.expanduser(self.path_to_public_key)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_c1f062ff","line":320,"updated":"2014-06-20 18:12:31.000000000","message":"And also returns path_to_private_key","commit_id":"b3667c73612c52cb033f9db4bd58a4eaebdf4814"}]}
