)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"09bd714d5545e7c9d4a5a11f30f7ee544ec2a20a","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch extends the capability of gpfs driver to support volume encryption"},{"line_number":10,"context_line":"at rest using GPFS Native Encryption feature (https://ibm.biz/BdXPBm)."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"DocImpact"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Needs an update in gpfs driver documentation, as this patch introduces"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"ba3cc151_751d6765","line":11,"updated":"2015-07-07 02:47:55.000000000","message":"Sasi,  can we please add some detail here as to how this is used?  Not clear to me based on the code.  You check if the backend supports it, but how would the end user actually use it for their volumes?","commit_id":"907cae46ee92327e85c71e550ab0238a9835b462"},{"author":{"_account_id":9204,"name":"Sasikanth Eda","email":"sasikanth.eda@in.ibm.com","username":"Sasikanth"},"change_message_id":"d3a9aaf372d231e271a705be07ad1ba7ad88c135","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch extends the capability of gpfs driver to support volume encryption"},{"line_number":10,"context_line":"at rest using GPFS Native Encryption feature (https://ibm.biz/BdXPBm)."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"DocImpact"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Needs an update in gpfs driver documentation, as this patch introduces"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"ba3cc151_d930250a","line":11,"in_reply_to":"ba3cc151_751d6765","updated":"2015-07-07 09:13:52.000000000","message":"Thanks Jay, updated the commit message","commit_id":"907cae46ee92327e85c71e550ab0238a9835b462"}],"cinder/tests/unit/test_gpfs.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"9df5c4a26a5cb7197fb7b67fcb299ecddedb66a4","unresolved":false,"context_lines":[{"line_number":1149,"context_line":"        mock_exec.return_value \u003d (\u0027mmlsfs::HEADER:version:reserved:reserved:\u0027"},{"line_number":1150,"context_line":"                                  \u0027deviceName:fieldName:data:remarks:\\n\u0027"},{"line_number":1151,"context_line":"                                  \u0027mmlsfs::0:1:::gpfs:encryption:Yes:\u0027, \u0027\u0027)"},{"line_number":1152,"context_line":"        self.assertEqual(self.driver._get_gpfs_encryption_status(), \u0027Yes\u0027)"},{"line_number":1153,"context_line":""},{"line_number":1154,"context_line":"    @mock.patch(\u0027cinder.utils.execute\u0027)"},{"line_number":1155,"context_line":"    def test_get_gpfs_encryption_status_false(self, mock_exec):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_a49f314f","line":1152,"updated":"2015-08-04 21:34:04.000000000","message":"Please switch to assertEqual(expected_value, actual_value).","commit_id":"29fdedcc4c9422620c5a1d194ee28cafed0195a0"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"894a01ea9984a3589709c7fdf52027856c5496a6","unresolved":false,"context_lines":[{"line_number":1149,"context_line":"        mock_exec.return_value \u003d (\u0027mmlsfs::HEADER:version:reserved:reserved:\u0027"},{"line_number":1150,"context_line":"                                  \u0027deviceName:fieldName:data:remarks:\\n\u0027"},{"line_number":1151,"context_line":"                                  \u0027mmlsfs::0:1:::gpfs:encryption:Yes:\u0027, \u0027\u0027)"},{"line_number":1152,"context_line":"        self.assertEqual(self.driver._get_gpfs_encryption_status(), \u0027Yes\u0027)"},{"line_number":1153,"context_line":""},{"line_number":1154,"context_line":"    @mock.patch(\u0027cinder.utils.execute\u0027)"},{"line_number":1155,"context_line":"    def test_get_gpfs_encryption_status_false(self, mock_exec):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_a645ec17","line":1152,"in_reply_to":"1a4dcd0f_a49f314f","updated":"2015-08-05 03:46:07.000000000","message":"Done","commit_id":"29fdedcc4c9422620c5a1d194ee28cafed0195a0"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"9df5c4a26a5cb7197fb7b67fcb299ecddedb66a4","unresolved":false,"context_lines":[{"line_number":1156,"context_line":"        mock_exec.return_value \u003d (\u0027mmlsfs::HEADER:version:reserved:reserved:\u0027"},{"line_number":1157,"context_line":"                                  \u0027deviceName:fieldName:data:remarks:\\n\u0027"},{"line_number":1158,"context_line":"                                  \u0027mmlsfs::0:1:::gpfs:encryption:No:\u0027, \u0027\u0027)"},{"line_number":1159,"context_line":"        self.assertEqual(self.driver._get_gpfs_encryption_status(), \u0027No\u0027)"},{"line_number":1160,"context_line":""},{"line_number":1161,"context_line":"    @mock.patch(\u0027cinder.utils.execute\u0027)"},{"line_number":1162,"context_line":"    def test_get_gpfs_encryption_status_fail(self, mock_exec):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_44ae6d86","line":1159,"updated":"2015-08-04 21:34:04.000000000","message":"Same.","commit_id":"29fdedcc4c9422620c5a1d194ee28cafed0195a0"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"894a01ea9984a3589709c7fdf52027856c5496a6","unresolved":false,"context_lines":[{"line_number":1156,"context_line":"        mock_exec.return_value \u003d (\u0027mmlsfs::HEADER:version:reserved:reserved:\u0027"},{"line_number":1157,"context_line":"                                  \u0027deviceName:fieldName:data:remarks:\\n\u0027"},{"line_number":1158,"context_line":"                                  \u0027mmlsfs::0:1:::gpfs:encryption:No:\u0027, \u0027\u0027)"},{"line_number":1159,"context_line":"        self.assertEqual(self.driver._get_gpfs_encryption_status(), \u0027No\u0027)"},{"line_number":1160,"context_line":""},{"line_number":1161,"context_line":"    @mock.patch(\u0027cinder.utils.execute\u0027)"},{"line_number":1162,"context_line":"    def test_get_gpfs_encryption_status_fail(self, mock_exec):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_464d083d","line":1159,"in_reply_to":"1a4dcd0f_44ae6d86","updated":"2015-08-05 03:46:07.000000000","message":"Done","commit_id":"29fdedcc4c9422620c5a1d194ee28cafed0195a0"}],"cinder/volume/drivers/ibm/gpfs.py":[{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"9487c107f069364bb747b6072a40df4ba8dc8a3a","unresolved":false,"context_lines":[{"line_number":349,"context_line":"        else:"},{"line_number":350,"context_line":"            LOG.info(_LI(\u0027Downlevel GPFS Cluster Detected. GPFS \u0027"},{"line_number":351,"context_line":"                         \u0027encryption-at-rest feature not enabled in cluster \u0027"},{"line_number":352,"context_line":"                         \u0027daemon level %(cur)s - must be atleast at \u0027"},{"line_number":353,"context_line":"                         \u0027level %(min)s.\u0027) %"},{"line_number":354,"context_line":"                     {\u0027cur\u0027: _gpfs_cluster_release_level,"},{"line_number":355,"context_line":"                      \u0027min\u0027: GPFS_ENC_MIN_RELEASE})"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_5422f752","line":352,"updated":"2015-06-25 16:25:55.000000000","message":"s/atleast/at least/","commit_id":"3cae72c30d46acbb78aa4758950ee875d7dfd9ba"},{"author":{"_account_id":9204,"name":"Sasikanth Eda","email":"sasikanth.eda@in.ibm.com","username":"Sasikanth"},"change_message_id":"47b34457c0dd063dfdbd4cc37c609f4b94ab11f3","unresolved":false,"context_lines":[{"line_number":349,"context_line":"        else:"},{"line_number":350,"context_line":"            LOG.info(_LI(\u0027Downlevel GPFS Cluster Detected. GPFS \u0027"},{"line_number":351,"context_line":"                         \u0027encryption-at-rest feature not enabled in cluster \u0027"},{"line_number":352,"context_line":"                         \u0027daemon level %(cur)s - must be atleast at \u0027"},{"line_number":353,"context_line":"                         \u0027level %(min)s.\u0027) %"},{"line_number":354,"context_line":"                     {\u0027cur\u0027: _gpfs_cluster_release_level,"},{"line_number":355,"context_line":"                      \u0027min\u0027: GPFS_ENC_MIN_RELEASE})"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_52bf52d0","line":352,"in_reply_to":"fa32b979_5422f752","updated":"2015-06-29 10:42:28.000000000","message":"Thanks Thang, corrected","commit_id":"3cae72c30d46acbb78aa4758950ee875d7dfd9ba"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"5125061cd1d71b0b886997471a75e83888436b79","unresolved":false,"context_lines":[{"line_number":710,"context_line":"                                       \u0027--encryption\u0027, \u0027-Y\u0027, run_as_root\u003dTrue)"},{"line_number":711,"context_line":"            lines \u003d out.splitlines()"},{"line_number":712,"context_line":"            value_token \u003d lines[0].split(\u0027:\u0027).index(\u0027data\u0027)"},{"line_number":713,"context_line":"            encryption_status \u003d lines[1].split(\u0027:\u0027)[value_token]"},{"line_number":714,"context_line":"            return encryption_status"},{"line_number":715,"context_line":"        except processutils.ProcessExecutionError as exc:"},{"line_number":716,"context_line":"            LOG.error(_LE(\u0027Failed to issue mmlsfs command, error: %s.\u0027),"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba3cc151_7aaef930","line":713,"updated":"2015-07-10 03:20:37.000000000","message":"This might be improved if you use some regex, which would reduce the code here.","commit_id":"c0b9bd604b6715ef1a5898c878eaa278a3d26027"},{"author":{"_account_id":9204,"name":"Sasikanth Eda","email":"sasikanth.eda@in.ibm.com","username":"Sasikanth"},"change_message_id":"f13736c375fdd4371544915c8ce1066e5989324e","unresolved":false,"context_lines":[{"line_number":710,"context_line":"                                       \u0027--encryption\u0027, \u0027-Y\u0027, run_as_root\u003dTrue)"},{"line_number":711,"context_line":"            lines \u003d out.splitlines()"},{"line_number":712,"context_line":"            value_token \u003d lines[0].split(\u0027:\u0027).index(\u0027data\u0027)"},{"line_number":713,"context_line":"            encryption_status \u003d lines[1].split(\u0027:\u0027)[value_token]"},{"line_number":714,"context_line":"            return encryption_status"},{"line_number":715,"context_line":"        except processutils.ProcessExecutionError as exc:"},{"line_number":716,"context_line":"            LOG.error(_LE(\u0027Failed to issue mmlsfs command, error: %s.\u0027),"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a41bdd9_89069d1b","line":713,"in_reply_to":"ba3cc151_7aaef930","updated":"2015-07-14 15:29:11.000000000","message":"Thanks Thang, I agree to you. There are several other instances which can be modified to use regex. will do that a separate patch.","commit_id":"c0b9bd604b6715ef1a5898c878eaa278a3d26027"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"de1dc3d562ea0233872621455b010666f85de643","unresolved":false,"context_lines":[{"line_number":777,"context_line":"        data[\u0027consistencygroup_support\u0027] \u003d \u0027True\u0027"},{"line_number":778,"context_line":""},{"line_number":779,"context_line":"        if self._encryption_state.lower() \u003d\u003d \u0027yes\u0027:"},{"line_number":780,"context_line":"            data[\u0027gpfs_encryption_rest\u0027] \u003d \u0027True\u0027"},{"line_number":781,"context_line":""},{"line_number":782,"context_line":"        self._stats \u003d data"},{"line_number":783,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"ba3cc151_18b86774","line":780,"updated":"2015-07-08 21:22:33.000000000","message":"Correct me if wrong, I believe the Cinder volumes drivers can only support encryption at rest and not on flight ... its not the functionality of the volume driver, right?\nThen, can we get rid of the \u0027_rest\u0027 and rename this capability as \u0027gpfs_encryption\u0027 only?","commit_id":"c0b9bd604b6715ef1a5898c878eaa278a3d26027"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c10d7667d77b24a0a4b426c0208ce0126101edb2","unresolved":false,"context_lines":[{"line_number":777,"context_line":"        data[\u0027consistencygroup_support\u0027] \u003d \u0027True\u0027"},{"line_number":778,"context_line":""},{"line_number":779,"context_line":"        if self._encryption_state.lower() \u003d\u003d \u0027yes\u0027:"},{"line_number":780,"context_line":"            data[\u0027gpfs_encryption_rest\u0027] \u003d \u0027True\u0027"},{"line_number":781,"context_line":""},{"line_number":782,"context_line":"        self._stats \u003d data"},{"line_number":783,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_6916474d","line":780,"in_reply_to":"3a50d1a3_2056b0d2","updated":"2015-07-23 16:04:41.000000000","message":"I actually prefer the _at_rest part. Just because no drivers currently support in-flight doesn\u0027t mean there won\u0027t be some in the future. I prefer to be explicit here.","commit_id":"c0b9bd604b6715ef1a5898c878eaa278a3d26027"},{"author":{"_account_id":9204,"name":"Sasikanth Eda","email":"sasikanth.eda@in.ibm.com","username":"Sasikanth"},"change_message_id":"cd132a6615db6df983c5f69dace363ddc23bbc54","unresolved":false,"context_lines":[{"line_number":777,"context_line":"        data[\u0027consistencygroup_support\u0027] \u003d \u0027True\u0027"},{"line_number":778,"context_line":""},{"line_number":779,"context_line":"        if self._encryption_state.lower() \u003d\u003d \u0027yes\u0027:"},{"line_number":780,"context_line":"            data[\u0027gpfs_encryption_rest\u0027] \u003d \u0027True\u0027"},{"line_number":781,"context_line":""},{"line_number":782,"context_line":"        self._stats \u003d data"},{"line_number":783,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_af1b9ac9","line":780,"in_reply_to":"3a50d1a3_6916474d","updated":"2015-07-26 04:07:46.000000000","message":"Thanks Sean for giving your opinion, I agree with you and will keep it as it is.","commit_id":"c0b9bd604b6715ef1a5898c878eaa278a3d26027"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"9db974e3adb4f0eb5e88e103f0e0b3359041500b","unresolved":false,"context_lines":[{"line_number":777,"context_line":"        data[\u0027consistencygroup_support\u0027] \u003d \u0027True\u0027"},{"line_number":778,"context_line":""},{"line_number":779,"context_line":"        if self._encryption_state.lower() \u003d\u003d \u0027yes\u0027:"},{"line_number":780,"context_line":"            data[\u0027gpfs_encryption_rest\u0027] \u003d \u0027True\u0027"},{"line_number":781,"context_line":""},{"line_number":782,"context_line":"        self._stats \u003d data"},{"line_number":783,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_2056b0d2","line":780,"in_reply_to":"9a41bdd9_c9bfc5a8","updated":"2015-07-21 09:17:40.000000000","message":"In my view, \u0027_at_rest\u0027 is but obvious, so you can get rid of it and keep it simple as \u0027gpfs_encryption\u0027.","commit_id":"c0b9bd604b6715ef1a5898c878eaa278a3d26027"},{"author":{"_account_id":9204,"name":"Sasikanth Eda","email":"sasikanth.eda@in.ibm.com","username":"Sasikanth"},"change_message_id":"f13736c375fdd4371544915c8ce1066e5989324e","unresolved":false,"context_lines":[{"line_number":777,"context_line":"        data[\u0027consistencygroup_support\u0027] \u003d \u0027True\u0027"},{"line_number":778,"context_line":""},{"line_number":779,"context_line":"        if self._encryption_state.lower() \u003d\u003d \u0027yes\u0027:"},{"line_number":780,"context_line":"            data[\u0027gpfs_encryption_rest\u0027] \u003d \u0027True\u0027"},{"line_number":781,"context_line":""},{"line_number":782,"context_line":"        self._stats \u003d data"},{"line_number":783,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a41bdd9_c9bfc5a8","line":780,"in_reply_to":"ba3cc151_18b86774","updated":"2015-07-14 15:29:11.000000000","message":"Thanks Nilesh, you are correct. used \u0027gpfs_encryption_at_rest\u0027 word to make precise understanding to end user (as well to maintain same notation across all documentations).","commit_id":"c0b9bd604b6715ef1a5898c878eaa278a3d26027"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"9df5c4a26a5cb7197fb7b67fcb299ecddedb66a4","unresolved":false,"context_lines":[{"line_number":364,"context_line":"            LOG.info(_LI(\u0027Downlevel GPFS Cluster Detected. GPFS \u0027"},{"line_number":365,"context_line":"                         \u0027encryption-at-rest feature not enabled in cluster \u0027"},{"line_number":366,"context_line":"                         \u0027daemon level %(cur)s - must be at least at \u0027"},{"line_number":367,"context_line":"                         \u0027level %(min)s.\u0027) %"},{"line_number":368,"context_line":"                     {\u0027cur\u0027: _gpfs_cluster_release_level,"},{"line_number":369,"context_line":"                      \u0027min\u0027: GPFS_ENC_MIN_RELEASE})"},{"line_number":370,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_44c50d3a","line":367,"updated":"2015-08-04 21:34:04.000000000","message":"Switch % to , to pass in the formatting values as arguments to the logger call.","commit_id":"29fdedcc4c9422620c5a1d194ee28cafed0195a0"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"894a01ea9984a3589709c7fdf52027856c5496a6","unresolved":false,"context_lines":[{"line_number":364,"context_line":"            LOG.info(_LI(\u0027Downlevel GPFS Cluster Detected. GPFS \u0027"},{"line_number":365,"context_line":"                         \u0027encryption-at-rest feature not enabled in cluster \u0027"},{"line_number":366,"context_line":"                         \u0027daemon level %(cur)s - must be at least at \u0027"},{"line_number":367,"context_line":"                         \u0027level %(min)s.\u0027) %"},{"line_number":368,"context_line":"                     {\u0027cur\u0027: _gpfs_cluster_release_level,"},{"line_number":369,"context_line":"                      \u0027min\u0027: GPFS_ENC_MIN_RELEASE})"},{"line_number":370,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_e66214ad","line":367,"in_reply_to":"1a4dcd0f_44c50d3a","updated":"2015-08-05 03:46:07.000000000","message":"Done","commit_id":"29fdedcc4c9422620c5a1d194ee28cafed0195a0"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"bb350d1810dae10481c96149a9b41f2ac07db23e","unresolved":false,"context_lines":[{"line_number":799,"context_line":"            self._update_volume_stats()"},{"line_number":800,"context_line":""},{"line_number":801,"context_line":"        return self._stats"},{"line_number":802,"context_line":""},{"line_number":803,"context_line":"    def _update_volume_stats(self):"},{"line_number":804,"context_line":"        \"\"\"Retrieve stats info from volume group.\"\"\""},{"line_number":805,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_cf93644e","line":802,"updated":"2015-08-05 07:54:54.000000000","message":"In the test method, def test_update_volume_stats(self, mock_ensure):\nyou can add a check for data[\u0027gpfs_encryption_rest\u0027].","commit_id":"89ed6ed8f22e54dfb42cf3883883bae6000326e3"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"ab46cb5a100e598de2865de137e3fc80c7fa9cb1","unresolved":false,"context_lines":[{"line_number":799,"context_line":"            self._update_volume_stats()"},{"line_number":800,"context_line":""},{"line_number":801,"context_line":"        return self._stats"},{"line_number":802,"context_line":""},{"line_number":803,"context_line":"    def _update_volume_stats(self):"},{"line_number":804,"context_line":"        \"\"\"Retrieve stats info from volume group.\"\"\""},{"line_number":805,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_aa7a86ef","line":802,"in_reply_to":"1a4dcd0f_cf93644e","updated":"2015-08-05 08:22:58.000000000","message":"Thanks Vincent. \nAdded the check for stats[\u0027gpfs_encryption_rest\u0027] in test_get_volume_stats in test_gpfs.py.","commit_id":"89ed6ed8f22e54dfb42cf3883883bae6000326e3"}]}
