)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"09704cd3b02d5cf382bc8501bb1730c74082be87","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adding VMAX specific metadata and version information to"},{"line_number":10,"context_line":"volume when debug is enabled."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Ib727797da7624dec5662a35de1db05ad6dc866a0"},{"line_number":13,"context_line":"Implements: blueprint vmax-metadata"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"bf659307_7fde8e6d","line":11,"updated":"2018-04-13 14:48:09.000000000","message":"Can you add more info about what the deployer/user impact of this is?  Why is it being done?","commit_id":"5ce858dd362811876a6795d41d738d0ec5c6cd9e"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"1d0dddb109f502bc51257725b26aaa6c33aeb9c2","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adding VMAX specific metadata and version information to"},{"line_number":10,"context_line":"volume when debug is enabled."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Ib727797da7624dec5662a35de1db05ad6dc866a0"},{"line_number":13,"context_line":"Implements: blueprint vmax-metadata"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"9f6a8fd7_784eb8c1","line":11,"in_reply_to":"bf659307_7fde8e6d","updated":"2018-04-24 08:59:10.000000000","message":"Sure. I will add more detail","commit_id":"5ce858dd362811876a6795d41d738d0ec5c6cd9e"},{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"dfbd0f3eadfd8d6a5828a792a9fe38e3d5de0dc0","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Helen Walsh \u003chelen.walsh@emc.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2018-06-21 16:52:08 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"VMAX driver - Add VMAX specific metadata to volume"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adding VMAX specific metadata and version information to"},{"line_number":10,"context_line":"volume when debug is enabled. It enables the user to trace"},{"line_number":11,"context_line":"the vmax location of a volume after every operation i.e."},{"line_number":12,"context_line":"storage group, masking view etc., as well as useful debug"},{"line_number":13,"context_line":"information like OS, VMAX and python versions."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":27,"id":"5f7c97a3_6ef818c3","line":10,"range":{"start_line":7,"start_character":14,"end_line":10,"end_character":6},"updated":"2018-06-26 10:38:18.000000000","message":"This is misleading - the patch is now printing VMAX specific volume metadata to logs, not adding it to the volume itself.","commit_id":"643dd4979702c09a6d831d686ab1d3d1415ab9b3"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"e90ed41fca4377a17839f81d4386e01fe0bdd05f","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Helen Walsh \u003chelen.walsh@emc.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2018-06-29 14:19:54 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"VMAX driver - Add VMAX specific metadata to volume"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Log VMAX specific metadata of a volume and version"},{"line_number":10,"context_line":"information, when debug is enabled. It enables the user"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":29,"id":"5f7c97a3_15800249","line":7,"range":{"start_line":7,"start_character":41,"end_line":7,"end_character":50},"updated":"2018-07-16 14:09:18.000000000","message":"nit: logging","commit_id":"8c65f6805dfa390c0cde4acb41e4b5e8f6d91c08"}],"cinder/tests/unit/volume/drivers/dell_emc/vmax/test_vmax.py":[{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"3b038c3f91a3a2c8dd9916374384dc07941bb78d","unresolved":false,"context_lines":[{"line_number":29,"context_line":"from cinder import exception"},{"line_number":30,"context_line":"from cinder import objects"},{"line_number":31,"context_line":"from cinder import version as openstack_version"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"from cinder.objects import fields"},{"line_number":34,"context_line":"from cinder.objects import group"},{"line_number":35,"context_line":"from cinder.objects import group_snapshot"}],"source_content_type":"text/x-python","patch_set":13,"id":"9f6a8fd7_7858f854","line":32,"updated":"2018-04-24 09:13:21.000000000","message":"remove this extra line","commit_id":"91db905432469564ac885414246b05077a29ec19"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"47421028b68eba8cc5565b3fc639157eee93624d","unresolved":false,"context_lines":[{"line_number":29,"context_line":"from cinder import exception"},{"line_number":30,"context_line":"from cinder import objects"},{"line_number":31,"context_line":"from cinder import version as openstack_version"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"from cinder.objects import fields"},{"line_number":34,"context_line":"from cinder.objects import group"},{"line_number":35,"context_line":"from cinder.objects import group_snapshot"}],"source_content_type":"text/x-python","patch_set":13,"id":"9f6a8fd7_b16f8b29","line":32,"in_reply_to":"9f6a8fd7_7858f854","updated":"2018-04-24 11:13:51.000000000","message":"Sure","commit_id":"91db905432469564ac885414246b05077a29ec19"}],"cinder/volume/drivers/dell_emc/vmax/common.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"09704cd3b02d5cf382bc8501bb1730c74082be87","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        self.masking \u003d masking.VMAXMasking(prtcl, self.rest)"},{"line_number":120,"context_line":"        self.provision \u003d provision.VMAXProvision(self.rest)"},{"line_number":121,"context_line":"        self.version \u003d version"},{"line_number":122,"context_line":"        self.is_debug \u003d True if logging.is_debug_enabled(CONF) else False"},{"line_number":123,"context_line":"        self.volume_metadata \u003d volume_metadata.VMAXVolumeMetadata("},{"line_number":124,"context_line":"            self.rest, version, self.is_debug)"},{"line_number":125,"context_line":"        # replication"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf659307_bf7bc678","line":122,"updated":"2018-04-13 14:48:09.000000000","message":"I believe this will not work correctly with the new functionality to enable debug logs without restarting Cinder.","commit_id":"5ce858dd362811876a6795d41d738d0ec5c6cd9e"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"1d0dddb109f502bc51257725b26aaa6c33aeb9c2","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        self.masking \u003d masking.VMAXMasking(prtcl, self.rest)"},{"line_number":120,"context_line":"        self.provision \u003d provision.VMAXProvision(self.rest)"},{"line_number":121,"context_line":"        self.version \u003d version"},{"line_number":122,"context_line":"        self.is_debug \u003d True if logging.is_debug_enabled(CONF) else False"},{"line_number":123,"context_line":"        self.volume_metadata \u003d volume_metadata.VMAXVolumeMetadata("},{"line_number":124,"context_line":"            self.rest, version, self.is_debug)"},{"line_number":125,"context_line":"        # replication"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f6a8fd7_98de2cd8","line":122,"in_reply_to":"bf659307_bf7bc678","updated":"2018-04-24 08:59:10.000000000","message":"I will look into this. I was in 2 minds as to whether or not to have this only with debug or to have the user explicitly enable this feature.","commit_id":"5ce858dd362811876a6795d41d738d0ec5c6cd9e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"4633dc9b1dbafe696d567e0f8b376225f2c285fd","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        self.masking \u003d masking.VMAXMasking(prtcl, self.rest)"},{"line_number":120,"context_line":"        self.provision \u003d provision.VMAXProvision(self.rest)"},{"line_number":121,"context_line":"        self.version \u003d version"},{"line_number":122,"context_line":"        self.is_debug \u003d True if logging.is_debug_enabled(CONF) else False"},{"line_number":123,"context_line":"        self.volume_metadata \u003d volume_metadata.VMAXVolumeMetadata("},{"line_number":124,"context_line":"            self.rest, version, self.is_debug)"},{"line_number":125,"context_line":"        # replication"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf659307_1f7e72e3","line":122,"in_reply_to":"bf659307_bf7bc678","updated":"2018-04-13 14:59:01.000000000","message":"We also have the API to change debug level too.","commit_id":"5ce858dd362811876a6795d41d738d0ec5c6cd9e"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"3b038c3f91a3a2c8dd9916374384dc07941bb78d","unresolved":false,"context_lines":[{"line_number":253,"context_line":"        :param volume: volume object"},{"line_number":254,"context_line":"        :returns:  model_update - dict"},{"line_number":255,"context_line":"        \"\"\""},{"line_number":256,"context_line":"        model_update, rep_info_dict, rep_driver_data \u003d {}, {}, {}"},{"line_number":257,"context_line":"        volume_id, group_name, group_id \u003d volume.id, None, None"},{"line_number":258,"context_line":"        extra_specs \u003d self._initial_setup(volume)"},{"line_number":259,"context_line":"        if \u0027qos\u0027 in extra_specs:"},{"line_number":260,"context_line":"            del extra_specs[\u0027qos\u0027]"}],"source_content_type":"text/x-python","patch_set":13,"id":"9f6a8fd7_1b0bf623","line":257,"range":{"start_line":256,"start_character":0,"end_line":257,"end_character":63},"updated":"2018-04-24 09:13:21.000000000","message":"don\u0027t do this\none declaration per line","commit_id":"91db905432469564ac885414246b05077a29ec19"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"3b038c3f91a3a2c8dd9916374384dc07941bb78d","unresolved":false,"context_lines":[{"line_number":4367,"context_line":"                      \u0027provider_location\u0027: loc,"},{"line_number":4368,"context_line":"                      \u0027replication_driver_data\u0027: rep_data}"},{"line_number":4369,"context_line":"            if volume_metadata:"},{"line_number":4370,"context_line":"                update.update("},{"line_number":4371,"context_line":"                    {\u0027metadata\u0027: volume_metadata})"},{"line_number":4372,"context_line":"            if host:"},{"line_number":4373,"context_line":"                update \u003d {\u0027volume_id\u0027: vol.id, \u0027updates\u0027: update}"},{"line_number":4374,"context_line":"            vol_model_updates.append(update)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9f6a8fd7_3b2b5a83","line":4371,"range":{"start_line":4370,"start_character":0,"end_line":4371,"end_character":50},"updated":"2018-04-24 09:13:21.000000000","message":"one line please","commit_id":"91db905432469564ac885414246b05077a29ec19"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"47421028b68eba8cc5565b3fc639157eee93624d","unresolved":false,"context_lines":[{"line_number":4367,"context_line":"                      \u0027provider_location\u0027: loc,"},{"line_number":4368,"context_line":"                      \u0027replication_driver_data\u0027: rep_data}"},{"line_number":4369,"context_line":"            if volume_metadata:"},{"line_number":4370,"context_line":"                update.update("},{"line_number":4371,"context_line":"                    {\u0027metadata\u0027: volume_metadata})"},{"line_number":4372,"context_line":"            if host:"},{"line_number":4373,"context_line":"                update \u003d {\u0027volume_id\u0027: vol.id, \u0027updates\u0027: update}"},{"line_number":4374,"context_line":"            vol_model_updates.append(update)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9f6a8fd7_914927b8","line":4371,"range":{"start_line":4370,"start_character":0,"end_line":4371,"end_character":50},"in_reply_to":"9f6a8fd7_3b2b5a83","updated":"2018-04-24 11:13:51.000000000","message":"sure","commit_id":"91db905432469564ac885414246b05077a29ec19"},{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"227984d225df0cb5415fd055e04fd256ae89e82b","unresolved":false,"context_lines":[{"line_number":2558,"context_line":"        else:"},{"line_number":2559,"context_line":"            if is_rep_enabled:"},{"line_number":2560,"context_line":"                # Setup_volume_replication will put volume in correct sg"},{"line_number":2561,"context_line":"                rep_status, rdf_dict \u003d self.setup_volume_replication("},{"line_number":2562,"context_line":"                    array, volume, device_id, target_extra_specs)"},{"line_number":2563,"context_line":"                model_update \u003d {"},{"line_number":2564,"context_line":"                    \u0027replication_status\u0027: rep_status,"},{"line_number":2565,"context_line":"                    \u0027replication_driver_data\u0027: six.text_type(rdf_dict)}"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_75371be5","line":2562,"range":{"start_line":2561,"start_character":16,"end_line":2562,"end_character":65},"updated":"2018-05-08 08:06:31.000000000","message":"This will throw a ValueError - setup_volume_replication now returns 3 values (with the addition of the volume metadata \u0027rep_info_dict\u0027 value).","commit_id":"45e284a5765003b1dd014bea56d5eb2bebbf0517"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"2db54e3b17073061adb5b6cad61e202ba6953bed","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        self.masking \u003d masking.VMAXMasking(prtcl, self.rest)"},{"line_number":120,"context_line":"        self.provision \u003d provision.VMAXProvision(self.rest)"},{"line_number":121,"context_line":"        self.version \u003d version"},{"line_number":122,"context_line":"        self.is_debug \u003d True if logging.is_debug_enabled(CONF) else False"},{"line_number":123,"context_line":"        self.volume_metadata \u003d volume_metadata.VMAXVolumeMetadata("},{"line_number":124,"context_line":"            self.rest, version, self.is_debug)"},{"line_number":125,"context_line":"        # replication"}],"source_content_type":"text/x-python","patch_set":16,"id":"5f7c97a3_4349e0cd","line":122,"range":{"start_line":122,"start_character":24,"end_line":122,"end_character":73},"updated":"2018-05-09 17:31:54.000000000","message":"This should just be:\n\nself.is_debug \u003d logging.is_debug_enabled(CONF)\n\nLogging level can be changed at runtime, so there is a bit of a disconnect here where the driver debug level could end up different than the logging debug level. Might be better to check occasionally? Thought that may add unnecessary overhead.","commit_id":"9ec677873cc5dcb33879bcfd809f8c58d6c71ca5"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"b864a4397b42d433f330422338918ab60353212a","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        self.masking \u003d masking.VMAXMasking(prtcl, self.rest)"},{"line_number":120,"context_line":"        self.provision \u003d provision.VMAXProvision(self.rest)"},{"line_number":121,"context_line":"        self.version \u003d version"},{"line_number":122,"context_line":"        self.is_debug \u003d True if logging.is_debug_enabled(CONF) else False"},{"line_number":123,"context_line":"        self.volume_metadata \u003d volume_metadata.VMAXVolumeMetadata("},{"line_number":124,"context_line":"            self.rest, version, self.is_debug)"},{"line_number":125,"context_line":"        # replication"}],"source_content_type":"text/x-python","patch_set":16,"id":"5f7c97a3_10aea797","line":122,"range":{"start_line":122,"start_character":24,"end_line":122,"end_character":73},"in_reply_to":"5f7c97a3_4349e0cd","updated":"2018-05-11 08:54:39.000000000","message":"Thanks Sean","commit_id":"9ec677873cc5dcb33879bcfd809f8c58d6c71ca5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6bdcaa0b4e09a362fcaa148f4a7cd315526a0133","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        self.masking \u003d masking.VMAXMasking(prtcl, self.rest)"},{"line_number":120,"context_line":"        self.provision \u003d provision.VMAXProvision(self.rest)"},{"line_number":121,"context_line":"        self.version \u003d version"},{"line_number":122,"context_line":"        self.is_debug \u003d logging.is_debug_enabled(CONF)"},{"line_number":123,"context_line":"        self.volume_metadata \u003d volume_metadata.VMAXVolumeMetadata("},{"line_number":124,"context_line":"            self.rest, version, self.is_debug)"},{"line_number":125,"context_line":"        # replication"}],"source_content_type":"text/x-python","patch_set":22,"id":"5f7c97a3_2f7790a2","line":122,"range":{"start_line":122,"start_character":13,"end_line":122,"end_character":21},"updated":"2018-06-12 18:43:15.000000000","message":"This should be removed. Log levels can be adjusted at runtime by either our API or through the dynamic config change mechanism, so this is an error prone local caching that is not needed.","commit_id":"1109a4f465dc054677377086b248aea36f95dcbb"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"2aa0d7435f4374bec607311e000127f7facbec99","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        self.masking \u003d masking.VMAXMasking(prtcl, self.rest)"},{"line_number":120,"context_line":"        self.provision \u003d provision.VMAXProvision(self.rest)"},{"line_number":121,"context_line":"        self.version \u003d version"},{"line_number":122,"context_line":"        self.is_debug \u003d logging.is_debug_enabled(CONF)"},{"line_number":123,"context_line":"        self.volume_metadata \u003d volume_metadata.VMAXVolumeMetadata("},{"line_number":124,"context_line":"            self.rest, version, self.is_debug)"},{"line_number":125,"context_line":"        # replication"}],"source_content_type":"text/x-python","patch_set":22,"id":"5f7c97a3_9a461621","line":122,"range":{"start_line":122,"start_character":13,"end_line":122,"end_character":21},"in_reply_to":"5f7c97a3_2f7790a2","updated":"2018-06-13 08:57:16.000000000","message":"Thanks Sean, I will","commit_id":"1109a4f465dc054677377086b248aea36f95dcbb"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6bdcaa0b4e09a362fcaa148f4a7cd315526a0133","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        self.version \u003d version"},{"line_number":122,"context_line":"        self.is_debug \u003d logging.is_debug_enabled(CONF)"},{"line_number":123,"context_line":"        self.volume_metadata \u003d volume_metadata.VMAXVolumeMetadata("},{"line_number":124,"context_line":"            self.rest, version, self.is_debug)"},{"line_number":125,"context_line":"        # replication"},{"line_number":126,"context_line":"        self.replication_enabled \u003d False"},{"line_number":127,"context_line":"        self.extend_replicated_vol \u003d False"}],"source_content_type":"text/x-python","patch_set":22,"id":"5f7c97a3_efa198f8","line":124,"range":{"start_line":124,"start_character":32,"end_line":124,"end_character":45},"updated":"2018-06-12 18:43:15.000000000","message":"Change this to:\n\n    LOG.isEnabledFor(logging.DEBUG)","commit_id":"1109a4f465dc054677377086b248aea36f95dcbb"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"2aa0d7435f4374bec607311e000127f7facbec99","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        self.version \u003d version"},{"line_number":122,"context_line":"        self.is_debug \u003d logging.is_debug_enabled(CONF)"},{"line_number":123,"context_line":"        self.volume_metadata \u003d volume_metadata.VMAXVolumeMetadata("},{"line_number":124,"context_line":"            self.rest, version, self.is_debug)"},{"line_number":125,"context_line":"        # replication"},{"line_number":126,"context_line":"        self.replication_enabled \u003d False"},{"line_number":127,"context_line":"        self.extend_replicated_vol \u003d False"}],"source_content_type":"text/x-python","patch_set":22,"id":"5f7c97a3_ba5672cd","line":124,"range":{"start_line":124,"start_character":32,"end_line":124,"end_character":45},"in_reply_to":"5f7c97a3_efa198f8","updated":"2018-06-13 08:57:16.000000000","message":"Sure","commit_id":"1109a4f465dc054677377086b248aea36f95dcbb"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6bdcaa0b4e09a362fcaa148f4a7cd315526a0133","unresolved":false,"context_lines":[{"line_number":571,"context_line":"                self.masking.attempt_ig_cleanup("},{"line_number":572,"context_line":"                    connector, self.protocol, rep_extra_specs[utils.ARRAY],"},{"line_number":573,"context_line":"                    True)"},{"line_number":574,"context_line":"        if is_multiattach and self.is_debug:"},{"line_number":575,"context_line":"            mv_list, sg_list \u003d ("},{"line_number":576,"context_line":"                self._get_mvs_and_sgs_from_volume("},{"line_number":577,"context_line":"                    extra_specs[utils.ARRAY],"}],"source_content_type":"text/x-python","patch_set":22,"id":"5f7c97a3_2f85505a","line":574,"range":{"start_line":574,"start_character":30,"end_line":574,"end_character":43},"updated":"2018-06-12 18:43:15.000000000","message":"Same as above.","commit_id":"1109a4f465dc054677377086b248aea36f95dcbb"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"2aa0d7435f4374bec607311e000127f7facbec99","unresolved":false,"context_lines":[{"line_number":571,"context_line":"                self.masking.attempt_ig_cleanup("},{"line_number":572,"context_line":"                    connector, self.protocol, rep_extra_specs[utils.ARRAY],"},{"line_number":573,"context_line":"                    True)"},{"line_number":574,"context_line":"        if is_multiattach and self.is_debug:"},{"line_number":575,"context_line":"            mv_list, sg_list \u003d ("},{"line_number":576,"context_line":"                self._get_mvs_and_sgs_from_volume("},{"line_number":577,"context_line":"                    extra_specs[utils.ARRAY],"}],"source_content_type":"text/x-python","patch_set":22,"id":"5f7c97a3_da59eefc","line":574,"range":{"start_line":574,"start_character":30,"end_line":574,"end_character":43},"in_reply_to":"5f7c97a3_2f85505a","updated":"2018-06-13 08:57:16.000000000","message":"ok","commit_id":"1109a4f465dc054677377086b248aea36f95dcbb"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6bdcaa0b4e09a362fcaa148f4a7cd315526a0133","unresolved":false,"context_lines":[{"line_number":685,"context_line":"                        rep_extra_specs[utils.ARRAY], remote_port_group))"},{"line_number":686,"context_line":"            device_info_dict[\u0027is_multipath\u0027] \u003d is_multipath"},{"line_number":687,"context_line":""},{"line_number":688,"context_line":"        if is_multiattach and self.is_debug:"},{"line_number":689,"context_line":"            masking_view_dict[\u0027mv_list\u0027], masking_view_dict[\u0027sg_list\u0027] \u003d ("},{"line_number":690,"context_line":"                self._get_mvs_and_sgs_from_volume("},{"line_number":691,"context_line":"                    extra_specs[utils.ARRAY],"}],"source_content_type":"text/x-python","patch_set":22,"id":"5f7c97a3_4f88cc6f","line":688,"range":{"start_line":688,"start_character":30,"end_line":688,"end_character":43},"updated":"2018-06-12 18:43:15.000000000","message":"Same.","commit_id":"1109a4f465dc054677377086b248aea36f95dcbb"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"2aa0d7435f4374bec607311e000127f7facbec99","unresolved":false,"context_lines":[{"line_number":685,"context_line":"                        rep_extra_specs[utils.ARRAY], remote_port_group))"},{"line_number":686,"context_line":"            device_info_dict[\u0027is_multipath\u0027] \u003d is_multipath"},{"line_number":687,"context_line":""},{"line_number":688,"context_line":"        if is_multiattach and self.is_debug:"},{"line_number":689,"context_line":"            masking_view_dict[\u0027mv_list\u0027], masking_view_dict[\u0027sg_list\u0027] \u003d ("},{"line_number":690,"context_line":"                self._get_mvs_and_sgs_from_volume("},{"line_number":691,"context_line":"                    extra_specs[utils.ARRAY],"}],"source_content_type":"text/x-python","patch_set":22,"id":"5f7c97a3_9a6ff690","line":688,"range":{"start_line":688,"start_character":30,"end_line":688,"end_character":43},"in_reply_to":"5f7c97a3_4f88cc6f","updated":"2018-06-13 08:57:16.000000000","message":"ok","commit_id":"1109a4f465dc054677377086b248aea36f95dcbb"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"e90ed41fca4377a17839f81d4386e01fe0bdd05f","unresolved":false,"context_lines":[{"line_number":2721,"context_line":"        :returns: replication_status -- str, replication_driver_data -- dict"},{"line_number":2722,"context_line":"                  rep_info_dict -- dict"},{"line_number":2723,"context_line":"        \"\"\""},{"line_number":2724,"context_line":"        rep_extra_specs \u003d {}"},{"line_number":2725,"context_line":"        rep_extra_specs[\u0027rep_mode\u0027] \u003d None"},{"line_number":2726,"context_line":"        source_name \u003d volume.name"},{"line_number":2727,"context_line":"        LOG.debug(\u0027Starting replication setup \u0027"},{"line_number":2728,"context_line":"                  \u0027for volume: %s.\u0027, source_name)"}],"source_content_type":"text/x-python","patch_set":29,"id":"5f7c97a3_751856cc","line":2725,"range":{"start_line":2724,"start_character":0,"end_line":2725,"end_character":42},"updated":"2018-07-16 14:09:18.000000000","message":"nit: This could be initialized on a single call","commit_id":"8c65f6805dfa390c0cde4acb41e4b5e8f6d91c08"}],"cinder/volume/drivers/dell_emc/vmax/fc.py":[{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"dfbd0f3eadfd8d6a5828a792a9fe38e3d5de0dc0","unresolved":false,"context_lines":[{"line_number":96,"context_line":"              - Support for list manageable volumes and snapshots"},{"line_number":97,"context_line":"                (bp/vmax-list-manage-existing)"},{"line_number":98,"context_line":"              - Fix for SSL verification/cert application (bug #1772924)"},{"line_number":99,"context_line":"              - Adding VMAX metadata to volume (bp vmax-metadata)"},{"line_number":100,"context_line":"    \"\"\""},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    VERSION \u003d \"3.2.0\""}],"source_content_type":"text/x-python","patch_set":27,"id":"5f7c97a3_0e3ac496","line":99,"range":{"start_line":99,"start_character":16,"end_line":99,"end_character":46},"updated":"2018-06-26 10:38:18.000000000","message":"This should be changed now that it\u0027s outputting to logs and not saving to the volume.","commit_id":"643dd4979702c09a6d831d686ab1d3d1415ab9b3"}],"cinder/volume/drivers/dell_emc/vmax/iscsi.py":[{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"dfbd0f3eadfd8d6a5828a792a9fe38e3d5de0dc0","unresolved":false,"context_lines":[{"line_number":101,"context_line":"              - Support for list manageable volumes and snapshots"},{"line_number":102,"context_line":"                (bp/vmax-list-manage-existing)"},{"line_number":103,"context_line":"              - Fix for SSL verification/cert application (bug #1772924)"},{"line_number":104,"context_line":"              - Adding VMAX metadata to volume (bp vmax-metadata)"},{"line_number":105,"context_line":"    \"\"\""},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    VERSION \u003d \"3.2.0\""}],"source_content_type":"text/x-python","patch_set":27,"id":"5f7c97a3_2e50e0d4","line":104,"range":{"start_line":104,"start_character":16,"end_line":104,"end_character":45},"updated":"2018-06-26 10:38:18.000000000","message":"Ditto - This should be changed now that it\u0027s outputting to logs and not saving to the volume.","commit_id":"643dd4979702c09a6d831d686ab1d3d1415ab9b3"}],"cinder/volume/drivers/dell_emc/vmax/metadata.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"09704cd3b02d5cf382bc8501bb1730c74082be87","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    \"\"\""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def __init__(self, rest, version, is_debug):"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        self.version_dict \u003d {}"},{"line_number":58,"context_line":"        self.rest \u003d rest"},{"line_number":59,"context_line":"        self.utils \u003d utils.VMAXUtils()"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf659307_6c27cec8","line":56,"updated":"2018-04-13 14:48:09.000000000","message":"Remove extra blank line here.","commit_id":"5ce858dd362811876a6795d41d738d0ec5c6cd9e"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"1d0dddb109f502bc51257725b26aaa6c33aeb9c2","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    \"\"\""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def __init__(self, rest, version, is_debug):"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        self.version_dict \u003d {}"},{"line_number":58,"context_line":"        self.rest \u003d rest"},{"line_number":59,"context_line":"        self.utils \u003d utils.VMAXUtils()"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f6a8fd7_d801043a","line":56,"in_reply_to":"bf659307_6c27cec8","updated":"2018-04-24 08:59:10.000000000","message":"Sure","commit_id":"5ce858dd362811876a6795d41d738d0ec5c6cd9e"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"09704cd3b02d5cf382bc8501bb1730c74082be87","unresolved":false,"context_lines":[{"line_number":286,"context_line":""},{"line_number":287,"context_line":"        :param datadict: the data dictionary"},{"line_number":288,"context_line":"        \"\"\""},{"line_number":289,"context_line":"        from prettytable import PrettyTable"},{"line_number":290,"context_line":"        t \u003d PrettyTable([\u0027Key\u0027, \u0027Value\u0027])"},{"line_number":291,"context_line":"        for k, v in datadict.items():"},{"line_number":292,"context_line":"            if v:"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf659307_ff77fe9e","line":289,"range":{"start_line":289,"start_character":8,"end_line":289,"end_character":43},"updated":"2018-04-13 14:48:09.000000000","message":"Should be imported at the top of the file.","commit_id":"5ce858dd362811876a6795d41d738d0ec5c6cd9e"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"1d0dddb109f502bc51257725b26aaa6c33aeb9c2","unresolved":false,"context_lines":[{"line_number":286,"context_line":""},{"line_number":287,"context_line":"        :param datadict: the data dictionary"},{"line_number":288,"context_line":"        \"\"\""},{"line_number":289,"context_line":"        from prettytable import PrettyTable"},{"line_number":290,"context_line":"        t \u003d PrettyTable([\u0027Key\u0027, \u0027Value\u0027])"},{"line_number":291,"context_line":"        for k, v in datadict.items():"},{"line_number":292,"context_line":"            if v:"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f6a8fd7_98f70c5a","line":289,"range":{"start_line":289,"start_character":8,"end_line":289,"end_character":43},"in_reply_to":"bf659307_ff77fe9e","updated":"2018-04-24 08:59:10.000000000","message":"Will do","commit_id":"5ce858dd362811876a6795d41d738d0ec5c6cd9e"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"09704cd3b02d5cf382bc8501bb1730c74082be87","unresolved":false,"context_lines":[{"line_number":430,"context_line":"        model_update \u003d {}"},{"line_number":431,"context_line":"        if volume_metadata:"},{"line_number":432,"context_line":"            try:"},{"line_number":433,"context_line":"                from cinder import context"},{"line_number":434,"context_line":"                from cinder import db"},{"line_number":435,"context_line":"                ctxt \u003d context.get_admin_context()"},{"line_number":436,"context_line":"                if volume.metadata:"},{"line_number":437,"context_line":"                    for item in CLEANUP_LIST:"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf659307_1fa0b2f3","line":434,"range":{"start_line":433,"start_character":0,"end_line":434,"end_character":37},"updated":"2018-04-13 14:48:09.000000000","message":"Should be imported at the top of the file.","commit_id":"5ce858dd362811876a6795d41d738d0ec5c6cd9e"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"1d0dddb109f502bc51257725b26aaa6c33aeb9c2","unresolved":false,"context_lines":[{"line_number":430,"context_line":"        model_update \u003d {}"},{"line_number":431,"context_line":"        if volume_metadata:"},{"line_number":432,"context_line":"            try:"},{"line_number":433,"context_line":"                from cinder import context"},{"line_number":434,"context_line":"                from cinder import db"},{"line_number":435,"context_line":"                ctxt \u003d context.get_admin_context()"},{"line_number":436,"context_line":"                if volume.metadata:"},{"line_number":437,"context_line":"                    for item in CLEANUP_LIST:"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f6a8fd7_3898401a","line":434,"range":{"start_line":433,"start_character":0,"end_line":434,"end_character":37},"in_reply_to":"bf659307_1fa0b2f3","updated":"2018-04-24 08:59:10.000000000","message":"Sure.  Thanks for the feedback","commit_id":"5ce858dd362811876a6795d41d738d0ec5c6cd9e"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"3b038c3f91a3a2c8dd9916374384dc07941bb78d","unresolved":false,"context_lines":[{"line_number":268,"context_line":"                        k not in exclude_list) and v:"},{"line_number":269,"context_line":"                my_volume_trace_dict[k] \u003d v"},{"line_number":270,"context_line":"            if k \u003d\u003d \u0027mv_list\u0027 and v:"},{"line_number":271,"context_line":"                i \u003d 1"},{"line_number":272,"context_line":"                for item in v:"},{"line_number":273,"context_line":"                    my_volume_trace_dict[\"masking_view_%d\" % i] \u003d item"},{"line_number":274,"context_line":"                    i +\u003d 1"},{"line_number":275,"context_line":"            if k \u003d\u003d \u0027sg_list\u0027 and v:"},{"line_number":276,"context_line":"                i \u003d 1"},{"line_number":277,"context_line":"                for item in v:"}],"source_content_type":"text/x-python","patch_set":13,"id":"9f6a8fd7_db39fed6","line":274,"range":{"start_line":271,"start_character":0,"end_line":274,"end_character":26},"updated":"2018-04-24 09:13:21.000000000","message":"use emumerate instead","commit_id":"91db905432469564ac885414246b05077a29ec19"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"3b038c3f91a3a2c8dd9916374384dc07941bb78d","unresolved":false,"context_lines":[{"line_number":350,"context_line":"        volume_metadata \u003d self.update_volume_info_metadata("},{"line_number":351,"context_line":"            datadict, volume, self.version_dict)"},{"line_number":352,"context_line":"        model_update \u003d {}"},{"line_number":353,"context_line":"        model_update.update("},{"line_number":354,"context_line":"            {\u0027metadata\u0027: volume_metadata})"},{"line_number":355,"context_line":"        if model_update:"},{"line_number":356,"context_line":"            try:"},{"line_number":357,"context_line":"                volume.update(model_update)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9f6a8fd7_3b791a93","line":354,"range":{"start_line":353,"start_character":0,"end_line":354,"end_character":42},"updated":"2018-04-24 09:13:21.000000000","message":"one line please","commit_id":"91db905432469564ac885414246b05077a29ec19"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"3b038c3f91a3a2c8dd9916374384dc07941bb78d","unresolved":false,"context_lines":[{"line_number":349,"context_line":"        \"\"\""},{"line_number":350,"context_line":"        volume_metadata \u003d self.update_volume_info_metadata("},{"line_number":351,"context_line":"            datadict, volume, self.version_dict)"},{"line_number":352,"context_line":"        model_update \u003d {}"},{"line_number":353,"context_line":"        model_update.update("},{"line_number":354,"context_line":"            {\u0027metadata\u0027: volume_metadata})"},{"line_number":355,"context_line":"        if model_update:"},{"line_number":356,"context_line":"            try:"},{"line_number":357,"context_line":"                volume.update(model_update)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9f6a8fd7_1b7216ae","line":354,"range":{"start_line":352,"start_character":0,"end_line":354,"end_character":42},"updated":"2018-04-24 09:13:21.000000000","message":"use this.\n\n  model_update \u003d {\u0027metadata\u0027: volume_metadata}","commit_id":"91db905432469564ac885414246b05077a29ec19"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"47421028b68eba8cc5565b3fc639157eee93624d","unresolved":false,"context_lines":[{"line_number":350,"context_line":"        volume_metadata \u003d self.update_volume_info_metadata("},{"line_number":351,"context_line":"            datadict, volume, self.version_dict)"},{"line_number":352,"context_line":"        model_update \u003d {}"},{"line_number":353,"context_line":"        model_update.update("},{"line_number":354,"context_line":"            {\u0027metadata\u0027: volume_metadata})"},{"line_number":355,"context_line":"        if model_update:"},{"line_number":356,"context_line":"            try:"},{"line_number":357,"context_line":"                volume.update(model_update)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9f6a8fd7_b1dd4be1","line":354,"range":{"start_line":353,"start_character":0,"end_line":354,"end_character":42},"in_reply_to":"9f6a8fd7_3b791a93","updated":"2018-04-24 11:13:51.000000000","message":"Will do","commit_id":"91db905432469564ac885414246b05077a29ec19"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"3b038c3f91a3a2c8dd9916374384dc07941bb78d","unresolved":false,"context_lines":[{"line_number":439,"context_line":"                            db.volume_metadata_delete(ctxt, volume.id, item)"},{"line_number":440,"context_line":"                        if item in volume_metadata:"},{"line_number":441,"context_line":"                            del volume_metadata[item]"},{"line_number":442,"context_line":"                    for k, v in volume.metadata.iteritems():"},{"line_number":443,"context_line":"                        if k.startswith(\u0027storage_group_\u0027) or ("},{"line_number":444,"context_line":"                                k.startswith(\u0027masking_view_\u0027)):"},{"line_number":445,"context_line":"                            db.volume_metadata_delete(ctxt, volume.id, k)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9f6a8fd7_1b80d645","line":442,"range":{"start_line":442,"start_character":48,"end_line":442,"end_character":57},"updated":"2018-04-24 09:13:21.000000000","message":"items","commit_id":"91db905432469564ac885414246b05077a29ec19"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"3b038c3f91a3a2c8dd9916374384dc07941bb78d","unresolved":false,"context_lines":[{"line_number":443,"context_line":"                        if k.startswith(\u0027storage_group_\u0027) or ("},{"line_number":444,"context_line":"                                k.startswith(\u0027masking_view_\u0027)):"},{"line_number":445,"context_line":"                            db.volume_metadata_delete(ctxt, volume.id, k)"},{"line_number":446,"context_line":"                model_update.update("},{"line_number":447,"context_line":"                    {\u0027metadata\u0027: volume_metadata})"},{"line_number":448,"context_line":"                db.volume_update(ctxt, volume.id, model_update)"},{"line_number":449,"context_line":"            except Exception as e:"},{"line_number":450,"context_line":"                LOG.debug(\"Exception is : %(e)s. \","}],"source_content_type":"text/x-python","patch_set":13,"id":"9f6a8fd7_bb9a0ab6","line":447,"range":{"start_line":446,"start_character":0,"end_line":447,"end_character":50},"updated":"2018-04-24 09:13:21.000000000","message":"one line please","commit_id":"91db905432469564ac885414246b05077a29ec19"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"47421028b68eba8cc5565b3fc639157eee93624d","unresolved":false,"context_lines":[{"line_number":443,"context_line":"                        if k.startswith(\u0027storage_group_\u0027) or ("},{"line_number":444,"context_line":"                                k.startswith(\u0027masking_view_\u0027)):"},{"line_number":445,"context_line":"                            db.volume_metadata_delete(ctxt, volume.id, k)"},{"line_number":446,"context_line":"                model_update.update("},{"line_number":447,"context_line":"                    {\u0027metadata\u0027: volume_metadata})"},{"line_number":448,"context_line":"                db.volume_update(ctxt, volume.id, model_update)"},{"line_number":449,"context_line":"            except Exception as e:"},{"line_number":450,"context_line":"                LOG.debug(\"Exception is : %(e)s. \","}],"source_content_type":"text/x-python","patch_set":13,"id":"9f6a8fd7_91de07d8","line":447,"range":{"start_line":446,"start_character":0,"end_line":447,"end_character":50},"in_reply_to":"9f6a8fd7_bb9a0ab6","updated":"2018-04-24 11:13:51.000000000","message":"sure","commit_id":"91db905432469564ac885414246b05077a29ec19"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"2db54e3b17073061adb5b6cad61e202ba6953bed","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":"import datetime"},{"line_number":16,"context_line":"import platform"},{"line_number":17,"context_line":"from prettytable import PrettyTable"},{"line_number":18,"context_line":"import six"},{"line_number":19,"context_line":"import time"},{"line_number":20,"context_line":"import types"}],"source_content_type":"text/x-python","patch_set":16,"id":"5f7c97a3_a3231405","line":17,"range":{"start_line":17,"start_character":24,"end_line":17,"end_character":35},"updated":"2018-05-09 17:31:54.000000000","message":"Only import modules, not classes.","commit_id":"9ec677873cc5dcb33879bcfd809f8c58d6c71ca5"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"b864a4397b42d433f330422338918ab60353212a","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":"import datetime"},{"line_number":16,"context_line":"import platform"},{"line_number":17,"context_line":"from prettytable import PrettyTable"},{"line_number":18,"context_line":"import six"},{"line_number":19,"context_line":"import time"},{"line_number":20,"context_line":"import types"}],"source_content_type":"text/x-python","patch_set":16,"id":"5f7c97a3_50917f4d","line":17,"range":{"start_line":17,"start_character":24,"end_line":17,"end_character":35},"in_reply_to":"5f7c97a3_a3231405","updated":"2018-05-11 08:54:39.000000000","message":"Sure.","commit_id":"9ec677873cc5dcb33879bcfd809f8c58d6c71ca5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"2db54e3b17073061adb5b6cad61e202ba6953bed","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"def debug_required(func):"},{"line_number":36,"context_line":"    \"\"\"Only execute the function if debug is enabled"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    \"\"\""},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"5f7c97a3_037a08f0","line":36,"updated":"2018-05-09 17:31:54.000000000","message":"Single lines docstrings should end with a period and just be on one line.","commit_id":"9ec677873cc5dcb33879bcfd809f8c58d6c71ca5"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"b864a4397b42d433f330422338918ab60353212a","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"def debug_required(func):"},{"line_number":36,"context_line":"    \"\"\"Only execute the function if debug is enabled"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    \"\"\""},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"5f7c97a3_10878711","line":36,"in_reply_to":"5f7c97a3_037a08f0","updated":"2018-05-11 08:54:39.000000000","message":"Will do.","commit_id":"9ec677873cc5dcb33879bcfd809f8c58d6c71ca5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"2db54e3b17073061adb5b6cad61e202ba6953bed","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def _update_platform(self):"},{"line_number":67,"context_line":"        \"\"\"Update the platform."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        \"\"\""},{"line_number":70,"context_line":"        try:"},{"line_number":71,"context_line":"            self.version_dict[\u0027platform\u0027] \u003d platform.platform()"}],"source_content_type":"text/x-python","patch_set":16,"id":"5f7c97a3_836db833","line":68,"updated":"2018-05-09 17:31:54.000000000","message":"Update throughout.","commit_id":"9ec677873cc5dcb33879bcfd809f8c58d6c71ca5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"2db54e3b17073061adb5b6cad61e202ba6953bed","unresolved":false,"context_lines":[{"line_number":183,"context_line":"            target_name\u003dNone, remote_array\u003dNone,"},{"line_number":184,"context_line":"            target_device_id\u003dNone, masking_view\u003dNone,"},{"line_number":185,"context_line":"            child_storage_group\u003dNone, parent_storage_group\u003dNone,"},{"line_number":186,"context_line":"            initiator_group\u003dNone, port_group\u003dNone, srp\u003dNone, host\u003dNone,"},{"line_number":187,"context_line":"            is_multipath\u003dNone, source_volid\u003dNone, identifier_name\u003dNone,"},{"line_number":188,"context_line":"            snapshot_count\u003dNone, source_snapshot_id\u003dNone, rep_mode\u003dNone,"},{"line_number":189,"context_line":"            replication_status\u003dNone, rdf_group_label\u003dNone, vol_grp_name\u003dNone,"}],"source_content_type":"text/x-python","patch_set":16,"id":"5f7c97a3_0363e843","line":186,"updated":"2018-05-09 17:31:54.000000000","message":"This is a little crazy. Maybe just take kwargs?","commit_id":"9ec677873cc5dcb33879bcfd809f8c58d6c71ca5"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"b864a4397b42d433f330422338918ab60353212a","unresolved":false,"context_lines":[{"line_number":183,"context_line":"            target_name\u003dNone, remote_array\u003dNone,"},{"line_number":184,"context_line":"            target_device_id\u003dNone, masking_view\u003dNone,"},{"line_number":185,"context_line":"            child_storage_group\u003dNone, parent_storage_group\u003dNone,"},{"line_number":186,"context_line":"            initiator_group\u003dNone, port_group\u003dNone, srp\u003dNone, host\u003dNone,"},{"line_number":187,"context_line":"            is_multipath\u003dNone, source_volid\u003dNone, identifier_name\u003dNone,"},{"line_number":188,"context_line":"            snapshot_count\u003dNone, source_snapshot_id\u003dNone, rep_mode\u003dNone,"},{"line_number":189,"context_line":"            replication_status\u003dNone, rdf_group_label\u003dNone, vol_grp_name\u003dNone,"}],"source_content_type":"text/x-python","patch_set":16,"id":"5f7c97a3_b0cd7367","line":186,"in_reply_to":"5f7c97a3_0363e843","updated":"2018-05-11 08:54:39.000000000","message":"Thanks for the feedback Sean.","commit_id":"9ec677873cc5dcb33879bcfd809f8c58d6c71ca5"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"f4a5e67026c75b9fe28dc462eff21837b3fb75ea","unresolved":false,"context_lines":[{"line_number":228,"context_line":"        :returns: True or False"},{"line_number":229,"context_line":"        \"\"\""},{"line_number":230,"context_line":"        exclude_list \u003d [\u0027self\u0027, \u0027append\u0027, \u0027mv_list\u0027, \u0027sg_list\u0027]"},{"line_number":231,"context_line":"        return True if ((not isinstance(value, dict)) and ("},{"line_number":232,"context_line":"            not isinstance(value, types.FunctionType)) and ("},{"line_number":233,"context_line":"            not isinstance(value, type)) and ("},{"line_number":234,"context_line":"                key not in exclude_list) and value) else False"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    @debug_required"},{"line_number":237,"context_line":"    def print_pretty_table(self, datadict):"}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_8f1789a4","line":234,"range":{"start_line":231,"start_character":0,"end_line":234,"end_character":62},"updated":"2018-05-17 01:09:49.000000000","message":"so complicated, do not over-use inline if clause","commit_id":"dc794e72f497f697c203797e8a202277a257b9f5"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"f4a5e67026c75b9fe28dc462eff21837b3fb75ea","unresolved":false,"context_lines":[{"line_number":244,"context_line":"            if v:"},{"line_number":245,"context_line":"                t.add_row([k, v])"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"        LOG.info(\u0027\\n%(output)s\u0027, {"},{"line_number":248,"context_line":"            \u0027output\u0027: t})"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    def _consolidate_volume_trace_list("},{"line_number":251,"context_line":"            self, volume_id, volume_trace_dict, volume_key_value):"}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_cf1ca1c3","line":248,"range":{"start_line":247,"start_character":0,"end_line":248,"end_character":25},"updated":"2018-05-17 01:09:49.000000000","message":"one line is better","commit_id":"dc794e72f497f697c203797e8a202277a257b9f5"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"f4a5e67026c75b9fe28dc462eff21837b3fb75ea","unresolved":false,"context_lines":[{"line_number":286,"context_line":"                    del volume_metadata[k]"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"        for key, dict_value in datadict.items():"},{"line_number":289,"context_line":"            for k, v in dict_value.items():"},{"line_number":290,"context_line":"                volume_metadata[k] \u003d v"},{"line_number":291,"context_line":"        for k, v in version_dict.items():"},{"line_number":292,"context_line":"            volume_metadata[k] \u003d v"},{"line_number":293,"context_line":"        return volume_metadata"}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_2f8195c4","line":290,"range":{"start_line":289,"start_character":12,"end_line":290,"end_character":38},"updated":"2018-05-17 01:09:49.000000000","message":"whay not .update?","commit_id":"dc794e72f497f697c203797e8a202277a257b9f5"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"2028d1be0895a63237b0c68a0edf28c6f4e4ddef","unresolved":false,"context_lines":[{"line_number":286,"context_line":"                    del volume_metadata[k]"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"        for key, dict_value in datadict.items():"},{"line_number":289,"context_line":"            for k, v in dict_value.items():"},{"line_number":290,"context_line":"                volume_metadata[k] \u003d v"},{"line_number":291,"context_line":"        for k, v in version_dict.items():"},{"line_number":292,"context_line":"            volume_metadata[k] \u003d v"},{"line_number":293,"context_line":"        return volume_metadata"}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_6dea30ad","line":290,"range":{"start_line":289,"start_character":12,"end_line":290,"end_character":38},"in_reply_to":"5f7c97a3_2f8195c4","updated":"2018-05-17 08:59:57.000000000","message":"sure","commit_id":"dc794e72f497f697c203797e8a202277a257b9f5"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"f121c353e851eb4de77ca1e48b3fc59e70ce23af","unresolved":false,"context_lines":[{"line_number":286,"context_line":"                    del volume_metadata[k]"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"        for key, dict_value in datadict.items():"},{"line_number":289,"context_line":"            for k, v in dict_value.items():"},{"line_number":290,"context_line":"                volume_metadata[k] \u003d v"},{"line_number":291,"context_line":"        for k, v in version_dict.items():"},{"line_number":292,"context_line":"            volume_metadata[k] \u003d v"},{"line_number":293,"context_line":"        return volume_metadata"}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_43caa5a1","line":290,"range":{"start_line":289,"start_character":12,"end_line":290,"end_character":38},"in_reply_to":"5f7c97a3_6dea30ad","updated":"2018-05-17 11:20:49.000000000","message":"Using .update is deemed to be 3 times slower than using \u003d","commit_id":"dc794e72f497f697c203797e8a202277a257b9f5"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"f4a5e67026c75b9fe28dc462eff21837b3fb75ea","unresolved":false,"context_lines":[{"line_number":288,"context_line":"        for key, dict_value in datadict.items():"},{"line_number":289,"context_line":"            for k, v in dict_value.items():"},{"line_number":290,"context_line":"                volume_metadata[k] \u003d v"},{"line_number":291,"context_line":"        for k, v in version_dict.items():"},{"line_number":292,"context_line":"            volume_metadata[k] \u003d v"},{"line_number":293,"context_line":"        return volume_metadata"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"    def _update_volume_metadata(self, datadict, volume):"}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_4f8651de","line":292,"range":{"start_line":291,"start_character":0,"end_line":292,"end_character":34},"updated":"2018-05-17 01:09:49.000000000","message":"this one too","commit_id":"dc794e72f497f697c203797e8a202277a257b9f5"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"f4a5e67026c75b9fe28dc462eff21837b3fb75ea","unresolved":false,"context_lines":[{"line_number":306,"context_line":"                volume.update(model_update)"},{"line_number":307,"context_line":"                volume.save()"},{"line_number":308,"context_line":"            except Exception as e:"},{"line_number":309,"context_line":"                LOG.debug(\"Exception is : %(e)s. \","},{"line_number":310,"context_line":"                          {\u0027e\u0027: e})"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"    @debug_required"},{"line_number":313,"context_line":"    def persist_attach_info("}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_af74c5ff","line":310,"range":{"start_line":309,"start_character":0,"end_line":310,"end_character":35},"updated":"2018-05-17 01:09:49.000000000","message":"one line","commit_id":"dc794e72f497f697c203797e8a202277a257b9f5"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"2028d1be0895a63237b0c68a0edf28c6f4e4ddef","unresolved":false,"context_lines":[{"line_number":306,"context_line":"                volume.update(model_update)"},{"line_number":307,"context_line":"                volume.save()"},{"line_number":308,"context_line":"            except Exception as e:"},{"line_number":309,"context_line":"                LOG.debug(\"Exception is : %(e)s. \","},{"line_number":310,"context_line":"                          {\u0027e\u0027: e})"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"    @debug_required"},{"line_number":313,"context_line":"    def persist_attach_info("}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_ad092896","line":310,"range":{"start_line":309,"start_character":0,"end_line":310,"end_character":35},"in_reply_to":"5f7c97a3_af74c5ff","updated":"2018-05-17 08:59:57.000000000","message":"Sure.","commit_id":"dc794e72f497f697c203797e8a202277a257b9f5"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"f4a5e67026c75b9fe28dc462eff21837b3fb75ea","unresolved":false,"context_lines":[{"line_number":336,"context_line":"            parent_storage_group \u003d masking_view_dict[utils.PARENT_SG_NAME]"},{"line_number":337,"context_line":"            initiator_group \u003d masking_view_dict[utils.IG_NAME]"},{"line_number":338,"context_line":"            port_group \u003d masking_view_dict[utils.PORTGROUPNAME]"},{"line_number":339,"context_line":"        datadict \u003d self.gather_volume_info("},{"line_number":340,"context_line":"            volume.id, operation, False,"},{"line_number":341,"context_line":"            serial_number\u003dextra_specs[utils.ARRAY],"},{"line_number":342,"context_line":"            service_level\u003dextra_specs[utils.SLO],"}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_6f60ed36","line":339,"range":{"start_line":339,"start_character":0,"end_line":339,"end_character":8},"updated":"2018-05-17 01:09:49.000000000","message":"add a blank line here","commit_id":"dc794e72f497f697c203797e8a202277a257b9f5"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"2028d1be0895a63237b0c68a0edf28c6f4e4ddef","unresolved":false,"context_lines":[{"line_number":336,"context_line":"            parent_storage_group \u003d masking_view_dict[utils.PARENT_SG_NAME]"},{"line_number":337,"context_line":"            initiator_group \u003d masking_view_dict[utils.IG_NAME]"},{"line_number":338,"context_line":"            port_group \u003d masking_view_dict[utils.PORTGROUPNAME]"},{"line_number":339,"context_line":"        datadict \u003d self.gather_volume_info("},{"line_number":340,"context_line":"            volume.id, operation, False,"},{"line_number":341,"context_line":"            serial_number\u003dextra_specs[utils.ARRAY],"},{"line_number":342,"context_line":"            service_level\u003dextra_specs[utils.SLO],"}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_cdd82420","line":339,"range":{"start_line":339,"start_character":0,"end_line":339,"end_character":8},"in_reply_to":"5f7c97a3_6f60ed36","updated":"2018-05-17 08:59:57.000000000","message":"sure","commit_id":"dc794e72f497f697c203797e8a202277a257b9f5"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"212e14d2c7db756e9d7bc321e6973e629d79b322","unresolved":false,"context_lines":[{"line_number":272,"context_line":"            self.volume_trace_list.append(volume_key_value.copy())"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    @debug_required"},{"line_number":275,"context_line":"    def update_volume_info_metadata(self, datadict, volume, version_dict):"},{"line_number":276,"context_line":"        \"\"\"Get update volume metadata with volume info"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"        :param datadict: volume info key value pairs"}],"source_content_type":"text/x-python","patch_set":21,"id":"5f7c97a3_fc9e5452","line":275,"range":{"start_line":275,"start_character":60,"end_line":275,"end_character":72},"updated":"2018-06-11 19:12:21.000000000","message":"missing description in doc string.","commit_id":"9408d185f88cbd677801bea182f1219fc399c1de"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"d29b961ea622f437fccb9dbc4652e92806c95e3f","unresolved":false,"context_lines":[{"line_number":272,"context_line":"            self.volume_trace_list.append(volume_key_value.copy())"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    @debug_required"},{"line_number":275,"context_line":"    def update_volume_info_metadata(self, datadict, volume, version_dict):"},{"line_number":276,"context_line":"        \"\"\"Get update volume metadata with volume info"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"        :param datadict: volume info key value pairs"}],"source_content_type":"text/x-python","patch_set":21,"id":"5f7c97a3_eadc34e2","line":275,"range":{"start_line":275,"start_character":60,"end_line":275,"end_character":72},"in_reply_to":"5f7c97a3_fc9e5452","updated":"2018-06-12 10:55:57.000000000","message":"I will add it.  Thanks","commit_id":"9408d185f88cbd677801bea182f1219fc399c1de"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"212e14d2c7db756e9d7bc321e6973e629d79b322","unresolved":false,"context_lines":[{"line_number":308,"context_line":"                volume.update(model_update)"},{"line_number":309,"context_line":"                volume.save()"},{"line_number":310,"context_line":"            except Exception as e:"},{"line_number":311,"context_line":"                LOG.debug(\"Exception is : %(e)s. \", {\u0027e\u0027: e})"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    @debug_required"},{"line_number":314,"context_line":"    def persist_attach_info("}],"source_content_type":"text/x-python","patch_set":21,"id":"5f7c97a3_fcc73444","line":311,"range":{"start_line":311,"start_character":16,"end_line":311,"end_character":25},"updated":"2018-06-11 19:12:21.000000000","message":"LOG.debug doesn\u0027t really make sense here.  Seems like it should at least be an info or warning.  I.E.  \u0027Volume Metadata Update failed.  Exception is :\u0027","commit_id":"9408d185f88cbd677801bea182f1219fc399c1de"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"d29b961ea622f437fccb9dbc4652e92806c95e3f","unresolved":false,"context_lines":[{"line_number":308,"context_line":"                volume.update(model_update)"},{"line_number":309,"context_line":"                volume.save()"},{"line_number":310,"context_line":"            except Exception as e:"},{"line_number":311,"context_line":"                LOG.debug(\"Exception is : %(e)s. \", {\u0027e\u0027: e})"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    @debug_required"},{"line_number":314,"context_line":"    def persist_attach_info("}],"source_content_type":"text/x-python","patch_set":21,"id":"5f7c97a3_6ad104cc","line":311,"range":{"start_line":311,"start_character":16,"end_line":311,"end_character":25},"in_reply_to":"5f7c97a3_fcc73444","updated":"2018-06-12 10:55:57.000000000","message":"Sure","commit_id":"9408d185f88cbd677801bea182f1219fc399c1de"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"212e14d2c7db756e9d7bc321e6973e629d79b322","unresolved":false,"context_lines":[{"line_number":362,"context_line":"        :param volume: the volume object"},{"line_number":363,"context_line":"        :param extra_specs: extra specifications"},{"line_number":364,"context_line":"        :param device_id: masking view dict"},{"line_number":365,"context_line":"        :param array: array serialnumber"},{"line_number":366,"context_line":"        :param mv_list: masking view list"},{"line_number":367,"context_line":"        :param sg_list: storage group list"},{"line_number":368,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":21,"id":"5f7c97a3_dccfd854","line":365,"range":{"start_line":365,"start_character":8,"end_line":365,"end_character":40},"updated":"2018-06-11 19:12:21.000000000","message":"copy paste error?","commit_id":"9408d185f88cbd677801bea182f1219fc399c1de"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"d29b961ea622f437fccb9dbc4652e92806c95e3f","unresolved":false,"context_lines":[{"line_number":362,"context_line":"        :param volume: the volume object"},{"line_number":363,"context_line":"        :param extra_specs: extra specifications"},{"line_number":364,"context_line":"        :param device_id: masking view dict"},{"line_number":365,"context_line":"        :param array: array serialnumber"},{"line_number":366,"context_line":"        :param mv_list: masking view list"},{"line_number":367,"context_line":"        :param sg_list: storage group list"},{"line_number":368,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":21,"id":"5f7c97a3_0adad0e7","line":365,"range":{"start_line":365,"start_character":8,"end_line":365,"end_character":40},"in_reply_to":"5f7c97a3_dccfd854","updated":"2018-06-12 10:55:57.000000000","message":"I will remove it.","commit_id":"9408d185f88cbd677801bea182f1219fc399c1de"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"212e14d2c7db756e9d7bc321e6973e629d79b322","unresolved":false,"context_lines":[{"line_number":395,"context_line":"                model_update.update({\u0027metadata\u0027: volume_metadata})"},{"line_number":396,"context_line":"                db.volume_update(ctxt, volume.id, model_update)"},{"line_number":397,"context_line":"            except Exception as e:"},{"line_number":398,"context_line":"                LOG.debug(\"Exception is : %(e)s. \", {\u0027e\u0027: e})"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"    @debug_required"},{"line_number":401,"context_line":"    def persist_extend_info("}],"source_content_type":"text/x-python","patch_set":21,"id":"5f7c97a3_9cd5e0e8","line":398,"range":{"start_line":398,"start_character":15,"end_line":398,"end_character":61},"updated":"2018-06-11 19:12:21.000000000","message":"Same comment here as above.","commit_id":"9408d185f88cbd677801bea182f1219fc399c1de"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"d29b961ea622f437fccb9dbc4652e92806c95e3f","unresolved":false,"context_lines":[{"line_number":395,"context_line":"                model_update.update({\u0027metadata\u0027: volume_metadata})"},{"line_number":396,"context_line":"                db.volume_update(ctxt, volume.id, model_update)"},{"line_number":397,"context_line":"            except Exception as e:"},{"line_number":398,"context_line":"                LOG.debug(\"Exception is : %(e)s. \", {\u0027e\u0027: e})"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"    @debug_required"},{"line_number":401,"context_line":"    def persist_extend_info("}],"source_content_type":"text/x-python","patch_set":21,"id":"5f7c97a3_2ad78cc1","line":398,"range":{"start_line":398,"start_character":15,"end_line":398,"end_character":61},"in_reply_to":"5f7c97a3_9cd5e0e8","updated":"2018-06-12 10:55:57.000000000","message":"Sure","commit_id":"9408d185f88cbd677801bea182f1219fc399c1de"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6bdcaa0b4e09a362fcaa148f4a7cd315526a0133","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2017 Dell Inc. or its subsidiaries."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":22,"id":"5f7c97a3_cf937ca2","line":1,"range":{"start_line":1,"start_character":16,"end_line":1,"end_character":20},"updated":"2018-06-12 18:43:15.000000000","message":"Should probably update this?","commit_id":"1109a4f465dc054677377086b248aea36f95dcbb"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"2aa0d7435f4374bec607311e000127f7facbec99","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2017 Dell Inc. or its subsidiaries."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":22,"id":"5f7c97a3_fa05cac2","line":1,"range":{"start_line":1,"start_character":16,"end_line":1,"end_character":20},"in_reply_to":"5f7c97a3_cf937ca2","updated":"2018-06-13 08:57:16.000000000","message":"Sure","commit_id":"1109a4f465dc054677377086b248aea36f95dcbb"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6bdcaa0b4e09a362fcaa148f4a7cd315526a0133","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from cinder.objects import volume"},{"line_number":26,"context_line":"from cinder import version"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from oslo_log import log as logging"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"from cinder.volume.drivers.dell_emc.vmax import utils"},{"line_number":31,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":22,"id":"5f7c97a3_6f8ee879","line":28,"updated":"2018-06-12 18:43:15.000000000","message":"Move this import up before the cinder imports section.","commit_id":"1109a4f465dc054677377086b248aea36f95dcbb"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"2aa0d7435f4374bec607311e000127f7facbec99","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from cinder.objects import volume"},{"line_number":26,"context_line":"from cinder import version"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from oslo_log import log as logging"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"from cinder.volume.drivers.dell_emc.vmax import utils"},{"line_number":31,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":22,"id":"5f7c97a3_ba0bd2d2","line":28,"in_reply_to":"5f7c97a3_6f8ee879","updated":"2018-06-13 08:57:16.000000000","message":"ok","commit_id":"1109a4f465dc054677377086b248aea36f95dcbb"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"0caef18e0e9cfa9cc2cd58a7f81ad02a81aa47c1","unresolved":false,"context_lines":[{"line_number":306,"context_line":"        model_update \u003d {\u0027metadata\u0027: volume_metadata}"},{"line_number":307,"context_line":"        if model_update:"},{"line_number":308,"context_line":"            try:"},{"line_number":309,"context_line":"                volume.update(model_update)"},{"line_number":310,"context_line":"                volume.save()"},{"line_number":311,"context_line":"            except Exception as e:"},{"line_number":312,"context_line":"                LOG.warning(\"Volume metadata update failed. \""},{"line_number":313,"context_line":"                            \"Exception is : %(e)s. \", {\u0027e\u0027: e})"}],"source_content_type":"text/x-python","patch_set":24,"id":"5f7c97a3_4f663ef1","line":310,"range":{"start_line":309,"start_character":0,"end_line":310,"end_character":29},"updated":"2018-06-15 14:25:28.000000000","message":"You should not update thing on the database from a driver.","commit_id":"4d602d591c95b5aeb674a2f95ba7073caf370991"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"e85c852c6e9d9307d7236c0c950fc1edb5d846fe","unresolved":false,"context_lines":[{"line_number":306,"context_line":"        model_update \u003d {\u0027metadata\u0027: volume_metadata}"},{"line_number":307,"context_line":"        if model_update:"},{"line_number":308,"context_line":"            try:"},{"line_number":309,"context_line":"                volume.update(model_update)"},{"line_number":310,"context_line":"                volume.save()"},{"line_number":311,"context_line":"            except Exception as e:"},{"line_number":312,"context_line":"                LOG.warning(\"Volume metadata update failed. \""},{"line_number":313,"context_line":"                            \"Exception is : %(e)s. \", {\u0027e\u0027: e})"}],"source_content_type":"text/x-python","patch_set":24,"id":"5f7c97a3_a047e177","line":310,"range":{"start_line":309,"start_character":0,"end_line":310,"end_character":29},"in_reply_to":"5f7c97a3_4f663ef1","updated":"2018-06-15 17:01:51.000000000","message":"Hi Erlon,\nDo you have any suggestion how I would update metadata if there is no returning model_update dict from the calling operation e.g. extend_volume, initialize_connection etc.\nThank you\nHelen","commit_id":"4d602d591c95b5aeb674a2f95ba7073caf370991"},{"author":{"_account_id":26402,"name":"Kumar Prashant","email":"kumar.prashant@dell.com","username":"prashk"},"change_message_id":"ea4762450f98a6a914fab12ea98e8abbc2ca71aa","unresolved":false,"context_lines":[{"line_number":148,"context_line":"    def gather_version_info(self, serial_number):"},{"line_number":149,"context_line":"        \"\"\"Gather info on the array"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        :param serial_number: the serial number of the array"},{"line_number":152,"context_line":"        \"\"\""},{"line_number":153,"context_line":"        try:"},{"line_number":154,"context_line":"            self._update_openstack_info()"}],"source_content_type":"text/x-python","patch_set":28,"id":"5f7c97a3_b61dd411","line":151,"updated":"2018-06-29 10:40:14.000000000","message":"Add the return statement","commit_id":"610b519a063e17291731deff7fa39e57ed55b13d"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"585023cc7c71ad451dfb0808a7601c28adb388e9","unresolved":false,"context_lines":[{"line_number":148,"context_line":"    def gather_version_info(self, serial_number):"},{"line_number":149,"context_line":"        \"\"\"Gather info on the array"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        :param serial_number: the serial number of the array"},{"line_number":152,"context_line":"        \"\"\""},{"line_number":153,"context_line":"        try:"},{"line_number":154,"context_line":"            self._update_openstack_info()"}],"source_content_type":"text/x-python","patch_set":28,"id":"5f7c97a3_9ca557a2","line":151,"in_reply_to":"5f7c97a3_b61dd411","updated":"2018-06-29 11:36:54.000000000","message":"sure","commit_id":"610b519a063e17291731deff7fa39e57ed55b13d"},{"author":{"_account_id":26402,"name":"Kumar Prashant","email":"kumar.prashant@dell.com","username":"prashk"},"change_message_id":"ea4762450f98a6a914fab12ea98e8abbc2ca71aa","unresolved":false,"context_lines":[{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    def _param_condition(self, key, value):"},{"line_number":222,"context_line":"        \"\"\"Determines condition for inclusion."},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"        :returns: True or False"},{"line_number":225,"context_line":"        \"\"\""},{"line_number":226,"context_line":"        exclude_list \u003d [\u0027self\u0027, \u0027append\u0027, \u0027mv_list\u0027, \u0027sg_list\u0027]"}],"source_content_type":"text/x-python","patch_set":28,"id":"5f7c97a3_362a242f","line":223,"updated":"2018-06-29 10:40:14.000000000","message":"Please add the missing\n:param key\n:param value","commit_id":"610b519a063e17291731deff7fa39e57ed55b13d"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"585023cc7c71ad451dfb0808a7601c28adb388e9","unresolved":false,"context_lines":[{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    def _param_condition(self, key, value):"},{"line_number":222,"context_line":"        \"\"\"Determines condition for inclusion."},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"        :returns: True or False"},{"line_number":225,"context_line":"        \"\"\""},{"line_number":226,"context_line":"        exclude_list \u003d [\u0027self\u0027, \u0027append\u0027, \u0027mv_list\u0027, \u0027sg_list\u0027]"}],"source_content_type":"text/x-python","patch_set":28,"id":"5f7c97a3_dc9bcf61","line":223,"in_reply_to":"5f7c97a3_362a242f","updated":"2018-06-29 11:36:54.000000000","message":"sure","commit_id":"610b519a063e17291731deff7fa39e57ed55b13d"},{"author":{"_account_id":26402,"name":"Kumar Prashant","email":"kumar.prashant@dell.com","username":"prashk"},"change_message_id":"ea4762450f98a6a914fab12ea98e8abbc2ca71aa","unresolved":false,"context_lines":[{"line_number":233,"context_line":"            return False"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"    @debug_required"},{"line_number":236,"context_line":"    def print_pretty_table(self, datadict):"},{"line_number":237,"context_line":"        \"\"\"Prints the data in the dict."},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"        :param datadict: the data dictionary"}],"source_content_type":"text/x-python","patch_set":28,"id":"5f7c97a3_415cb8ef","line":236,"range":{"start_line":236,"start_character":8,"end_line":236,"end_character":26},"updated":"2018-06-29 10:40:14.000000000","message":"Consider making this static","commit_id":"610b519a063e17291731deff7fa39e57ed55b13d"},{"author":{"_account_id":26402,"name":"Kumar Prashant","email":"kumar.prashant@dell.com","username":"prashk"},"change_message_id":"ea4762450f98a6a914fab12ea98e8abbc2ca71aa","unresolved":false,"context_lines":[{"line_number":268,"context_line":"            self.volume_trace_list.append(volume_key_value.copy())"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"    @debug_required"},{"line_number":271,"context_line":"    def update_volume_info_metadata(self, datadict, version_dict):"},{"line_number":272,"context_line":"        \"\"\"Get update volume metadata with volume info"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"        :param datadict: volume info key value pairs"}],"source_content_type":"text/x-python","patch_set":28,"id":"5f7c97a3_01532018","line":271,"range":{"start_line":271,"start_character":8,"end_line":271,"end_character":35},"updated":"2018-06-29 10:40:14.000000000","message":"This looks like a candidate for a static method as version_dict being used is not the version_dict data member of the class","commit_id":"610b519a063e17291731deff7fa39e57ed55b13d"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"585023cc7c71ad451dfb0808a7601c28adb388e9","unresolved":false,"context_lines":[{"line_number":268,"context_line":"            self.volume_trace_list.append(volume_key_value.copy())"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"    @debug_required"},{"line_number":271,"context_line":"    def update_volume_info_metadata(self, datadict, version_dict):"},{"line_number":272,"context_line":"        \"\"\"Get update volume metadata with volume info"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"        :param datadict: volume info key value pairs"}],"source_content_type":"text/x-python","patch_set":28,"id":"5f7c97a3_1c9aa761","line":271,"range":{"start_line":271,"start_character":8,"end_line":271,"end_character":35},"in_reply_to":"5f7c97a3_01532018","updated":"2018-06-29 11:36:54.000000000","message":"This breaks the unit tests","commit_id":"610b519a063e17291731deff7fa39e57ed55b13d"},{"author":{"_account_id":26402,"name":"Kumar Prashant","email":"kumar.prashant@dell.com","username":"prashk"},"change_message_id":"ea4762450f98a6a914fab12ea98e8abbc2ca71aa","unresolved":false,"context_lines":[{"line_number":411,"context_line":"                snapshot_count\u003dsnapshot_count,"},{"line_number":412,"context_line":"                last_ss_name\u003dlast_ss_name)"},{"line_number":413,"context_line":"            volume_metadata \u003d self.update_volume_info_metadata("},{"line_number":414,"context_line":"                datadict, self.version_dict)"},{"line_number":415,"context_line":"            self.print_pretty_table(volume_metadata)"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"    @debug_required"}],"source_content_type":"text/x-python","patch_set":28,"id":"5f7c97a3_a1b10c47","line":414,"range":{"start_line":414,"start_character":26,"end_line":414,"end_character":43},"updated":"2018-06-29 10:40:14.000000000","message":"In a couple of functions, this is being populated via the gather_version_info method but in the rest of places like this one, it is being used as is. Is this by design?","commit_id":"610b519a063e17291731deff7fa39e57ed55b13d"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"585023cc7c71ad451dfb0808a7601c28adb388e9","unresolved":false,"context_lines":[{"line_number":411,"context_line":"                snapshot_count\u003dsnapshot_count,"},{"line_number":412,"context_line":"                last_ss_name\u003dlast_ss_name)"},{"line_number":413,"context_line":"            volume_metadata \u003d self.update_volume_info_metadata("},{"line_number":414,"context_line":"                datadict, self.version_dict)"},{"line_number":415,"context_line":"            self.print_pretty_table(volume_metadata)"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"    @debug_required"}],"source_content_type":"text/x-python","patch_set":28,"id":"5f7c97a3_dc8d0f36","line":414,"range":{"start_line":414,"start_character":26,"end_line":414,"end_character":43},"in_reply_to":"5f7c97a3_a1b10c47","updated":"2018-06-29 11:36:54.000000000","message":"This version_dict is pre-populated and being merged with VMAX metadata","commit_id":"610b519a063e17291731deff7fa39e57ed55b13d"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"e90ed41fca4377a17839f81d4386e01fe0bdd05f","unresolved":false,"context_lines":[{"line_number":40,"context_line":"            else:"},{"line_number":41,"context_line":"                pass"},{"line_number":42,"context_line":"        except Exception:"},{"line_number":43,"context_line":"            pass"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    return func_wrapper"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"5f7c97a3_d59a8a11","line":43,"range":{"start_line":43,"start_character":12,"end_line":43,"end_character":16},"updated":"2018-07-16 14:09:18.000000000","message":"-1: This is not good, you could have your code filled with bugs and you wouldn\u0027t know because you are not logging anything... This should log something so it can be fixed.","commit_id":"8c65f6805dfa390c0cde4acb41e4b5e8f6d91c08"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"e90ed41fca4377a17839f81d4386e01fe0bdd05f","unresolved":false,"context_lines":[{"line_number":112,"context_line":"            if ver:"},{"line_number":113,"context_line":"                self.version_dict[\u0027openstack_version\u0027] \u003d ver"},{"line_number":114,"context_line":"        except Exception:"},{"line_number":115,"context_line":"            pass"},{"line_number":116,"context_line":"        try:"},{"line_number":117,"context_line":"            rel \u003d self._get_version_info_release()"},{"line_number":118,"context_line":"            if rel:"}],"source_content_type":"text/x-python","patch_set":29,"id":"5f7c97a3_b556ee2a","line":115,"updated":"2018-07-16 14:09:18.000000000","message":"?: Wouldn\u0027t it be better to store something else like \"Unkown\" or \"Error\" or something to somehow report that there\u0027s been an issue retrieving it?","commit_id":"8c65f6805dfa390c0cde4acb41e4b5e8f6d91c08"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"e90ed41fca4377a17839f81d4386e01fe0bdd05f","unresolved":false,"context_lines":[{"line_number":118,"context_line":"            if rel:"},{"line_number":119,"context_line":"                self.version_dict[\u0027openstack_release\u0027] \u003d rel"},{"line_number":120,"context_line":"        except Exception:"},{"line_number":121,"context_line":"            pass"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def _update_openstack_info(self):"},{"line_number":124,"context_line":"        \"\"\"Update openstack info.\"\"\""}],"source_content_type":"text/x-python","patch_set":29,"id":"5f7c97a3_55551a1d","line":121,"updated":"2018-07-16 14:09:18.000000000","message":"ditto","commit_id":"8c65f6805dfa390c0cde4acb41e4b5e8f6d91c08"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"e90ed41fca4377a17839f81d4386e01fe0bdd05f","unresolved":false,"context_lines":[{"line_number":174,"context_line":"        volume_key_value \u003d {}"},{"line_number":175,"context_line":"        datadict \u003d {}"},{"line_number":176,"context_line":"        try:"},{"line_number":177,"context_line":"            param_dict \u003d locals()"},{"line_number":178,"context_line":"            volume_trace_dict \u003d self._fill_volume_trace_dict(param_dict)"},{"line_number":179,"context_line":"            volume_trace_dict[\u0027volume_updated_time\u0027] \u003d ("},{"line_number":180,"context_line":"                datetime.datetime.fromtimestamp("}],"source_content_type":"text/x-python","patch_set":29,"id":"5f7c97a3_38e89313","line":177,"updated":"2018-07-16 14:09:18.000000000","message":"-1: This looks like the wrong way of doing this, as it makes the code in _fill_volume_trace_dict dirtier.\n\nWhy don\u0027t we just pass the following to that method?\n\n self._fill_volume_trace_dict(volume_id\u003dvolume_id, operation\u003doperation, append\u003dappend, **kwargs)","commit_id":"8c65f6805dfa390c0cde4acb41e4b5e8f6d91c08"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"e90ed41fca4377a17839f81d4386e01fe0bdd05f","unresolved":false,"context_lines":[{"line_number":188,"context_line":""},{"line_number":189,"context_line":"            for datadict in self.volume_trace_list:"},{"line_number":190,"context_line":"                if volume_id in datadict:"},{"line_number":191,"context_line":"                    for key, dict_value in datadict.items():"},{"line_number":192,"context_line":"                        if not append:"},{"line_number":193,"context_line":"                            self.volume_trace_list.remove(datadict)"},{"line_number":194,"context_line":"                    return datadict"},{"line_number":195,"context_line":"        except Exception:"},{"line_number":196,"context_line":"            pass"}],"source_content_type":"text/x-python","patch_set":29,"id":"5f7c97a3_f8553bfa","line":193,"range":{"start_line":191,"start_character":0,"end_line":193,"end_character":67},"updated":"2018-07-16 14:09:18.000000000","message":"-1:  If append is False we don\u0027t need to loop at all","commit_id":"8c65f6805dfa390c0cde4acb41e4b5e8f6d91c08"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"e90ed41fca4377a17839f81d4386e01fe0bdd05f","unresolved":false,"context_lines":[{"line_number":193,"context_line":"                            self.volume_trace_list.remove(datadict)"},{"line_number":194,"context_line":"                    return datadict"},{"line_number":195,"context_line":"        except Exception:"},{"line_number":196,"context_line":"            pass"},{"line_number":197,"context_line":"        return datadict"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    def _fill_volume_trace_dict(self, param_dict):"}],"source_content_type":"text/x-python","patch_set":29,"id":"5f7c97a3_35197e86","line":196,"updated":"2018-07-16 14:09:18.000000000","message":"I don\u0027t think we should ignore every exception here either.","commit_id":"8c65f6805dfa390c0cde4acb41e4b5e8f6d91c08"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"e90ed41fca4377a17839f81d4386e01fe0bdd05f","unresolved":false,"context_lines":[{"line_number":210,"context_line":"                for k2, v2 in v.items():"},{"line_number":211,"context_line":"                    if self._param_condition(k2, v2):"},{"line_number":212,"context_line":"                        my_volume_trace_dict[k2] \u003d v2"},{"line_number":213,"context_line":"                    if k2 \u003d\u003d \u0027mv_list\u0027 and v2:"},{"line_number":214,"context_line":"                        for i, item in enumerate(v2, 1):"},{"line_number":215,"context_line":"                            my_volume_trace_dict[\"masking_view_%d\" % i] \u003d item"},{"line_number":216,"context_line":"                    if k2 \u003d\u003d \u0027sg_list\u0027 and v2:"}],"source_content_type":"text/x-python","patch_set":29,"id":"5f7c97a3_78b60b28","line":213,"range":{"start_line":213,"start_character":20,"end_line":213,"end_character":22},"updated":"2018-07-16 14:09:18.000000000","message":"-1: elif","commit_id":"8c65f6805dfa390c0cde4acb41e4b5e8f6d91c08"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"e90ed41fca4377a17839f81d4386e01fe0bdd05f","unresolved":false,"context_lines":[{"line_number":213,"context_line":"                    if k2 \u003d\u003d \u0027mv_list\u0027 and v2:"},{"line_number":214,"context_line":"                        for i, item in enumerate(v2, 1):"},{"line_number":215,"context_line":"                            my_volume_trace_dict[\"masking_view_%d\" % i] \u003d item"},{"line_number":216,"context_line":"                    if k2 \u003d\u003d \u0027sg_list\u0027 and v2:"},{"line_number":217,"context_line":"                        for i, item in enumerate(v2, 1):"},{"line_number":218,"context_line":"                            my_volume_trace_dict[\"storage_group_%d\" % i] \u003d item"},{"line_number":219,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"5f7c97a3_5869cf89","line":216,"range":{"start_line":216,"start_character":20,"end_line":216,"end_character":22},"updated":"2018-07-16 14:09:18.000000000","message":"-1: elif","commit_id":"8c65f6805dfa390c0cde4acb41e4b5e8f6d91c08"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"e90ed41fca4377a17839f81d4386e01fe0bdd05f","unresolved":false,"context_lines":[{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        :returns: True or False"},{"line_number":229,"context_line":"        \"\"\""},{"line_number":230,"context_line":"        exclude_list \u003d [\u0027self\u0027, \u0027append\u0027, \u0027mv_list\u0027, \u0027sg_list\u0027]"},{"line_number":231,"context_line":"        if ((not isinstance(value, dict)) and ("},{"line_number":232,"context_line":"            not isinstance(value, types.FunctionType)) and ("},{"line_number":233,"context_line":"            not isinstance(value, type)) and ("}],"source_content_type":"text/x-python","patch_set":29,"id":"5f7c97a3_b8bca307","line":230,"range":{"start_line":230,"start_character":8,"end_line":230,"end_character":20},"updated":"2018-07-16 14:09:18.000000000","message":"nit: Since this will not be modified it could be a tuple","commit_id":"8c65f6805dfa390c0cde4acb41e4b5e8f6d91c08"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"e90ed41fca4377a17839f81d4386e01fe0bdd05f","unresolved":false,"context_lines":[{"line_number":228,"context_line":"        :returns: True or False"},{"line_number":229,"context_line":"        \"\"\""},{"line_number":230,"context_line":"        exclude_list \u003d [\u0027self\u0027, \u0027append\u0027, \u0027mv_list\u0027, \u0027sg_list\u0027]"},{"line_number":231,"context_line":"        if ((not isinstance(value, dict)) and ("},{"line_number":232,"context_line":"            not isinstance(value, types.FunctionType)) and ("},{"line_number":233,"context_line":"            not isinstance(value, type)) and ("},{"line_number":234,"context_line":"                key not in exclude_list) and value):"},{"line_number":235,"context_line":"            return True"},{"line_number":236,"context_line":"        else:"},{"line_number":237,"context_line":"            return False"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    @debug_required"},{"line_number":240,"context_line":"    def print_pretty_table(self, datadict):"}],"source_content_type":"text/x-python","patch_set":29,"id":"5f7c97a3_986f6792","line":237,"range":{"start_line":231,"start_character":0,"end_line":237,"end_character":24},"updated":"2018-07-16 14:09:18.000000000","message":"-1: Group the types and just return the evaluation:\n\n        return (value and key not in exclude_list and\n                not isinstance(value, (dict, \n                                       types.FunctionType,\n                                       type))\n\nBy the way, shouldn\u0027t we say `value is not None` instead?  Otherwise you\u0027ll be including empty string and False values.","commit_id":"8c65f6805dfa390c0cde4acb41e4b5e8f6d91c08"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"e90ed41fca4377a17839f81d4386e01fe0bdd05f","unresolved":false,"context_lines":[{"line_number":244,"context_line":"        \"\"\""},{"line_number":245,"context_line":"        t \u003d prettytable.PrettyTable([\u0027Key\u0027, \u0027Value\u0027])"},{"line_number":246,"context_line":"        for k, v in datadict.items():"},{"line_number":247,"context_line":"            if v:"},{"line_number":248,"context_line":"                t.add_row([k, v])"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"        LOG.debug(\u0027\\n%(output)s\\n\u0027, {\u0027output\u0027: t})"}],"source_content_type":"text/x-python","patch_set":29,"id":"5f7c97a3_18cfd78b","line":247,"updated":"2018-07-16 14:09:18.000000000","message":"-1: Shouldn\u0027t we also accept empty string and False values?","commit_id":"8c65f6805dfa390c0cde4acb41e4b5e8f6d91c08"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"e90ed41fca4377a17839f81d4386e01fe0bdd05f","unresolved":false,"context_lines":[{"line_number":266,"context_line":"                            volume_trace_dict, dict_value))"},{"line_number":267,"context_line":"                    self.volume_trace_list.remove(datadict)"},{"line_number":268,"context_line":"                    volume_key_value[volume_id] \u003d merged_dict"},{"line_number":269,"context_line":"                    self.volume_trace_list.append(volume_key_value.copy())"},{"line_number":270,"context_line":"                    is_merged \u003d True"},{"line_number":271,"context_line":"        if not is_merged:"},{"line_number":272,"context_line":"            self.volume_trace_list.append(volume_key_value.copy())"}],"source_content_type":"text/x-python","patch_set":29,"id":"5f7c97a3_9890c751","line":269,"updated":"2018-07-16 14:09:18.000000000","message":"???:  Doesn\u0027t this crash?  You are modifying the list that you are iterating on L261 !\n\nThough you wouldn\u0027t see it in the logs since we are not logging any exceptions raised from these methods (which I think raises the validity of my point on logging exceptions on the debug-required decorator)","commit_id":"8c65f6805dfa390c0cde4acb41e4b5e8f6d91c08"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"e90ed41fca4377a17839f81d4386e01fe0bdd05f","unresolved":false,"context_lines":[{"line_number":279,"context_line":"        :param version_dict: version dictionary"},{"line_number":280,"context_line":"        :returns: volume_metadata"},{"line_number":281,"context_line":"        \"\"\""},{"line_number":282,"context_line":"        volume_metadata \u003d {}"},{"line_number":283,"context_line":"        for key, dict_value in datadict.items():"},{"line_number":284,"context_line":"            for k, v in dict_value.items():"},{"line_number":285,"context_line":"                volume_metadata[k] \u003d v"},{"line_number":286,"context_line":"        for k, v in version_dict.items():"},{"line_number":287,"context_line":"            volume_metadata[k] \u003d v"},{"line_number":288,"context_line":"        return volume_metadata"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"    @debug_required"},{"line_number":291,"context_line":"    def capture_attach_info("}],"source_content_type":"text/x-python","patch_set":29,"id":"5f7c97a3_98f52787","line":288,"range":{"start_line":282,"start_character":0,"end_line":288,"end_character":30},"updated":"2018-07-16 14:09:18.000000000","message":"nit: If you implemented a generic merge dict method (instead of supporting just the merge of 2 dicts) you could easily change this to:\n\n return merge_dicts(version_dict, *datadict.values())","commit_id":"8c65f6805dfa390c0cde4acb41e4b5e8f6d91c08"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7c0ef50ce102c1c8568e6921d357d5013847a27f","unresolved":false,"context_lines":[{"line_number":41,"context_line":"            else:"},{"line_number":42,"context_line":"                pass"},{"line_number":43,"context_line":"        except Exception:"},{"line_number":44,"context_line":"            LOG.warning(\"Volume metadata logging failure\")"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    return func_wrapper"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"5f7c97a3_b3390ba3","line":44,"range":{"start_line":44,"start_character":16,"end_line":44,"end_character":23},"updated":"2018-07-17 12:20:30.000000000","message":"-1: If you don\u0027t log the exception it\u0027s going to be impossible to figure out what failed.","commit_id":"1a942d65ccccd58c7602bd4b08c9c7c6168e4e4c"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7c0ef50ce102c1c8568e6921d357d5013847a27f","unresolved":false,"context_lines":[{"line_number":187,"context_line":"                self._consolidate_volume_trace_list("},{"line_number":188,"context_line":"                    volume_id, volume_trace_dict, volume_key_value)"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"            for datadict in self.volume_trace_list:"},{"line_number":191,"context_line":"                if volume_id in datadict:"},{"line_number":192,"context_line":"                    for key, dict_value in datadict.items():"},{"line_number":193,"context_line":"                        if not append:"},{"line_number":194,"context_line":"                            self.volume_trace_list.remove(datadict)"},{"line_number":195,"context_line":"                    return datadict"},{"line_number":196,"context_line":"        except Exception:"},{"line_number":197,"context_line":"            LOG.warning(\"Exception in gather volume metadata\")"}],"source_content_type":"text/x-python","patch_set":30,"id":"5f7c97a3_73f852c0","line":194,"range":{"start_line":190,"start_character":0,"end_line":194,"end_character":67},"updated":"2018-07-17 12:20:30.000000000","message":"-1: You cannot modify on L194 the list you are iterating over on L190, or you can have unexpected behavior (such as skipping items in this case).\n\nI may be missing something, but this remove operation in a loop doesn\u0027t seem right.  For one, it will fail if you have multiple items in datadict, as you\u0027ll try to remove datadict a couple of times.","commit_id":"1a942d65ccccd58c7602bd4b08c9c7c6168e4e4c"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7c0ef50ce102c1c8568e6921d357d5013847a27f","unresolved":false,"context_lines":[{"line_number":247,"context_line":"        \"\"\""},{"line_number":248,"context_line":"        t \u003d prettytable.PrettyTable([\u0027Key\u0027, \u0027Value\u0027])"},{"line_number":249,"context_line":"        for k, v in datadict.items():"},{"line_number":250,"context_line":"            if v:"},{"line_number":251,"context_line":"                t.add_row([k, v])"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"        LOG.debug(\u0027\\n%(output)s\\n\u0027, {\u0027output\u0027: t})"}],"source_content_type":"text/x-python","patch_set":30,"id":"5f7c97a3_33d5fa1b","line":250,"updated":"2018-07-17 12:20:30.000000000","message":"-1: You won\u0027t print boolean values that are false, this should probably b;\n\n if v is not None:","commit_id":"1a942d65ccccd58c7602bd4b08c9c7c6168e4e4c"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7c0ef50ce102c1c8568e6921d357d5013847a27f","unresolved":false,"context_lines":[{"line_number":261,"context_line":"        :param volume_key_value: the volume id key and dict value"},{"line_number":262,"context_line":"        \"\"\""},{"line_number":263,"context_line":"        is_merged \u003d False"},{"line_number":264,"context_line":"        volume_trace_copy \u003d deepcopy(self.volume_trace_list)"},{"line_number":265,"context_line":"        for datadict in volume_trace_copy:"},{"line_number":266,"context_line":"            if volume_id in datadict:"},{"line_number":267,"context_line":"                for key, dict_value in datadict.items():"},{"line_number":268,"context_line":"                    merged_dict \u003d ("}],"source_content_type":"text/x-python","patch_set":30,"id":"5f7c97a3_d3ae06a0","line":265,"range":{"start_line":264,"start_character":0,"end_line":265,"end_character":42},"updated":"2018-07-17 12:20:30.000000000","message":"nit: No need for a deepcopy, since you don\u0027t modify the individual values of the list, right:\n\n  for datadict in list(self.volume_trace_list):","commit_id":"1a942d65ccccd58c7602bd4b08c9c7c6168e4e4c"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7c0ef50ce102c1c8568e6921d357d5013847a27f","unresolved":false,"context_lines":[{"line_number":284,"context_line":"        :returns: volume_metadata"},{"line_number":285,"context_line":"        \"\"\""},{"line_number":286,"context_line":"        return self.utils.merge_two_dicts("},{"line_number":287,"context_line":"            version_dict, *datadict.values())"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    @debug_required"},{"line_number":290,"context_line":"    def capture_attach_info("}],"source_content_type":"text/x-python","patch_set":30,"id":"5f7c97a3_b377ca3b","line":287,"updated":"2018-07-17 12:20:30.000000000","message":"-1: You need to modify the merge_two_dicts method to accept multiple arguments, and probably change the name to `merge_dicts` or something like that.","commit_id":"1a942d65ccccd58c7602bd4b08c9c7c6168e4e4c"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"d16fceeff90bf49e94b0c5a93b51db5246bf05f8","unresolved":false,"context_lines":[{"line_number":195,"context_line":"                self._consolidate_volume_trace_list("},{"line_number":196,"context_line":"                    volume_id, volume_trace_dict, volume_key_value)"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"            volume_trace_copy \u003d deepcopy(self.volume_trace_list)"},{"line_number":199,"context_line":"            for datadict in volume_trace_copy:"},{"line_number":200,"context_line":"                if volume_id in datadict:"},{"line_number":201,"context_line":"                    for key, dict_value in datadict.items():"},{"line_number":202,"context_line":"                        if not append:"},{"line_number":203,"context_line":"                            try:"},{"line_number":204,"context_line":"                                self.volume_trace_list.remove(datadict)"},{"line_number":205,"context_line":"                            except ValueError as ve:"},{"line_number":206,"context_line":"                                LOG.warning(\"ValueError Exception is %s.\", ve)"},{"line_number":207,"context_line":"                    return datadict"},{"line_number":208,"context_line":"        except Exception as ex:"},{"line_number":209,"context_line":"            LOG.warning(\"Exception in gather volume metadata. \""},{"line_number":210,"context_line":"                        \"Exception is %s.\", ex)"}],"source_content_type":"text/x-python","patch_set":31,"id":"5f7c97a3_5c10a8ab","line":207,"range":{"start_line":198,"start_character":0,"end_line":207,"end_character":35},"updated":"2018-07-18 12:09:52.000000000","message":"-1: If what the code is doing is what you want to do, then this can be achieve with a more readable code:\n\n  for datadict in list(self.volume_trace_list):\n      if volume_id in datadict:\n          if not append:\n              self.volume_trace_list.remove(datadict)\n          return datadict","commit_id":"046a63fc70a7dd184ce3c846308581b62d20c812"}],"cinder/volume/drivers/dell_emc/vmax/rest.py":[{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"3b038c3f91a3a2c8dd9916374384dc07941bb78d","unresolved":false,"context_lines":[{"line_number":2352,"context_line":"        :returns: volume dict"},{"line_number":2353,"context_line":"        :raises: VolumeBackendAPIException"},{"line_number":2354,"context_line":"        \"\"\""},{"line_number":2355,"context_line":"        array_dict \u003d self.get_resource("},{"line_number":2356,"context_line":"            array, SLOPROVISIONING, \u0027\u0027)"},{"line_number":2357,"context_line":"        if not array_dict:"},{"line_number":2358,"context_line":"            exception_message \u003d (_(\"VMAX info not found for %(array)s.\")"},{"line_number":2359,"context_line":"                                 % {\u0027array\u0027: array})"}],"source_content_type":"text/x-python","patch_set":13,"id":"9f6a8fd7_9b8b8666","line":2356,"range":{"start_line":2355,"start_character":0,"end_line":2356,"end_character":39},"updated":"2018-04-24 09:13:21.000000000","message":"one line please","commit_id":"91db905432469564ac885414246b05077a29ec19"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"47421028b68eba8cc5565b3fc639157eee93624d","unresolved":false,"context_lines":[{"line_number":2352,"context_line":"        :returns: volume dict"},{"line_number":2353,"context_line":"        :raises: VolumeBackendAPIException"},{"line_number":2354,"context_line":"        \"\"\""},{"line_number":2355,"context_line":"        array_dict \u003d self.get_resource("},{"line_number":2356,"context_line":"            array, SLOPROVISIONING, \u0027\u0027)"},{"line_number":2357,"context_line":"        if not array_dict:"},{"line_number":2358,"context_line":"            exception_message \u003d (_(\"VMAX info not found for %(array)s.\")"},{"line_number":2359,"context_line":"                                 % {\u0027array\u0027: array})"}],"source_content_type":"text/x-python","patch_set":13,"id":"9f6a8fd7_f1e8a37c","line":2356,"range":{"start_line":2355,"start_character":0,"end_line":2356,"end_character":39},"in_reply_to":"9f6a8fd7_9b8b8666","updated":"2018-04-24 11:13:51.000000000","message":"ok.  Thank you for your feedback","commit_id":"91db905432469564ac885414246b05077a29ec19"},{"author":{"_account_id":23601,"name":"michael","display_name":"michael-mcaleer","email":"Michael.Mcaleer@dell.com","username":"michael-mcaleer"},"change_message_id":"4a5f8c9201db55e5642704d4d9f67a4613df6c2a","unresolved":false,"context_lines":[{"line_number":2344,"context_line":"        self.delete_resource("},{"line_number":2345,"context_line":"            array, REPLICATION, \u0027storagegroup\u0027, resource_name\u003dresource_name)"},{"line_number":2346,"context_line":""},{"line_number":2347,"context_line":"    def get_vmax_info(self, array):"},{"line_number":2348,"context_line":"        \"\"\"Get a VMAX volume from array."},{"line_number":2349,"context_line":""},{"line_number":2350,"context_line":"        :param array: the array serial number"}],"source_content_type":"text/x-python","patch_set":17,"id":"5f7c97a3_19ac39eb","line":2347,"range":{"start_line":2347,"start_character":4,"end_line":2347,"end_character":18},"updated":"2018-05-16 10:33:02.000000000","message":"There is a similar function called get_array_serial(self, array) which returns a dict of details for a given array so this may be not needed.","commit_id":"03e309d87a5c1e3566baae8f458bc487f0d4097a"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"fdb6703e4e99cad4e6b7c0eb072f2315a272e1e7","unresolved":false,"context_lines":[{"line_number":2344,"context_line":"        self.delete_resource("},{"line_number":2345,"context_line":"            array, REPLICATION, \u0027storagegroup\u0027, resource_name\u003dresource_name)"},{"line_number":2346,"context_line":""},{"line_number":2347,"context_line":"    def get_vmax_info(self, array):"},{"line_number":2348,"context_line":"        \"\"\"Get a VMAX volume from array."},{"line_number":2349,"context_line":""},{"line_number":2350,"context_line":"        :param array: the array serial number"}],"source_content_type":"text/x-python","patch_set":17,"id":"5f7c97a3_5e3932a1","line":2347,"range":{"start_line":2347,"start_character":4,"end_line":2347,"end_character":18},"in_reply_to":"5f7c97a3_19ac39eb","updated":"2018-05-16 14:14:13.000000000","message":"Sure.  Will look into whether or not I can use it instead","commit_id":"03e309d87a5c1e3566baae8f458bc487f0d4097a"},{"author":{"_account_id":23601,"name":"michael","display_name":"michael-mcaleer","email":"Michael.Mcaleer@dell.com","username":"michael-mcaleer"},"change_message_id":"4a5f8c9201db55e5642704d4d9f67a4613df6c2a","unresolved":false,"context_lines":[{"line_number":2345,"context_line":"            array, REPLICATION, \u0027storagegroup\u0027, resource_name\u003dresource_name)"},{"line_number":2346,"context_line":""},{"line_number":2347,"context_line":"    def get_vmax_info(self, array):"},{"line_number":2348,"context_line":"        \"\"\"Get a VMAX volume from array."},{"line_number":2349,"context_line":""},{"line_number":2350,"context_line":"        :param array: the array serial number"},{"line_number":2351,"context_line":"        :param device_id: the volume device id"},{"line_number":2352,"context_line":"        :returns: volume dict"},{"line_number":2353,"context_line":"        :raises: VolumeBackendAPIException"},{"line_number":2354,"context_line":"        \"\"\""},{"line_number":2355,"context_line":"        array_dict \u003d self.get_resource("},{"line_number":2356,"context_line":"            array, SLOPROVISIONING, \u0027\u0027)"},{"line_number":2357,"context_line":"        if not array_dict:"}],"source_content_type":"text/x-python","patch_set":17,"id":"5f7c97a3_39a33502","line":2354,"range":{"start_line":2348,"start_character":8,"end_line":2354,"end_character":11},"updated":"2018-05-16 10:33:02.000000000","message":"The comment does not match the function, it does not return a VMAX volume but instead array info.","commit_id":"03e309d87a5c1e3566baae8f458bc487f0d4097a"},{"author":{"_account_id":23601,"name":"michael","display_name":"michael-mcaleer","email":"Michael.Mcaleer@dell.com","username":"michael-mcaleer"},"change_message_id":"4a5f8c9201db55e5642704d4d9f67a4613df6c2a","unresolved":false,"context_lines":[{"line_number":2352,"context_line":"        :returns: volume dict"},{"line_number":2353,"context_line":"        :raises: VolumeBackendAPIException"},{"line_number":2354,"context_line":"        \"\"\""},{"line_number":2355,"context_line":"        array_dict \u003d self.get_resource("},{"line_number":2356,"context_line":"            array, SLOPROVISIONING, \u0027\u0027)"},{"line_number":2357,"context_line":"        if not array_dict:"},{"line_number":2358,"context_line":"            exception_message \u003d (_(\"VMAX info not found for %(array)s.\")"},{"line_number":2359,"context_line":"                                 % {\u0027array\u0027: array})"}],"source_content_type":"text/x-python","patch_set":17,"id":"5f7c97a3_d9b1e145","line":2356,"range":{"start_line":2355,"start_character":8,"end_line":2356,"end_character":39},"updated":"2018-05-16 10:33:02.000000000","message":"If this is call is different from get_array_serial, does this call work as get_resource is passing in an arrayID and sloprovisioning, but does not specify the symmetrix resourcetype which should be required for successful response","commit_id":"03e309d87a5c1e3566baae8f458bc487f0d4097a"},{"author":{"_account_id":23601,"name":"michael","display_name":"michael-mcaleer","email":"Michael.Mcaleer@dell.com","username":"michael-mcaleer"},"change_message_id":"4a5f8c9201db55e5642704d4d9f67a4613df6c2a","unresolved":false,"context_lines":[{"line_number":2361,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dexception_message)"},{"line_number":2362,"context_line":"        return array_dict"},{"line_number":2363,"context_line":""},{"line_number":2364,"context_line":"    def get_unisphere_version(self, array):"},{"line_number":2365,"context_line":"        \"\"\"Get a VMAX volume from array."},{"line_number":2366,"context_line":""},{"line_number":2367,"context_line":"        :param array: the array serial number"}],"source_content_type":"text/x-python","patch_set":17,"id":"5f7c97a3_597f1165","line":2364,"range":{"start_line":2364,"start_character":4,"end_line":2364,"end_character":43},"updated":"2018-05-16 10:33:02.000000000","message":"We have a call called get_uni_version(self) which performs the same function.","commit_id":"03e309d87a5c1e3566baae8f458bc487f0d4097a"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"fdb6703e4e99cad4e6b7c0eb072f2315a272e1e7","unresolved":false,"context_lines":[{"line_number":2361,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dexception_message)"},{"line_number":2362,"context_line":"        return array_dict"},{"line_number":2363,"context_line":""},{"line_number":2364,"context_line":"    def get_unisphere_version(self, array):"},{"line_number":2365,"context_line":"        \"\"\"Get a VMAX volume from array."},{"line_number":2366,"context_line":""},{"line_number":2367,"context_line":"        :param array: the array serial number"}],"source_content_type":"text/x-python","patch_set":17,"id":"5f7c97a3_de4c6243","line":2364,"range":{"start_line":2364,"start_character":4,"end_line":2364,"end_character":43},"in_reply_to":"5f7c97a3_597f1165","updated":"2018-05-16 14:14:13.000000000","message":"I will look into whether or not I can use it","commit_id":"03e309d87a5c1e3566baae8f458bc487f0d4097a"},{"author":{"_account_id":23601,"name":"michael","display_name":"michael-mcaleer","email":"Michael.Mcaleer@dell.com","username":"michael-mcaleer"},"change_message_id":"4a5f8c9201db55e5642704d4d9f67a4613df6c2a","unresolved":false,"context_lines":[{"line_number":2362,"context_line":"        return array_dict"},{"line_number":2363,"context_line":""},{"line_number":2364,"context_line":"    def get_unisphere_version(self, array):"},{"line_number":2365,"context_line":"        \"\"\"Get a VMAX volume from array."},{"line_number":2366,"context_line":""},{"line_number":2367,"context_line":"        :param array: the array serial number"},{"line_number":2368,"context_line":"        :param device_id: the volume device id"},{"line_number":2369,"context_line":"        :returns: volume dict"},{"line_number":2370,"context_line":"        :raises: VolumeBackendAPIException"},{"line_number":2371,"context_line":"        \"\"\""},{"line_number":2372,"context_line":"        version_url \u003d \"/%s/system/version\" % (U4V_VERSION)"},{"line_number":2373,"context_line":"        version_dict \u003d self._get_request(version_url, \u0027version\u0027)"},{"line_number":2374,"context_line":"        if not version_dict:"}],"source_content_type":"text/x-python","patch_set":17,"id":"5f7c97a3_b98f4573","line":2371,"range":{"start_line":2365,"start_character":8,"end_line":2371,"end_character":11},"updated":"2018-05-16 10:33:02.000000000","message":"Comment does not match function, returns Unisphere version.","commit_id":"03e309d87a5c1e3566baae8f458bc487f0d4097a"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"f4a5e67026c75b9fe28dc462eff21837b3fb75ea","unresolved":false,"context_lines":[{"line_number":448,"context_line":""},{"line_number":449,"context_line":"        :returns: version dict"},{"line_number":450,"context_line":"        \"\"\""},{"line_number":451,"context_line":"        version_url \u003d \"/%s/system/version\" % (U4V_VERSION)"},{"line_number":452,"context_line":"        version_dict \u003d self._get_request(version_url, \u0027version\u0027)"},{"line_number":453,"context_line":"        if not version_dict:"},{"line_number":454,"context_line":"            LOG.error(\"Unisphere version info not found.\")"}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_0fd619c5","line":451,"range":{"start_line":451,"start_character":45,"end_line":451,"end_character":46},"updated":"2018-05-17 01:09:49.000000000","message":"redundant","commit_id":"dc794e72f497f697c203797e8a202277a257b9f5"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"f4a5e67026c75b9fe28dc462eff21837b3fb75ea","unresolved":false,"context_lines":[{"line_number":449,"context_line":"        :returns: version dict"},{"line_number":450,"context_line":"        \"\"\""},{"line_number":451,"context_line":"        version_url \u003d \"/%s/system/version\" % (U4V_VERSION)"},{"line_number":452,"context_line":"        version_dict \u003d self._get_request(version_url, \u0027version\u0027)"},{"line_number":453,"context_line":"        if not version_dict:"},{"line_number":454,"context_line":"            LOG.error(\"Unisphere version info not found.\")"},{"line_number":455,"context_line":"        return version_dict"}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_8ff30974","line":452,"range":{"start_line":452,"start_character":54,"end_line":452,"end_character":63},"updated":"2018-05-17 01:09:49.000000000","message":"this should be a empty dict","commit_id":"dc794e72f497f697c203797e8a202277a257b9f5"}],"cinder/volume/drivers/dell_emc/vmax/utils.py":[{"author":{"_account_id":23601,"name":"michael","display_name":"michael-mcaleer","email":"Michael.Mcaleer@dell.com","username":"michael-mcaleer"},"change_message_id":"4a5f8c9201db55e5642704d4d9f67a4613df6c2a","unresolved":false,"context_lines":[{"line_number":819,"context_line":"            return True"},{"line_number":820,"context_line":"        return False"},{"line_number":821,"context_line":""},{"line_number":822,"context_line":"    def derive_default_sg_from_extra_specs(self, extra_specs, rep_mode\u003dNone):"},{"line_number":823,"context_line":"        \"\"\"Get the name of the default sg from the extra specs."},{"line_number":824,"context_line":""},{"line_number":825,"context_line":"        :param extra_specs: extra specs"}],"source_content_type":"text/x-python","patch_set":17,"id":"5f7c97a3_39ca55a0","line":822,"range":{"start_line":822,"start_character":4,"end_line":822,"end_character":77},"updated":"2018-05-16 10:33:02.000000000","message":"We already have a similar funciton called get_default_storage_group_name(self, srp_name, slo, workload, is_compression_disabled\u003dFalse,is_re\u003dFalse, rep_mode\u003dNone) so this might not be needed","commit_id":"03e309d87a5c1e3566baae8f458bc487f0d4097a"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"fdb6703e4e99cad4e6b7c0eb072f2315a272e1e7","unresolved":false,"context_lines":[{"line_number":819,"context_line":"            return True"},{"line_number":820,"context_line":"        return False"},{"line_number":821,"context_line":""},{"line_number":822,"context_line":"    def derive_default_sg_from_extra_specs(self, extra_specs, rep_mode\u003dNone):"},{"line_number":823,"context_line":"        \"\"\"Get the name of the default sg from the extra specs."},{"line_number":824,"context_line":""},{"line_number":825,"context_line":"        :param extra_specs: extra specs"}],"source_content_type":"text/x-python","patch_set":17,"id":"5f7c97a3_7e650eb4","line":822,"range":{"start_line":822,"start_character":4,"end_line":822,"end_character":77},"in_reply_to":"5f7c97a3_39ca55a0","updated":"2018-05-16 14:14:13.000000000","message":"Sure, will take a look","commit_id":"03e309d87a5c1e3566baae8f458bc487f0d4097a"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"c4295b339a6f8d9fd68d8b0d56245ab9423100f6","unresolved":false,"context_lines":[{"line_number":819,"context_line":"            return True"},{"line_number":820,"context_line":"        return False"},{"line_number":821,"context_line":""},{"line_number":822,"context_line":"    def derive_default_sg_from_extra_specs(self, extra_specs, rep_mode\u003dNone):"},{"line_number":823,"context_line":"        \"\"\"Get the name of the default sg from the extra specs."},{"line_number":824,"context_line":""},{"line_number":825,"context_line":"        :param extra_specs: extra specs"}],"source_content_type":"text/x-python","patch_set":17,"id":"5f7c97a3_41cdd3b4","line":822,"range":{"start_line":822,"start_character":4,"end_line":822,"end_character":77},"in_reply_to":"5f7c97a3_7e650eb4","updated":"2018-05-16 14:47:46.000000000","message":"I am going to leave this one.  It calls get_default_storage_group_name.","commit_id":"03e309d87a5c1e3566baae8f458bc487f0d4097a"},{"author":{"_account_id":23601,"name":"michael","display_name":"michael-mcaleer","email":"Michael.Mcaleer@dell.com","username":"michael-mcaleer"},"change_message_id":"4a5f8c9201db55e5642704d4d9f67a4613df6c2a","unresolved":false,"context_lines":[{"line_number":834,"context_line":"            is_compression_disabled\u003ddo_disable_compression,"},{"line_number":835,"context_line":"            is_re\u003drep_enabled, rep_mode\u003drep_mode)"},{"line_number":836,"context_line":""},{"line_number":837,"context_line":"    @staticmethod"},{"line_number":838,"context_line":"    def merge_two_dicts(d1, d2):"},{"line_number":839,"context_line":"        \"\"\"Merge dict2 with dict1"},{"line_number":840,"context_line":""},{"line_number":841,"context_line":"        :param d1: dict 1"},{"line_number":842,"context_line":"        :param d2: dict 2"},{"line_number":843,"context_line":"        :returns: d3 - dict"},{"line_number":844,"context_line":"        \"\"\""},{"line_number":845,"context_line":"        d3 \u003d d2.copy()"},{"line_number":846,"context_line":"        d3.update(d1)"},{"line_number":847,"context_line":"        return d3"},{"line_number":848,"context_line":""},{"line_number":849,"context_line":"    @staticmethod"},{"line_number":850,"context_line":"    def get_temp_failover_grp_name(rep_config):"}],"source_content_type":"text/x-python","patch_set":17,"id":"5f7c97a3_f9c7fd94","line":847,"range":{"start_line":837,"start_character":4,"end_line":847,"end_character":17},"updated":"2018-05-16 10:33:02.000000000","message":"It might have negligible effects, but would it be quicker to just update d1 with d2 and return d1 instead of creating a new d3 dict?","commit_id":"03e309d87a5c1e3566baae8f458bc487f0d4097a"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6bdcaa0b4e09a362fcaa148f4a7cd315526a0133","unresolved":false,"context_lines":[{"line_number":836,"context_line":""},{"line_number":837,"context_line":"    @staticmethod"},{"line_number":838,"context_line":"    def merge_two_dicts(d1, d2):"},{"line_number":839,"context_line":"        \"\"\"Merge dict2 with dict1"},{"line_number":840,"context_line":""},{"line_number":841,"context_line":"        :param d1: dict 1"},{"line_number":842,"context_line":"        :param d2: dict 2"}],"source_content_type":"text/x-python","patch_set":22,"id":"5f7c97a3_6fe34835","line":839,"range":{"start_line":839,"start_character":11,"end_line":839,"end_character":33},"updated":"2018-06-12 18:43:15.000000000","message":"Actually, according to the code this is opposite.\n\nSeems like it would be safer to return a new third dict rather than modifying one of the existing ones.","commit_id":"1109a4f465dc054677377086b248aea36f95dcbb"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"2aa0d7435f4374bec607311e000127f7facbec99","unresolved":false,"context_lines":[{"line_number":836,"context_line":""},{"line_number":837,"context_line":"    @staticmethod"},{"line_number":838,"context_line":"    def merge_two_dicts(d1, d2):"},{"line_number":839,"context_line":"        \"\"\"Merge dict2 with dict1"},{"line_number":840,"context_line":""},{"line_number":841,"context_line":"        :param d1: dict 1"},{"line_number":842,"context_line":"        :param d2: dict 2"}],"source_content_type":"text/x-python","patch_set":22,"id":"5f7c97a3_5afabeb9","line":839,"range":{"start_line":839,"start_character":11,"end_line":839,"end_character":33},"in_reply_to":"5f7c97a3_6fe34835","updated":"2018-06-13 08:57:16.000000000","message":"Thanks Sean,\nI did have a third initially, I will revert back","commit_id":"1109a4f465dc054677377086b248aea36f95dcbb"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"e90ed41fca4377a17839f81d4386e01fe0bdd05f","unresolved":false,"context_lines":[{"line_number":700,"context_line":"            extra_specs)"},{"line_number":701,"context_line":"        rep_enabled \u003d self.is_replication_enabled(extra_specs)"},{"line_number":702,"context_line":"        return self.get_default_storage_group_name("},{"line_number":703,"context_line":"            extra_specs[SRP], extra_specs[SLO],"},{"line_number":704,"context_line":"            extra_specs[WORKLOAD],"},{"line_number":705,"context_line":"            is_compression_disabled\u003ddo_disable_compression,"},{"line_number":706,"context_line":"            is_re\u003drep_enabled, rep_mode\u003drep_mode)"},{"line_number":707,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"5f7c97a3_d53cca93","line":704,"range":{"start_line":703,"start_character":0,"end_line":704,"end_character":34},"updated":"2018-07-16 14:09:18.000000000","message":"?: Could any of these keys ever be missing?","commit_id":"8c65f6805dfa390c0cde4acb41e4b5e8f6d91c08"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7c0ef50ce102c1c8568e6921d357d5013847a27f","unresolved":false,"context_lines":[{"line_number":705,"context_line":"            is_compression_disabled\u003ddo_disable_compression,"},{"line_number":706,"context_line":"            is_re\u003drep_enabled, rep_mode\u003drep_mode)"},{"line_number":707,"context_line":""},{"line_number":708,"context_line":"    @staticmethod"},{"line_number":709,"context_line":"    def merge_two_dicts(d1, d2):"},{"line_number":710,"context_line":"        \"\"\"Merge two dictionaries"},{"line_number":711,"context_line":""},{"line_number":712,"context_line":"        :param d1: dict 1"},{"line_number":713,"context_line":"        :param d2: dict 2"},{"line_number":714,"context_line":"        :returns: merged dict"},{"line_number":715,"context_line":"        \"\"\""},{"line_number":716,"context_line":"        d3 \u003d d2.copy()"},{"line_number":717,"context_line":"        d3.update(d1)"},{"line_number":718,"context_line":"        return d3"},{"line_number":719,"context_line":""},{"line_number":720,"context_line":"    @staticmethod"},{"line_number":721,"context_line":"    def get_temp_failover_grp_name(rep_config):"}],"source_content_type":"text/x-python","patch_set":30,"id":"5f7c97a3_d3aa866b","line":718,"range":{"start_line":708,"start_character":0,"end_line":718,"end_character":17},"updated":"2018-07-17 12:20:30.000000000","message":"-1: If you want this to accept more than 2:\n\n    @staticmethod\n    def merge_dicts(d1, *args):\n        if args:\n          d1 \u003d d1.copy()\n          for d in args:\n              d1.update(d)\n        return d1","commit_id":"1a942d65ccccd58c7602bd4b08c9c7c6168e4e4c"}],"releasenotes/notes/vmax-metadata-ac9bdd31e7e561c3.yaml":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6bdcaa0b4e09a362fcaa148f4a7cd315526a0133","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adding VMAX specific metadata to volumes if debug is enabled."}],"source_content_type":"text/x-yaml","patch_set":22,"id":"5f7c97a3_4fd68c51","line":4,"range":{"start_line":4,"start_character":4,"end_line":4,"end_character":10},"updated":"2018-06-12 18:43:15.000000000","message":"Added","commit_id":"1109a4f465dc054677377086b248aea36f95dcbb"},{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"dfbd0f3eadfd8d6a5828a792a9fe38e3d5de0dc0","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Added VMAX specific metadata to volumes if debug is enabled."}],"source_content_type":"text/x-yaml","patch_set":27,"id":"5f7c97a3_ee0428c8","line":4,"range":{"start_line":4,"start_character":4,"end_line":4,"end_character":43},"updated":"2018-06-26 10:38:18.000000000","message":"Ditto - This should be changed now that it\u0027s outputting to logs and not saving to the volume.","commit_id":"643dd4979702c09a6d831d686ab1d3d1415ab9b3"}]}
