)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"a1ede31a7ee8a8e061ed39c56f9289d1b51d52a4","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Alan Jiang \u003cajiang@us.ibm.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2013-10-03 17:27:37 -0500"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"long flashcopy operation in Storwize driver blocks volume service"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Storwize family uses flashcopy for snapshot or volume clone. The"},{"line_number":10,"context_line":"volume delete has to wait until flashcopy finishes or errors out."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAAS3%2F%2FHWE%3D","line":7,"updated":"2013-10-04 04:57:24.000000000","message":"Title line should be limited to 50 characters","commit_id":"35d4c34797d5affc107326db98569f56e41dc3fb"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"a1ede31a7ee8a8e061ed39c56f9289d1b51d52a4","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Storwize family uses flashcopy for snapshot or volume clone. The"},{"line_number":10,"context_line":"volume delete has to wait until flashcopy finishes or errors out."},{"line_number":11,"context_line":"The _delete_vdisk() will poll volume FlashCopy status in a loop."},{"line_number":12,"context_line":"This may block volume serivce headheat since it is in the same"},{"line_number":13,"context_line":"greenthread. The solution is to use openstack FixedIntervalLoopingCall"},{"line_number":14,"context_line":"to run the FlashCopy status poll in a timer thread."},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAAS3%2F%2FHWA%3D","line":12,"updated":"2013-10-04 04:57:24.000000000","message":"headheat?","commit_id":"35d4c34797d5affc107326db98569f56e41dc3fb"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"3d2272e37bf90de089387d6ea09bb44624bbc4bf","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Storwize family uses flashcopy for snapshot or volume clone. The"},{"line_number":10,"context_line":"volume delete has to wait until flashcopy finishes or errors out."},{"line_number":11,"context_line":"The _delete_vdisk() will poll volume FlashCopy status in a loop."},{"line_number":12,"context_line":"This may block volume serivce headheat since it is in the same"},{"line_number":13,"context_line":". The solution is to use openstack FixedIntervalLoopingCall"},{"line_number":14,"context_line":"to run the FlashCopy status poll in a timer thread."},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAAS3%2F%2FGF0%3D","line":12,"updated":"2013-10-04 14:21:46.000000000","message":"typo headheat-\u003eheartbeat","commit_id":"5c2f08d1ea68e1304eda5a854ade1cac5a0a7d57"}],"cinder/volume/drivers/storwize_svc.py":[{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"a1ede31a7ee8a8e061ed39c56f9289d1b51d52a4","unresolved":false,"context_lines":[{"line_number":1244,"context_line":"            return True"},{"line_number":1245,"context_line":""},{"line_number":1246,"context_line":"    def _ensure_vdisk_no_fc_mappings(self, name, allow_snaps\u003dTrue):"},{"line_number":1247,"context_line":"        \"\"\"Ensure vdisk has no flashcopy mappings before deleting"},{"line_number":1248,"context_line":"        a vdisk.\"\"\""},{"line_number":1249,"context_line":"        timer \u003d loopingcall.FixedIntervalLoopingCall("},{"line_number":1250,"context_line":"            self._check_vdisk_fc_mappings, name, allow_snaps"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAS3%2F%2FHVY%3D","line":1247,"updated":"2013-10-04 04:57:24.000000000","message":"Please change to:\n\n\"\"\"Ensure vdisk has no FlashCopy mappings.\"\"\"\n\n1. DocString should either be one line or use the multi-line format: https://github.com/openstack-dev/hacking/blob/master/doc/source/index.rst\n\n2. This function is also called for extend_volume","commit_id":"35d4c34797d5affc107326db98569f56e41dc3fb"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"a1ede31a7ee8a8e061ed39c56f9289d1b51d52a4","unresolved":false,"context_lines":[{"line_number":1259,"context_line":"        return ret"},{"line_number":1260,"context_line":""},{"line_number":1261,"context_line":"    def _check_vdisk_fc_mappings(self, name, allow_snaps\u003dTrue):"},{"line_number":1262,"context_line":"        \"\"\" FlashCopy mapping check helper \"\"\""},{"line_number":1263,"context_line":"        mapping_ids \u003d self._get_vdisk_fc_mappings(name)"},{"line_number":1264,"context_line":"        wait_for_copy \u003d False"},{"line_number":1265,"context_line":"        for map_id in mapping_ids:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAS3%2F%2FHVQ%3D","line":1262,"updated":"2013-10-04 04:57:24.000000000","message":"Please add period to end of DocString comment, as per link above.","commit_id":"35d4c34797d5affc107326db98569f56e41dc3fb"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"a1ede31a7ee8a8e061ed39c56f9289d1b51d52a4","unresolved":false,"context_lines":[{"line_number":1273,"context_line":""},{"line_number":1274,"context_line":"            if copy_rate \u003d\u003d \u00270\u0027:"},{"line_number":1275,"context_line":"                # Case #2: A vdisk that has snapshots. Return"},{"line_number":1276,"context_line":"                #          False to waiter."},{"line_number":1277,"context_line":"                if source \u003d\u003d name:"},{"line_number":1278,"context_line":"                    if not allow_snaps:"},{"line_number":1279,"context_line":"                        raise loopingcall.LoopingCallDone(retvalue\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAS3%2F%2FHVA%3D","line":1276,"updated":"2013-10-04 04:57:24.000000000","message":"Returns false only if we don\u0027t allow snapshots","commit_id":"35d4c34797d5affc107326db98569f56e41dc3fb"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"3d2272e37bf90de089387d6ea09bb44624bbc4bf","unresolved":false,"context_lines":[{"line_number":1247,"context_line":"        \"\"\"Ensure vdisk has no flashcopy mappings.\"\"\""},{"line_number":1248,"context_line":"        timer \u003d loopingcall.FixedIntervalLoopingCall("},{"line_number":1249,"context_line":"            self._check_vdisk_fc_mappings, name, allow_snaps"},{"line_number":1250,"context_line":"        )"},{"line_number":1251,"context_line":"        # Create a timer greenthread. The default volume service heart"},{"line_number":1252,"context_line":"        # beat is every 10 seconds. The flashcopy usually takes hours"},{"line_number":1253,"context_line":"        # before it finishes. Don\u0027t set the sleep interval shorter"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAS3%2F%2FGEU%3D","line":1250,"updated":"2013-10-04 14:21:46.000000000","message":"Is there a reason that the \u0027)\u0027 is on its own line?","commit_id":"5c2f08d1ea68e1304eda5a854ade1cac5a0a7d57"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"3d2272e37bf90de089387d6ea09bb44624bbc4bf","unresolved":false,"context_lines":[{"line_number":1252,"context_line":"        # beat is every 10 seconds. The flashcopy usually takes hours"},{"line_number":1253,"context_line":"        # before it finishes. Don\u0027t set the sleep interval shorter"},{"line_number":1254,"context_line":"        # than the heartbeat. Otherwise volume service heartbeat"},{"line_number":1255,"context_line":"        # will not be serviced."},{"line_number":1256,"context_line":"        ret \u003d timer.start(interval\u003d300).wait()"},{"line_number":1257,"context_line":"        timer.stop()"},{"line_number":1258,"context_line":"        return ret"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAS3%2F%2FGDw%3D","line":1255,"updated":"2013-10-04 14:21:46.000000000","message":"Should probable also have a LOG.debug here to track this point in the code.","commit_id":"5c2f08d1ea68e1304eda5a854ade1cac5a0a7d57"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"3d2272e37bf90de089387d6ea09bb44624bbc4bf","unresolved":false,"context_lines":[{"line_number":1259,"context_line":""},{"line_number":1260,"context_line":"    def _check_vdisk_fc_mappings(self, name, allow_snaps\u003dTrue):"},{"line_number":1261,"context_line":"        \"\"\"FlashCopy mapping check helper.\"\"\""},{"line_number":1262,"context_line":""},{"line_number":1263,"context_line":"        mapping_ids \u003d self._get_vdisk_fc_mappings(name)"},{"line_number":1264,"context_line":"        wait_for_copy \u003d False"},{"line_number":1265,"context_line":"        for map_id in mapping_ids:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAS3%2F%2FGD8%3D","line":1262,"updated":"2013-10-04 14:21:46.000000000","message":"I think we should at least have a LOG.debug message if not a lot LOG.info when entering and exiting this function given that we could we here for some time.  Would be good to have breadcrumbs to track it.","commit_id":"5c2f08d1ea68e1304eda5a854ade1cac5a0a7d57"}],"cinder/volume/manager.py":[{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"1111410d5668df42d245d5322745383ea82174e6","unresolved":false,"context_lines":[{"line_number":218,"context_line":"                # Offload all the pending volume delete operations to the"},{"line_number":219,"context_line":"                # threadpool to prevent the main volume service thread"},{"line_number":220,"context_line":"                # from being blocked."},{"line_number":221,"context_line":"                self._add_to_threadpool(self.delete_volume(ctxt,"},{"line_number":222,"context_line":"                                                           volume[\u0027id\u0027]))"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"        # collect and publish service capabilities"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAS3%2F%2FG7E%3D","line":221,"updated":"2013-10-04 08:48:37.000000000","message":"Given this change might affect other drivers negatively (deletes will now happen effectively in parallel, rather than series) and we are /very/ late in the release cycle, please change to build a list of pending deletes and offload the series delete to a thread, which minimises the change.\n\nI do like the idea though - please do resubmit this version for Icehouse","commit_id":"5c2f08d1ea68e1304eda5a854ade1cac5a0a7d57"}]}
