)]}'
{"cinder/volume/drivers/nexenta/nfs.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"ea86717424762c2125b09f6b438d444a0b1bef0b","unresolved":false,"context_lines":[{"line_number":26,"context_line":"import re"},{"line_number":27,"context_line":"import time"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"from oslo.utils import units"},{"line_number":30,"context_line":"import six"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"from cinder import context"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a930d6b_b4022f3c","line":29,"updated":"2015-01-22 22:37:17.000000000","message":"Please, leave oslo_utils","commit_id":"992b379815df6e8478ede0e5343a83da0dc6dfe8"},{"author":{"_account_id":8296,"name":"Mikhail Khodos","username":"mikhail","inactive":true},"change_message_id":"20d0f9235a8bf616c179598cfc4285e8ca8e8f93","unresolved":false,"context_lines":[{"line_number":26,"context_line":"import re"},{"line_number":27,"context_line":"import time"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"from oslo.utils import units"},{"line_number":30,"context_line":"import six"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"from cinder import context"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a930d6b_c809c5de","line":29,"in_reply_to":"1a930d6b_b4022f3c","updated":"2015-01-28 22:57:10.000000000","message":"Done","commit_id":"992b379815df6e8478ede0e5343a83da0dc6dfe8"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"ea86717424762c2125b09f6b438d444a0b1bef0b","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        mnt_path \u003d \u0027%s/%s\u0027 % ("},{"line_number":195,"context_line":"            self._get_mount_point_for_share(nfs_share), volume[\u0027name\u0027])"},{"line_number":196,"context_line":"        sub_share \u003d \u0027%s/%s\u0027 % (nfs_share, volume[\u0027name\u0027])"},{"line_number":197,"context_line":"        self._ensure_share_mounted(sub_share, mnt_path)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        return {\u0027provider_location\u0027: volume[\u0027provider_location\u0027]}"},{"line_number":200,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a930d6b_74b7e786","line":197,"updated":"2015-01-22 22:37:17.000000000","message":"Please, move this 3 lines in a method and re-use it","commit_id":"992b379815df6e8478ede0e5343a83da0dc6dfe8"},{"author":{"_account_id":8296,"name":"Mikhail Khodos","username":"mikhail","inactive":true},"change_message_id":"20d0f9235a8bf616c179598cfc4285e8ca8e8f93","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        mnt_path \u003d \u0027%s/%s\u0027 % ("},{"line_number":195,"context_line":"            self._get_mount_point_for_share(nfs_share), volume[\u0027name\u0027])"},{"line_number":196,"context_line":"        sub_share \u003d \u0027%s/%s\u0027 % (nfs_share, volume[\u0027name\u0027])"},{"line_number":197,"context_line":"        self._ensure_share_mounted(sub_share, mnt_path)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        return {\u0027provider_location\u0027: volume[\u0027provider_location\u0027]}"},{"line_number":200,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a930d6b_486eb597","line":197,"in_reply_to":"1a930d6b_74b7e786","updated":"2015-01-28 22:57:10.000000000","message":"Done","commit_id":"992b379815df6e8478ede0e5343a83da0dc6dfe8"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"ea86717424762c2125b09f6b438d444a0b1bef0b","unresolved":false,"context_lines":[{"line_number":425,"context_line":"                                                   mount_path, None,"},{"line_number":426,"context_line":"                                                   mnt_flags)"},{"line_number":427,"context_line":"                return"},{"line_number":428,"context_line":"            except Exception as e:"},{"line_number":429,"context_line":"                if attempt \u003d\u003d (num_attempts - 1):"},{"line_number":430,"context_line":"                    LOG.error(_LE(\u0027Mount failure for %(share)s after \u0027"},{"line_number":431,"context_line":"                                  \u0027%(count)d attempts.\u0027) % {"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a930d6b_d4ab3b1c","line":428,"updated":"2015-01-22 22:37:17.000000000","message":"Could we handle more specific exception here?","commit_id":"992b379815df6e8478ede0e5343a83da0dc6dfe8"},{"author":{"_account_id":8296,"name":"Mikhail Khodos","username":"mikhail","inactive":true},"change_message_id":"20d0f9235a8bf616c179598cfc4285e8ca8e8f93","unresolved":false,"context_lines":[{"line_number":425,"context_line":"                                                   mount_path, None,"},{"line_number":426,"context_line":"                                                   mnt_flags)"},{"line_number":427,"context_line":"                return"},{"line_number":428,"context_line":"            except Exception as e:"},{"line_number":429,"context_line":"                if attempt \u003d\u003d (num_attempts - 1):"},{"line_number":430,"context_line":"                    LOG.error(_LE(\u0027Mount failure for %(share)s after \u0027"},{"line_number":431,"context_line":"                                  \u0027%(count)d attempts.\u0027) % {"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a930d6b_0d72ffe4","line":428,"in_reply_to":"1a930d6b_d4ab3b1c","updated":"2015-01-28 22:57:10.000000000","message":"this code is almost the same as the parent\u0027s code and the exception there is also not specific","commit_id":"992b379815df6e8478ede0e5343a83da0dc6dfe8"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"ea86717424762c2125b09f6b438d444a0b1bef0b","unresolved":false,"context_lines":[{"line_number":428,"context_line":"            except Exception as e:"},{"line_number":429,"context_line":"                if attempt \u003d\u003d (num_attempts - 1):"},{"line_number":430,"context_line":"                    LOG.error(_LE(\u0027Mount failure for %(share)s after \u0027"},{"line_number":431,"context_line":"                                  \u0027%(count)d attempts.\u0027) % {"},{"line_number":432,"context_line":"                              \u0027share\u0027: nfs_share,"},{"line_number":433,"context_line":"                              \u0027count\u0027: num_attempts})"},{"line_number":434,"context_line":"                    raise exception.NfsException(e)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a930d6b_746e0703","line":431,"updated":"2015-01-22 22:37:17.000000000","message":"According to logging guidelines, please, change:\n% \u003d\u003e ,","commit_id":"992b379815df6e8478ede0e5343a83da0dc6dfe8"},{"author":{"_account_id":8296,"name":"Mikhail Khodos","username":"mikhail","inactive":true},"change_message_id":"20d0f9235a8bf616c179598cfc4285e8ca8e8f93","unresolved":false,"context_lines":[{"line_number":428,"context_line":"            except Exception as e:"},{"line_number":429,"context_line":"                if attempt \u003d\u003d (num_attempts - 1):"},{"line_number":430,"context_line":"                    LOG.error(_LE(\u0027Mount failure for %(share)s after \u0027"},{"line_number":431,"context_line":"                                  \u0027%(count)d attempts.\u0027) % {"},{"line_number":432,"context_line":"                              \u0027share\u0027: nfs_share,"},{"line_number":433,"context_line":"                              \u0027count\u0027: num_attempts})"},{"line_number":434,"context_line":"                    raise exception.NfsException(e)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a930d6b_88689d88","line":431,"in_reply_to":"1a930d6b_746e0703","updated":"2015-01-28 22:57:10.000000000","message":"Done","commit_id":"992b379815df6e8478ede0e5343a83da0dc6dfe8"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"ea86717424762c2125b09f6b438d444a0b1bef0b","unresolved":false,"context_lines":[{"line_number":433,"context_line":"                              \u0027count\u0027: num_attempts})"},{"line_number":434,"context_line":"                    raise exception.NfsException(e)"},{"line_number":435,"context_line":"                LOG.debug(\u0027Mount attempt %d failed: %s.\\nRetrying mount ...\u0027 %"},{"line_number":436,"context_line":"                          (attempt, six.text_type(e)))"},{"line_number":437,"context_line":"                time.sleep(1)"},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"    def _mount_subfolders(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a930d6b_f4811790","line":436,"updated":"2015-01-22 22:37:17.000000000","message":"% \u003d\u003e ,","commit_id":"992b379815df6e8478ede0e5343a83da0dc6dfe8"},{"author":{"_account_id":8296,"name":"Mikhail Khodos","username":"mikhail","inactive":true},"change_message_id":"20d0f9235a8bf616c179598cfc4285e8ca8e8f93","unresolved":false,"context_lines":[{"line_number":433,"context_line":"                              \u0027count\u0027: num_attempts})"},{"line_number":434,"context_line":"                    raise exception.NfsException(e)"},{"line_number":435,"context_line":"                LOG.debug(\u0027Mount attempt %d failed: %s.\\nRetrying mount ...\u0027 %"},{"line_number":436,"context_line":"                          (attempt, six.text_type(e)))"},{"line_number":437,"context_line":"                time.sleep(1)"},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"    def _mount_subfolders(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a930d6b_a80639cc","line":436,"in_reply_to":"1a930d6b_f4811790","updated":"2015-01-28 22:57:10.000000000","message":"Done","commit_id":"992b379815df6e8478ede0e5343a83da0dc6dfe8"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"67ac799784a469b7c726675617daf5ab3f15f7b3","unresolved":false,"context_lines":[{"line_number":425,"context_line":"                    self._remotefsclient.mount(nfs_share, mnt_flags)"},{"line_number":426,"context_line":"                else:"},{"line_number":427,"context_line":"                    if mount_path in self._remotefsclient._read_mounts():"},{"line_number":428,"context_line":"                        LOG.info(_LI(\u0027Already mounted: %s\u0027) % mount_path)"},{"line_number":429,"context_line":"                        return"},{"line_number":430,"context_line":""},{"line_number":431,"context_line":"                    self._execute(\u0027mkdir\u0027, \u0027-p\u0027, mount_path, check_exit_code\u003d0)"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa81d914_49aa8471","line":428,"updated":"2015-01-28 09:37:30.000000000","message":"% -\u003e , \nguidelines: due http://docs.openstack.org/developer/oslo.i18n/guidelines.html","commit_id":"96f98f5c1756f6ae2f693785212fc907d299dbda"},{"author":{"_account_id":8296,"name":"Mikhail Khodos","username":"mikhail","inactive":true},"change_message_id":"7267029f13acf7505dc8d2300b15d86462c66933","unresolved":false,"context_lines":[{"line_number":425,"context_line":"                    self._remotefsclient.mount(nfs_share, mnt_flags)"},{"line_number":426,"context_line":"                else:"},{"line_number":427,"context_line":"                    if mount_path in self._remotefsclient._read_mounts():"},{"line_number":428,"context_line":"                        LOG.info(_LI(\u0027Already mounted: %s\u0027) % mount_path)"},{"line_number":429,"context_line":"                        return"},{"line_number":430,"context_line":""},{"line_number":431,"context_line":"                    self._execute(\u0027mkdir\u0027, \u0027-p\u0027, mount_path, check_exit_code\u003d0)"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa81d914_6a79da2e","line":428,"in_reply_to":"fa81d914_49aa8471","updated":"2015-01-28 20:10:48.000000000","message":"Done","commit_id":"96f98f5c1756f6ae2f693785212fc907d299dbda"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"149cde1d6eaba15c5a4875f9f552b2a290a691a0","unresolved":false,"context_lines":[{"line_number":439,"context_line":"                              \u0027share\u0027: nfs_share,"},{"line_number":440,"context_line":"                              \u0027count\u0027: num_attempts})"},{"line_number":441,"context_line":"                    raise exception.NfsException(e)"},{"line_number":442,"context_line":"                LOG.debug(\u0027Mount attempt %d failed: %s.\\nRetrying mount ...\u0027,"},{"line_number":443,"context_line":"                          (attempt, six.text_type(e)))"},{"line_number":444,"context_line":"                time.sleep(1)"},{"line_number":445,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa81d914_9f01273c","line":442,"range":{"start_line":442,"start_character":16,"end_line":442,"end_character":25},"updated":"2015-01-27 21:35:32.000000000","message":"Maybe should it be LOG.warning?","commit_id":"96f98f5c1756f6ae2f693785212fc907d299dbda"},{"author":{"_account_id":8296,"name":"Mikhail Khodos","username":"mikhail","inactive":true},"change_message_id":"7267029f13acf7505dc8d2300b15d86462c66933","unresolved":false,"context_lines":[{"line_number":439,"context_line":"                              \u0027share\u0027: nfs_share,"},{"line_number":440,"context_line":"                              \u0027count\u0027: num_attempts})"},{"line_number":441,"context_line":"                    raise exception.NfsException(e)"},{"line_number":442,"context_line":"                LOG.debug(\u0027Mount attempt %d failed: %s.\\nRetrying mount ...\u0027,"},{"line_number":443,"context_line":"                          (attempt, six.text_type(e)))"},{"line_number":444,"context_line":"                time.sleep(1)"},{"line_number":445,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa81d914_aa73d24b","line":442,"in_reply_to":"fa81d914_09232c06","updated":"2015-01-28 20:10:48.000000000","message":"Done","commit_id":"96f98f5c1756f6ae2f693785212fc907d299dbda"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"67ac799784a469b7c726675617daf5ab3f15f7b3","unresolved":false,"context_lines":[{"line_number":439,"context_line":"                              \u0027share\u0027: nfs_share,"},{"line_number":440,"context_line":"                              \u0027count\u0027: num_attempts})"},{"line_number":441,"context_line":"                    raise exception.NfsException(e)"},{"line_number":442,"context_line":"                LOG.debug(\u0027Mount attempt %d failed: %s.\\nRetrying mount ...\u0027,"},{"line_number":443,"context_line":"                          (attempt, six.text_type(e)))"},{"line_number":444,"context_line":"                time.sleep(1)"},{"line_number":445,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa81d914_09232c06","line":442,"in_reply_to":"fa81d914_9f01273c","updated":"2015-01-28 09:37:30.000000000","message":"Agree","commit_id":"96f98f5c1756f6ae2f693785212fc907d299dbda"},{"author":{"_account_id":8296,"name":"Mikhail Khodos","username":"mikhail","inactive":true},"change_message_id":"7267029f13acf7505dc8d2300b15d86462c66933","unresolved":false,"context_lines":[{"line_number":439,"context_line":"                              \u0027share\u0027: nfs_share,"},{"line_number":440,"context_line":"                              \u0027count\u0027: num_attempts})"},{"line_number":441,"context_line":"                    raise exception.NfsException(e)"},{"line_number":442,"context_line":"                LOG.debug(\u0027Mount attempt %d failed: %s.\\nRetrying mount ...\u0027,"},{"line_number":443,"context_line":"                          (attempt, six.text_type(e)))"},{"line_number":444,"context_line":"                time.sleep(1)"},{"line_number":445,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa81d914_8a760e3d","line":442,"in_reply_to":"fa81d914_9f01273c","updated":"2015-01-28 20:10:48.000000000","message":"Done","commit_id":"96f98f5c1756f6ae2f693785212fc907d299dbda"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"023da237d80da29a252f0fcf6d5323685613c5c6","unresolved":false,"context_lines":[{"line_number":440,"context_line":"                              \u0027count\u0027: num_attempts})"},{"line_number":441,"context_line":"                    raise exception.NfsException(e)"},{"line_number":442,"context_line":"                LOG.warning("},{"line_number":443,"context_line":"                    _LW(\u0027Mount attempt %d failed: %s.\\nRetrying mount ...\u0027),"},{"line_number":444,"context_line":"                    (attempt, six.text_type(e)))"},{"line_number":445,"context_line":"                time.sleep(1)"},{"line_number":446,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"fa81d914_a7720fab","line":443,"updated":"2015-01-29 08:47:31.000000000","message":"H703  Multiple positional placeholders","commit_id":"7368d29af98528e3058d14d131e8a0e94e7000a6"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"023da237d80da29a252f0fcf6d5323685613c5c6","unresolved":false,"context_lines":[{"line_number":441,"context_line":"                    raise exception.NfsException(e)"},{"line_number":442,"context_line":"                LOG.warning("},{"line_number":443,"context_line":"                    _LW(\u0027Mount attempt %d failed: %s.\\nRetrying mount ...\u0027),"},{"line_number":444,"context_line":"                    (attempt, six.text_type(e)))"},{"line_number":445,"context_line":"                time.sleep(1)"},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"    def _mount_subfolders(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa81d914_47831356","line":444,"range":{"start_line":444,"start_character":20,"end_line":444,"end_character":21},"updated":"2015-01-29 08:47:31.000000000","message":"I think it\u0027s redundant brackets.","commit_id":"7368d29af98528e3058d14d131e8a0e94e7000a6"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"e4ee33ce6ae13c9df05fdd6a1c595e8bf581c5a6","unresolved":false,"context_lines":[{"line_number":443,"context_line":"                    _LW(\u0027Mount attempt %(attempt)d failed: %(error)s.\u0027"},{"line_number":444,"context_line":"                        \u0027\\nRetrying mount ...\u0027), {"},{"line_number":445,"context_line":"                        \u0027attempt\u0027: attempt,"},{"line_number":446,"context_line":"                        \u0027error\u0027: six.text_type(e)})"},{"line_number":447,"context_line":"                time.sleep(1)"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"    def _mount_subfolders(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_ceb4aef4","line":446,"updated":"2015-02-02 09:53:59.000000000","message":"six.text_type isn\u0027t necessary here: http://docs.openstack.org/developer/oslo.i18n/guidelines.html#avoid-forcing-the-translation-of-translatable-variables","commit_id":"4d28ec25fbbae901f95712d3a1ffc522905443c6"},{"author":{"_account_id":8296,"name":"Mikhail Khodos","username":"mikhail","inactive":true},"change_message_id":"831cb6143e287e35865179713e2aa39fff15eece","unresolved":false,"context_lines":[{"line_number":443,"context_line":"                    _LW(\u0027Mount attempt %(attempt)d failed: %(error)s.\u0027"},{"line_number":444,"context_line":"                        \u0027\\nRetrying mount ...\u0027), {"},{"line_number":445,"context_line":"                        \u0027attempt\u0027: attempt,"},{"line_number":446,"context_line":"                        \u0027error\u0027: six.text_type(e)})"},{"line_number":447,"context_line":"                time.sleep(1)"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"    def _mount_subfolders(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_80731fe6","line":446,"in_reply_to":"da86d52c_ceb4aef4","updated":"2015-02-03 15:48:28.000000000","message":"Done","commit_id":"4d28ec25fbbae901f95712d3a1ffc522905443c6"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"e4ee33ce6ae13c9df05fdd6a1c595e8bf581c5a6","unresolved":false,"context_lines":[{"line_number":448,"context_line":""},{"line_number":449,"context_line":"    def _mount_subfolders(self):"},{"line_number":450,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":451,"context_line":"        vol_entries \u003d self.db.volume_get_all(ctxt, None, None, \u0027created_at\u0027,"},{"line_number":452,"context_line":"                                             None, filters\u003dNone)"},{"line_number":453,"context_line":"        for vol in vol_entries:"},{"line_number":454,"context_line":"            nfs_share \u003d vol[\u0027provider_location\u0027]"}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_0ef8867b","line":451,"updated":"2015-02-02 09:53:59.000000000","message":"This is really not recommended. If there a millions of volumes known to Cinder, this will definitely slow down your driver. I would recommend first not grabbing all volumes, but instead skipping the ones that are deleted (we do soft deletes). Also consider volume_get_all_by_host(). If there are any other filters that you can think of that can help limit things, please do so.","commit_id":"4d28ec25fbbae901f95712d3a1ffc522905443c6"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"264796b9b595398e346bf475bcf1f13f90fd636c","unresolved":false,"context_lines":[{"line_number":448,"context_line":""},{"line_number":449,"context_line":"    def _mount_subfolders(self):"},{"line_number":450,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":451,"context_line":"        vol_entries \u003d self.db.volume_get_all(ctxt, None, None, \u0027created_at\u0027,"},{"line_number":452,"context_line":"                                             None, filters\u003dNone)"},{"line_number":453,"context_line":"        for vol in vol_entries:"},{"line_number":454,"context_line":"            nfs_share \u003d vol[\u0027provider_location\u0027]"}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_8530ba9f","line":451,"in_reply_to":"da86d52c_0ef8867b","updated":"2015-02-02 18:50:47.000000000","message":"Also if there are any other volume drivers configured with Cinder, this will have unexpected bad behavior.","commit_id":"4d28ec25fbbae901f95712d3a1ffc522905443c6"},{"author":{"_account_id":8296,"name":"Mikhail Khodos","username":"mikhail","inactive":true},"change_message_id":"831cb6143e287e35865179713e2aa39fff15eece","unresolved":false,"context_lines":[{"line_number":448,"context_line":""},{"line_number":449,"context_line":"    def _mount_subfolders(self):"},{"line_number":450,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":451,"context_line":"        vol_entries \u003d self.db.volume_get_all(ctxt, None, None, \u0027created_at\u0027,"},{"line_number":452,"context_line":"                                             None, filters\u003dNone)"},{"line_number":453,"context_line":"        for vol in vol_entries:"},{"line_number":454,"context_line":"            nfs_share \u003d vol[\u0027provider_location\u0027]"}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_001d6f73","line":451,"in_reply_to":"da86d52c_0ef8867b","updated":"2015-02-03 15:48:28.000000000","message":"Done","commit_id":"4d28ec25fbbae901f95712d3a1ffc522905443c6"},{"author":{"_account_id":8296,"name":"Mikhail Khodos","username":"mikhail","inactive":true},"change_message_id":"39698be72f80de9024dcb6a3d56918141de65bb1","unresolved":false,"context_lines":[{"line_number":448,"context_line":""},{"line_number":449,"context_line":"    def _mount_subfolders(self):"},{"line_number":450,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":451,"context_line":"        vol_entries \u003d self.db.volume_get_all(ctxt, None, None, \u0027created_at\u0027,"},{"line_number":452,"context_line":"                                             None, filters\u003dNone)"},{"line_number":453,"context_line":"        for vol in vol_entries:"},{"line_number":454,"context_line":"            nfs_share \u003d vol[\u0027provider_location\u0027]"}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_c39de00b","line":451,"in_reply_to":"da86d52c_8530ba9f","updated":"2015-02-04 21:47:39.000000000","message":"this will not have unexpected behavior cause it checks:\n\"if nfs_share in self.shares\" on line 455","commit_id":"4d28ec25fbbae901f95712d3a1ffc522905443c6"},{"author":{"_account_id":11676,"name":"wuyuting","email":"wytdahu@gmail.com","username":"wuyuting"},"change_message_id":"881c359126a717b67fe01519878cabf3da8bfd32","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    def do_setup(self, context):"},{"line_number":74,"context_line":"        shares_config \u003d getattr(self.configuration, self.driver_prefix +"},{"line_number":75,"context_line":"                                \u0027_shares_config\u0027)"},{"line_number":76,"context_line":"        if shares_config is not None:"},{"line_number":77,"context_line":"            self.configuration.nfs_shares_config \u003d shares_config"},{"line_number":78,"context_line":"        super(NexentaNfsDriver, self).do_setup(context)"},{"line_number":79,"context_line":"        self._load_shares_config(shares_config)"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_0cdac0e7","line":76,"updated":"2015-02-05 03:08:56.000000000","message":"you should eliminate redundant code, \u0027if shares_config\u0027 equal to \u0027if shares_config is not None\u0027.","commit_id":"e5677eefafc09af8620fcf68ac1169141e181622"},{"author":{"_account_id":8296,"name":"Mikhail Khodos","username":"mikhail","inactive":true},"change_message_id":"20ffd420281c8bd0ea32d93e54406d0cbea597c4","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    def do_setup(self, context):"},{"line_number":74,"context_line":"        shares_config \u003d getattr(self.configuration, self.driver_prefix +"},{"line_number":75,"context_line":"                                \u0027_shares_config\u0027)"},{"line_number":76,"context_line":"        if shares_config is not None:"},{"line_number":77,"context_line":"            self.configuration.nfs_shares_config \u003d shares_config"},{"line_number":78,"context_line":"        super(NexentaNfsDriver, self).do_setup(context)"},{"line_number":79,"context_line":"        self._load_shares_config(shares_config)"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_d2958c33","line":76,"in_reply_to":"da86d52c_0cdac0e7","updated":"2015-02-05 15:58:24.000000000","message":"Done","commit_id":"e5677eefafc09af8620fcf68ac1169141e181622"},{"author":{"_account_id":11676,"name":"wuyuting","email":"wytdahu@gmail.com","username":"wuyuting"},"change_message_id":"881c359126a717b67fe01519878cabf3da8bfd32","unresolved":false,"context_lines":[{"line_number":443,"context_line":"                        \u0027\\nRetrying mount ...\u0027), {"},{"line_number":444,"context_line":"                        \u0027attempt\u0027: attempt,"},{"line_number":445,"context_line":"                        \u0027error\u0027: e})"},{"line_number":446,"context_line":"                time.sleep(1)"},{"line_number":447,"context_line":""},{"line_number":448,"context_line":"    def _mount_subfolders(self):"},{"line_number":449,"context_line":"        ctxt \u003d context.get_admin_context()"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_0caf202b","line":446,"updated":"2015-02-05 03:08:56.000000000","message":"I think greenthread.sleep is better than time.sleep","commit_id":"e5677eefafc09af8620fcf68ac1169141e181622"},{"author":{"_account_id":8296,"name":"Mikhail Khodos","username":"mikhail","inactive":true},"change_message_id":"20ffd420281c8bd0ea32d93e54406d0cbea597c4","unresolved":false,"context_lines":[{"line_number":443,"context_line":"                        \u0027\\nRetrying mount ...\u0027), {"},{"line_number":444,"context_line":"                        \u0027attempt\u0027: attempt,"},{"line_number":445,"context_line":"                        \u0027error\u0027: e})"},{"line_number":446,"context_line":"                time.sleep(1)"},{"line_number":447,"context_line":""},{"line_number":448,"context_line":"    def _mount_subfolders(self):"},{"line_number":449,"context_line":"        ctxt \u003d context.get_admin_context()"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_f298d06b","line":446,"in_reply_to":"da86d52c_0caf202b","updated":"2015-02-05 15:58:24.000000000","message":"Done","commit_id":"e5677eefafc09af8620fcf68ac1169141e181622"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"dc7600ccfbc12e5bce7beff8f3634dd0b7c1f044","unresolved":false,"context_lines":[{"line_number":38,"context_line":"from cinder.volume.drivers.nexenta import utils"},{"line_number":39,"context_line":"from cinder.volume.drivers import nfs"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"from oslo_utils import units"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"VERSION \u003d \u00271.1.3\u0027"},{"line_number":44,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":10,"id":"da86d52c_eb7177df","line":41,"updated":"2015-02-13 16:40:59.000000000","message":"Oslo imports should be before Cinder imports.  This was correct where it was...","commit_id":"41294a3242097c0a4980dc1d9ca2a048fe571576"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"dc7600ccfbc12e5bce7beff8f3634dd0b7c1f044","unresolved":false,"context_lines":[{"line_number":414,"context_line":"        sub_share \u003d \u0027%s/%s\u0027 % (nfs_share, volume[\u0027name\u0027])"},{"line_number":415,"context_line":"        return sub_share, mnt_path"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"    def _ensure_share_mounted(self, nfs_share, mount_path\u003dNone):"},{"line_number":418,"context_line":"        mnt_flags \u003d []"},{"line_number":419,"context_line":"        if self.shares.get(nfs_share) is not None:"},{"line_number":420,"context_line":"            mnt_flags \u003d self.shares[nfs_share].split()"}],"source_content_type":"text/x-python","patch_set":10,"id":"da86d52c_6bf1076a","line":417,"updated":"2015-02-13 16:40:59.000000000","message":"Why does this have to diverge from _ensure_share_mounted in the NFS driver?\n\nWhen is mount_path None?\n\nThis seems like a lot of complexity for no clear benefit when we are working on sharing code between *FS drivers...  if there\u0027s a good reason to do it this way, there should be a few comments explaining what is going on.","commit_id":"41294a3242097c0a4980dc1d9ca2a048fe571576"},{"author":{"_account_id":8296,"name":"Mikhail Khodos","username":"mikhail","inactive":true},"change_message_id":"1ceffa0de6c15bbac349f1e81e629f051fa6243c","unresolved":false,"context_lines":[{"line_number":414,"context_line":"        sub_share \u003d \u0027%s/%s\u0027 % (nfs_share, volume[\u0027name\u0027])"},{"line_number":415,"context_line":"        return sub_share, mnt_path"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"    def _ensure_share_mounted(self, nfs_share, mount_path\u003dNone):"},{"line_number":418,"context_line":"        mnt_flags \u003d []"},{"line_number":419,"context_line":"        if self.shares.get(nfs_share) is not None:"},{"line_number":420,"context_line":"            mnt_flags \u003d self.shares[nfs_share].split()"}],"source_content_type":"text/x-python","patch_set":10,"id":"da86d52c_eb0de9e9","line":417,"updated":"2015-02-13 23:02:05.000000000","message":"in the parent class _ensure_share_mounted() doesn\u0027t use mount_path at all cause it\u0027s getting generated. in our driver we create a zfs filesystem for each cinder volume as zfs filesystems are \u0027cheap\u0027 and allow us for effective snapshoting and cloning. which entroduces an error in case of NFSv3 as it doesn\u0027t support nested mounts. So in this case we explicitly mount created filesystem in the parent directory with already known mount_path.","commit_id":"41294a3242097c0a4980dc1d9ca2a048fe571576"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"3efb9a9313de8c7ea067c9e99b616f4ada40c465","unresolved":false,"context_lines":[{"line_number":448,"context_line":""},{"line_number":449,"context_line":"    def _mount_subfolders(self):"},{"line_number":450,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":451,"context_line":"        vol_entries \u003d self.db.volume_get_all_by_host(ctxt, self.host)"},{"line_number":452,"context_line":"        for vol in vol_entries:"},{"line_number":453,"context_line":"            nfs_share \u003d vol[\u0027provider_location\u0027]"},{"line_number":454,"context_line":"            if nfs_share in self.shares:"}],"source_content_type":"text/x-python","patch_set":10,"id":"da86d52c_727c5373","line":451,"updated":"2015-02-10 06:22:29.000000000","message":"Continuing from patch set 8. My point is if there are lots of volumes in a soft delete phase for this host, this is not going to be ideal to have them all stored in a list and then check them one by one. Why not filter that at the beginning of the db fetch.","commit_id":"41294a3242097c0a4980dc1d9ca2a048fe571576"},{"author":{"_account_id":8296,"name":"Mikhail Khodos","username":"mikhail","inactive":true},"change_message_id":"1ceffa0de6c15bbac349f1e81e629f051fa6243c","unresolved":false,"context_lines":[{"line_number":448,"context_line":""},{"line_number":449,"context_line":"    def _mount_subfolders(self):"},{"line_number":450,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":451,"context_line":"        vol_entries \u003d self.db.volume_get_all_by_host(ctxt, self.host)"},{"line_number":452,"context_line":"        for vol in vol_entries:"},{"line_number":453,"context_line":"            nfs_share \u003d vol[\u0027provider_location\u0027]"},{"line_number":454,"context_line":"            if nfs_share in self.shares:"}],"source_content_type":"text/x-python","patch_set":10,"id":"da86d52c_eba329fe","line":451,"in_reply_to":"da86d52c_727c5373","updated":"2015-02-13 23:02:05.000000000","message":"can you please point out how exactly here i can filter the db query without rewriting volume_get_all_by_host() method?","commit_id":"41294a3242097c0a4980dc1d9ca2a048fe571576"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"b3e6c958f281dcfae3a63e6f061a471eeb2dd8a4","unresolved":false,"context_lines":[{"line_number":416,"context_line":"        sub_share \u003d \u0027%s/%s\u0027 % (nfs_share, volume[\u0027name\u0027])"},{"line_number":417,"context_line":"        return sub_share, mnt_path"},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"    def _ensure_share_mounted(self, nfs_share, mount_path\u003dNone):"},{"line_number":420,"context_line":"        mnt_flags \u003d []"},{"line_number":421,"context_line":"        if self.shares.get(nfs_share) is not None:"},{"line_number":422,"context_line":"            mnt_flags \u003d self.shares[nfs_share].split()"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba7be1f8_de0bc8d3","line":419,"updated":"2015-02-26 06:23:56.000000000","message":"Patch set 10 Eric said this was unclear and to leave comments here.","commit_id":"6242dc6e29d0b2379147a29b18c67bbf172331f6"},{"author":{"_account_id":15239,"name":"Mikhail Khodos","email":"mikhail.khodos@nexenta.com","username":"hodos","tags":["SERVICE_USER"]},"change_message_id":"9ea4467993aee49f55e30ed8c16ac78c2e840827","unresolved":false,"context_lines":[{"line_number":416,"context_line":"        sub_share \u003d \u0027%s/%s\u0027 % (nfs_share, volume[\u0027name\u0027])"},{"line_number":417,"context_line":"        return sub_share, mnt_path"},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"    def _ensure_share_mounted(self, nfs_share, mount_path\u003dNone):"},{"line_number":420,"context_line":"        mnt_flags \u003d []"},{"line_number":421,"context_line":"        if self.shares.get(nfs_share) is not None:"},{"line_number":422,"context_line":"            mnt_flags \u003d self.shares[nfs_share].split()"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a80dd14_35c0b74f","line":419,"in_reply_to":"ba7be1f8_de0bc8d3","updated":"2015-03-13 15:13:45.000000000","message":"Done","commit_id":"6242dc6e29d0b2379147a29b18c67bbf172331f6"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"00128b764f8b625184c8f6b6c5151a67dc23b6dd","unresolved":false,"context_lines":[{"line_number":430,"context_line":"                        LOG.info(_LI(\u0027Already mounted: %s\u0027), mount_path)"},{"line_number":431,"context_line":"                        return"},{"line_number":432,"context_line":""},{"line_number":433,"context_line":"                    self._execute(\u0027mkdir\u0027, \u0027-p\u0027, mount_path, check_exit_code\u003d0)"},{"line_number":434,"context_line":"                    self._remotefsclient._mount_nfs(nfs_share, mount_path,"},{"line_number":435,"context_line":"                                                    mnt_flags)"},{"line_number":436,"context_line":"                return"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba7be1f8_1f68a9f4","line":433,"updated":"2015-02-27 17:32:59.000000000","message":"According to https://github.com/openstack/oslo.concurrency/blob/master/oslo_concurrency/processutils.py#L331  check_exit_code should be True/False to make it explicit","commit_id":"6242dc6e29d0b2379147a29b18c67bbf172331f6"},{"author":{"_account_id":15239,"name":"Mikhail Khodos","email":"mikhail.khodos@nexenta.com","username":"hodos","tags":["SERVICE_USER"]},"change_message_id":"9ea4467993aee49f55e30ed8c16ac78c2e840827","unresolved":false,"context_lines":[{"line_number":430,"context_line":"                        LOG.info(_LI(\u0027Already mounted: %s\u0027), mount_path)"},{"line_number":431,"context_line":"                        return"},{"line_number":432,"context_line":""},{"line_number":433,"context_line":"                    self._execute(\u0027mkdir\u0027, \u0027-p\u0027, mount_path, check_exit_code\u003d0)"},{"line_number":434,"context_line":"                    self._remotefsclient._mount_nfs(nfs_share, mount_path,"},{"line_number":435,"context_line":"                                                    mnt_flags)"},{"line_number":436,"context_line":"                return"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a80dd14_d5303beb","line":433,"in_reply_to":"ba7be1f8_1f68a9f4","updated":"2015-03-13 15:13:45.000000000","message":"Done","commit_id":"6242dc6e29d0b2379147a29b18c67bbf172331f6"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"00128b764f8b625184c8f6b6c5151a67dc23b6dd","unresolved":false,"context_lines":[{"line_number":443,"context_line":"                    raise exception.NfsException(e)"},{"line_number":444,"context_line":"                LOG.warning("},{"line_number":445,"context_line":"                    _LW(\u0027Mount attempt %(attempt)d failed: %(error)s.\u0027"},{"line_number":446,"context_line":"                        \u0027\\nRetrying mount ...\u0027), {"},{"line_number":447,"context_line":"                        \u0027attempt\u0027: attempt,"},{"line_number":448,"context_line":"                        \u0027error\u0027: e})"},{"line_number":449,"context_line":"                greenthread.sleep(1)"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba7be1f8_bf487dcd","line":446,"updated":"2015-02-27 17:32:59.000000000","message":"Not sure than adding \u0027\\n\u0027 to logs is a good idea","commit_id":"6242dc6e29d0b2379147a29b18c67bbf172331f6"},{"author":{"_account_id":15239,"name":"Mikhail Khodos","email":"mikhail.khodos@nexenta.com","username":"hodos","tags":["SERVICE_USER"]},"change_message_id":"9ea4467993aee49f55e30ed8c16ac78c2e840827","unresolved":false,"context_lines":[{"line_number":443,"context_line":"                    raise exception.NfsException(e)"},{"line_number":444,"context_line":"                LOG.warning("},{"line_number":445,"context_line":"                    _LW(\u0027Mount attempt %(attempt)d failed: %(error)s.\u0027"},{"line_number":446,"context_line":"                        \u0027\\nRetrying mount ...\u0027), {"},{"line_number":447,"context_line":"                        \u0027attempt\u0027: attempt,"},{"line_number":448,"context_line":"                        \u0027error\u0027: e})"},{"line_number":449,"context_line":"                greenthread.sleep(1)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a80dd14_551d2b61","line":446,"in_reply_to":"ba7be1f8_bf487dcd","updated":"2015-03-13 15:13:45.000000000","message":"Done","commit_id":"6242dc6e29d0b2379147a29b18c67bbf172331f6"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"00128b764f8b625184c8f6b6c5151a67dc23b6dd","unresolved":false,"context_lines":[{"line_number":450,"context_line":""},{"line_number":451,"context_line":"    def _mount_subfolders(self):"},{"line_number":452,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":453,"context_line":"        vol_entries \u003d self.db.volume_get_all_by_host(ctxt, self.host)"},{"line_number":454,"context_line":"        for vol in vol_entries:"},{"line_number":455,"context_line":"            nfs_share \u003d vol[\u0027provider_location\u0027]"},{"line_number":456,"context_line":"            if (nfs_share in self.shares) and \\"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba7be1f8_7fda85ea","line":453,"updated":"2015-02-27 17:32:59.000000000","message":"Could we add filters for \u0027\u0027volume[\u0027provider_location\u0027] not None\" to DB query to get filtered it by a DB engine?","commit_id":"6242dc6e29d0b2379147a29b18c67bbf172331f6"},{"author":{"_account_id":15239,"name":"Mikhail Khodos","email":"mikhail.khodos@nexenta.com","username":"hodos","tags":["SERVICE_USER"]},"change_message_id":"9ea4467993aee49f55e30ed8c16ac78c2e840827","unresolved":false,"context_lines":[{"line_number":450,"context_line":""},{"line_number":451,"context_line":"    def _mount_subfolders(self):"},{"line_number":452,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":453,"context_line":"        vol_entries \u003d self.db.volume_get_all_by_host(ctxt, self.host)"},{"line_number":454,"context_line":"        for vol in vol_entries:"},{"line_number":455,"context_line":"            nfs_share \u003d vol[\u0027provider_location\u0027]"},{"line_number":456,"context_line":"            if (nfs_share in self.shares) and \\"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a80dd14_b2ad9d33","line":453,"in_reply_to":"ba7be1f8_7fda85ea","updated":"2015-03-13 15:13:45.000000000","message":"If you have an idea how to simply do it, please share","commit_id":"6242dc6e29d0b2379147a29b18c67bbf172331f6"}]}
