)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9ba462fc5270f39f3f08bea3db8d7b3425c8a268","unresolved":false,"context_lines":[{"line_number":19,"context_line":"  *  brings our reporting of reserved percentage in line with the way"},{"line_number":20,"context_line":"     the scheduler actually makes use of this statistic"},{"line_number":21,"context_line":"  *  simplifies and cleans up the way we gather and report pool statistics"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Closes-bug: 1449620"},{"line_number":24,"context_line":"Change-Id: Ic7b606b88f063b9ed6df62fd1fb7248922496326"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1aca2d91_2deee1ec","line":22,"updated":"2015-05-06 06:29:55.000000000","message":"Need DocImpact.\n\nAlso if someone else worked on the patch (I see you added someone else to the copyright section of a few files), you should use Co-Authored-By in the commit message.","commit_id":"71c39eb9fb47f90d501fc3c2fe8101381aa4a569"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"2e75299f776e0d09d0fdeb7ea1ca3664a5d54adf","unresolved":false,"context_lines":[{"line_number":19,"context_line":"  *  brings our reporting of reserved percentage in line with the way"},{"line_number":20,"context_line":"     the scheduler actually makes use of this statistic"},{"line_number":21,"context_line":"  *  simplifies and cleans up the way we gather and report pool statistics"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Closes-bug: 1449620"},{"line_number":24,"context_line":"Change-Id: Ic7b606b88f063b9ed6df62fd1fb7248922496326"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1aca2d91_282c8faa","line":22,"in_reply_to":"1aca2d91_2deee1ec","updated":"2015-05-06 16:42:33.000000000","message":"Done","commit_id":"71c39eb9fb47f90d501fc3c2fe8101381aa4a569"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"d5d9e4fa5665d660826efa6f25203d5c3a2a6c69","unresolved":false,"context_lines":[{"line_number":34,"context_line":"in our drivers for the newer approach to overprovisioning.  Rather,"},{"line_number":35,"context_line":"it is a bug-fix for an existing failure to honor the nfs_oversub_ratio."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"In liberty, we should as a community decide either to deprecate"},{"line_number":38,"context_line":"nfs_oversub_ratio in favor of max_oversubscription ratio or to"},{"line_number":39,"context_line":"support both configuration options but perhaps also re-implement the"},{"line_number":40,"context_line":"nfs_oversub_ratio using the support in the scheduler for \"virtual\""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"9a0c5dc1_f7864cb8","line":37,"updated":"2015-05-12 17:34:06.000000000","message":"We should deprecate nfs_oversub_ratio in Liberty with a message and remove it in M.","commit_id":"8e4ef3ece739956ed84cde32347e94685cb92959"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"d5d9e4fa5665d660826efa6f25203d5c3a2a6c69","unresolved":false,"context_lines":[{"line_number":38,"context_line":"nfs_oversub_ratio in favor of max_oversubscription ratio or to"},{"line_number":39,"context_line":"support both configuration options but perhaps also re-implement the"},{"line_number":40,"context_line":"nfs_oversub_ratio using the support in the scheduler for \"virtual\""},{"line_number":41,"context_line":"free space rather than having drivers report \"apparent\" free space."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"DocImpact"},{"line_number":44,"context_line":"Co-Authored-By: Dustin Schoenbrun \u003cdustin.schoenbrun@netapp.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"9a0c5dc1_f75bec52","line":41,"updated":"2015-05-12 17:34:06.000000000","message":"I\u0027m not sure why we would need to bring nfs_oversub_ratio to the scheduler, but permanent commit messages aren\u0027t the best place for design planning, so we should probably put all this info somewhere else.  It will just be confusing six months from now, rather than a nice historical record. :)","commit_id":"8e4ef3ece739956ed84cde32347e94685cb92959"}],"cinder/tests/unit/volume/drivers/netapp/dataontap/client/test_client_7mode.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9ba462fc5270f39f3f08bea3db8d7b3425c8a268","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2014 Alex Meade.  All rights reserved."},{"line_number":2,"context_line":"# Copyright (c) 2015 Dustin Schoenbrun. All rights reserved."},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aca2d91_ad5c31ee","line":2,"updated":"2015-05-06 06:29:55.000000000","message":"Is this the correct name?  If so, please also use Co-Authored-By in the commit message.","commit_id":"71c39eb9fb47f90d501fc3c2fe8101381aa4a569"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"2e75299f776e0d09d0fdeb7ea1ca3664a5d54adf","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2014 Alex Meade.  All rights reserved."},{"line_number":2,"context_line":"# Copyright (c) 2015 Dustin Schoenbrun. All rights reserved."},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aca2d91_74e5b4a6","line":2,"in_reply_to":"1aca2d91_ad5c31ee","updated":"2015-05-06 16:42:33.000000000","message":"Done","commit_id":"71c39eb9fb47f90d501fc3c2fe8101381aa4a569"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9ba462fc5270f39f3f08bea3db8d7b3425c8a268","unresolved":false,"context_lines":[{"line_number":662,"context_line":"                             \u0027available_bytes\u0027: expected_available_bytes}))"},{"line_number":663,"context_line":"        self.connection.invoke_successfully.return_value \u003d response"},{"line_number":664,"context_line":""},{"line_number":665,"context_line":"        total_bytes, available_bytes \u003d \\"},{"line_number":666,"context_line":"            self.client.get_flexvol_capacity(fake_flexvol_path)"},{"line_number":667,"context_line":""},{"line_number":668,"context_line":"        self.assertEqual(expected_total_bytes, total_bytes)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aca2d91_ed0909df","line":665,"updated":"2015-05-06 06:29:55.000000000","message":"Suggest using ()","commit_id":"71c39eb9fb47f90d501fc3c2fe8101381aa4a569"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"2e75299f776e0d09d0fdeb7ea1ca3664a5d54adf","unresolved":false,"context_lines":[{"line_number":662,"context_line":"                             \u0027available_bytes\u0027: expected_available_bytes}))"},{"line_number":663,"context_line":"        self.connection.invoke_successfully.return_value \u003d response"},{"line_number":664,"context_line":""},{"line_number":665,"context_line":"        total_bytes, available_bytes \u003d \\"},{"line_number":666,"context_line":"            self.client.get_flexvol_capacity(fake_flexvol_path)"},{"line_number":667,"context_line":""},{"line_number":668,"context_line":"        self.assertEqual(expected_total_bytes, total_bytes)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aca2d91_34ee1c8c","line":665,"in_reply_to":"1aca2d91_ed0909df","updated":"2015-05-06 16:42:33.000000000","message":"Done","commit_id":"71c39eb9fb47f90d501fc3c2fe8101381aa4a569"}],"cinder/tests/unit/volume/drivers/netapp/dataontap/client/test_client_cmode.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9ba462fc5270f39f3f08bea3db8d7b3425c8a268","unresolved":false,"context_lines":[{"line_number":693,"context_line":"                             \u0027total_size\u0027: expected_total_size}))"},{"line_number":694,"context_line":"        self.connection.invoke_successfully.return_value \u003d response"},{"line_number":695,"context_line":""},{"line_number":696,"context_line":"        total_size, available_size \u003d \\"},{"line_number":697,"context_line":"            self.client.get_flexvol_capacity(fake_flexvol_path)"},{"line_number":698,"context_line":""},{"line_number":699,"context_line":"        self.assertEqual(expected_total_size, total_size)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aca2d91_6d929959","line":696,"updated":"2015-05-06 06:29:55.000000000","message":"()","commit_id":"71c39eb9fb47f90d501fc3c2fe8101381aa4a569"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"2e75299f776e0d09d0fdeb7ea1ca3664a5d54adf","unresolved":false,"context_lines":[{"line_number":693,"context_line":"                             \u0027total_size\u0027: expected_total_size}))"},{"line_number":694,"context_line":"        self.connection.invoke_successfully.return_value \u003d response"},{"line_number":695,"context_line":""},{"line_number":696,"context_line":"        total_size, available_size \u003d \\"},{"line_number":697,"context_line":"            self.client.get_flexvol_capacity(fake_flexvol_path)"},{"line_number":698,"context_line":""},{"line_number":699,"context_line":"        self.assertEqual(expected_total_size, total_size)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aca2d91_3463bc1c","line":696,"in_reply_to":"1aca2d91_6d929959","updated":"2015-05-06 16:42:33.000000000","message":"Done","commit_id":"71c39eb9fb47f90d501fc3c2fe8101381aa4a569"}],"cinder/volume/drivers/netapp/dataontap/nfs_base.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9ba462fc5270f39f3f08bea3db8d7b3425c8a268","unresolved":false,"context_lines":[{"line_number":671,"context_line":"        \"\"\"Returns the share capacity metrics needed by the scheduler.\"\"\""},{"line_number":672,"context_line":""},{"line_number":673,"context_line":"        used_ratio \u003d self.configuration.nfs_used_ratio"},{"line_number":674,"context_line":"        oversub_ratio \u003d self.configuration.nfs_oversub_ratio"},{"line_number":675,"context_line":""},{"line_number":676,"context_line":"        # The scheduler\u0027s capacity filter will reduce the amount of"},{"line_number":677,"context_line":"        # free space that we report to it by the reserved percentage."}],"source_content_type":"text/x-python","patch_set":1,"id":"1aca2d91_2daa6171","line":674,"updated":"2015-05-06 06:29:55.000000000","message":"Do you need to check the nfs_sparsed_volumes flag when using nfs_oversub_ratio?","commit_id":"71c39eb9fb47f90d501fc3c2fe8101381aa4a569"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"2e75299f776e0d09d0fdeb7ea1ca3664a5d54adf","unresolved":false,"context_lines":[{"line_number":671,"context_line":"        \"\"\"Returns the share capacity metrics needed by the scheduler.\"\"\""},{"line_number":672,"context_line":""},{"line_number":673,"context_line":"        used_ratio \u003d self.configuration.nfs_used_ratio"},{"line_number":674,"context_line":"        oversub_ratio \u003d self.configuration.nfs_oversub_ratio"},{"line_number":675,"context_line":""},{"line_number":676,"context_line":"        # The scheduler\u0027s capacity filter will reduce the amount of"},{"line_number":677,"context_line":"        # free space that we report to it by the reserved percentage."}],"source_content_type":"text/x-python","patch_set":1,"id":"1aca2d91_bc0d8039","line":674,"in_reply_to":"1aca2d91_2daa6171","updated":"2015-05-06 16:42:33.000000000","message":"We\u0027ll do a check for thin provisioning or sparsed volume creation when we implement new-style oversubscription as in your blueprint.  However, this bug was for a traditional kind of overprovisioning as supported in the generic NFS driver, which current NetApp drivers failed to support.  The generic NFS driver just gives the operator a lot of rope here, so we are following it in that regard and aren\u0027t enhancing or modifying the tradtitional NFS oversubscription with this bug fix.","commit_id":"71c39eb9fb47f90d501fc3c2fe8101381aa4a569"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"6babeb09a8bbe7a8d834dc4fb638318897636aff","unresolved":false,"context_lines":[{"line_number":676,"context_line":"        # The scheduler\u0027s capacity filter will reduce the amount of"},{"line_number":677,"context_line":"        # free space that we report to it by the reserved percentage."},{"line_number":678,"context_line":"        reserved_ratio \u003d 1 - used_ratio"},{"line_number":679,"context_line":"        reserved_percentage \u003d round(100 * reserved_ratio)"},{"line_number":680,"context_line":""},{"line_number":681,"context_line":"        total_size, total_available \u003d self._get_capacity_info(nfs_share)"},{"line_number":682,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1aca2d91_f2e2d39e","line":679,"updated":"2015-05-07 06:06:12.000000000","message":"There is a reserved_percentage config option as well, this change doesn\u0027t honor that config option, which probably is OK if clearly documented that for NetApp driver \u0027used_ratio\u0027 overrides reserved_percentage.  But I think they are slightly different and were introduced for different use cases.","commit_id":"fe66916691cf5b96a7beba0ba99c9082cd20ca07"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"6babeb09a8bbe7a8d834dc4fb638318897636aff","unresolved":false,"context_lines":[{"line_number":680,"context_line":""},{"line_number":681,"context_line":"        total_size, total_available \u003d self._get_capacity_info(nfs_share)"},{"line_number":682,"context_line":""},{"line_number":683,"context_line":"        apparent_size \u003d total_size * oversub_ratio"},{"line_number":684,"context_line":"        apparent_size_gb \u003d na_utils.round_down("},{"line_number":685,"context_line":"            apparent_size / units.Gi, \u00270.01\u0027)"},{"line_number":686,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1aca2d91_d2eeb78a","line":683,"updated":"2015-05-07 06:06:12.000000000","message":"I don\u0027t think driver should do this calculation, because scheduler filter \u0026 weigher are doing this. Instead, driver should stick to report actual size (total, free) and over, used ratio and provisioned_capacity.  Please refer to commit: 3548a4bc9edbb26b248b5af5ecc2145f2c6f7481 for related changes.","commit_id":"fe66916691cf5b96a7beba0ba99c9082cd20ca07"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"9ae021140c43cd15558dc037ed6be5c908f1eafd","unresolved":false,"context_lines":[{"line_number":698,"context_line":"    def _get_capacity_info(self, nfs_share):"},{"line_number":699,"context_line":"        \"\"\"Get total capacity and free capacity in bytes for an nfs share.\"\"\""},{"line_number":700,"context_line":"        export_path \u003d nfs_share.rsplit(\u0027:\u0027, 1)[1]"},{"line_number":701,"context_line":"        return self.zapi_client.get_flexvol_capacity(export_path)"},{"line_number":702,"context_line":""},{"line_number":703,"context_line":"    def _check_volume_type(self, volume, share, file_name):"},{"line_number":704,"context_line":"        \"\"\"Match volume type for share file.\"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"1aca2d91_2d51f7d8","line":701,"updated":"2015-05-07 15:46:26.000000000","message":"Looks like zapi_client is only available in subclass of NetAppNfsDriver.","commit_id":"f3f52985fb49a9843203eb2e354f1df5dab2aa4d"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"03f64dfe506f6b743c66cc045f4900183bb620a3","unresolved":false,"context_lines":[{"line_number":698,"context_line":"    def _get_capacity_info(self, nfs_share):"},{"line_number":699,"context_line":"        \"\"\"Get total capacity and free capacity in bytes for an nfs share.\"\"\""},{"line_number":700,"context_line":"        export_path \u003d nfs_share.rsplit(\u0027:\u0027, 1)[1]"},{"line_number":701,"context_line":"        return self.zapi_client.get_flexvol_capacity(export_path)"},{"line_number":702,"context_line":""},{"line_number":703,"context_line":"    def _check_volume_type(self, volume, share, file_name):"},{"line_number":704,"context_line":"        \"\"\"Match volume type for share file.\"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"1aca2d91_9035cadb","line":701,"updated":"2015-05-07 12:36:51.000000000","message":"Not sure how it worked before, but the pylint error here seems legitimate. I don\u0027t see zapi_client defined anywhere.","commit_id":"f3f52985fb49a9843203eb2e354f1df5dab2aa4d"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a1f3a49a936514c5c3d4f39712aab2e4a2900415","unresolved":false,"context_lines":[{"line_number":697,"context_line":""},{"line_number":698,"context_line":"    def _get_capacity_info(self, nfs_share):"},{"line_number":699,"context_line":"        \"\"\"Get total capacity and free capacity in bytes for an nfs share.\"\"\""},{"line_number":700,"context_line":"        raise NotImplementedError"},{"line_number":701,"context_line":""},{"line_number":702,"context_line":"    def _check_volume_type(self, volume, share, file_name):"},{"line_number":703,"context_line":"        \"\"\"Match volume type for share file.\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"1aca2d91_9d7c83b6","line":700,"updated":"2015-05-08 21:26:22.000000000","message":"Rather than duplicating this in the subclasses I think you should be able to just add \"self.zapi_client \u003d None\" in this class, then keep the implementation here knowing that by the time it is called zapi_client will had to have been set by the child classes.","commit_id":"88ef4487a0f2c2f9aa72031012da555c6d79ee81"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"8941787684b65eda2785b8dd2b2018a7759cb6c7","unresolved":false,"context_lines":[{"line_number":697,"context_line":""},{"line_number":698,"context_line":"    def _get_capacity_info(self, nfs_share):"},{"line_number":699,"context_line":"        \"\"\"Get total capacity and free capacity in bytes for an nfs share.\"\"\""},{"line_number":700,"context_line":"        raise NotImplementedError"},{"line_number":701,"context_line":""},{"line_number":702,"context_line":"    def _check_volume_type(self, volume, share, file_name):"},{"line_number":703,"context_line":"        \"\"\"Match volume type for share file.\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"9af37de9_d8571cc9","line":700,"in_reply_to":"1aca2d91_9d7c83b6","updated":"2015-05-10 20:48:48.000000000","message":"I\u0027d rather not have the duplicated code.  Thanks!","commit_id":"88ef4487a0f2c2f9aa72031012da555c6d79ee81"}]}
