)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7173fc5e5838c21cf7b6da01ac9f2d1c0a47ccbd","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"VMEM v7000: external-head storage pool and volume type selection"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Cherry-pick/merge of VMEM internal bug fix 28609. In this change, the"},{"line_number":10,"context_line":"cinder driver selects a storage pool for the lun to be created, based"},{"line_number":11,"context_line":"on the pool type and the configured pools. If the client is connected"},{"line_number":12,"context_line":"to an external head, it is mandatory that the following cinder conf"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"ba3cc151_a9fd2570","line":9,"updated":"2015-06-29 02:29:21.000000000","message":"I think the bug number 28609 should be removed here because it is your internal bug tracking system. Adding it in the commit message will cause confusion. It is fine to mention it in the bug report.","commit_id":"46d78bfc0501b15f1c27088800e891003aaafcf0"},{"author":{"_account_id":7860,"name":"Ryan Lucio","email":"ryan.lucio@fireeye.com","username":"rlucio"},"change_message_id":"c567e32e7eb3c9cf1faabc83b3236eff36f9469d","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"VMEM v7000: external-head storage pool and volume type selection"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Cherry-pick/merge of VMEM internal bug fix 28609. In this change, the"},{"line_number":10,"context_line":"cinder driver selects a storage pool for the lun to be created, based"},{"line_number":11,"context_line":"on the pool type and the configured pools. If the client is connected"},{"line_number":12,"context_line":"to an external head, it is mandatory that the following cinder conf"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"ba3cc151_d2a3f39c","line":9,"in_reply_to":"ba3cc151_a9fd2570","updated":"2015-07-07 23:17:11.000000000","message":"Done","commit_id":"46d78bfc0501b15f1c27088800e891003aaafcf0"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"5443e3c097d9f234d6f60e3236aac221b01e0629","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Ryan Lucio \u003crlucio@vmem.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-07-21 11:34:43 -0700"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"VMEM v7000: external-head storage pool and volume type selection"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In this change, the cinder driver selects a storage pool for the lun"},{"line_number":10,"context_line":"to be created, based on the pool type and the configured pools. If the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3a50d1a3_bfeb41a3","line":7,"updated":"2015-07-29 07:29:35.000000000","message":"Commit header is supposed to be less than 50 characters.\nhttps://wiki.openstack.org/wiki/GitCommitMessages#Summary_of_Git_commit_message_structure","commit_id":"ba9caaa30385ee7ab72d6fcd8eaa5ee3897303ce"}],"cinder/tests/unit/test_v7000_common.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7173fc5e5838c21cf7b6da01ac9f2d1c0a47ccbd","unresolved":false,"context_lines":[{"line_number":839,"context_line":"            return_value\u003d\"True\")"},{"line_number":840,"context_line":""},{"line_number":841,"context_line":"        result \u003d self.driver._process_extra_specs(vol)"},{"line_number":842,"context_line":"        self.assertEqual(result, spec_dict)"},{"line_number":843,"context_line":""},{"line_number":844,"context_line":"    def test_process_extra_specs_no_specs(self):"},{"line_number":845,"context_line":"        \u0027\u0027\u0027Fill the required spec_dict in the absence of extra specs.\u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_294915d1","line":842,"updated":"2015-06-29 02:29:21.000000000","message":"The order of parameters is expected, actual:\n\nself.assertEqual(spec_dict, result)","commit_id":"46d78bfc0501b15f1c27088800e891003aaafcf0"},{"author":{"_account_id":7860,"name":"Ryan Lucio","email":"ryan.lucio@fireeye.com","username":"rlucio"},"change_message_id":"c567e32e7eb3c9cf1faabc83b3236eff36f9469d","unresolved":false,"context_lines":[{"line_number":839,"context_line":"            return_value\u003d\"True\")"},{"line_number":840,"context_line":""},{"line_number":841,"context_line":"        result \u003d self.driver._process_extra_specs(vol)"},{"line_number":842,"context_line":"        self.assertEqual(result, spec_dict)"},{"line_number":843,"context_line":""},{"line_number":844,"context_line":"    def test_process_extra_specs_no_specs(self):"},{"line_number":845,"context_line":"        \u0027\u0027\u0027Fill the required spec_dict in the absence of extra specs.\u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_12e71be5","line":842,"in_reply_to":"ba3cc151_294915d1","updated":"2015-07-07 23:17:11.000000000","message":"Bleah, not sure how I miss these, thx","commit_id":"46d78bfc0501b15f1c27088800e891003aaafcf0"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7173fc5e5838c21cf7b6da01ac9f2d1c0a47ccbd","unresolved":false,"context_lines":[{"line_number":856,"context_line":"            return_value\u003d\"False\")"},{"line_number":857,"context_line":""},{"line_number":858,"context_line":"        result \u003d self.driver._process_extra_specs(vol)"},{"line_number":859,"context_line":"        self.assertEqual(result, spec_dict)"},{"line_number":860,"context_line":""},{"line_number":861,"context_line":"    def test_get_storage_pool_with_extra_specs(self):"},{"line_number":862,"context_line":"        \u0027\u0027\u0027Select a suitable pool based on specified extra specs.\u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_4946d9c0","line":859,"updated":"2015-06-29 02:29:21.000000000","message":"same","commit_id":"46d78bfc0501b15f1c27088800e891003aaafcf0"},{"author":{"_account_id":7860,"name":"Ryan Lucio","email":"ryan.lucio@fireeye.com","username":"rlucio"},"change_message_id":"c567e32e7eb3c9cf1faabc83b3236eff36f9469d","unresolved":false,"context_lines":[{"line_number":856,"context_line":"            return_value\u003d\"False\")"},{"line_number":857,"context_line":""},{"line_number":858,"context_line":"        result \u003d self.driver._process_extra_specs(vol)"},{"line_number":859,"context_line":"        self.assertEqual(result, spec_dict)"},{"line_number":860,"context_line":""},{"line_number":861,"context_line":"    def test_get_storage_pool_with_extra_specs(self):"},{"line_number":862,"context_line":"        \u0027\u0027\u0027Select a suitable pool based on specified extra specs.\u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_b2ed0fb9","line":859,"in_reply_to":"ba3cc151_4946d9c0","updated":"2015-07-07 23:17:11.000000000","message":"Done","commit_id":"46d78bfc0501b15f1c27088800e891003aaafcf0"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7173fc5e5838c21cf7b6da01ac9f2d1c0a47ccbd","unresolved":false,"context_lines":[{"line_number":883,"context_line":"            pool_type,"},{"line_number":884,"context_line":"            \"create_lun\")"},{"line_number":885,"context_line":""},{"line_number":886,"context_line":"        self.assertEqual(result, selected_pool)"},{"line_number":887,"context_line":""},{"line_number":888,"context_line":"    def test_get_storage_pool_configured_pools(self):"},{"line_number":889,"context_line":"        \u0027\u0027\u0027Select a suitable pool based on configured pools.\u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_c910a9ab","line":886,"updated":"2015-06-29 02:29:21.000000000","message":"same","commit_id":"46d78bfc0501b15f1c27088800e891003aaafcf0"},{"author":{"_account_id":7860,"name":"Ryan Lucio","email":"ryan.lucio@fireeye.com","username":"rlucio"},"change_message_id":"c567e32e7eb3c9cf1faabc83b3236eff36f9469d","unresolved":false,"context_lines":[{"line_number":883,"context_line":"            pool_type,"},{"line_number":884,"context_line":"            \"create_lun\")"},{"line_number":885,"context_line":""},{"line_number":886,"context_line":"        self.assertEqual(result, selected_pool)"},{"line_number":887,"context_line":""},{"line_number":888,"context_line":"    def test_get_storage_pool_configured_pools(self):"},{"line_number":889,"context_line":"        \u0027\u0027\u0027Select a suitable pool based on configured pools.\u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_722ea7fb","line":886,"in_reply_to":"ba3cc151_c910a9ab","updated":"2015-07-07 23:17:11.000000000","message":"Done","commit_id":"46d78bfc0501b15f1c27088800e891003aaafcf0"},{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"1a065bc2dd41575a02056ea3ee918ab069074fbd","unresolved":false,"context_lines":[{"line_number":59,"context_line":"INITIATOR_IQN \u003d \"iqn.1111-22.org.debian:11:222\""},{"line_number":60,"context_line":"CONNECTOR \u003d {\"initiator\": INITIATOR_IQN}"},{"line_number":61,"context_line":"DEFAULT_DEDUP_POOL \u003d {\"storage_pool\": \u0027PoolA\u0027,"},{"line_number":62,"context_line":"                      \"storage_pool_id\": 99,"},{"line_number":63,"context_line":"                      \"dedup\": True,"},{"line_number":64,"context_line":"                      \"thin\": True,"},{"line_number":65,"context_line":"                      }"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a50d1a3_9a2625cd","line":62,"updated":"2015-07-20 23:10:58.000000000","message":"Suggestion: Use different IDs for storage pools for better visibility in unit tests.","commit_id":"82133a89739079da1712b95e374bdea332f0b49b"},{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"1a065bc2dd41575a02056ea3ee918ab069074fbd","unresolved":false,"context_lines":[{"line_number":63,"context_line":"                      \"dedup\": True,"},{"line_number":64,"context_line":"                      \"thin\": True,"},{"line_number":65,"context_line":"                      }"},{"line_number":66,"context_line":"DEFAULT_THIN_POOL \u003d {\"storage_pool\": \u0027PoolA\u0027,"},{"line_number":67,"context_line":"                     \"storage_pool_id\": 99,"},{"line_number":68,"context_line":"                     \"dedup\": False,"},{"line_number":69,"context_line":"                     \"thin\": True,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a50d1a3_fa15e948","line":66,"updated":"2015-07-20 23:10:58.000000000","message":"Use different pool names for different types of pools.","commit_id":"82133a89739079da1712b95e374bdea332f0b49b"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"7fe416fc3c5abf212a15452d893a82d140468ccc","unresolved":false,"context_lines":[{"line_number":823,"context_line":""},{"line_number":824,"context_line":"        self.assertEqual(\u0027test_value\u0027, result)"},{"line_number":825,"context_line":""},{"line_number":826,"context_line":"    def test_process_extra_specs_dedup(self):"},{"line_number":827,"context_line":"        \u0027\u0027\u0027Process the given extra specs and fill the required dict.\u0027\u0027\u0027"},{"line_number":828,"context_line":"        vol \u003d VOLUME.copy()"},{"line_number":829,"context_line":"        vol[\u0027volume_type_id\u0027] \u003d 1"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa80f949_42d1becc","line":826,"updated":"2015-11-04 00:36:33.000000000","message":"Think we typically use \"\"\" instead of \u0027\u0027\u0027 for docstrings.","commit_id":"9fe91f84e5b7a374413d4dffaa59c46dfc5219a7"}],"cinder/volume/drivers/violin/v7000_common.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7173fc5e5838c21cf7b6da01ac9f2d1c0a47ccbd","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        \"\"\"Any initialization the driver does while starting.\"\"\""},{"line_number":104,"context_line":"        if vmemclient is None:"},{"line_number":105,"context_line":"            msg \u003d _(\u0027vmemclient python library not found.\u0027)"},{"line_number":106,"context_line":"            raise exception.VolumeDriverException(data\u003dmsg)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        if not self.config.san_ip:"},{"line_number":109,"context_line":"            raise exception.InvalidInput("}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_e95fad73","line":106,"updated":"2015-06-29 02:29:21.000000000","message":"Why is this moved from check_for_setup_error to here?","commit_id":"46d78bfc0501b15f1c27088800e891003aaafcf0"},{"author":{"_account_id":7860,"name":"Ryan Lucio","email":"ryan.lucio@fireeye.com","username":"rlucio"},"change_message_id":"c567e32e7eb3c9cf1faabc83b3236eff36f9469d","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        \"\"\"Any initialization the driver does while starting.\"\"\""},{"line_number":104,"context_line":"        if vmemclient is None:"},{"line_number":105,"context_line":"            msg \u003d _(\u0027vmemclient python library not found.\u0027)"},{"line_number":106,"context_line":"            raise exception.VolumeDriverException(data\u003dmsg)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        if not self.config.san_ip:"},{"line_number":109,"context_line":"            raise exception.InvalidInput("}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_f2687723","line":106,"in_reply_to":"ba3cc151_e95fad73","updated":"2015-07-07 23:17:11.000000000","message":"because do_setup gets called before check_for_setup_error.  If the vmemclient library is not installed on the system then it fails during the vmemclient.open() call here in do_setup, and that is not what we want.","commit_id":"46d78bfc0501b15f1c27088800e891003aaafcf0"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"7c2d780ab71b5adeb2294f864786d907493cc5ca","unresolved":false,"context_lines":[{"line_number":381,"context_line":"        selected_pool \u003d self._get_storage_pool(dest_vol,"},{"line_number":382,"context_line":"                                               size_mb,"},{"line_number":383,"context_line":"                                               \"thick\","},{"line_number":384,"context_line":"                                               None)"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"        try:"},{"line_number":387,"context_line":"            # in order to do a full clone the source lun must have a"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_7821814c","line":384,"updated":"2015-08-12 03:46:55.000000000","message":"Why thick here? suggest not to hard code.\nWould the param like pool_type help?","commit_id":"3ca2bfd64606e38a32b694dee1c04473a5627919"},{"author":{"_account_id":7860,"name":"Ryan Lucio","email":"ryan.lucio@fireeye.com","username":"rlucio"},"change_message_id":"49a0570703c24feb7b5d34d593f8c7d1b9eafcd8","unresolved":false,"context_lines":[{"line_number":381,"context_line":"        selected_pool \u003d self._get_storage_pool(dest_vol,"},{"line_number":382,"context_line":"                                               size_mb,"},{"line_number":383,"context_line":"                                               \"thick\","},{"line_number":384,"context_line":"                                               None)"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"        try:"},{"line_number":387,"context_line":"            # in order to do a full clone the source lun must have a"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_80562fcc","line":384,"in_reply_to":"1a4dcd0f_7821814c","updated":"2015-08-12 18:31:43.000000000","message":"This is addressed in a follow on bug fix that I can\u0027t submit until after this review finishes.  That OK w/you?","commit_id":"3ca2bfd64606e38a32b694dee1c04473a5627919"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"7c2d780ab71b5adeb2294f864786d907493cc5ca","unresolved":false,"context_lines":[{"line_number":558,"context_line":""},{"line_number":559,"context_line":"            selected_pool \u003d self._get_storage_pool(volume,"},{"line_number":560,"context_line":"                                                   snap_size_mb,"},{"line_number":561,"context_line":"                                                   \"thick\","},{"line_number":562,"context_line":"                                                   None)"},{"line_number":563,"context_line":""},{"line_number":564,"context_line":"            LOG.debug(\"Creating SRA of %(ssmb)sMB for lun of %(lsmb)sMB \""}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_f8d35136","line":561,"updated":"2015-08-12 03:46:55.000000000","message":"Why thick here? suggest not to hard code.\nWould the param like pool_type help?","commit_id":"3ca2bfd64606e38a32b694dee1c04473a5627919"},{"author":{"_account_id":7860,"name":"Ryan Lucio","email":"ryan.lucio@fireeye.com","username":"rlucio"},"change_message_id":"49a0570703c24feb7b5d34d593f8c7d1b9eafcd8","unresolved":false,"context_lines":[{"line_number":558,"context_line":""},{"line_number":559,"context_line":"            selected_pool \u003d self._get_storage_pool(volume,"},{"line_number":560,"context_line":"                                                   snap_size_mb,"},{"line_number":561,"context_line":"                                                   \"thick\","},{"line_number":562,"context_line":"                                                   None)"},{"line_number":563,"context_line":""},{"line_number":564,"context_line":"            LOG.debug(\"Creating SRA of %(ssmb)sMB for lun of %(lsmb)sMB \""}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_6070c372","line":561,"in_reply_to":"1a4dcd0f_f8d35136","updated":"2015-08-12 18:31:43.000000000","message":"This is addressed in a follow on bug fix that I can\u0027t submit until after this review finishes.","commit_id":"3ca2bfd64606e38a32b694dee1c04473a5627919"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"97096ae849e829d6b8930f73ba9c78cadcc2f6e3","unresolved":false,"context_lines":[{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        :param volume:  volume object provided by the Manager"},{"line_number":140,"context_line":"        \"\"\""},{"line_number":141,"context_line":"        spec_dict \u003d {}"},{"line_number":142,"context_line":"        selected_pool \u003d {}"},{"line_number":143,"context_line":"        size_mb \u003d volume[\u0027size\u0027] * units.Ki"},{"line_number":144,"context_line":"        full_size_mb \u003d size_mb"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a2fa921_a02f5af5","line":141,"updated":"2015-10-12 18:13:35.000000000","message":"No need to define variable and re-assign them on the next lines","commit_id":"9fe91f84e5b7a374413d4dffaa59c46dfc5219a7"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"7fe416fc3c5abf212a15452d893a82d140468ccc","unresolved":false,"context_lines":[{"line_number":863,"context_line":"        :param usage:  use for allocated MB"},{"line_number":864,"context_line":"        :returns:  selected storage pool ID"},{"line_number":865,"context_line":"        :raises:  ViolinBackendErrNotFound"},{"line_number":866,"context_line":"        \"\"\""},{"line_number":867,"context_line":"        pool \u003d None"},{"line_number":868,"context_line":"        typeid \u003d volume[\u0027volume_type_id\u0027]"},{"line_number":869,"context_line":"        if typeid:"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa80f949_62872210","line":866,"updated":"2015-11-04 00:36:33.000000000","message":"Looks like the logic to return None if volume[\u0027volume_type_id\u0027] does not exist is already in self._get_violin_extra_spec, so instead of 867-871 we could just have\n\npool \u003d self._get_violin_extra_spec(volume, \"storage_pool\")","commit_id":"9fe91f84e5b7a374413d4dffaa59c46dfc5219a7"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"7fe416fc3c5abf212a15452d893a82d140468ccc","unresolved":false,"context_lines":[{"line_number":889,"context_line":"        return selected_pool"},{"line_number":890,"context_line":""},{"line_number":891,"context_line":"    def _process_extra_specs(self, volume):"},{"line_number":892,"context_line":"        spec_dict \u003d {}"},{"line_number":893,"context_line":"        thin_lun \u003d False"},{"line_number":894,"context_line":"        thick_lun \u003d False"},{"line_number":895,"context_line":"        dedup \u003d False"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa80f949_e246b2be","line":892,"updated":"2015-11-04 00:36:33.000000000","message":"Is there a reason to have both \"thin_lun\" and \"thick_lun\"? Seems they\u0027re mutually exlusive, so it\u0027d be clear to just do \"is_thin_lun\" and do the \"not is_thin_lun\" to decide if it\u0027s thick or not.","commit_id":"9fe91f84e5b7a374413d4dffaa59c46dfc5219a7"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"7fe416fc3c5abf212a15452d893a82d140468ccc","unresolved":false,"context_lines":[{"line_number":899,"context_line":"        if self.config.san_thin_provision:"},{"line_number":900,"context_line":"            thin_lun \u003d True"},{"line_number":901,"context_line":"            # Set the actual allocation size for thin lun"},{"line_number":902,"context_line":"            # default here is 10%"},{"line_number":903,"context_line":"            size_mb \u003d size_mb / 10"},{"line_number":904,"context_line":"        else:"},{"line_number":905,"context_line":"            thick_lun \u003d True"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa80f949_026e562f","line":902,"updated":"2015-11-04 00:36:33.000000000","message":"Could move this dividing by 10 to the end, cause currently it\u0027s possible we\u0027d redo this calculation 3x.","commit_id":"9fe91f84e5b7a374413d4dffaa59c46dfc5219a7"}]}
