)]}'
{"cinder/volume/drivers/rbd.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"5d69cb38ed182dfc847fe52e0d735084a239711e","unresolved":false,"context_lines":[{"line_number":1058,"context_line":"                             \"by the lack of support for this feature \""},{"line_number":1059,"context_line":"                             \"in the currently deployed RBD client.\"))"},{"line_number":1060,"context_line":"                    LOG.error(msg)"},{"line_number":1061,"context_line":"                    raise AttributeError"},{"line_number":1062,"context_line":""},{"line_number":1063,"context_line":"                # If it is a clone, walk back up the parent chain deleting"},{"line_number":1064,"context_line":"                # references."}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_b14c2741","line":1061,"updated":"2018-10-30 17:59:05.000000000","message":"This should reraise the same AttributeError object to get the correct error message bubbled up with it.\n\nOr convert it to a VolumeDriverException etc.","commit_id":"cdd1f8c911966d1d014fd86b88f28a342777bb40"},{"author":{"_account_id":11292,"name":"Arne Wiebalck","email":"Arne.Wiebalck@cern.ch","username":"wiebalck"},"change_message_id":"6ce1d045e0da789a323e08b934139c886b22d9d9","unresolved":false,"context_lines":[{"line_number":1058,"context_line":"                             \"by the lack of support for this feature \""},{"line_number":1059,"context_line":"                             \"in the currently deployed RBD client.\"))"},{"line_number":1060,"context_line":"                    LOG.error(msg)"},{"line_number":1061,"context_line":"                    raise AttributeError"},{"line_number":1062,"context_line":""},{"line_number":1063,"context_line":"                # If it is a clone, walk back up the parent chain deleting"},{"line_number":1064,"context_line":"                # references."}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_a00cc896","line":1061,"in_reply_to":"3f79a3b5_b14c2741","updated":"2018-10-31 08:13:42.000000000","message":"Thanks, Eric. I raise a VolumeDriverException now instead.","commit_id":"cdd1f8c911966d1d014fd86b88f28a342777bb40"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"90bdefc49aaa3dd2d4a86616fd5bbd41c70a3f44","unresolved":false,"context_lines":[{"line_number":296,"context_line":"    def _trash_purge(self):"},{"line_number":297,"context_line":"        LOG.info(\"Purging trash for backend \u0027%s\u0027\", self._backend_name)"},{"line_number":298,"context_line":"        with RADOSClient(self) as client:"},{"line_number":299,"context_line":"            for vol in self.RBDProxy().trash_list(client.ioctx):"},{"line_number":300,"context_line":"                try:"},{"line_number":301,"context_line":"                    self.RBDProxy().trash_remove(client.ioctx, vol.get(\u0027id\u0027))"},{"line_number":302,"context_line":"                    LOG.info(\"Deleted %s from trash for backend \u0027%s\u0027\","},{"line_number":303,"context_line":"                             vol.get(\u0027name\u0027),"},{"line_number":304,"context_line":"                             self._backend_name)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_0a2afd95","line":301,"range":{"start_line":299,"start_character":0,"end_line":301,"end_character":77},"updated":"2018-12-06 03:18:35.000000000","message":"-1 Why do we need to get image list one by one and then remove? I think it\u0027s better to use \"trash purge\" to delete all expired images.\n\ntrash purge [pool-name]\nRemove all expired images from trash.","commit_id":"90b2b712fe6cd24c705d5327ccc20a709d3a8d76"},{"author":{"_account_id":11292,"name":"Arne Wiebalck","email":"Arne.Wiebalck@cern.ch","username":"wiebalck"},"change_message_id":"fd10867400fa6f520270ab59a38c1aec5bf2c98e","unresolved":false,"context_lines":[{"line_number":296,"context_line":"    def _trash_purge(self):"},{"line_number":297,"context_line":"        LOG.info(\"Purging trash for backend \u0027%s\u0027\", self._backend_name)"},{"line_number":298,"context_line":"        with RADOSClient(self) as client:"},{"line_number":299,"context_line":"            for vol in self.RBDProxy().trash_list(client.ioctx):"},{"line_number":300,"context_line":"                try:"},{"line_number":301,"context_line":"                    self.RBDProxy().trash_remove(client.ioctx, vol.get(\u0027id\u0027))"},{"line_number":302,"context_line":"                    LOG.info(\"Deleted %s from trash for backend \u0027%s\u0027\","},{"line_number":303,"context_line":"                             vol.get(\u0027name\u0027),"},{"line_number":304,"context_line":"                             self._backend_name)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_3dd61efa","line":301,"range":{"start_line":299,"start_character":0,"end_line":301,"end_character":77},"in_reply_to":"3f79a3b5_0a2afd95","updated":"2018-12-06 08:05:04.000000000","message":"Yes, I wanted to do that, but from what I see there is no \u0027trash purge\u0027 API call exposed in the librbd(python) API [1].\n\nWhat you quote is from the rbd client reference, I guess? If you look at the code of the rbd client it does the exact same thing I propose (get all images and loop).\n\n[1] http://docs.ceph.com/docs/mimic/rbd/api/librbdpy/\n[2] https://github.com/ceph/ceph/blob/master/src/tools/rbd/action/Trash.cc#L395","commit_id":"90b2b712fe6cd24c705d5327ccc20a709d3a8d76"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"e89a928c9cbed232e2b24d8f448556f709985952","unresolved":false,"context_lines":[{"line_number":296,"context_line":"    def _trash_purge(self):"},{"line_number":297,"context_line":"        LOG.info(\"Purging trash for backend \u0027%s\u0027\", self._backend_name)"},{"line_number":298,"context_line":"        with RADOSClient(self) as client:"},{"line_number":299,"context_line":"            for vol in self.RBDProxy().trash_list(client.ioctx):"},{"line_number":300,"context_line":"                try:"},{"line_number":301,"context_line":"                    self.RBDProxy().trash_remove(client.ioctx, vol.get(\u0027id\u0027))"},{"line_number":302,"context_line":"                    LOG.info(\"Deleted %s from trash for backend \u0027%s\u0027\","},{"line_number":303,"context_line":"                             vol.get(\u0027name\u0027),"},{"line_number":304,"context_line":"                             self._backend_name)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_c8195824","line":301,"range":{"start_line":299,"start_character":0,"end_line":301,"end_character":77},"in_reply_to":"3f79a3b5_3dd61efa","updated":"2018-12-07 02:02:43.000000000","message":"Thanks for the explanation.","commit_id":"90b2b712fe6cd24c705d5327ccc20a709d3a8d76"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"e89a928c9cbed232e2b24d8f448556f709985952","unresolved":false,"context_lines":[{"line_number":311,"context_line":"                    # and leaves ERRORs in the logs in case the deletion fails"},{"line_number":312,"context_line":"                    # repeatedly."},{"line_number":313,"context_line":"                    if e.errno \u003d\u003d errno.EPERM:"},{"line_number":314,"context_line":"                        LOG.info(\"%s has not expired yet on backend \u0027%s\u0027\","},{"line_number":315,"context_line":"                                 vol.get(\u0027name\u0027),"},{"line_number":316,"context_line":"                                 self._backend_name)"},{"line_number":317,"context_line":"                    else:"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_e8c53436","line":314,"updated":"2018-12-07 02:02:43.000000000","message":"I think here no info is needed, debug is enough. As it is a normal scenario.","commit_id":"90b2b712fe6cd24c705d5327ccc20a709d3a8d76"},{"author":{"_account_id":11292,"name":"Arne Wiebalck","email":"Arne.Wiebalck@cern.ch","username":"wiebalck"},"change_message_id":"1c44267423410ad2e5cd8fb76c2748bd6798bef0","unresolved":false,"context_lines":[{"line_number":311,"context_line":"                    # and leaves ERRORs in the logs in case the deletion fails"},{"line_number":312,"context_line":"                    # repeatedly."},{"line_number":313,"context_line":"                    if e.errno \u003d\u003d errno.EPERM:"},{"line_number":314,"context_line":"                        LOG.info(\"%s has not expired yet on backend \u0027%s\u0027\","},{"line_number":315,"context_line":"                                 vol.get(\u0027name\u0027),"},{"line_number":316,"context_line":"                                 self._backend_name)"},{"line_number":317,"context_line":"                    else:"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_e852e6d8","line":314,"in_reply_to":"3f79a3b5_e8c53436","updated":"2018-12-10 11:21:48.000000000","message":"Agreed.","commit_id":"90b2b712fe6cd24c705d5327ccc20a709d3a8d76"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"90bdefc49aaa3dd2d4a86616fd5bbd41c70a3f44","unresolved":false,"context_lines":[{"line_number":322,"context_line":""},{"line_number":323,"context_line":"    def _start_periodic_tasks(self):"},{"line_number":324,"context_line":"        if self.configuration.enable_deferred_deletion:"},{"line_number":325,"context_line":"            LOG.info(\"Starting periodic trash purge for backend \u0027%s\u0027\","},{"line_number":326,"context_line":"                     self._backend_name)"},{"line_number":327,"context_line":"            deferred_deletion_ptask \u003d loopingcall.FixedIntervalLoopingCall("},{"line_number":328,"context_line":"                self._trash_purge)"},{"line_number":329,"context_line":"            deferred_deletion_ptask.start("}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_0a13dd69","line":326,"range":{"start_line":325,"start_character":0,"end_line":326,"end_character":40},"updated":"2018-12-06 03:18:35.000000000","message":"If log info here, does it lead log too much?","commit_id":"90b2b712fe6cd24c705d5327ccc20a709d3a8d76"},{"author":{"_account_id":11292,"name":"Arne Wiebalck","email":"Arne.Wiebalck@cern.ch","username":"wiebalck"},"change_message_id":"fd10867400fa6f520270ab59a38c1aec5bf2c98e","unresolved":false,"context_lines":[{"line_number":322,"context_line":""},{"line_number":323,"context_line":"    def _start_periodic_tasks(self):"},{"line_number":324,"context_line":"        if self.configuration.enable_deferred_deletion:"},{"line_number":325,"context_line":"            LOG.info(\"Starting periodic trash purge for backend \u0027%s\u0027\","},{"line_number":326,"context_line":"                     self._backend_name)"},{"line_number":327,"context_line":"            deferred_deletion_ptask \u003d loopingcall.FixedIntervalLoopingCall("},{"line_number":328,"context_line":"                self._trash_purge)"},{"line_number":329,"context_line":"            deferred_deletion_ptask.start("}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_dd34ca49","line":326,"range":{"start_line":325,"start_character":0,"end_line":326,"end_character":40},"in_reply_to":"3f79a3b5_0a13dd69","updated":"2018-12-06 08:05:04.000000000","message":"Depends on the frequency, of course. From an operator perspective, however, it is always good to see what\u0027s going on without going to full debug mode. Could certainly be changed to \u0027debug\u0027, though if people think this is too much information.","commit_id":"90b2b712fe6cd24c705d5327ccc20a709d3a8d76"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"90bdefc49aaa3dd2d4a86616fd5bbd41c70a3f44","unresolved":false,"context_lines":[{"line_number":346,"context_line":"        with RADOSClient(self):"},{"line_number":347,"context_line":"            pass"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"        self._start_periodic_tasks()"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"    def RBDProxy(self):"},{"line_number":352,"context_line":"        return tpool.Proxy(self.rbd.RBD())"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_4511c650","line":349,"updated":"2018-12-06 03:18:35.000000000","message":"-1 It is better to check whether deferred deletion is supported in the ceph cluster? If not, just warning and use normal deletion instead.","commit_id":"90b2b712fe6cd24c705d5327ccc20a709d3a8d76"},{"author":{"_account_id":11292,"name":"Arne Wiebalck","email":"Arne.Wiebalck@cern.ch","username":"wiebalck"},"change_message_id":"1c44267423410ad2e5cd8fb76c2748bd6798bef0","unresolved":false,"context_lines":[{"line_number":346,"context_line":"        with RADOSClient(self):"},{"line_number":347,"context_line":"            pass"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"        self._start_periodic_tasks()"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"    def RBDProxy(self):"},{"line_number":352,"context_line":"        return tpool.Proxy(self.rbd.RBD())"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_68681656","line":349,"in_reply_to":"3f79a3b5_082990ee","updated":"2018-12-10 11:21:48.000000000","message":"I think that checking and then basically working around the deployer\u0027s explicit configuration is less preferable than trying and raising a clear error that the deployer has to solve.","commit_id":"90b2b712fe6cd24c705d5327ccc20a709d3a8d76"},{"author":{"_account_id":11292,"name":"Arne Wiebalck","email":"Arne.Wiebalck@cern.ch","username":"wiebalck"},"change_message_id":"fd10867400fa6f520270ab59a38c1aec5bf2c98e","unresolved":false,"context_lines":[{"line_number":346,"context_line":"        with RADOSClient(self):"},{"line_number":347,"context_line":"            pass"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"        self._start_periodic_tasks()"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"    def RBDProxy(self):"},{"line_number":352,"context_line":"        return tpool.Proxy(self.rbd.RBD())"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_bd20eefa","line":349,"in_reply_to":"3f79a3b5_4511c650","updated":"2018-12-06 08:05:04.000000000","message":"Yes, I was considering this as well (coming from languages other than Python). Logically, both options are equivalent and I decided to do it the pythonic way in the end, i.e. try and catch the error.","commit_id":"90b2b712fe6cd24c705d5327ccc20a709d3a8d76"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"855faf7b40abb8a820e395f9eaa84afec02c077a","unresolved":false,"context_lines":[{"line_number":346,"context_line":"        with RADOSClient(self):"},{"line_number":347,"context_line":"            pass"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"        self._start_periodic_tasks()"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"    def RBDProxy(self):"},{"line_number":352,"context_line":"        return tpool.Proxy(self.rbd.RBD())"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_fcd7a14c","line":349,"in_reply_to":"3f79a3b5_68681656","updated":"2018-12-14 05:57:02.000000000","message":"Yes, we should not depend on the explicit configuration. But based on the return exception/error, can ceph give a specified exception/error when we run trash remove on a ceph cluster which doesn\u0027t support trash remove? Do you ever try to test the case: Ceph is former release which doesn\u0027t support trash remove, but users set enable_deferred_deletion as true, maybe by mistake.","commit_id":"90b2b712fe6cd24c705d5327ccc20a709d3a8d76"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"e89a928c9cbed232e2b24d8f448556f709985952","unresolved":false,"context_lines":[{"line_number":346,"context_line":"        with RADOSClient(self):"},{"line_number":347,"context_line":"            pass"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"        self._start_periodic_tasks()"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"    def RBDProxy(self):"},{"line_number":352,"context_line":"        return tpool.Proxy(self.rbd.RBD())"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_082990ee","line":349,"in_reply_to":"3f79a3b5_bd20eefa","updated":"2018-12-07 02:02:43.000000000","message":"As far as I\u0027m concerned, try/catch is not good. Can we get the version of librbd\u0027s version and check during init_host? If librbd doesn\u0027t support but enable_deferred_deletion is enabled, Cinder gives a warning and use normal deletion instead.","commit_id":"90b2b712fe6cd24c705d5327ccc20a709d3a8d76"},{"author":{"_account_id":11292,"name":"Arne Wiebalck","email":"Arne.Wiebalck@cern.ch","username":"wiebalck"},"change_message_id":"8273656f93205b16b8547f84e56d28b7645b2f7e","unresolved":false,"context_lines":[{"line_number":346,"context_line":"        with RADOSClient(self):"},{"line_number":347,"context_line":"            pass"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"        self._start_periodic_tasks()"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"    def RBDProxy(self):"},{"line_number":352,"context_line":"        return tpool.Proxy(self.rbd.RBD())"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_055fa0de","line":349,"in_reply_to":"3f79a3b5_fcd7a14c","updated":"2018-12-18 14:55:27.000000000","message":"LisaLi, the support for the trash is client-side only, i.e. it is not depending on the Ceph cluster you\u0027re connected to.\n\nYes, I downgraded to Jewel to test and successfully triggered the message about the client version.\n\nHowever, something that I just noticed now: there is already a trash_list() call when starting the periodic task and this will make the periodic purge task fail if the client does not support the trash API. So, I\u0027ll add something more explicit to the next patch set to take care of this as well (basically add another error message for this case).","commit_id":"90b2b712fe6cd24c705d5327ccc20a709d3a8d76"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"0ce9b73f82c86ebdf829e5bc6c30799ac331601d","unresolved":false,"context_lines":[{"line_number":122,"context_line":"                    \u0027for permanent removal after being tagged for deferred \u0027"},{"line_number":123,"context_line":"                    \u0027deletion.\u0027),"},{"line_number":124,"context_line":"    cfg.IntOpt(\u0027deferred_deletion_purge_interval\u0027, default\u003d60,"},{"line_number":125,"context_line":"               help\u003d\u0027Number of seconds between runs of the periodic task\u0027"},{"line_number":126,"context_line":"                    \u0027to purge volumes tagged for deletion.\u0027),"},{"line_number":127,"context_line":"]"},{"line_number":128,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_330cc638","line":125,"range":{"start_line":125,"start_character":30,"end_line":125,"end_character":38},"updated":"2018-12-10 16:43:23.000000000","message":"Isn\u0027t the point of this to spread out how far apart deletions happen? Wouldn\u0027t it make more sense to have this in minutes rather than seconds?","commit_id":"d3eaf7cb3634717e64b9e7eb0e51c9fb4da04222"},{"author":{"_account_id":11292,"name":"Arne Wiebalck","email":"Arne.Wiebalck@cern.ch","username":"wiebalck"},"change_message_id":"9e92be1b8edb903b48286d7ebf16f9b000ece75b","unresolved":false,"context_lines":[{"line_number":122,"context_line":"                    \u0027for permanent removal after being tagged for deferred \u0027"},{"line_number":123,"context_line":"                    \u0027deletion.\u0027),"},{"line_number":124,"context_line":"    cfg.IntOpt(\u0027deferred_deletion_purge_interval\u0027, default\u003d60,"},{"line_number":125,"context_line":"               help\u003d\u0027Number of seconds between runs of the periodic task\u0027"},{"line_number":126,"context_line":"                    \u0027to purge volumes tagged for deletion.\u0027),"},{"line_number":127,"context_line":"]"},{"line_number":128,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_429400e6","line":125,"range":{"start_line":125,"start_character":30,"end_line":125,"end_character":38},"in_reply_to":"3f79a3b5_330cc638","updated":"2018-12-11 07:46:10.000000000","message":"Yes, this defines the interval at which trashed volumes are checked if they can be deleted.\n\nHappy to change this to minutes. I was just thinking that all other time values in the driver are in seconds and, if you  want to make the interval several days, both would give relatively large numbers.\n\nLet me know what you think.","commit_id":"d3eaf7cb3634717e64b9e7eb0e51c9fb4da04222"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"a397c2ecea83138dd2df95e1f3d63ff7dcd7b9dc","unresolved":false,"context_lines":[{"line_number":122,"context_line":"                    \u0027for permanent removal after being tagged for deferred \u0027"},{"line_number":123,"context_line":"                    \u0027deletion.\u0027),"},{"line_number":124,"context_line":"    cfg.IntOpt(\u0027deferred_deletion_purge_interval\u0027, default\u003d60,"},{"line_number":125,"context_line":"               help\u003d\u0027Number of seconds between runs of the periodic task\u0027"},{"line_number":126,"context_line":"                    \u0027to purge volumes tagged for deletion.\u0027),"},{"line_number":127,"context_line":"]"},{"line_number":128,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_0d059bc0","line":125,"range":{"start_line":125,"start_character":30,"end_line":125,"end_character":38},"in_reply_to":"3f79a3b5_429400e6","updated":"2018-12-13 15:24:38.000000000","message":"Ok, I can see your point here.  I suppose using seconds for consistency is a good choice so we can leave this as is.","commit_id":"d3eaf7cb3634717e64b9e7eb0e51c9fb4da04222"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"0ce9b73f82c86ebdf829e5bc6c30799ac331601d","unresolved":false,"context_lines":[{"line_number":311,"context_line":"                    # and leaves ERRORs in the logs in case the deletion fails"},{"line_number":312,"context_line":"                    # repeatedly."},{"line_number":313,"context_line":"                    if e.errno \u003d\u003d errno.EPERM:"},{"line_number":314,"context_line":"                        LOG.debug(\"%s has not expired yet on backend \u0027%s\u0027\","},{"line_number":315,"context_line":"                                  vol.get(\u0027name\u0027),"},{"line_number":316,"context_line":"                                  self._backend_name)"},{"line_number":317,"context_line":"                    else:"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_d349d264","line":314,"range":{"start_line":314,"start_character":28,"end_line":314,"end_character":33},"updated":"2018-12-10 16:43:23.000000000","message":"I think this would be appropriate as a LOG.info .","commit_id":"d3eaf7cb3634717e64b9e7eb0e51c9fb4da04222"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"b21f534d1e2beadccd3ea1933e822670b9917bfe","unresolved":false,"context_lines":[{"line_number":311,"context_line":"                    # and leaves ERRORs in the logs in case the deletion fails"},{"line_number":312,"context_line":"                    # repeatedly."},{"line_number":313,"context_line":"                    if e.errno \u003d\u003d errno.EPERM:"},{"line_number":314,"context_line":"                        LOG.debug(\"%s has not expired yet on backend \u0027%s\u0027\","},{"line_number":315,"context_line":"                                  vol.get(\u0027name\u0027),"},{"line_number":316,"context_line":"                                  self._backend_name)"},{"line_number":317,"context_line":"                    else:"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_bc94c998","line":314,"range":{"start_line":314,"start_character":28,"end_line":314,"end_character":33},"in_reply_to":"3f79a3b5_6dce8f8f","updated":"2018-12-14 05:50:17.000000000","message":"Hi Jay, as when deleting a volume successfully we have logged in Line 302. If the deferred time deferred_deletion_delay is long, and deferred_deletion_purge_interval is shorter, it may give the error often.\nMoreover, this is not an error case, so I think we don\u0027t need to log.info it.","commit_id":"d3eaf7cb3634717e64b9e7eb0e51c9fb4da04222"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"a397c2ecea83138dd2df95e1f3d63ff7dcd7b9dc","unresolved":false,"context_lines":[{"line_number":311,"context_line":"                    # and leaves ERRORs in the logs in case the deletion fails"},{"line_number":312,"context_line":"                    # repeatedly."},{"line_number":313,"context_line":"                    if e.errno \u003d\u003d errno.EPERM:"},{"line_number":314,"context_line":"                        LOG.debug(\"%s has not expired yet on backend \u0027%s\u0027\","},{"line_number":315,"context_line":"                                  vol.get(\u0027name\u0027),"},{"line_number":316,"context_line":"                                  self._backend_name)"},{"line_number":317,"context_line":"                    else:"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_6dce8f8f","line":314,"range":{"start_line":314,"start_character":28,"end_line":314,"end_character":33},"in_reply_to":"3f79a3b5_a2487488","updated":"2018-12-13 15:24:38.000000000","message":"I am sorry, I hadn\u0027t seen the previous request to change this.  I do, however, think that this makes sense as an info message as it provides a better UX and I assume it isn\u0027t a case that is going to happen that often.","commit_id":"d3eaf7cb3634717e64b9e7eb0e51c9fb4da04222"},{"author":{"_account_id":11292,"name":"Arne Wiebalck","email":"Arne.Wiebalck@cern.ch","username":"wiebalck"},"change_message_id":"8273656f93205b16b8547f84e56d28b7645b2f7e","unresolved":false,"context_lines":[{"line_number":311,"context_line":"                    # and leaves ERRORs in the logs in case the deletion fails"},{"line_number":312,"context_line":"                    # repeatedly."},{"line_number":313,"context_line":"                    if e.errno \u003d\u003d errno.EPERM:"},{"line_number":314,"context_line":"                        LOG.debug(\"%s has not expired yet on backend \u0027%s\u0027\","},{"line_number":315,"context_line":"                                  vol.get(\u0027name\u0027),"},{"line_number":316,"context_line":"                                  self._backend_name)"},{"line_number":317,"context_line":"                    else:"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_a56cacd2","line":314,"range":{"start_line":314,"start_character":28,"end_line":314,"end_character":33},"in_reply_to":"3f79a3b5_bc94c998","updated":"2018-12-18 14:55:27.000000000","message":"LisaLi, for deployers/admins I think it\u0027d be good to have a confirmation that Cinder is aware that the volume has not been deleted from the backend (and why). I also think that the main idea here is to free up the quota quickly, there is no restore from trash. So, there is no reason to have a long deferral time (and hence there won\u0027t be lots of messages -- which I would not regard as an issue anyway).","commit_id":"d3eaf7cb3634717e64b9e7eb0e51c9fb4da04222"},{"author":{"_account_id":11292,"name":"Arne Wiebalck","email":"Arne.Wiebalck@cern.ch","username":"wiebalck"},"change_message_id":"9e92be1b8edb903b48286d7ebf16f9b000ece75b","unresolved":false,"context_lines":[{"line_number":311,"context_line":"                    # and leaves ERRORs in the logs in case the deletion fails"},{"line_number":312,"context_line":"                    # repeatedly."},{"line_number":313,"context_line":"                    if e.errno \u003d\u003d errno.EPERM:"},{"line_number":314,"context_line":"                        LOG.debug(\"%s has not expired yet on backend \u0027%s\u0027\","},{"line_number":315,"context_line":"                                  vol.get(\u0027name\u0027),"},{"line_number":316,"context_line":"                                  self._backend_name)"},{"line_number":317,"context_line":"                    else:"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_a2487488","line":314,"range":{"start_line":314,"start_character":28,"end_line":314,"end_character":33},"in_reply_to":"3f79a3b5_d349d264","updated":"2018-12-11 07:46:10.000000000","message":"I guess you saw I changed this from \"info\" to \"debug\" following an earlier review comment? :-)\n\nNo strong opinion, but (as an operator) would probably go for \"info\" as well, as I can imagine situations where you wonder why space is not freed up on the backend and this will help you to understand.","commit_id":"d3eaf7cb3634717e64b9e7eb0e51c9fb4da04222"}]}
