)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"85f262aede09778e89ee484e29c5d1b0f830f5eb","unresolved":false,"context_lines":[{"line_number":18,"context_line":"* nfs_used_ratio:"},{"line_number":19,"context_line":"    Float representation of the maximum allowed usage (e.g. 0.95"},{"line_number":20,"context_line":"    calculated by available_space / total_space) before the share"},{"line_number":21,"context_line":"    is no longer concidered a valid target.  Default: 0.95"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"* nfs_oversub_ratio:"},{"line_number":24,"context_line":"    Float representation of the oversubscriotion ratio allowed when"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAAPH%2F%2F2V8%3D","line":21,"updated":"2013-05-21 18:58:55.000000000","message":"I\u0027m a little wary of \"Default: 0.95\".  This means that someone upgrading from Grizzly to Havana automatically loses some free capacity.  Is this safe?  Why not 1.0?","commit_id":"3ff551afa36b789f26f5efea1a7393cfae9961ae"}],"cinder/units.py":[{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"7b05914212e3e86c5100bd727f745fa6dc1b3368","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":"\"\"\""},{"line_number":17,"context_line":"A module where we define some basic units for use across Cinder"},{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"KiB \u003d 1024"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2Fx%2B8%3D","line":17,"updated":"2013-05-23 06:51:06.000000000","message":"Period at end of docstring","commit_id":"03e8b07988fb05384ef0fa6467153c8773d7ebf5"}],"cinder/volume/drivers/nfs.py":[{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"75b3d28986ce18f729f8c14a918a8f7ac4fdc029","unresolved":false,"context_lines":[{"line_number":54,"context_line":"                 help\u003d(\u0027This will compare the allocated to available space on \u0027"},{"line_number":55,"context_line":"                       \u0027the volume destination.  If the ratio exceeds this \u0027"},{"line_number":56,"context_line":"                       \u0027number, the destination will no longer be valid.\u0027))"},{"line_number":57,"context_line":"]"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"VERSION \u003d \u00271.0\u0027"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2F8%2BE%3D","line":57,"updated":"2013-05-17 21:25:38.000000000","message":"Is there checking anywhere to ensure that valid ranges are passed in for these values?  If not, it seems like something that should be done.  Someone could easily make do a finger check setting the values and end up with odd behavior.\n\nWould recommend adding such checks and also adding tests to go with the checks.","commit_id":"5af6f185e8202a6ef9c1bbc111e5fe5fe5dc070b"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"cfc0db55a57611dde0190e492fde430b263ac3a1","unresolved":false,"context_lines":[{"line_number":54,"context_line":"                 help\u003d(\u0027This will compare the allocated to available space on \u0027"},{"line_number":55,"context_line":"                       \u0027the volume destination.  If the ratio exceeds this \u0027"},{"line_number":56,"context_line":"                       \u0027number, the destination will no longer be valid.\u0027))"},{"line_number":57,"context_line":"]"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"VERSION \u003d \u00271.0\u0027"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2F5JI%3D","line":57,"in_reply_to":"AAAAPH%2F%2F5mU%3D","updated":"2013-05-20 20:45:57.000000000","message":"Done","commit_id":"5af6f185e8202a6ef9c1bbc111e5fe5fe5dc070b"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"fca03078dc442210df2b9a88eee46db5c6a7be2d","unresolved":false,"context_lines":[{"line_number":54,"context_line":"                 help\u003d(\u0027This will compare the allocated to available space on \u0027"},{"line_number":55,"context_line":"                       \u0027the volume destination.  If the ratio exceeds this \u0027"},{"line_number":56,"context_line":"                       \u0027number, the destination will no longer be valid.\u0027))"},{"line_number":57,"context_line":"]"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"VERSION \u003d \u00271.0\u0027"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2F87o%3D","line":57,"in_reply_to":"AAAAPH%2F%2F8%2BE%3D","updated":"2013-05-17 21:59:31.000000000","message":"Fair enough.  Sane used_ratio (e.g. 0.0 \u003c used_ratio \u003c\u003d 1.0) and non-negative oversub_ratio (theoretically forcing undersubscription should be allowed by setting oversub_ratio to \u003c 1.0) are worthwhile checking for.  I\u0027ll get a new patch rolled with tests and the like for this.","commit_id":"5af6f185e8202a6ef9c1bbc111e5fe5fe5dc070b"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"4ee461256da2840b6358a112c30b81672c4056c2","unresolved":false,"context_lines":[{"line_number":54,"context_line":"                 help\u003d(\u0027This will compare the allocated to available space on \u0027"},{"line_number":55,"context_line":"                       \u0027the volume destination.  If the ratio exceeds this \u0027"},{"line_number":56,"context_line":"                       \u0027number, the destination will no longer be valid.\u0027))"},{"line_number":57,"context_line":"]"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"VERSION \u003d \u00271.0\u0027"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2F5mU%3D","line":57,"in_reply_to":"AAAAPH%2F%2F87o%3D","updated":"2013-05-20 18:32:15.000000000","message":"Sounds good.  Thanks!","commit_id":"5af6f185e8202a6ef9c1bbc111e5fe5fe5dc070b"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"75b3d28986ce18f729f8c14a918a8f7ac4fdc029","unresolved":false,"context_lines":[{"line_number":273,"context_line":"                    continue"},{"line_number":274,"context_line":"            elif total_available \u003c\u003d requested_volume_size:"},{"line_number":275,"context_line":"                LOG.debug(_(\u0027%s is above nfs_oversub_ratio\u0027), nfs_share)"},{"line_number":276,"context_line":"                continue"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"            if total_allocated / total_size \u003e\u003d oversub_ratio:"},{"line_number":279,"context_line":"                LOG.debug(_(\u0027%s reserved space is above nfs_oversub_ratio\u0027),"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2F8%2F4%3D","line":276,"updated":"2013-05-17 21:25:38.000000000","message":"Perhaps this is just a style thing, but why not check total_available first and then only do the rest of the checking if there is sufficient space?  Otherwise the checks really aren\u0027t necessary because we aren\u0027t going to be able to use the share anyway.","commit_id":"5af6f185e8202a6ef9c1bbc111e5fe5fe5dc070b"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"cfc0db55a57611dde0190e492fde430b263ac3a1","unresolved":false,"context_lines":[{"line_number":273,"context_line":"                    continue"},{"line_number":274,"context_line":"            elif total_available \u003c\u003d requested_volume_size:"},{"line_number":275,"context_line":"                LOG.debug(_(\u0027%s is above nfs_oversub_ratio\u0027), nfs_share)"},{"line_number":276,"context_line":"                continue"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"            if total_allocated / total_size \u003e\u003d oversub_ratio:"},{"line_number":279,"context_line":"                LOG.debug(_(\u0027%s reserved space is above nfs_oversub_ratio\u0027),"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2F5JE%3D","line":276,"in_reply_to":"AAAAPH%2F%2F5lg%3D","updated":"2013-05-20 20:45:57.000000000","message":"Done - Added code comments to make this more clear.","commit_id":"5af6f185e8202a6ef9c1bbc111e5fe5fe5dc070b"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"fca03078dc442210df2b9a88eee46db5c6a7be2d","unresolved":false,"context_lines":[{"line_number":273,"context_line":"                    continue"},{"line_number":274,"context_line":"            elif total_available \u003c\u003d requested_volume_size:"},{"line_number":275,"context_line":"                LOG.debug(_(\u0027%s is above nfs_oversub_ratio\u0027), nfs_share)"},{"line_number":276,"context_line":"                continue"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"            if total_allocated / total_size \u003e\u003d oversub_ratio:"},{"line_number":279,"context_line":"                LOG.debug(_(\u0027%s reserved space is above nfs_oversub_ratio\u0027),"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2F87w%3D","line":276,"in_reply_to":"AAAAPH%2F%2F8%2F4%3D","updated":"2013-05-17 21:59:31.000000000","message":"The reason for the current check order is that the used_ratio is independent of oversubscription ratios.  If the used_ratio is set to 0.95 and you have less that 5% available on the share, it wont matter if your oversubscription ratio is set at 1000.0, we want to avoid selecting the share.\n\n\"Total_available\" is possibly multiplied out for oversubscription possibilities.  Perhaps I should rename the variable to be a bit more clear (such as \"apparent\"). \n\nIt seemed to be more sane to use a value that is more quantifiable via systems tools (if you were to look at df vs. say df * oversub_ratio)","commit_id":"5af6f185e8202a6ef9c1bbc111e5fe5fe5dc070b"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"4ee461256da2840b6358a112c30b81672c4056c2","unresolved":false,"context_lines":[{"line_number":273,"context_line":"                    continue"},{"line_number":274,"context_line":"            elif total_available \u003c\u003d requested_volume_size:"},{"line_number":275,"context_line":"                LOG.debug(_(\u0027%s is above nfs_oversub_ratio\u0027), nfs_share)"},{"line_number":276,"context_line":"                continue"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"            if total_allocated / total_size \u003e\u003d oversub_ratio:"},{"line_number":279,"context_line":"                LOG.debug(_(\u0027%s reserved space is above nfs_oversub_ratio\u0027),"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2F5lg%3D","line":276,"in_reply_to":"AAAAPH%2F%2F87w%3D","updated":"2013-05-20 18:32:15.000000000","message":"Ah, ok.  I think I understand now.  Due to oversubscription it is possible to not have all the requested space available but oversubscribe to it anyway.  That makes more sense.  Thanks for clarifying.","commit_id":"5af6f185e8202a6ef9c1bbc111e5fe5fe5dc070b"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"39cfc67f2b796417d22de320138f21f07fc216a7","unresolved":false,"context_lines":[{"line_number":56,"context_line":"                       \u0027number, the destination will no longer be valid.\u0027))"},{"line_number":57,"context_line":"]"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"VERSION \u003d \u00271.0\u0027"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"class RemoteFsDriver(driver.VolumeDriver):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPH%2F%2F3ls%3D","line":59,"updated":"2013-05-21 11:07:58.000000000","message":"Version needs a change for this type of change I guess..","commit_id":"3ff551afa36b789f26f5efea1a7393cfae9961ae"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"cc2fccf3017dfdf3588bcd72088570e9646b4f48","unresolved":false,"context_lines":[{"line_number":56,"context_line":"                       \u0027number, the destination will no longer be valid.\u0027))"},{"line_number":57,"context_line":"]"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"VERSION \u003d \u00271.0\u0027"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"class RemoteFsDriver(driver.VolumeDriver):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPH%2F%2F2YM%3D","line":59,"in_reply_to":"AAAAPH%2F%2F3ls%3D","updated":"2013-05-21 18:40:40.000000000","message":"I\u0027ll bump this to V1.1 in the next patchset.","commit_id":"3ff551afa36b789f26f5efea1a7393cfae9961ae"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"39cfc67f2b796417d22de320138f21f07fc216a7","unresolved":false,"context_lines":[{"line_number":143,"context_line":"            msg \u003d _(\"NFS config \u0027nfs_oversub_ratio\u0027 invalid.  Must be \u003e 0: \""},{"line_number":144,"context_line":"                    \"%s\") % self.configuration.nfs_oversub_ratio"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"            LOG.error(msg, self.configuration.nfs_oversub_ratio)"},{"line_number":147,"context_line":"            raise exception.NfsException(msg)"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"        if not self.configuration.nfs_used_ratio \u003e 0 and \\"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPH%2F%2F3lc%3D","line":146,"updated":"2013-05-21 11:07:58.000000000","message":"passing self.configuration.nfs_oversub_ratio twice","commit_id":"3ff551afa36b789f26f5efea1a7393cfae9961ae"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"cc2fccf3017dfdf3588bcd72088570e9646b4f48","unresolved":false,"context_lines":[{"line_number":143,"context_line":"            msg \u003d _(\"NFS config \u0027nfs_oversub_ratio\u0027 invalid.  Must be \u003e 0: \""},{"line_number":144,"context_line":"                    \"%s\") % self.configuration.nfs_oversub_ratio"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"            LOG.error(msg, self.configuration.nfs_oversub_ratio)"},{"line_number":147,"context_line":"            raise exception.NfsException(msg)"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"        if not self.configuration.nfs_used_ratio \u003e 0 and \\"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPH%2F%2F2ZE%3D","line":146,"in_reply_to":"AAAAPH%2F%2F3lc%3D","updated":"2013-05-21 18:40:40.000000000","message":"Done in next patchset.","commit_id":"3ff551afa36b789f26f5efea1a7393cfae9961ae"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"39cfc67f2b796417d22de320138f21f07fc216a7","unresolved":false,"context_lines":[{"line_number":146,"context_line":"            LOG.error(msg, self.configuration.nfs_oversub_ratio)"},{"line_number":147,"context_line":"            raise exception.NfsException(msg)"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"        if not self.configuration.nfs_used_ratio \u003e 0 and \\"},{"line_number":150,"context_line":"                        self.configuration.nfs_used_ratio \u003c\u003d 1:"},{"line_number":151,"context_line":"            msg \u003d _(\"NFS config \u0027nfs_used_ratio\u0027 invalid.  Must be \u003e 0 \""},{"line_number":152,"context_line":"                    \"and \u003c\u003d 1.0: %s\") % self.configuration.nfs_used_ratio"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPH%2F%2F3lo%3D","line":149,"updated":"2013-05-21 11:07:58.000000000","message":"Use brackets instead of line continuation operator","commit_id":"3ff551afa36b789f26f5efea1a7393cfae9961ae"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"cc2fccf3017dfdf3588bcd72088570e9646b4f48","unresolved":false,"context_lines":[{"line_number":146,"context_line":"            LOG.error(msg, self.configuration.nfs_oversub_ratio)"},{"line_number":147,"context_line":"            raise exception.NfsException(msg)"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"        if not self.configuration.nfs_used_ratio \u003e 0 and \\"},{"line_number":150,"context_line":"                        self.configuration.nfs_used_ratio \u003c\u003d 1:"},{"line_number":151,"context_line":"            msg \u003d _(\"NFS config \u0027nfs_used_ratio\u0027 invalid.  Must be \u003e 0 \""},{"line_number":152,"context_line":"                    \"and \u003c\u003d 1.0: %s\") % self.configuration.nfs_used_ratio"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPH%2F%2F2ZA%3D","line":149,"in_reply_to":"AAAAPH%2F%2F3lo%3D","updated":"2013-05-21 18:40:40.000000000","message":"Done in next patchset.","commit_id":"3ff551afa36b789f26f5efea1a7393cfae9961ae"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"39cfc67f2b796417d22de320138f21f07fc216a7","unresolved":false,"context_lines":[{"line_number":150,"context_line":"                        self.configuration.nfs_used_ratio \u003c\u003d 1:"},{"line_number":151,"context_line":"            msg \u003d _(\"NFS config \u0027nfs_used_ratio\u0027 invalid.  Must be \u003e 0 \""},{"line_number":152,"context_line":"                    \"and \u003c\u003d 1.0: %s\") % self.configuration.nfs_used_ratio"},{"line_number":153,"context_line":"            LOG.error(msg, self.configuration.nfs_oversub_ratio)"},{"line_number":154,"context_line":"            raise exception.NfsException(msg)"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPH%2F%2F3lQ%3D","line":153,"updated":"2013-05-21 11:07:58.000000000","message":"passing self.configuration.nfs_oversub_ratio twice","commit_id":"3ff551afa36b789f26f5efea1a7393cfae9961ae"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"cc2fccf3017dfdf3588bcd72088570e9646b4f48","unresolved":false,"context_lines":[{"line_number":150,"context_line":"                        self.configuration.nfs_used_ratio \u003c\u003d 1:"},{"line_number":151,"context_line":"            msg \u003d _(\"NFS config \u0027nfs_used_ratio\u0027 invalid.  Must be \u003e 0 \""},{"line_number":152,"context_line":"                    \"and \u003c\u003d 1.0: %s\") % self.configuration.nfs_used_ratio"},{"line_number":153,"context_line":"            LOG.error(msg, self.configuration.nfs_oversub_ratio)"},{"line_number":154,"context_line":"            raise exception.NfsException(msg)"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPH%2F%2F2Y8%3D","line":153,"in_reply_to":"AAAAPH%2F%2F3lQ%3D","updated":"2013-05-21 18:40:40.000000000","message":"done in next patchset.","commit_id":"3ff551afa36b789f26f5efea1a7393cfae9961ae"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"ccabe156cc3267e14092bbdbcc0ae3bde07367c3","unresolved":false,"context_lines":[{"line_number":259,"context_line":"    def _find_share(self, volume_size_for):"},{"line_number":260,"context_line":"        \"\"\"Choose NFS share among available ones for given volume size. Current"},{"line_number":261,"context_line":"        implementation looks for greatest capacity"},{"line_number":262,"context_line":"        :param volume_size_for: int size in Gb"},{"line_number":263,"context_line":"        \"\"\""},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"        if not self._mounted_shares:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPH%2F%2F2ac%3D","line":262,"updated":"2013-05-21 18:32:14.000000000","message":"Gb -\u003e GB","commit_id":"3ff551afa36b789f26f5efea1a7393cfae9961ae"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"d5b4147daec615bb44957e0f5944d433dafe6e5a","unresolved":false,"context_lines":[{"line_number":259,"context_line":"    def _find_share(self, volume_size_for):"},{"line_number":260,"context_line":"        \"\"\"Choose NFS share among available ones for given volume size. Current"},{"line_number":261,"context_line":"        implementation looks for greatest capacity"},{"line_number":262,"context_line":"        :param volume_size_for: int size in Gb"},{"line_number":263,"context_line":"        \"\"\""},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"        if not self._mounted_shares:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPH%2F%2F2VM%3D","line":262,"in_reply_to":"AAAAPH%2F%2F2ac%3D","updated":"2013-05-21 19:07:02.000000000","message":"Sure, I\u0027ll fix that in my next patchset ;) [Since I haven\u0027t submitted it yet]","commit_id":"3ff551afa36b789f26f5efea1a7393cfae9961ae"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"ab071045f555e10f92ce7f305d3583362f070f4b","unresolved":false,"context_lines":[{"line_number":331,"context_line":"        mount_point \u003d self._get_mount_point_for_share(nfs_share)"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"        df, _ \u003d self._execute(\u0027df\u0027, \u0027-P\u0027, \u0027-B\u0027, \u00271\u0027, mount_point,"},{"line_number":334,"context_line":"                              run_as_root\u003dTrue)"},{"line_number":335,"context_line":"        df \u003d df.splitlines()[1]"},{"line_number":336,"context_line":"        total_available \u003d float(df.split()[3])"},{"line_number":337,"context_line":"        total_size \u003d float(df.split()[1])"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPH%2F%2F4q4%3D","line":334,"updated":"2013-05-20 23:41:51.000000000","message":"We should make sure df has something here before dereferencing the output of df.splitlines()","commit_id":"3ff551afa36b789f26f5efea1a7393cfae9961ae"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"4df9978a4df174af09536e8c46652f583ab694c6","unresolved":false,"context_lines":[{"line_number":331,"context_line":"        mount_point \u003d self._get_mount_point_for_share(nfs_share)"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"        df, _ \u003d self._execute(\u0027df\u0027, \u0027-P\u0027, \u0027-B\u0027, \u00271\u0027, mount_point,"},{"line_number":334,"context_line":"                              run_as_root\u003dTrue)"},{"line_number":335,"context_line":"        df \u003d df.splitlines()[1]"},{"line_number":336,"context_line":"        total_available \u003d float(df.split()[3])"},{"line_number":337,"context_line":"        total_size \u003d float(df.split()[1])"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPH%2F%2F2YE%3D","line":334,"in_reply_to":"AAAAPH%2F%2F4mc%3D","updated":"2013-05-21 18:41:07.000000000","message":"Just because you get a 0 return code doesn\u0027t mean that df will contain anything.","commit_id":"3ff551afa36b789f26f5efea1a7393cfae9961ae"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"b7f9345e9119cff560200ff6aa38efa66bf01fdb","unresolved":false,"context_lines":[{"line_number":331,"context_line":"        mount_point \u003d self._get_mount_point_for_share(nfs_share)"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"        df, _ \u003d self._execute(\u0027df\u0027, \u0027-P\u0027, \u0027-B\u0027, \u00271\u0027, mount_point,"},{"line_number":334,"context_line":"                              run_as_root\u003dTrue)"},{"line_number":335,"context_line":"        df \u003d df.splitlines()[1]"},{"line_number":336,"context_line":"        total_available \u003d float(df.split()[3])"},{"line_number":337,"context_line":"        total_size \u003d float(df.split()[1])"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPH%2F%2F4mc%3D","line":334,"in_reply_to":"AAAAPH%2F%2F4q4%3D","updated":"2013-05-21 00:25:19.000000000","message":"utils.execute validates the exit code is in-fact 0 by default or it will raise an exception and prevent moving forward.  What extra validation should exist here?  I think that exit code check should be sufficient in these cases.\n\nIn the case that the command fails, we should be in an exception before we do a splitlines().","commit_id":"3ff551afa36b789f26f5efea1a7393cfae9961ae"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"ab071045f555e10f92ce7f305d3583362f070f4b","unresolved":false,"context_lines":[{"line_number":337,"context_line":"        total_size \u003d float(df.split()[1])"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"        du, _ \u003d self._execute(\u0027du\u0027, \u0027-sb\u0027, \u0027--apparent-size\u0027, \u0027--exclude\u0027,"},{"line_number":340,"context_line":"                              \u0027*snapshot*\u0027, mount_point, run_as_root\u003dTrue)"},{"line_number":341,"context_line":"        total_allocated \u003d float(du.split()[0])"},{"line_number":342,"context_line":"        return total_size, total_available, total_allocated"},{"line_number":343,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPH%2F%2F4qw%3D","line":340,"updated":"2013-05-20 23:41:51.000000000","message":"Same here.  Add some sanity checks for du.","commit_id":"3ff551afa36b789f26f5efea1a7393cfae9961ae"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"b7f9345e9119cff560200ff6aa38efa66bf01fdb","unresolved":false,"context_lines":[{"line_number":337,"context_line":"        total_size \u003d float(df.split()[1])"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"        du, _ \u003d self._execute(\u0027du\u0027, \u0027-sb\u0027, \u0027--apparent-size\u0027, \u0027--exclude\u0027,"},{"line_number":340,"context_line":"                              \u0027*snapshot*\u0027, mount_point, run_as_root\u003dTrue)"},{"line_number":341,"context_line":"        total_allocated \u003d float(du.split()[0])"},{"line_number":342,"context_line":"        return total_size, total_available, total_allocated"},{"line_number":343,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPH%2F%2F4mg%3D","line":340,"in_reply_to":"AAAAPH%2F%2F4qw%3D","updated":"2013-05-21 00:25:19.000000000","message":"Same as above comment.  execute should handle this for us, and raise an exception if the return code isn\u0027t 0.","commit_id":"3ff551afa36b789f26f5efea1a7393cfae9961ae"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"5f0fb58026b51458a3d8d2e7a9e5007daaaf95d2","unresolved":false,"context_lines":[{"line_number":250,"context_line":"                if share and not share.startswith(\u0027#\u0027)]"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"    def _ensure_share_mounted(self, nfs_share):"},{"line_number":253,"context_line":"        \"\"\"Mount NFS share"},{"line_number":254,"context_line":"        :param nfs_share:"},{"line_number":255,"context_line":"        \"\"\""},{"line_number":256,"context_line":"        mount_path \u003d self._get_mount_point_for_share(nfs_share)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2F1Go%3D","line":253,"updated":"2013-05-22 04:48:45.000000000","message":"Need the \u0027.\u0027 at the end, but actually I typically skip docstrings in private methods, it\u0027s up to you if you want them or not.\n\nAlso for simple and pretty self explanatory methods such as this one it might be more trouble than it\u0027s worth.","commit_id":"8ce0414ee754751d1696731a65ebaddd79a835c1"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"d4ceb097d207ace4e837d37476ad3da1bc2bb87e","unresolved":false,"context_lines":[{"line_number":250,"context_line":"                if share and not share.startswith(\u0027#\u0027)]"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"    def _ensure_share_mounted(self, nfs_share):"},{"line_number":253,"context_line":"        \"\"\"Mount NFS share"},{"line_number":254,"context_line":"        :param nfs_share:"},{"line_number":255,"context_line":"        \"\"\""},{"line_number":256,"context_line":"        mount_path \u003d self._get_mount_point_for_share(nfs_share)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2FzTo%3D","line":253,"in_reply_to":"AAAAPH%2F%2F1Go%3D","updated":"2013-05-22 18:38:46.000000000","message":"I\u0027ll cleanup the various docstring(s) here.  there are a few that need love looking over the file.","commit_id":"8ce0414ee754751d1696731a65ebaddd79a835c1"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"5f0fb58026b51458a3d8d2e7a9e5007daaaf95d2","unresolved":false,"context_lines":[{"line_number":257,"context_line":"        self._mount_nfs(nfs_share, mount_path, ensure\u003dTrue)"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"    def _find_share(self, volume_size_for):"},{"line_number":260,"context_line":"        \"\"\"Choose NFS share among available ones for given volume size. Current"},{"line_number":261,"context_line":"        implementation looks for greatest capacity"},{"line_number":262,"context_line":"        :param volume_size_for: int size in GB"},{"line_number":263,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2F1TQ%3D","line":260,"updated":"2013-05-22 04:48:45.000000000","message":"nitpick, need to fix the docstring here","commit_id":"8ce0414ee754751d1696731a65ebaddd79a835c1"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"d4ceb097d207ace4e837d37476ad3da1bc2bb87e","unresolved":false,"context_lines":[{"line_number":257,"context_line":"        self._mount_nfs(nfs_share, mount_path, ensure\u003dTrue)"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"    def _find_share(self, volume_size_for):"},{"line_number":260,"context_line":"        \"\"\"Choose NFS share among available ones for given volume size. Current"},{"line_number":261,"context_line":"        implementation looks for greatest capacity"},{"line_number":262,"context_line":"        :param volume_size_for: int size in GB"},{"line_number":263,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2FzTk%3D","line":260,"in_reply_to":"AAAAPH%2F%2F1TQ%3D","updated":"2013-05-22 18:38:46.000000000","message":"Yep, Will get that fixed.","commit_id":"8ce0414ee754751d1696731a65ebaddd79a835c1"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"5f0fb58026b51458a3d8d2e7a9e5007daaaf95d2","unresolved":false,"context_lines":[{"line_number":271,"context_line":"        used_ratio \u003d self.configuration.nfs_used_ratio"},{"line_number":272,"context_line":"        oversub_ratio \u003d self.configuration.nfs_oversub_ratio"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"        requested_volume_size \u003d volume_size_for * 1024 * 1024 * 1024"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"        for nfs_share in self._mounted_shares:"},{"line_number":277,"context_line":"            total_size, total_available, total_allocated \u003d \\"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2F1Gg%3D","line":274,"updated":"2013-05-22 04:48:45.000000000","message":"Why not just size_in_g or something, why volume_size_for ?\n\nYour call just seems odd to me but I\u0027m not overly familiar with NFS so maybe there\u0027s a standard wording here.\n\nAlso, any interest in cosolidating this to \"1024^3\" or if you\u0027re using it anywhere else just making it a variable?  I\u0027ve wondered a couple of times if we should have a units.py that defines things like Meg, Gig etc for everybody to use.","commit_id":"8ce0414ee754751d1696731a65ebaddd79a835c1"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"d4ceb097d207ace4e837d37476ad3da1bc2bb87e","unresolved":false,"context_lines":[{"line_number":271,"context_line":"        used_ratio \u003d self.configuration.nfs_used_ratio"},{"line_number":272,"context_line":"        oversub_ratio \u003d self.configuration.nfs_oversub_ratio"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"        requested_volume_size \u003d volume_size_for * 1024 * 1024 * 1024"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"        for nfs_share in self._mounted_shares:"},{"line_number":277,"context_line":"            total_size, total_available, total_allocated \u003d \\"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2FzSQ%3D","line":274,"in_reply_to":"AAAAPH%2F%2F1Gg%3D","updated":"2013-05-22 18:38:46.000000000","message":"I think the calculation is just the way \"storage\" is thought about since you can see if you\u0027re referencing GB vs. GiB more clearly.  (Just a guess)\n\nIn this case, I had duplicated the previous code.  The volume_size_for could be renamed to requested_volume_size_in_gb.  or volume_size_in_gb.  I\u0027ll figure out the right naming convention here for the next patchset.\n\nI think having a units.py makes far more sense and is the \"right\" fix.","commit_id":"8ce0414ee754751d1696731a65ebaddd79a835c1"}],"etc/cinder/cinder.conf.sample":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"ccabe156cc3267e14092bbdbcc0ae3bde07367c3","unresolved":false,"context_lines":[{"line_number":1045,"context_line":"#nfs_mount_options\u003d\u003cNone\u003e"},{"line_number":1046,"context_line":""},{"line_number":1047,"context_line":"# Percent of ACTUAL usage of the underlying volume before no"},{"line_number":1048,"context_line":"# new volumes can be allocated to the volume destination."},{"line_number":1049,"context_line":"#nfs_used_ratio\u003d0.95"},{"line_number":1050,"context_line":""},{"line_number":1051,"context_line":"# This will compare the allocated to available space on the"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"AAAAPH%2F%2F2ZM%3D","line":1048,"updated":"2013-05-21 18:32:14.000000000","message":"Shouldn\u0027t these say (floating point value) or similar?","commit_id":"3ff551afa36b789f26f5efea1a7393cfae9961ae"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"cc2fccf3017dfdf3588bcd72088570e9646b4f48","unresolved":false,"context_lines":[{"line_number":1045,"context_line":"#nfs_mount_options\u003d\u003cNone\u003e"},{"line_number":1046,"context_line":""},{"line_number":1047,"context_line":"# Percent of ACTUAL usage of the underlying volume before no"},{"line_number":1048,"context_line":"# new volumes can be allocated to the volume destination."},{"line_number":1049,"context_line":"#nfs_used_ratio\u003d0.95"},{"line_number":1050,"context_line":""},{"line_number":1051,"context_line":"# This will compare the allocated to available space on the"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"AAAAPH%2F%2F2YQ%3D","line":1048,"in_reply_to":"AAAAPH%2F%2F2ZM%3D","updated":"2013-05-21 18:40:40.000000000","message":"Yes, they should. I\u0027ll edit that and work on figuring what is wrong with the conf script (as per IRC chatter) separately","commit_id":"3ff551afa36b789f26f5efea1a7393cfae9961ae"}]}
