)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8689478c2498a47ba4fef1a89e14cc82c8406330","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add NexentaEdge drivers"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"NexentaEdge drivers were kicked from OpenStack pike releas due to CI failures."},{"line_number":10,"context_line":"This patch implements NexentaEdge iSCSI drivers."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I1a2dd99fab742f7ad4d9aa470652bb5decb35359"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"df87a7cf_ea836403","line":9,"range":{"start_line":9,"start_character":52,"end_line":9,"end_character":58},"updated":"2017-12-04 21:14:03.000000000","message":"release","commit_id":"b680cd8b4eb2600d1323d71768dcd8a9487df3e3"}],"cinder/volume/drivers/nexenta/nexentaedge/iscsi.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8689478c2498a47ba4fef1a89e14cc82c8406330","unresolved":false,"context_lines":[{"line_number":212,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":213,"context_line":"                LOG.exception(\u0027Error extending volume\u0027)"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    def create_volume_from_snapshot(self, volume, snapshot):"},{"line_number":216,"context_line":"        self.restapi.put("},{"line_number":217,"context_line":"            \u0027service/\u0027 + self.iscsi_service + \u0027/iscsi/snapshot/clone\u0027,"},{"line_number":218,"context_line":"            {"}],"source_content_type":"text/x-python","patch_set":2,"id":"df87a7cf_6aac348c","line":215,"updated":"2017-12-04 21:14:03.000000000","message":"I don\u0027t see any handling for the volume being requested larger than the snapshot.","commit_id":"b680cd8b4eb2600d1323d71768dcd8a9487df3e3"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"6d602fc5a9c73c56914ae3d85692e55483334a3d","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    Version history:"},{"line_number":39,"context_line":"        1.0.0 - Initial driver version."},{"line_number":40,"context_line":"        1.0.1 - Moved opts to options.py."},{"line_number":41,"context_line":"        1.0.2 - Added HA support."},{"line_number":42,"context_line":"    \"\"\""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    VERSION \u003d \u00271.0.2\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"df7087c5_4d8dd079","line":41,"range":{"start_line":41,"start_character":7,"end_line":41,"end_character":33},"updated":"2018-03-19 21:16:47.000000000","message":"Should have a version indicating when the driver was re-introduced.","commit_id":"98a3bf797dcb264ea4dd7ea8aaac6a932f7b1215"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"6d602fc5a9c73c56914ae3d85692e55483334a3d","unresolved":false,"context_lines":[{"line_number":179,"context_line":"            \u0027number\u0027: self._get_lun_number(volume[\u0027name\u0027])"},{"line_number":180,"context_line":"        }"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    def create_volume(self, volume):"},{"line_number":183,"context_line":"        data \u003d {"},{"line_number":184,"context_line":"            \u0027objectPath\u0027: self.bucket_path + \u0027/\u0027 + volume[\u0027name\u0027],"},{"line_number":185,"context_line":"            \u0027volSizeMB\u0027: int(volume[\u0027size\u0027]) * units.Ki,"}],"source_content_type":"text/x-python","patch_set":7,"id":"df7087c5_8d6f6891","line":182,"range":{"start_line":182,"start_character":8,"end_line":182,"end_character":36},"updated":"2018-03-19 21:16:47.000000000","message":"Really should have docstrings for any external functions.","commit_id":"98a3bf797dcb264ea4dd7ea8aaac6a932f7b1215"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"6d602fc5a9c73c56914ae3d85692e55483334a3d","unresolved":false,"context_lines":[{"line_number":215,"context_line":"                LOG.exception(\u0027Error extending volume\u0027)"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    def create_volume_from_snapshot(self, volume, snapshot):"},{"line_number":218,"context_line":"        self.restapi.put("},{"line_number":219,"context_line":"            \u0027service/\u0027 + self.iscsi_service + \u0027/iscsi/snapshot/clone\u0027,"},{"line_number":220,"context_line":"            {"},{"line_number":221,"context_line":"                \u0027objectPath\u0027: self.bucket_path + \u0027/\u0027 +"},{"line_number":222,"context_line":"                snapshot[\u0027volume_name\u0027],"},{"line_number":223,"context_line":"                \u0027clonePath\u0027: self.bucket_path + \u0027/\u0027 + volume[\u0027name\u0027],"},{"line_number":224,"context_line":"                \u0027snapName\u0027: snapshot[\u0027name\u0027]"},{"line_number":225,"context_line":"            })"},{"line_number":226,"context_line":"        if ((\u0027size\u0027 in volume) and ("},{"line_number":227,"context_line":"                volume[\u0027size\u0027] \u003e snapshot[\u0027volume_size\u0027])):"},{"line_number":228,"context_line":"            self.extend_volume(volume, volume[\u0027size\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"df7087c5_8d1d2811","line":225,"range":{"start_line":218,"start_character":0,"end_line":225,"end_character":14},"updated":"2018-03-19 21:16:47.000000000","message":"Why is there no exception checking around this one?","commit_id":"98a3bf797dcb264ea4dd7ea8aaac6a932f7b1215"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"6d602fc5a9c73c56914ae3d85692e55483334a3d","unresolved":false,"context_lines":[{"line_number":228,"context_line":"            self.extend_volume(volume, volume[\u0027size\u0027])"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    def create_snapshot(self, snapshot):"},{"line_number":231,"context_line":"        self.restapi.post("},{"line_number":232,"context_line":"            \u0027service/\u0027 + self.iscsi_service + \u0027/iscsi/snapshot\u0027,"},{"line_number":233,"context_line":"            {"},{"line_number":234,"context_line":"                \u0027objectPath\u0027: self.bucket_path + \u0027/\u0027 +"},{"line_number":235,"context_line":"                snapshot[\u0027volume_name\u0027],"},{"line_number":236,"context_line":"                \u0027snapName\u0027: snapshot[\u0027name\u0027]"},{"line_number":237,"context_line":"            })"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    def delete_snapshot(self, snapshot):"},{"line_number":240,"context_line":"        self.restapi.delete("}],"source_content_type":"text/x-python","patch_set":7,"id":"df7087c5_edd14431","line":237,"range":{"start_line":231,"start_character":0,"end_line":237,"end_character":14},"updated":"2018-03-19 21:16:47.000000000","message":"Same question here.","commit_id":"98a3bf797dcb264ea4dd7ea8aaac6a932f7b1215"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"6d602fc5a9c73c56914ae3d85692e55483334a3d","unresolved":false,"context_lines":[{"line_number":237,"context_line":"            })"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    def delete_snapshot(self, snapshot):"},{"line_number":240,"context_line":"        self.restapi.delete("},{"line_number":241,"context_line":"            \u0027service/\u0027 + self.iscsi_service + \u0027/iscsi/snapshot\u0027,"},{"line_number":242,"context_line":"            {"},{"line_number":243,"context_line":"                \u0027objectPath\u0027: self.bucket_path + \u0027/\u0027 +"},{"line_number":244,"context_line":"                snapshot[\u0027volume_name\u0027],"},{"line_number":245,"context_line":"                \u0027snapName\u0027: snapshot[\u0027name\u0027]"},{"line_number":246,"context_line":"            })"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    @staticmethod"},{"line_number":249,"context_line":"    def _get_clone_snapshot_name(volume):"}],"source_content_type":"text/x-python","patch_set":7,"id":"df7087c5_cde000fe","line":246,"range":{"start_line":240,"start_character":0,"end_line":246,"end_character":14},"updated":"2018-03-19 21:16:47.000000000","message":"And here.","commit_id":"98a3bf797dcb264ea4dd7ea8aaac6a932f7b1215"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c9072e4fb0abb615b5c02bf19de44d2d2569c911","unresolved":false,"context_lines":[{"line_number":58,"context_line":"            self.configuration.append_config_values("},{"line_number":59,"context_line":"                options.NEXENTA_EDGE_OPTS)"},{"line_number":60,"context_line":"        if self.configuration.nexenta_rest_address:"},{"line_number":61,"context_line":"            LOG.warning(\u0027nexenta_rest_address parameter is deprecated and will\u0027"},{"line_number":62,"context_line":"                        \u0027be removed in upcoming releases, use san_rest_ip \u0027"},{"line_number":63,"context_line":"                        \u0027instead\u0027)"},{"line_number":64,"context_line":"            self.restapi_host \u003d self.configuration.nexenta_rest_address"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f6a8fd7_581b3e1a","line":61,"range":{"start_line":61,"start_character":78,"end_line":61,"end_character":79},"updated":"2018-04-17 20:29:57.000000000","message":"Missing trailing space.","commit_id":"7a8949e64e0975a556c8af4456cdc5ed1f5a0154"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c9072e4fb0abb615b5c02bf19de44d2d2569c911","unresolved":false,"context_lines":[{"line_number":59,"context_line":"                options.NEXENTA_EDGE_OPTS)"},{"line_number":60,"context_line":"        if self.configuration.nexenta_rest_address:"},{"line_number":61,"context_line":"            LOG.warning(\u0027nexenta_rest_address parameter is deprecated and will\u0027"},{"line_number":62,"context_line":"                        \u0027be removed in upcoming releases, use san_rest_ip \u0027"},{"line_number":63,"context_line":"                        \u0027instead\u0027)"},{"line_number":64,"context_line":"            self.restapi_host \u003d self.configuration.nexenta_rest_address"},{"line_number":65,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f6a8fd7_78c6426a","line":62,"range":{"start_line":62,"start_character":62,"end_line":62,"end_character":73},"updated":"2018-04-17 20:29:57.000000000","message":"san_ip","commit_id":"7a8949e64e0975a556c8af4456cdc5ed1f5a0154"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c9072e4fb0abb615b5c02bf19de44d2d2569c911","unresolved":false,"context_lines":[{"line_number":66,"context_line":"            self.restapi_host \u003d self.configuration.san_rest_ip"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        if self.configuration.nexenta_rest_port:"},{"line_number":69,"context_line":"            LOG.warning(\u0027nexenta_rest_port parameter is deprecated and will\u0027"},{"line_number":70,"context_line":"                        \u0027be removed in upcoming releases, use san_rest_port \u0027"},{"line_number":71,"context_line":"                        \u0027instead\u0027)"},{"line_number":72,"context_line":"            self.restapi_port \u003d self.configuration.nexenta_rest_port"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f6a8fd7_98e6b616","line":69,"range":{"start_line":69,"start_character":75,"end_line":69,"end_character":76},"updated":"2018-04-17 20:29:57.000000000","message":"Missing trailing space.","commit_id":"7a8949e64e0975a556c8af4456cdc5ed1f5a0154"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c9072e4fb0abb615b5c02bf19de44d2d2569c911","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        if self.configuration.nexenta_client_address:"},{"line_number":77,"context_line":"            LOG.warning(\u0027nexenta_client_address parameter is deprecated and \u0027"},{"line_number":78,"context_line":"                        \u0027will be removed in upcoming releases, use \u0027"},{"line_number":79,"context_line":"                        \u0027san_ip instead\u0027)"},{"line_number":80,"context_line":"            self.target_vip \u003d self.configuration.nexenta_client_address"},{"line_number":81,"context_line":"        else:"},{"line_number":82,"context_line":"            self.target_vip \u003d self.configuration.san_ip"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f6a8fd7_18a146aa","line":79,"range":{"start_line":79,"start_character":25,"end_line":79,"end_character":31},"updated":"2018-04-17 20:29:57.000000000","message":"target_ip_address","commit_id":"7a8949e64e0975a556c8af4456cdc5ed1f5a0154"}],"cinder/volume/drivers/nexenta/nexentaedge/jsonrpc.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"59ee1c50f68fdba4290df79f2998259186ea5462","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    @retry(retry_exc_tuple, interval\u003d1, retries\u003d6)"},{"line_number":72,"context_line":"    def __call__(self, *args):"},{"line_number":73,"context_line":"        self.path \u003d args[0]"},{"line_number":74,"context_line":"        kwargs \u003d {\u0027timeout\u0027: TIMEOUT}"},{"line_number":75,"context_line":"        data \u003d None"},{"line_number":76,"context_line":"        if len(args) \u003e 1:"},{"line_number":77,"context_line":"            data \u003d json.dumps(args[1])"}],"source_content_type":"text/x-python","patch_set":5,"id":"df7087c5_ee0acc23","line":74,"updated":"2018-03-16 17:53:42.000000000","message":"This should support \"verify\" for SSL validation if driver_ssl_cert_verify is enabled.","commit_id":"cc69803f9a6dd3d403afce58b1e2f6d56ee0fb6a"},{"author":{"_account_id":27781,"name":"zhulingjie","email":"easyzlj@gmail.com","username":"zhulingjie"},"change_message_id":"ba75fa2d8a03e1980e27a22c2302cf40cdb65a0e","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    @retry(retry_exc_tuple, interval\u003d1, retries\u003d6)"},{"line_number":72,"context_line":"    def __call__(self, *args):"},{"line_number":73,"context_line":"        self.path \u003d args[0]"},{"line_number":74,"context_line":"        kwargs \u003d {\u0027timeout\u0027: TIMEOUT}"},{"line_number":75,"context_line":"        data \u003d None"},{"line_number":76,"context_line":"        if len(args) \u003e 1:"},{"line_number":77,"context_line":"            data \u003d json.dumps(args[1])"}],"source_content_type":"text/x-python","patch_set":5,"id":"df7087c5_8c4a2a81","line":74,"in_reply_to":"df7087c5_ee0acc23","updated":"2018-03-18 11:45:49.000000000","message":"agree","commit_id":"cc69803f9a6dd3d403afce58b1e2f6d56ee0fb6a"}],"cinder/volume/drivers/nexenta/options.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"7e7e3c3af567baca9b4e5c1189ada13f55cc6208","unresolved":false,"context_lines":[{"line_number":52,"context_line":"]"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"NEXENTA_CONNECTION_OPTS \u003d ["},{"line_number":55,"context_line":"    cfg.StrOpt(\u0027nexenta_rest_address\u0027,"},{"line_number":56,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":57,"context_line":"               help\u003d\u0027IP address of NexentaEdge management REST API endpoint\u0027),"},{"line_number":58,"context_line":"    cfg.StrOpt(\u0027nexenta_host\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"9f6a8fd7_fcf2669a","line":55,"range":{"start_line":55,"start_character":16,"end_line":55,"end_character":36},"updated":"2018-04-16 19:57:03.000000000","message":"The common san_ip, san_rest_port, etc should be used rather than using driver specific versions.","commit_id":"447f81b02e6a0e54883bef11cd56c9142dafa785"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"bfcef7bb7d2e8af44b5ce2e3d82d9d7796a7abe4","unresolved":false,"context_lines":[{"line_number":156,"context_line":"                     \u0027sparsed files that take no space. If disabled \u0027"},{"line_number":157,"context_line":"                     \u0027(False), volume is created as a regular file, \u0027"},{"line_number":158,"context_line":"                     \u0027which takes a long time.\u0027),"},{"line_number":159,"context_line":"    cfg.BoolOpt(\u0027nexenta_qcow2_volumes\u0027,"},{"line_number":160,"context_line":"                default\u003dFalse,"},{"line_number":161,"context_line":"                help\u003d\u0027Create volumes as QCOW2 files rather than raw files\u0027),"},{"line_number":162,"context_line":"    cfg.BoolOpt(\u0027nexenta_nms_cache_volroot\u0027,"}],"source_content_type":"text/x-python","patch_set":17,"id":"5f7c97a3_1ea10847","line":159,"updated":"2018-06-07 18:40:15.000000000","message":"The commit message says this patch implements iSCSI drivers... why is this here?","commit_id":"33de479e1f00b27f199867037ad65e0a4c3961e5"}]}
