)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"7aa725378eee59a9e3fb67cefdd49ae05763daff","unresolved":false,"context_lines":[{"line_number":15,"context_line":"running or stopped."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"It gets the file locks filtering by name (must have the \"cinder-\" prefix"},{"line_number":18,"context_line":"and an UUID) and then if the service is online it will discard files for"},{"line_number":19,"context_line":"resources that are still present in the database."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Closes-Bug: #1432387"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"bf51134e_0be00dcc","line":18,"range":{"start_line":18,"start_character":47,"end_line":18,"end_character":68},"updated":"2020-07-07 13:09:57.000000000","message":"I know what you mean here, but I think it would be more clear to say \"it will not delete file locks\".","commit_id":"7aacee13923ef007c5e4ad26c3e7fcef457c6dd6"}],"cinder/cmd/manage.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"04545e43dc9cf3d4c462de4acb088c3f6a3646eb","unresolved":false,"context_lines":[{"line_number":749,"context_line":""},{"line_number":750,"context_line":"    @staticmethod"},{"line_number":751,"context_line":"    def _get_resources_locks():"},{"line_number":752,"context_line":"        oslo_dir \u003d os.path.abspath(cfg.CONF.oslo_concurrency.lock_path)"},{"line_number":753,"context_line":"        filenames \u003d glob.glob(os.path.join(oslo_dir, \u0027cinder-*\u0027))"},{"line_number":754,"context_line":""},{"line_number":755,"context_line":"        backend_url \u003d cfg.CONF.coordination.backend_url"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff570b3c_10705fdc","line":752,"range":{"start_line":752,"start_character":8,"end_line":752,"end_character":16},"updated":"2020-06-10 19:51:31.000000000","message":"It would be good to add some checks if DLM is configured","commit_id":"51199934efb600d7ab4040e2810ac85aad606034"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"f1893f48a5f679e53724d85b384ee651d3cc34ce","unresolved":false,"context_lines":[{"line_number":749,"context_line":""},{"line_number":750,"context_line":"    @staticmethod"},{"line_number":751,"context_line":"    def _get_resources_locks():"},{"line_number":752,"context_line":"        oslo_dir \u003d os.path.abspath(cfg.CONF.oslo_concurrency.lock_path)"},{"line_number":753,"context_line":"        filenames \u003d glob.glob(os.path.join(oslo_dir, \u0027cinder-*\u0027))"},{"line_number":754,"context_line":""},{"line_number":755,"context_line":"        backend_url \u003d cfg.CONF.coordination.backend_url"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf51134e_eeead90c","line":752,"range":{"start_line":752,"start_character":8,"end_line":752,"end_character":16},"in_reply_to":"ff570b3c_10705fdc","updated":"2020-06-23 11:15:55.000000000","message":"That\u0027s what we do on L755-L756, check if the DLM configure is using file locks or something else.","commit_id":"51199934efb600d7ab4040e2810ac85aad606034"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"cd416f9aae3d0a3fea4245490e36c232f2c08c76","unresolved":false,"context_lines":[{"line_number":763,"context_line":"        for filename in filenames:"},{"line_number":764,"context_line":"            match \u003d matcher.match(filename)"},{"line_number":765,"context_line":"            if match:"},{"line_number":766,"context_line":"                dest \u003d snapshots if \u0027snapshot\u0027 in filename else volumes"},{"line_number":767,"context_line":"                res_id \u003d match.group(1)"},{"line_number":768,"context_line":"                dest[res_id].append(filename)"},{"line_number":769,"context_line":"        return volumes, snapshots"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_5638e83b","line":766,"range":{"start_line":766,"start_character":23,"end_line":766,"end_character":71},"updated":"2020-07-07 13:53:57.000000000","message":"just wanted to ask if it would be better to add backup support here as well?\nWe\u0027ve an external lock to clear up incomplete backups on service start[1] which has left quite a lot of files in my system[2].\n\n[1] https://github.com/openstack/cinder/blob/master/cinder/backup/manager.py#L180-L181\n\n[2] http://paste.openstack.org/show/795615/","commit_id":"7aacee13923ef007c5e4ad26c3e7fcef457c6dd6"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"064a40b7516d53428a1f5ed955c8393a6f8711cf","unresolved":false,"context_lines":[{"line_number":763,"context_line":"        for filename in filenames:"},{"line_number":764,"context_line":"            match \u003d matcher.match(filename)"},{"line_number":765,"context_line":"            if match:"},{"line_number":766,"context_line":"                dest \u003d snapshots if \u0027snapshot\u0027 in filename else volumes"},{"line_number":767,"context_line":"                res_id \u003d match.group(1)"},{"line_number":768,"context_line":"                dest[res_id].append(filename)"},{"line_number":769,"context_line":"        return volumes, snapshots"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_71cc16bc","line":766,"range":{"start_line":766,"start_character":23,"end_line":766,"end_character":71},"in_reply_to":"bf51134e_5638e83b","updated":"2020-07-07 16:27:41.000000000","message":"That one is tricky, but I\u0027ll add it as well.","commit_id":"7aacee13923ef007c5e4ad26c3e7fcef457c6dd6"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"43902399bfa2c35fc53d6f4aa04a9b3f2963c4d7","unresolved":false,"context_lines":[{"line_number":765,"context_line":"            if match:"},{"line_number":766,"context_line":"                dest \u003d snapshots if \u0027snapshot\u0027 in filename else volumes"},{"line_number":767,"context_line":"                res_id \u003d match.group(1)"},{"line_number":768,"context_line":"                dest[res_id].append(filename)"},{"line_number":769,"context_line":"        return volumes, snapshots"},{"line_number":770,"context_line":""},{"line_number":771,"context_line":"    def _remove_existing_volumes(self, volumes):"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_f635bcdb","line":768,"updated":"2020-07-07 13:28:01.000000000","message":"Now I see why you wanted to use a defaultdict -- very clever.","commit_id":"7aacee13923ef007c5e4ad26c3e7fcef457c6dd6"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"7aa725378eee59a9e3fb67cefdd49ae05763daff","unresolved":false,"context_lines":[{"line_number":811,"context_line":"        # Find volume and snapshots ids based on the existing file locks"},{"line_number":812,"context_line":"        volumes, snapshots \u003d self._get_resources_locks()"},{"line_number":813,"context_line":""},{"line_number":814,"context_line":"        # If services are only we cannot delete locks for existing resources"},{"line_number":815,"context_line":"        if online:"},{"line_number":816,"context_line":"            self._remove_existing_volumes(volumes)"},{"line_number":817,"context_line":"            self._remove_existing_snapshots(snapshots)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_4b2b252f","line":814,"range":{"start_line":814,"start_character":26,"end_line":814,"end_character":30},"updated":"2020-07-07 13:09:57.000000000","message":"online?","commit_id":"7aacee13923ef007c5e4ad26c3e7fcef457c6dd6"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"064a40b7516d53428a1f5ed955c8393a6f8711cf","unresolved":false,"context_lines":[{"line_number":811,"context_line":"        # Find volume and snapshots ids based on the existing file locks"},{"line_number":812,"context_line":"        volumes, snapshots \u003d self._get_resources_locks()"},{"line_number":813,"context_line":""},{"line_number":814,"context_line":"        # If services are only we cannot delete locks for existing resources"},{"line_number":815,"context_line":"        if online:"},{"line_number":816,"context_line":"            self._remove_existing_volumes(volumes)"},{"line_number":817,"context_line":"            self._remove_existing_snapshots(snapshots)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_63f3ade8","line":814,"range":{"start_line":814,"start_character":26,"end_line":814,"end_character":30},"in_reply_to":"bf51134e_4b2b252f","updated":"2020-07-07 16:27:41.000000000","message":"Done","commit_id":"7aacee13923ef007c5e4ad26c3e7fcef457c6dd6"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"fa7b02bfc222ed53f8c36c5f84ffe0b52fe7110c","unresolved":false,"context_lines":[{"line_number":811,"context_line":"          action\u003d\u0027store_false\u0027, default\u003dTrue,"},{"line_number":812,"context_line":"          help\u003d\u0027All locks can be deleted as Cinder services are not running.\u0027)"},{"line_number":813,"context_line":"    def clean_locks(self, online):"},{"line_number":814,"context_line":"        \"\"\"Clean file locks for volumes and snapshots on the current host."},{"line_number":815,"context_line":""},{"line_number":816,"context_line":""},{"line_number":817,"context_line":"        Should be run on any host where we are running a Cinder service (API,"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_75999177","line":814,"range":{"start_line":814,"start_character":32,"end_line":814,"end_character":53},"updated":"2020-07-08 12:51:47.000000000","message":"volume, snapshots and backups","commit_id":"fd8209fa6df573432f9f4cb95a32367a88d95026"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"bc52a3d35634243a92e1f45c06f8df085ad3f766","unresolved":false,"context_lines":[{"line_number":811,"context_line":"          action\u003d\u0027store_false\u0027, default\u003dTrue,"},{"line_number":812,"context_line":"          help\u003d\u0027All locks can be deleted as Cinder services are not running.\u0027)"},{"line_number":813,"context_line":"    def clean_locks(self, online):"},{"line_number":814,"context_line":"        \"\"\"Clean file locks for volumes and snapshots on the current host."},{"line_number":815,"context_line":""},{"line_number":816,"context_line":""},{"line_number":817,"context_line":"        Should be run on any host where we are running a Cinder service (API,"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_4e55de4f","line":814,"range":{"start_line":814,"start_character":32,"end_line":814,"end_character":53},"in_reply_to":"bf51134e_75999177","updated":"2020-11-03 18:01:26.000000000","message":"Done","commit_id":"fd8209fa6df573432f9f4cb95a32367a88d95026"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"fa7b02bfc222ed53f8c36c5f84ffe0b52fe7110c","unresolved":false,"context_lines":[{"line_number":818,"context_line":"        Scheduler, Volume, Backup) and can be run with the Cinder services"},{"line_number":819,"context_line":"        running or stopped."},{"line_number":820,"context_line":""},{"line_number":821,"context_line":"        If the services are running it will check existing resources in the"},{"line_number":822,"context_line":"        Cinder database in order to only remove resources that are no longer"},{"line_number":823,"context_line":"        present (it\u0027s safe to delete the files) .  Deleting locks while the"},{"line_number":824,"context_line":"        services are offline is faster as there\u0027s no need to check the"},{"line_number":825,"context_line":"        database."},{"line_number":826,"context_line":""},{"line_number":827,"context_line":"        Default assumes that services are online, must pass"},{"line_number":828,"context_line":"        ``--services-offline`` to specify that they are offline."}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_754351b0","line":825,"range":{"start_line":821,"start_character":8,"end_line":825,"end_character":17},"updated":"2020-07-08 12:51:47.000000000","message":"since you\u0027ve detailed about volumes and snapshots procedure, if you would like we can also add similar info for backup as it has a different way of checking locks.","commit_id":"fd8209fa6df573432f9f4cb95a32367a88d95026"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"bc52a3d35634243a92e1f45c06f8df085ad3f766","unresolved":false,"context_lines":[{"line_number":818,"context_line":"        Scheduler, Volume, Backup) and can be run with the Cinder services"},{"line_number":819,"context_line":"        running or stopped."},{"line_number":820,"context_line":""},{"line_number":821,"context_line":"        If the services are running it will check existing resources in the"},{"line_number":822,"context_line":"        Cinder database in order to only remove resources that are no longer"},{"line_number":823,"context_line":"        present (it\u0027s safe to delete the files) .  Deleting locks while the"},{"line_number":824,"context_line":"        services are offline is faster as there\u0027s no need to check the"},{"line_number":825,"context_line":"        database."},{"line_number":826,"context_line":""},{"line_number":827,"context_line":"        Default assumes that services are online, must pass"},{"line_number":828,"context_line":"        ``--services-offline`` to specify that they are offline."}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_eeecb290","line":825,"range":{"start_line":821,"start_character":8,"end_line":825,"end_character":17},"in_reply_to":"bf51134e_754351b0","updated":"2020-11-03 18:01:26.000000000","message":"Done","commit_id":"fd8209fa6df573432f9f4cb95a32367a88d95026"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"153da6bec7ffff80c7d7b0d6157d8f26d71990ce","unresolved":false,"context_lines":[{"line_number":775,"context_line":""},{"line_number":776,"context_line":"        return volumes, snapshots, backups"},{"line_number":777,"context_line":""},{"line_number":778,"context_line":"    def _remove_existing_volumes(self, volumes):"},{"line_number":779,"context_line":"        for volume_id in list(volumes.keys()):"},{"line_number":780,"context_line":"            try:"},{"line_number":781,"context_line":"                db_api.volume_get(self.ctxt, volume_id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf51134e_0499056d","line":778,"updated":"2020-07-08 14:30:18.000000000","message":"This makes me think that we are deleting volumes here...same w/ the snaps and backups.","commit_id":"4b4f3504bb5be8e355f50acbf879179ff424911f"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"93409e9d9d4b14b1a09e15bcbecacbe210366a70","unresolved":false,"context_lines":[{"line_number":53,"context_line":"import collections"},{"line_number":54,"context_line":"try:"},{"line_number":55,"context_line":"    import collections.abc as collections_abc"},{"line_number":56,"context_line":"except ImportError:"},{"line_number":57,"context_line":"    collections_abc \u003d collections"},{"line_number":58,"context_line":"import errno"},{"line_number":59,"context_line":"import glob"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f560f44_8e2bab31","line":56,"range":{"start_line":56,"start_character":0,"end_line":56,"end_character":19},"updated":"2020-09-17 07:28:17.000000000","message":"Do we really need python2 compatibility in the new code?","commit_id":"c8fb42f7415002be80f46e45ee27432879a7c429"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"4a5e0bd849faf00fb8e4941866252da5c832e0b4","unresolved":false,"context_lines":[{"line_number":53,"context_line":"import collections"},{"line_number":54,"context_line":"try:"},{"line_number":55,"context_line":"    import collections.abc as collections_abc"},{"line_number":56,"context_line":"except ImportError:"},{"line_number":57,"context_line":"    collections_abc \u003d collections"},{"line_number":58,"context_line":"import errno"},{"line_number":59,"context_line":"import glob"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f560f44_7aa06c92","line":56,"range":{"start_line":56,"start_character":0,"end_line":56,"end_character":19},"in_reply_to":"9f560f44_7757fe02","updated":"2020-09-18 19:02:35.000000000","message":"Yes, that would be the better way to handle this.","commit_id":"c8fb42f7415002be80f46e45ee27432879a7c429"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"bc52a3d35634243a92e1f45c06f8df085ad3f766","unresolved":false,"context_lines":[{"line_number":53,"context_line":"import collections"},{"line_number":54,"context_line":"try:"},{"line_number":55,"context_line":"    import collections.abc as collections_abc"},{"line_number":56,"context_line":"except ImportError:"},{"line_number":57,"context_line":"    collections_abc \u003d collections"},{"line_number":58,"context_line":"import errno"},{"line_number":59,"context_line":"import glob"}],"source_content_type":"text/x-python","patch_set":11,"id":"1f621f24_1650485d","line":56,"range":{"start_line":56,"start_character":0,"end_line":56,"end_character":19},"in_reply_to":"9f560f44_7aa06c92","updated":"2020-11-03 18:01:26.000000000","message":"This is not \"new code\". I have just added L53 and renamed collections_abc to have the collections name available.  The try...except was already there and I haven\u0027t touched it to make sure that the backport is easy.\nI tried to limit the changes to the ones related to the patch, but it could be a good opportunity to start cleaning up compatibility code.","commit_id":"c8fb42f7415002be80f46e45ee27432879a7c429"},{"author":{"_account_id":18058,"name":"Lucio Seki","email":"lseki@redhat.com","username":"lseki"},"change_message_id":"dade45fb099dec2b5bdc1de231a4810be1051aaf","unresolved":false,"context_lines":[{"line_number":53,"context_line":"import collections"},{"line_number":54,"context_line":"try:"},{"line_number":55,"context_line":"    import collections.abc as collections_abc"},{"line_number":56,"context_line":"except ImportError:"},{"line_number":57,"context_line":"    collections_abc \u003d collections"},{"line_number":58,"context_line":"import errno"},{"line_number":59,"context_line":"import glob"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f560f44_7757fe02","line":56,"range":{"start_line":56,"start_character":0,"end_line":56,"end_character":19},"in_reply_to":"9f560f44_8e2bab31","updated":"2020-09-17 15:11:14.000000000","message":"We need if we want this backported to stable/train or older.\nWould it be possible to add the compatibility code to the backport patches only?","commit_id":"c8fb42f7415002be80f46e45ee27432879a7c429"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"93409e9d9d4b14b1a09e15bcbecacbe210366a70","unresolved":false,"context_lines":[{"line_number":702,"context_line":"        \"\"\"Remove volumes from the dict that still exist in the database.\"\"\""},{"line_number":703,"context_line":"        for volume_id in list(volumes.keys()):"},{"line_number":704,"context_line":"            try:"},{"line_number":705,"context_line":"                db_api.volume_get(self.ctxt, volume_id)"},{"line_number":706,"context_line":"                del volumes[volume_id]"},{"line_number":707,"context_line":"            except exception.VolumeNotFound:"},{"line_number":708,"context_line":"                pass"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f560f44_aeab0f86","line":705,"range":{"start_line":705,"start_character":23,"end_line":705,"end_character":33},"updated":"2020-09-17 07:28:17.000000000","message":"It could be too slow to get volumes one-by-one. Please, do it using one query","commit_id":"c8fb42f7415002be80f46e45ee27432879a7c429"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"bc52a3d35634243a92e1f45c06f8df085ad3f766","unresolved":false,"context_lines":[{"line_number":702,"context_line":"        \"\"\"Remove volumes from the dict that still exist in the database.\"\"\""},{"line_number":703,"context_line":"        for volume_id in list(volumes.keys()):"},{"line_number":704,"context_line":"            try:"},{"line_number":705,"context_line":"                db_api.volume_get(self.ctxt, volume_id)"},{"line_number":706,"context_line":"                del volumes[volume_id]"},{"line_number":707,"context_line":"            except exception.VolumeNotFound:"},{"line_number":708,"context_line":"                pass"}],"source_content_type":"text/x-python","patch_set":11,"id":"1f621f24_96145850","line":705,"range":{"start_line":705,"start_character":23,"end_line":705,"end_character":33},"in_reply_to":"9f560f44_aeab0f86","updated":"2020-11-03 18:01:26.000000000","message":"We are not getting all the volumes, just the ones that have existing file locks, as returned by _get_resources_locks method.\nWe could do a single get query to get them all by building a complex query with a ORed WHERE with all the UUIDs, but that seems overkill.\nI think the best is probably to do an exist. That way we\u0027ll reduce the amount of data transferred from the DB.","commit_id":"c8fb42f7415002be80f46e45ee27432879a7c429"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"93409e9d9d4b14b1a09e15bcbecacbe210366a70","unresolved":false,"context_lines":[{"line_number":711,"context_line":"        \"\"\"Remove snapshots from the dict that still exist in the database.\"\"\""},{"line_number":712,"context_line":"        for snapshot_id in list(snapshots.keys()):"},{"line_number":713,"context_line":"            try:"},{"line_number":714,"context_line":"                db_api.snapshot_get(self.ctxt, snapshot_id)"},{"line_number":715,"context_line":"                del snapshots[snapshot_id]"},{"line_number":716,"context_line":"            except exception.SnapshotNotFound:"},{"line_number":717,"context_line":"                pass"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f560f44_8e872b13","line":714,"range":{"start_line":714,"start_character":23,"end_line":714,"end_character":35},"updated":"2020-09-17 07:28:17.000000000","message":"The same as above","commit_id":"c8fb42f7415002be80f46e45ee27432879a7c429"},{"author":{"_account_id":29729,"name":"wangyu","email":"wangyu_yewu@cmss.chinamobile.com","username":"wangyu"},"change_message_id":"5382575910ebef5c1ebd0a0f0e3250f4aa65c610","unresolved":true,"context_lines":[{"line_number":922,"context_line":"        if online:"},{"line_number":923,"context_line":"            # We don\u0027t want to delete file locks for existing resources"},{"line_number":924,"context_line":"            volumes \u003d {vol_id: files for vol_id, files in volumes.items()"},{"line_number":925,"context_line":"                       if not objects.Volume.exists(vol_id)}"},{"line_number":926,"context_line":"            snapshots \u003d {snap_id: files for snap_id, files in snapshots.items()"},{"line_number":927,"context_line":"                         if not objects.Snapshot.exists(snap_id)}"},{"line_number":928,"context_line":"            self._exclude_running_backups(backups)"}],"source_content_type":"text/x-python","patch_set":20,"id":"d63aac04_8f3d3b06","line":925,"range":{"start_line":925,"start_character":30,"end_line":925,"end_character":51},"updated":"2021-07-16 08:51:50.000000000","message":"It seems that Missing parameter \u0027ctxt\u0027","commit_id":"ff348e659598722966a53ce2516c14b42cadc1b9"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"6370ceb636e724b7029f937b728be0899afe0343","unresolved":true,"context_lines":[{"line_number":922,"context_line":"        if online:"},{"line_number":923,"context_line":"            # We don\u0027t want to delete file locks for existing resources"},{"line_number":924,"context_line":"            volumes \u003d {vol_id: files for vol_id, files in volumes.items()"},{"line_number":925,"context_line":"                       if not objects.Volume.exists(vol_id)}"},{"line_number":926,"context_line":"            snapshots \u003d {snap_id: files for snap_id, files in snapshots.items()"},{"line_number":927,"context_line":"                         if not objects.Snapshot.exists(snap_id)}"},{"line_number":928,"context_line":"            self._exclude_running_backups(backups)"}],"source_content_type":"text/x-python","patch_set":20,"id":"6567dcf9_4d92c65e","line":925,"range":{"start_line":925,"start_character":30,"end_line":925,"end_character":51},"in_reply_to":"d63aac04_8f3d3b06","updated":"2021-08-10 12:11:13.000000000","message":"OMG, you are totally right, same thing on L927!!\n\nI have proposed a fix   https://review.opendev.org/c/openstack/cinder/+/804071","commit_id":"ff348e659598722966a53ce2516c14b42cadc1b9"}],"cinder/tests/unit/test_cmd.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"064a40b7516d53428a1f5ed955c8393a6f8711cf","unresolved":false,"context_lines":[{"line_number":1328,"context_line":"        # Only the ValueError exception should be logged"},{"line_number":1329,"context_line":"        self.assertEqual(1, mock_print.call_count)"},{"line_number":1330,"context_line":""},{"line_number":1331,"context_line":"    def test_clean_locks_offline(self):"},{"line_number":1332,"context_line":"        pass"},{"line_number":1333,"context_line":""},{"line_number":1334,"context_line":""},{"line_number":1335,"context_line":"@test.testtools.skipIf(sys.platform \u003d\u003d \u0027darwin\u0027, \u0027Not supported on macOS\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_83da41e6","line":1332,"range":{"start_line":1331,"start_character":0,"end_line":1332,"end_character":12},"updated":"2020-07-07 16:27:41.000000000","message":"-1: Faaaaaantastic, I just forgot to remove this test when I implemented the previous test with ddt. :-(","commit_id":"7aacee13923ef007c5e4ad26c3e7fcef457c6dd6"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"fa7b02bfc222ed53f8c36c5f84ffe0b52fe7110c","unresolved":false,"context_lines":[{"line_number":1256,"context_line":"        commands.ctxt \u003d mock.sentinel.ctxt"},{"line_number":1257,"context_line":"        res \u003d commands._remove_existing_volumes(volumes)"},{"line_number":1258,"context_line":""},{"line_number":1259,"context_line":"        self.assertIsNone(res)"},{"line_number":1260,"context_line":"        self.assertEqual(3, mock_api.call_count)"},{"line_number":1261,"context_line":"        mock_api.assert_has_calls(["},{"line_number":1262,"context_line":"            mock.call(commands.ctxt, fake.VOLUME_ID),"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_d87894f9","line":1259,"range":{"start_line":1259,"start_character":8,"end_line":1259,"end_character":30},"updated":"2020-07-08 12:51:47.000000000","message":"Since we know the function doesn\u0027t return anything, do we need to check this ?","commit_id":"fd8209fa6df573432f9f4cb95a32367a88d95026"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"bc52a3d35634243a92e1f45c06f8df085ad3f766","unresolved":false,"context_lines":[{"line_number":1256,"context_line":"        commands.ctxt \u003d mock.sentinel.ctxt"},{"line_number":1257,"context_line":"        res \u003d commands._remove_existing_volumes(volumes)"},{"line_number":1258,"context_line":""},{"line_number":1259,"context_line":"        self.assertIsNone(res)"},{"line_number":1260,"context_line":"        self.assertEqual(3, mock_api.call_count)"},{"line_number":1261,"context_line":"        mock_api.assert_has_calls(["},{"line_number":1262,"context_line":"            mock.call(commands.ctxt, fake.VOLUME_ID),"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_8e9256f5","line":1259,"range":{"start_line":1259,"start_character":8,"end_line":1259,"end_character":30},"in_reply_to":"bf51134e_d87894f9","updated":"2020-11-03 18:01:26.000000000","message":"So the test fails in case we ever change it.","commit_id":"fd8209fa6df573432f9f4cb95a32367a88d95026"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"fa7b02bfc222ed53f8c36c5f84ffe0b52fe7110c","unresolved":false,"context_lines":[{"line_number":1271,"context_line":"        mock_running \u003d mock.mock_open(read_data\u003d\u0027cinder-backup --config-file \u0027"},{"line_number":1272,"context_line":"                                      \u0027/etc/cinder/cinder.conf\u0027)"},{"line_number":1273,"context_line":"        file_running \u003d mock_running.return_value.__enter__.return_value"},{"line_number":1274,"context_line":"        # file_running.read.return_value \u003d (\u0027cinder-backup --config-file \u0027"},{"line_number":1275,"context_line":"        #                                   \u0027/etc/cinder/cinder.conf\u0027)"},{"line_number":1276,"context_line":"        mock_other \u003d mock.mock_open(read_data\u003d\u0027python\u0027)"},{"line_number":1277,"context_line":"        file_other \u003d mock_other.return_value.__enter__.return_value"},{"line_number":1278,"context_line":"        # file_other.read.return_value \u003d \u0027python\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_98e45cae","line":1275,"range":{"start_line":1274,"start_character":8,"end_line":1275,"end_character":70},"updated":"2020-07-08 12:51:47.000000000","message":"i guess this was just for testing and forgot to remove?","commit_id":"fd8209fa6df573432f9f4cb95a32367a88d95026"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"bc52a3d35634243a92e1f45c06f8df085ad3f766","unresolved":false,"context_lines":[{"line_number":1271,"context_line":"        mock_running \u003d mock.mock_open(read_data\u003d\u0027cinder-backup --config-file \u0027"},{"line_number":1272,"context_line":"                                      \u0027/etc/cinder/cinder.conf\u0027)"},{"line_number":1273,"context_line":"        file_running \u003d mock_running.return_value.__enter__.return_value"},{"line_number":1274,"context_line":"        # file_running.read.return_value \u003d (\u0027cinder-backup --config-file \u0027"},{"line_number":1275,"context_line":"        #                                   \u0027/etc/cinder/cinder.conf\u0027)"},{"line_number":1276,"context_line":"        mock_other \u003d mock.mock_open(read_data\u003d\u0027python\u0027)"},{"line_number":1277,"context_line":"        file_other \u003d mock_other.return_value.__enter__.return_value"},{"line_number":1278,"context_line":"        # file_other.read.return_value \u003d \u0027python\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_cebd6e69","line":1275,"range":{"start_line":1274,"start_character":8,"end_line":1275,"end_character":70},"in_reply_to":"bf51134e_98e45cae","updated":"2020-11-03 18:01:26.000000000","message":"Yeah, that was before I added the read_data parameter to the mock_open call.","commit_id":"fd8209fa6df573432f9f4cb95a32367a88d95026"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"fa7b02bfc222ed53f8c36c5f84ffe0b52fe7110c","unresolved":false,"context_lines":[{"line_number":1275,"context_line":"        #                                   \u0027/etc/cinder/cinder.conf\u0027)"},{"line_number":1276,"context_line":"        mock_other \u003d mock.mock_open(read_data\u003d\u0027python\u0027)"},{"line_number":1277,"context_line":"        file_other \u003d mock_other.return_value.__enter__.return_value"},{"line_number":1278,"context_line":"        # file_other.read.return_value \u003d \u0027python\u0027"},{"line_number":1279,"context_line":""},{"line_number":1280,"context_line":"        mock_open.side_effect \u003d (FileNotFoundError, mock_running.return_value,"},{"line_number":1281,"context_line":"                                 mock_other.return_value,"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_d8eff484","line":1278,"range":{"start_line":1278,"start_character":8,"end_line":1278,"end_character":49},"updated":"2020-07-08 12:51:47.000000000","message":"same","commit_id":"fd8209fa6df573432f9f4cb95a32367a88d95026"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"bc52a3d35634243a92e1f45c06f8df085ad3f766","unresolved":false,"context_lines":[{"line_number":1275,"context_line":"        #                                   \u0027/etc/cinder/cinder.conf\u0027)"},{"line_number":1276,"context_line":"        mock_other \u003d mock.mock_open(read_data\u003d\u0027python\u0027)"},{"line_number":1277,"context_line":"        file_other \u003d mock_other.return_value.__enter__.return_value"},{"line_number":1278,"context_line":"        # file_other.read.return_value \u003d \u0027python\u0027"},{"line_number":1279,"context_line":""},{"line_number":1280,"context_line":"        mock_open.side_effect \u003d (FileNotFoundError, mock_running.return_value,"},{"line_number":1281,"context_line":"                                 mock_other.return_value,"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_aec0fae1","line":1278,"range":{"start_line":1278,"start_character":8,"end_line":1278,"end_character":49},"in_reply_to":"bf51134e_d8eff484","updated":"2020-11-03 18:01:26.000000000","message":"Done","commit_id":"fd8209fa6df573432f9f4cb95a32367a88d95026"}],"doc/source/cli/cinder-manage.rst":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"04545e43dc9cf3d4c462de4acb088c3f6a3646eb","unresolved":false,"context_lines":[{"line_number":197,"context_line":"optional flag parameter may be used to display the configuration of one"},{"line_number":198,"context_line":"parameter."},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"Cinder Config"},{"line_number":201,"context_line":"~~~~~~~~~~~~~"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"``cinder-manage util clean_locks [-h] [--services-offline]``"}],"source_content_type":"text/x-rst","patch_set":1,"id":"ff570b3c_907bcfbc","line":200,"range":{"start_line":200,"start_character":6,"end_line":200,"end_character":7},"updated":"2020-06-10 19:51:31.000000000","message":"Please, change it to real name","commit_id":"51199934efb600d7ab4040e2810ac85aad606034"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"f1893f48a5f679e53724d85b384ee651d3cc34ce","unresolved":false,"context_lines":[{"line_number":197,"context_line":"optional flag parameter may be used to display the configuration of one"},{"line_number":198,"context_line":"parameter."},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"Cinder Config"},{"line_number":201,"context_line":"~~~~~~~~~~~~~"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"``cinder-manage util clean_locks [-h] [--services-offline]``"}],"source_content_type":"text/x-rst","patch_set":1,"id":"bf51134e_ee9c99c1","line":200,"range":{"start_line":200,"start_character":6,"end_line":200,"end_character":7},"in_reply_to":"ff570b3c_907bcfbc","updated":"2020-06-23 11:15:55.000000000","message":"Thanks. Copy paste error.","commit_id":"51199934efb600d7ab4040e2810ac85aad606034"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"04545e43dc9cf3d4c462de4acb088c3f6a3646eb","unresolved":false,"context_lines":[{"line_number":201,"context_line":"~~~~~~~~~~~~~"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"``cinder-manage util clean_locks [-h] [--services-offline]``"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"Clean file locks for volumes and snapshots on the current host."},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"Can be run with the Cinder services running or stopped."}],"source_content_type":"text/x-rst","patch_set":1,"id":"ff570b3c_f0496b8e","line":204,"updated":"2020-06-10 19:51:31.000000000","message":"Please, add some notes that it doesn\u0027t work with DLM","commit_id":"51199934efb600d7ab4040e2810ac85aad606034"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"f1893f48a5f679e53724d85b384ee651d3cc34ce","unresolved":false,"context_lines":[{"line_number":201,"context_line":"~~~~~~~~~~~~~"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"``cinder-manage util clean_locks [-h] [--services-offline]``"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"Clean file locks for volumes and snapshots on the current host."},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"Can be run with the Cinder services running or stopped."}],"source_content_type":"text/x-rst","patch_set":1,"id":"bf51134e_8eb35d4d","line":204,"in_reply_to":"ff570b3c_f0496b8e","updated":"2020-06-23 11:15:55.000000000","message":"I will be more explicit, but DLM locks are not file locks, and when we use TooZ with file locks this also works with those.","commit_id":"51199934efb600d7ab4040e2810ac85aad606034"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"7aa725378eee59a9e3fb67cefdd49ae05763daff","unresolved":false,"context_lines":[{"line_number":215,"context_line":"faster as there\u0027s no need to check the database."},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"Default assumes that services are online, must pass ``--services-offline`` to"},{"line_number":218,"context_line":"specify that they are offline."},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"This does clean DLM locks (except when using file locks), as those don\u0027t leave"},{"line_number":221,"context_line":"lock leftovers."}],"source_content_type":"text/x-rst","patch_set":3,"id":"bf51134e_6bab8988","line":218,"updated":"2020-07-07 13:09:57.000000000","message":"Might be worth adding a warning that passing --services-offline when they are in fact running is likely to lead to bad outcomes.  Maybe mention what you say in the release note about the use case for this flag being in a script before services are started.","commit_id":"7aacee13923ef007c5e4ad26c3e7fcef457c6dd6"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"064a40b7516d53428a1f5ed955c8393a6f8711cf","unresolved":false,"context_lines":[{"line_number":215,"context_line":"faster as there\u0027s no need to check the database."},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"Default assumes that services are online, must pass ``--services-offline`` to"},{"line_number":218,"context_line":"specify that they are offline."},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"This does clean DLM locks (except when using file locks), as those don\u0027t leave"},{"line_number":221,"context_line":"lock leftovers."}],"source_content_type":"text/x-rst","patch_set":3,"id":"bf51134e_83a24199","line":218,"in_reply_to":"bf51134e_6bab8988","updated":"2020-07-07 16:27:41.000000000","message":"Done","commit_id":"7aacee13923ef007c5e4ad26c3e7fcef457c6dd6"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"7aa725378eee59a9e3fb67cefdd49ae05763daff","unresolved":false,"context_lines":[{"line_number":217,"context_line":"Default assumes that services are online, must pass ``--services-offline`` to"},{"line_number":218,"context_line":"specify that they are offline."},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"This does clean DLM locks (except when using file locks), as those don\u0027t leave"},{"line_number":221,"context_line":"lock leftovers."},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"FILES"}],"source_content_type":"text/x-rst","patch_set":3,"id":"bf51134e_4b12050b","line":220,"range":{"start_line":220,"start_character":0,"end_line":220,"end_character":15},"updated":"2020-07-07 13:09:57.000000000","message":"Do you mean \"does not clean\"?  Or maybe there\u0027s a different way of making your point, which I think is that in most cases, if a DLM is being used, you don\u0027t need to worry about running this command.","commit_id":"7aacee13923ef007c5e4ad26c3e7fcef457c6dd6"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"064a40b7516d53428a1f5ed955c8393a6f8711cf","unresolved":false,"context_lines":[{"line_number":217,"context_line":"Default assumes that services are online, must pass ``--services-offline`` to"},{"line_number":218,"context_line":"specify that they are offline."},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"This does clean DLM locks (except when using file locks), as those don\u0027t leave"},{"line_number":221,"context_line":"lock leftovers."},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"FILES"}],"source_content_type":"text/x-rst","patch_set":3,"id":"bf51134e_83cfe17d","line":220,"range":{"start_line":220,"start_character":0,"end_line":220,"end_character":15},"in_reply_to":"bf51134e_4b12050b","updated":"2020-07-07 16:27:41.000000000","message":"Yes I did. :-)","commit_id":"7aacee13923ef007c5e4ad26c3e7fcef457c6dd6"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"fa7b02bfc222ed53f8c36c5f84ffe0b52fe7110c","unresolved":false,"context_lines":[{"line_number":210,"context_line":"Scheduler, Volume, Backup) and can be run with the Cinder services running or"},{"line_number":211,"context_line":"stopped."},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"If the services are running it will check existing resources in the Cinder"},{"line_number":214,"context_line":"database in order to only remove resources that are no longer present (it\u0027s"},{"line_number":215,"context_line":"safe to delete the files) .  Deleting locks while the services are offline is"},{"line_number":216,"context_line":"faster as there\u0027s no need to check the database."},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"Default assumes that services are online, must pass ``--services-offline`` to"}],"source_content_type":"text/x-rst","patch_set":4,"id":"bf51134e_2b3b3cc8","line":215,"range":{"start_line":213,"start_character":0,"end_line":215,"end_character":27},"updated":"2020-07-08 12:51:47.000000000","message":"Different for backups but it\u0027s a choice to add the backup details here.","commit_id":"fd8209fa6df573432f9f4cb95a32367a88d95026"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"bc52a3d35634243a92e1f45c06f8df085ad3f766","unresolved":false,"context_lines":[{"line_number":210,"context_line":"Scheduler, Volume, Backup) and can be run with the Cinder services running or"},{"line_number":211,"context_line":"stopped."},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"If the services are running it will check existing resources in the Cinder"},{"line_number":214,"context_line":"database in order to only remove resources that are no longer present (it\u0027s"},{"line_number":215,"context_line":"safe to delete the files) .  Deleting locks while the services are offline is"},{"line_number":216,"context_line":"faster as there\u0027s no need to check the database."},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"Default assumes that services are online, must pass ``--services-offline`` to"}],"source_content_type":"text/x-rst","patch_set":4,"id":"bf51134e_ae4e3a93","line":215,"range":{"start_line":213,"start_character":0,"end_line":215,"end_character":27},"in_reply_to":"bf51134e_2b3b3cc8","updated":"2020-11-03 18:01:26.000000000","message":"Done","commit_id":"fd8209fa6df573432f9f4cb95a32367a88d95026"}],"releasenotes/notes/clean-file-locks-tool-3a62ba05ef2d2239.yaml":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"04545e43dc9cf3d4c462de4acb088c3f6a3646eb","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Now cinder-manage provides a command to clean up file locks existing in the"},{"line_number":5,"context_line":"    host.  Command works with the Cinder services running, useful to be called"},{"line_number":6,"context_line":"    as a cron job, as well as stopped, to be called on host startup.  Command"},{"line_number":7,"context_line":"    invocation ``cinder-manage util clean_locks`` with optional parameter"},{"line_number":8,"context_line":"    ``--services-offline``."}],"source_content_type":"text/x-yaml","patch_set":1,"id":"ff570b3c_f02e8ba9","line":6,"range":{"start_line":5,"start_character":58,"end_line":6,"end_character":72},"updated":"2020-06-10 19:51:31.000000000","message":"Please, specify on which nodes it should be executed.","commit_id":"51199934efb600d7ab4040e2810ac85aad606034"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"f1893f48a5f679e53724d85b384ee651d3cc34ce","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Now cinder-manage provides a command to clean up file locks existing in the"},{"line_number":5,"context_line":"    host.  Command works with the Cinder services running, useful to be called"},{"line_number":6,"context_line":"    as a cron job, as well as stopped, to be called on host startup.  Command"},{"line_number":7,"context_line":"    invocation ``cinder-manage util clean_locks`` with optional parameter"},{"line_number":8,"context_line":"    ``--services-offline``."}],"source_content_type":"text/x-yaml","patch_set":1,"id":"bf51134e_4edb057b","line":6,"range":{"start_line":5,"start_character":58,"end_line":6,"end_character":72},"in_reply_to":"ff570b3c_f02e8ba9","updated":"2020-06-23 11:15:55.000000000","message":"Good idea, I\u0027ll also be more explicing in the command\u0027s help.","commit_id":"51199934efb600d7ab4040e2810ac85aad606034"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"064a40b7516d53428a1f5ed955c8393a6f8711cf","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Now cinder-manage provides a command to clean up file locks existing in"},{"line_number":5,"context_line":"    hosts where there\u0027s a Cinder service (API, Scheduler, Volume, Backup)"},{"line_number":6,"context_line":"    running.  Command works with the Cinder services running, useful to be"},{"line_number":7,"context_line":"    called as a cron job, as well as stopped, to be called on host startup."},{"line_number":8,"context_line":"    Command invocation ``cinder-manage util clean_locks`` with optional"},{"line_number":9,"context_line":"    parameter ``--services-offline``."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"bf51134e_b9e4d4ad","line":6,"range":{"start_line":6,"start_character":4,"end_line":6,"end_character":11},"updated":"2020-07-07 16:27:41.000000000","message":"is running","commit_id":"7aacee13923ef007c5e4ad26c3e7fcef457c6dd6"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"11e56fb149383d3f948c6c5c5d69a484c2772d23","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Now cinder-manage provides a command to clean up file locks existing in"},{"line_number":5,"context_line":"    hosts where there\u0027s a Cinder service (API, Scheduler, Volume, Backup) is"},{"line_number":6,"context_line":"    running.  Command works with the Cinder services running, useful to be"},{"line_number":7,"context_line":"    called as a cron job, as well as stopped, to be called on host startup."},{"line_number":8,"context_line":"    Command invocation ``cinder-manage util clean_locks`` with optional"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"bf51134e_f7c93325","line":5,"range":{"start_line":5,"start_character":16,"end_line":5,"end_character":23},"updated":"2020-07-16 19:04:37.000000000","message":"You were right the first time ... your \u0027is\u0027 is right here in the contraction.   Anyway, now you don\u0027t need this word at all.","commit_id":"fd8209fa6df573432f9f4cb95a32367a88d95026"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"11e56fb149383d3f948c6c5c5d69a484c2772d23","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Now cinder-manage provides a command to clean up file locks existing in"},{"line_number":5,"context_line":"    hosts where there\u0027s a Cinder service (API, Scheduler, Volume, Backup) is"},{"line_number":6,"context_line":"    running.  Command works with the Cinder services running, useful to be"},{"line_number":7,"context_line":"    called as a cron job, as well as stopped, to be called on host startup."},{"line_number":8,"context_line":"    Command invocation ``cinder-manage util clean_locks`` with optional"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"bf51134e_94902350","line":5,"range":{"start_line":5,"start_character":74,"end_line":5,"end_character":76},"updated":"2020-07-16 19:04:37.000000000","message":"nit: don\u0027t need this \u0027is\u0027","commit_id":"8eaba636933237a4020dc540856f6393d181d8a1"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"bc52a3d35634243a92e1f45c06f8df085ad3f766","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Now cinder-manage provides a command to clean up file locks existing in"},{"line_number":5,"context_line":"    hosts where there\u0027s a Cinder service (API, Scheduler, Volume, Backup) is"},{"line_number":6,"context_line":"    running.  Command works with the Cinder services running, useful to be"},{"line_number":7,"context_line":"    called as a cron job, as well as stopped, to be called on host startup."},{"line_number":8,"context_line":"    Command invocation ``cinder-manage util clean_locks`` with optional"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"9f560f44_ab8833c6","line":5,"range":{"start_line":5,"start_character":74,"end_line":5,"end_character":76},"in_reply_to":"bf51134e_94902350","updated":"2020-11-03 18:01:26.000000000","message":"Done","commit_id":"8eaba636933237a4020dc540856f6393d181d8a1"}]}
