)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"93bc5638267efd1641a8860b13d87da85b98f958","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Volume replication supports disaster recovery solution where"},{"line_number":10,"context_line":"there has been a catastrophic event in your data centre for"},{"line_number":11,"context_line":"the VMAX array."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I2aafe564cdb31895756b4b8884af2635b054ae59"},{"line_number":14,"context_line":"Implements: blueprint add-vmax-replication"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"5a3905b3_bc64ad49","line":12,"updated":"2017-01-19 04:33:21.000000000","message":"Add DocImpact flag.","commit_id":"6c8edc83311608737a008e83fdf27a095b8d75cc"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"9b7ee6575a378d845168ce22ab3b2dac37275c12","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Volume replication supports disaster recovery solution where"},{"line_number":10,"context_line":"there has been a catastrophic event in your data centre for"},{"line_number":11,"context_line":"the VMAX array."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I2aafe564cdb31895756b4b8884af2635b054ae59"},{"line_number":14,"context_line":"Implements: blueprint add-vmax-replication"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"5a3905b3_4b04bd7d","line":12,"in_reply_to":"5a3905b3_bc64ad49","updated":"2017-01-19 15:37:07.000000000","message":"Sure","commit_id":"6c8edc83311608737a008e83fdf27a095b8d75cc"}],"cinder/volume/drivers/emc/emc_vmax_common.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"72e84d547fc5f89c492025ea01a107191e094fb8","unresolved":false,"context_lines":[{"line_number":335,"context_line":"                exceptionMessage \u003d ("},{"line_number":336,"context_line":"                    _(\"Cannot add a replication-enabled volume to a \""},{"line_number":337,"context_line":"                      \"consistency group. Return code: %(rc)lu.\")"},{"line_number":338,"context_line":"                    % {\u0027rc\u0027: (-1)})"},{"line_number":339,"context_line":"                LOG.error(exceptionMessage)"},{"line_number":340,"context_line":"                raise exception.VolumeBackendAPIException("},{"line_number":341,"context_line":"                    data\u003dexceptionMessage)"}],"source_content_type":"text/x-python","patch_set":15,"id":"da4df55a_395a3350","line":338,"updated":"2016-12-23 22:28:11.000000000","message":"why hardcode the return code?","commit_id":"4fc2238b883b1125a41273171bb2c1eb2b15a245"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"72e84d547fc5f89c492025ea01a107191e094fb8","unresolved":false,"context_lines":[{"line_number":5758,"context_line":"        repServiceInstanceName \u003d self.utils.find_replication_service("},{"line_number":5759,"context_line":"            conn, storageSystem)"},{"line_number":5760,"context_line":"        RDFGroupName \u003d self.rep_config[\u0027rdf_group_label\u0027]"},{"line_number":5761,"context_line":"        LOG.info(_LI(\"Replication group: %(RDFGroup)s \") %"},{"line_number":5762,"context_line":"                 {\u0027RDFGroup\u0027: RDFGroupName})"},{"line_number":5763,"context_line":"        rdfGroupInstance \u003d self.provisionv3.get_rdf_group_instance("},{"line_number":5764,"context_line":"            conn, repServiceInstanceName, RDFGroupName)"}],"source_content_type":"text/x-python","patch_set":15,"id":"da4df55a_b93c63e3","line":5761,"updated":"2016-12-23 22:28:11.000000000","message":"% -\u003e ,","commit_id":"4fc2238b883b1125a41273171bb2c1eb2b15a245"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"72e84d547fc5f89c492025ea01a107191e094fb8","unresolved":false,"context_lines":[{"line_number":5762,"context_line":"                 {\u0027RDFGroup\u0027: RDFGroupName})"},{"line_number":5763,"context_line":"        rdfGroupInstance \u003d self.provisionv3.get_rdf_group_instance("},{"line_number":5764,"context_line":"            conn, repServiceInstanceName, RDFGroupName)"},{"line_number":5765,"context_line":"        LOG.info(_LI(\"Found RDF group instance: %(RDFGroup)s\") %"},{"line_number":5766,"context_line":"                 {\u0027RDFGroup\u0027: rdfGroupInstance})"},{"line_number":5767,"context_line":"        if rdfGroupInstance is None:"},{"line_number":5768,"context_line":"            exception_message \u003d (_(\"Cannot find replication group: \""}],"source_content_type":"text/x-python","patch_set":15,"id":"da4df55a_9935dff8","line":5765,"updated":"2016-12-23 22:28:11.000000000","message":"% -\u003e ,","commit_id":"4fc2238b883b1125a41273171bb2c1eb2b15a245"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"72e84d547fc5f89c492025ea01a107191e094fb8","unresolved":false,"context_lines":[{"line_number":6087,"context_line":"                conn, controllerConfigService, sourceInstance, volumeName,"},{"line_number":6088,"context_line":"                extraSpecs, None, True)"},{"line_number":6089,"context_line":"            # Re-throw the exception."},{"line_number":6090,"context_line":"            LOG.exception(e)"},{"line_number":6091,"context_line":"            raise exception.VolumeBackendAPIException(data\u003de)"},{"line_number":6092,"context_line":""},{"line_number":6093,"context_line":"        return rc, rdfDict"}],"source_content_type":"text/x-python","patch_set":15,"id":"da4df55a_79191b88","line":6090,"updated":"2016-12-23 22:28:11.000000000","message":"Need to use _() to wrap the message.","commit_id":"4fc2238b883b1125a41273171bb2c1eb2b15a245"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"72e84d547fc5f89c492025ea01a107191e094fb8","unresolved":false,"context_lines":[{"line_number":6088,"context_line":"                extraSpecs, None, True)"},{"line_number":6089,"context_line":"            # Re-throw the exception."},{"line_number":6090,"context_line":"            LOG.exception(e)"},{"line_number":6091,"context_line":"            raise exception.VolumeBackendAPIException(data\u003de)"},{"line_number":6092,"context_line":""},{"line_number":6093,"context_line":"        return rc, rdfDict"},{"line_number":6094,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"da4df55a_b9138365","line":6091,"range":{"start_line":6091,"start_character":59,"end_line":6091,"end_character":60},"updated":"2016-12-23 22:28:11.000000000","message":"Need _()","commit_id":"4fc2238b883b1125a41273171bb2c1eb2b15a245"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"72e84d547fc5f89c492025ea01a107191e094fb8","unresolved":false,"context_lines":[{"line_number":6214,"context_line":"                            \"pool setting for SLO %(slo)s or workload \""},{"line_number":6215,"context_line":"                            \"%(workload)s. Not assigning any SLO or \""},{"line_number":6216,"context_line":"                            \"workload.\")"},{"line_number":6217,"context_line":"                        % {\u0027slo\u0027: extraSpecs[SLO],"},{"line_number":6218,"context_line":"                           \u0027workload\u0027: extraSpecs[WORKLOAD]})"},{"line_number":6219,"context_line":"                    repExtraSpecs[SLO] \u003d None"},{"line_number":6220,"context_line":"                    if extraSpecs[WORKLOAD]:"}],"source_content_type":"text/x-python","patch_set":15,"id":"da4df55a_f90d0b3f","line":6217,"range":{"start_line":6217,"start_character":24,"end_line":6217,"end_character":25},"updated":"2016-12-23 22:28:11.000000000","message":"% -\u003e ,","commit_id":"4fc2238b883b1125a41273171bb2c1eb2b15a245"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"72e84d547fc5f89c492025ea01a107191e094fb8","unresolved":false,"context_lines":[{"line_number":6256,"context_line":"                        arrayInfo[\u0027Workload\u0027])"},{"line_number":6257,"context_line":"                except Exception:"},{"line_number":6258,"context_line":"                    LOG.info("},{"line_number":6259,"context_line":"                        _LW(\"The target array does not support the storage \""},{"line_number":6260,"context_line":"                            \"pool setting for SLO %(slo)s or workload \""},{"line_number":6261,"context_line":"                            \"%(workload)s. SLO stats will not be reported.\")"},{"line_number":6262,"context_line":"                        % {\u0027slo\u0027: arrayInfo[\u0027SLO\u0027],"}],"source_content_type":"text/x-python","patch_set":15,"id":"da4df55a_3908732c","line":6259,"range":{"start_line":6259,"start_character":25,"end_line":6259,"end_character":27},"updated":"2016-12-23 22:28:11.000000000","message":"LI","commit_id":"4fc2238b883b1125a41273171bb2c1eb2b15a245"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"72e84d547fc5f89c492025ea01a107191e094fb8","unresolved":false,"context_lines":[{"line_number":6259,"context_line":"                        _LW(\"The target array does not support the storage \""},{"line_number":6260,"context_line":"                            \"pool setting for SLO %(slo)s or workload \""},{"line_number":6261,"context_line":"                            \"%(workload)s. SLO stats will not be reported.\")"},{"line_number":6262,"context_line":"                        % {\u0027slo\u0027: arrayInfo[\u0027SLO\u0027],"},{"line_number":6263,"context_line":"                           \u0027workload\u0027: arrayInfo[\u0027Workload\u0027]})"},{"line_number":6264,"context_line":"                    secondaryInfo[\u0027SLO\u0027] \u003d None"},{"line_number":6265,"context_line":"                    if arrayInfo[\u0027Workload\u0027]:"}],"source_content_type":"text/x-python","patch_set":15,"id":"da4df55a_74004202","line":6262,"range":{"start_line":6262,"start_character":24,"end_line":6262,"end_character":25},"updated":"2016-12-23 22:28:11.000000000","message":",","commit_id":"4fc2238b883b1125a41273171bb2c1eb2b15a245"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"72e84d547fc5f89c492025ea01a107191e094fb8","unresolved":false,"context_lines":[{"line_number":6268,"context_line":"                        self.multiPoolSupportEnabled \u003d False"},{"line_number":6269,"context_line":""},{"line_number":6270,"context_line":"            else:"},{"line_number":6271,"context_line":"                LOG.info(_LW(\"Cannot determine storage pool settings of \""},{"line_number":6272,"context_line":"                             \"target array. SLO stats will not be reported.\"))"},{"line_number":6273,"context_line":"                secondaryInfo[\u0027SLO\u0027] \u003d None"},{"line_number":6274,"context_line":"                if arrayInfo[\u0027Workload\u0027]:"}],"source_content_type":"text/x-python","patch_set":15,"id":"da4df55a_d40d6e38","line":6271,"range":{"start_line":6271,"start_character":26,"end_line":6271,"end_character":28},"updated":"2016-12-23 22:28:11.000000000","message":"LI","commit_id":"4fc2238b883b1125a41273171bb2c1eb2b15a245"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"09320fe67a92bb5d58afbf77c3a087b7c8a02876","unresolved":false,"context_lines":[{"line_number":210,"context_line":"                self.extendReplicatedVolume \u003d self.rep_config[\u0027allow_extend\u0027]"},{"line_number":211,"context_line":"                # use self.replication_enabled for update_volume_stats"},{"line_number":212,"context_line":"                self.replication_enabled \u003d True"},{"line_number":213,"context_line":"                LOG.debug(\"The replication configuration is %(rep_config)s \","},{"line_number":214,"context_line":"                          {\u0027rep_config\u0027: self.rep_config})"},{"line_number":215,"context_line":"        elif self.rep_devices and len(self.rep_devices) \u003e 1:"},{"line_number":216,"context_line":"            LOG.error(_LE(\"More than one replication target is configured. \""}],"source_content_type":"text/x-python","patch_set":25,"id":"5a3905b3_94065784","line":213,"range":{"start_line":213,"start_character":74,"end_line":213,"end_character":75},"updated":"2017-01-22 20:13:32.000000000","message":"nit: Remove trailing white space and add a period at the end.","commit_id":"2a4c414ea59b60e39fa19566253ce27f1c43bf14"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"09320fe67a92bb5d58afbf77c3a087b7c8a02876","unresolved":false,"context_lines":[{"line_number":321,"context_line":"                                                 volumeDict, extraSpecs)"},{"line_number":322,"context_line":"                raise"},{"line_number":323,"context_line":"            model_update.update("},{"line_number":324,"context_line":"                {\u0027replication_status\u0027: six.text_type(replication_status),"},{"line_number":325,"context_line":"                 \u0027replication_driver_data\u0027: six.text_type("},{"line_number":326,"context_line":"                     replication_driver_data)})"},{"line_number":327,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"5a3905b3_94df370c","line":324,"range":{"start_line":324,"start_character":39,"end_line":324,"end_character":52},"updated":"2017-01-22 20:13:32.000000000","message":"replication_status is already a string.  six.text_type is not needed here.","commit_id":"2a4c414ea59b60e39fa19566253ce27f1c43bf14"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"09320fe67a92bb5d58afbf77c3a087b7c8a02876","unresolved":false,"context_lines":[{"line_number":394,"context_line":"                                                 cloneDict, extraSpecs)"},{"line_number":395,"context_line":"                raise"},{"line_number":396,"context_line":"            model_update.update("},{"line_number":397,"context_line":"                {\u0027replication_status\u0027: six.text_type(replication_status),"},{"line_number":398,"context_line":"                 \u0027replication_driver_data\u0027: six.text_type("},{"line_number":399,"context_line":"                     replication_driver_data)})"},{"line_number":400,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"5a3905b3_74ee4bb5","line":397,"range":{"start_line":397,"start_character":39,"end_line":397,"end_character":52},"updated":"2017-01-22 20:13:32.000000000","message":"replication_status does not need six.text_type because it is already a string.","commit_id":"2a4c414ea59b60e39fa19566253ce27f1c43bf14"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"09320fe67a92bb5d58afbf77c3a087b7c8a02876","unresolved":false,"context_lines":[{"line_number":427,"context_line":"                    self.conn, cloneVolume[\u0027name\u0027], cloneDict, extraSpecs)"},{"line_number":428,"context_line":"                raise"},{"line_number":429,"context_line":"            model_update.update("},{"line_number":430,"context_line":"                {\u0027replication_status\u0027: six.text_type(replication_status),"},{"line_number":431,"context_line":"                 \u0027replication_driver_data\u0027: six.text_type("},{"line_number":432,"context_line":"                     replication_driver_data)})"},{"line_number":433,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"5a3905b3_f4387b3f","line":430,"range":{"start_line":430,"start_character":39,"end_line":430,"end_character":52},"updated":"2017-01-22 20:13:32.000000000","message":"six.text_type is not needed for replication_status.","commit_id":"2a4c414ea59b60e39fa19566253ce27f1c43bf14"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"09320fe67a92bb5d58afbf77c3a087b7c8a02876","unresolved":false,"context_lines":[{"line_number":4865,"context_line":"                self.setup_volume_replication("},{"line_number":4866,"context_line":"                    self.conn, volume, provider_location, extraSpecs))"},{"line_number":4867,"context_line":"            model_update.update("},{"line_number":4868,"context_line":"                {\u0027replication_status\u0027: six.text_type(replication_status)})"},{"line_number":4869,"context_line":"            model_update.update("},{"line_number":4870,"context_line":"                {\u0027replication_driver_data\u0027: six.text_type("},{"line_number":4871,"context_line":"                    replication_driver_data)})"}],"source_content_type":"text/x-python","patch_set":25,"id":"5a3905b3_d40a9f78","line":4868,"range":{"start_line":4868,"start_character":39,"end_line":4868,"end_character":52},"updated":"2017-01-22 20:13:32.000000000","message":"six.text_type is not needed for replication_status.","commit_id":"2a4c414ea59b60e39fa19566253ce27f1c43bf14"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"09320fe67a92bb5d58afbf77c3a087b7c8a02876","unresolved":false,"context_lines":[{"line_number":5532,"context_line":"        Called on create volume, create cloned volume,"},{"line_number":5533,"context_line":"        create volume from snapshot, manage_existing,"},{"line_number":5534,"context_line":"        and re-establishing a replication relationship after extending."},{"line_number":5535,"context_line":"        TargetInstance is passed in after extending only."},{"line_number":5536,"context_line":"        :param conn: the connection to the ecom server"},{"line_number":5537,"context_line":"        :param sourceVolume: the source volume object"},{"line_number":5538,"context_line":"        :param volumeDict: the source volume dict (the provider_location)"}],"source_content_type":"text/x-python","patch_set":25,"id":"5a3905b3_b480b3c1","line":5535,"range":{"start_line":5535,"start_character":8,"end_line":5535,"end_character":57},"updated":"2017-01-22 20:13:32.000000000","message":"I don\u0027t understand this sentence. What does \"extending\" mean here?  From line 5540, I know this is target on secondary array and that is very clear.  \"after extending only\" is confusing.","commit_id":"2a4c414ea59b60e39fa19566253ce27f1c43bf14"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"09320fe67a92bb5d58afbf77c3a087b7c8a02876","unresolved":false,"context_lines":[{"line_number":5632,"context_line":"                # Ensure element name matches openstack id."},{"line_number":5633,"context_line":"                volumeElementName \u003d (self.utils."},{"line_number":5634,"context_line":"                                     get_volume_element_name(volume[\u0027id\u0027]))"},{"line_number":5635,"context_line":"                if not (volumeElementName \u003d\u003d targetInstance[\u0027ElementName\u0027]):"},{"line_number":5636,"context_line":"                    targetInstance \u003d None"},{"line_number":5637,"context_line":""},{"line_number":5638,"context_line":"                if targetInstance is not None:"}],"source_content_type":"text/x-python","patch_set":25,"id":"5a3905b3_1457c758","line":5635,"range":{"start_line":5635,"start_character":16,"end_line":5635,"end_character":76},"updated":"2017-01-22 20:13:32.000000000","message":"Better to use !\u003d\n\nif volumeElementName !\u003d targetInstance[\u0027ElementName\u0027]:","commit_id":"2a4c414ea59b60e39fa19566253ce27f1c43bf14"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"09320fe67a92bb5d58afbf77c3a087b7c8a02876","unresolved":false,"context_lines":[{"line_number":5698,"context_line":""},{"line_number":5699,"context_line":"        If replication setup fails at any stage on a new volume create,"},{"line_number":5700,"context_line":"        we must clean-up the source instance as the cinder database won\u0027t"},{"line_number":5701,"context_line":"        be updated with the provider_location This means the volume can not"},{"line_number":5702,"context_line":"        be properly deleted off of the array by cinder"},{"line_number":5703,"context_line":"        :param conn: the connection to the ecom server"},{"line_number":5704,"context_line":"        :param sourceInstance: the source volume instance"}],"source_content_type":"text/x-python","patch_set":25,"id":"5a3905b3_d4cfff26","line":5701,"range":{"start_line":5701,"start_character":45,"end_line":5701,"end_character":46},"updated":"2017-01-22 20:13:32.000000000","message":"Missing a period after provider_location.","commit_id":"2a4c414ea59b60e39fa19566253ce27f1c43bf14"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"09320fe67a92bb5d58afbf77c3a087b7c8a02876","unresolved":false,"context_lines":[{"line_number":5699,"context_line":"        If replication setup fails at any stage on a new volume create,"},{"line_number":5700,"context_line":"        we must clean-up the source instance as the cinder database won\u0027t"},{"line_number":5701,"context_line":"        be updated with the provider_location This means the volume can not"},{"line_number":5702,"context_line":"        be properly deleted off of the array by cinder"},{"line_number":5703,"context_line":"        :param conn: the connection to the ecom server"},{"line_number":5704,"context_line":"        :param sourceInstance: the source volume instance"},{"line_number":5705,"context_line":"        :param extraSpecs: the extra specifications"}],"source_content_type":"text/x-python","patch_set":25,"id":"5a3905b3_14dee7dc","line":5702,"range":{"start_line":5702,"start_character":32,"end_line":5702,"end_character":34},"updated":"2017-01-22 20:13:32.000000000","message":"from","commit_id":"2a4c414ea59b60e39fa19566253ce27f1c43bf14"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"09320fe67a92bb5d58afbf77c3a087b7c8a02876","unresolved":false,"context_lines":[{"line_number":5701,"context_line":"        be updated with the provider_location This means the volume can not"},{"line_number":5702,"context_line":"        be properly deleted off of the array by cinder"},{"line_number":5703,"context_line":"        :param conn: the connection to the ecom server"},{"line_number":5704,"context_line":"        :param sourceInstance: the source volume instance"},{"line_number":5705,"context_line":"        :param extraSpecs: the extra specifications"},{"line_number":5706,"context_line":"        \"\"\""},{"line_number":5707,"context_line":"        LOG.warning(_LW("}],"source_content_type":"text/x-python","patch_set":25,"id":"5a3905b3_34dbe3ed","line":5704,"range":{"start_line":5704,"start_character":15,"end_line":5704,"end_character":29},"updated":"2017-01-22 20:13:32.000000000","message":"There is no sourceInstance parameter.\n\nParameters volumeName and volumeDict are missing.","commit_id":"2a4c414ea59b60e39fa19566253ce27f1c43bf14"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"09320fe67a92bb5d58afbf77c3a087b7c8a02876","unresolved":false,"context_lines":[{"line_number":5861,"context_line":"                failover_volume(volume, self.failover)"},{"line_number":5862,"context_line":"            else:"},{"line_number":5863,"context_line":"                if self.failover:"},{"line_number":5864,"context_line":"                    # Since the array has been failed-over"},{"line_number":5865,"context_line":"                    # volumes without replication should be in error."},{"line_number":5866,"context_line":"                    volume_update_list.append({"},{"line_number":5867,"context_line":"                        \u0027volume_id\u0027: volume[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":25,"id":"5a3905b3_d4e61faf","line":5864,"updated":"2017-01-22 20:13:32.000000000","message":"Add a comma at the end","commit_id":"2a4c414ea59b60e39fa19566253ce27f1c43bf14"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"09320fe67a92bb5d58afbf77c3a087b7c8a02876","unresolved":false,"context_lines":[{"line_number":5877,"context_line":"        return secondary_id, volume_update_list"},{"line_number":5878,"context_line":""},{"line_number":5879,"context_line":"    def recover_volumes_on_failback(self, volume):"},{"line_number":5880,"context_line":"        \"\"\"On failback, attempt to recover non RE volumes from primary array."},{"line_number":5881,"context_line":""},{"line_number":5882,"context_line":"        :param volume:"},{"line_number":5883,"context_line":"        :return: volume_update"}],"source_content_type":"text/x-python","patch_set":25,"id":"5a3905b3_3402033e","line":5880,"range":{"start_line":5880,"start_character":47,"end_line":5880,"end_character":49},"updated":"2017-01-22 20:13:32.000000000","message":"What does \"RE\" mean?","commit_id":"2a4c414ea59b60e39fa19566253ce27f1c43bf14"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"09320fe67a92bb5d58afbf77c3a087b7c8a02876","unresolved":false,"context_lines":[{"line_number":5951,"context_line":"                        targetVolumeInstance, targetStorageSystem,"},{"line_number":5952,"context_line":"                        extraSpecs))"},{"line_number":5953,"context_line":""},{"line_number":5954,"context_line":"                # volume must be removed from replication (storage) group"},{"line_number":5955,"context_line":"                # before the replication relationship can be ended (cannot"},{"line_number":5956,"context_line":"                # have a mix of replicated and non-replicated volumes as"},{"line_number":5957,"context_line":"                # the SRDF groups become unmanageable)."}],"source_content_type":"text/x-python","patch_set":25,"id":"5a3905b3_748f2bcc","line":5954,"range":{"start_line":5954,"start_character":46,"end_line":5954,"end_character":73},"updated":"2017-01-22 20:13:32.000000000","message":"Is storage group the same thing as replication group?  I thought replication group refers to a group with RDF relationship.","commit_id":"2a4c414ea59b60e39fa19566253ce27f1c43bf14"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"09320fe67a92bb5d58afbf77c3a087b7c8a02876","unresolved":false,"context_lines":[{"line_number":6150,"context_line":""},{"line_number":6151,"context_line":"    def get_target_instance(self, sourceVolume, rep_config,"},{"line_number":6152,"context_line":"                            rdf_vol_size, targetName, extraSpecs):"},{"line_number":6153,"context_line":"        \"\"\"Create a replication target for given a source volume."},{"line_number":6154,"context_line":""},{"line_number":6155,"context_line":"        :param sourceVolume: the source volume"},{"line_number":6156,"context_line":"        :param rep_config: the replication configuration"}],"source_content_type":"text/x-python","patch_set":25,"id":"5a3905b3_340cc340","line":6153,"range":{"start_line":6153,"start_character":43,"end_line":6153,"end_character":50},"updated":"2017-01-22 20:13:32.000000000","message":"s/given a/a given","commit_id":"2a4c414ea59b60e39fa19566253ce27f1c43bf14"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"43d294299a3453e4df74abc64fe6194544c0cfbc","unresolved":false,"context_lines":[{"line_number":5750,"context_line":"        repServiceInstanceName \u003d self.utils.find_replication_service("},{"line_number":5751,"context_line":"            conn, storageSystem)"},{"line_number":5752,"context_line":"        RDFGroupName \u003d self.rep_config[\u0027rdf_group_label\u0027]"},{"line_number":5753,"context_line":"        LOG.info(_LI(\"Replication group: %(RDFGroup)s \"),"},{"line_number":5754,"context_line":"                 {\u0027RDFGroup\u0027: RDFGroupName})"},{"line_number":5755,"context_line":"        rdfGroupInstance \u003d self.provisionv3.get_rdf_group_instance("},{"line_number":5756,"context_line":"            conn, repServiceInstanceName, RDFGroupName)"}],"source_content_type":"text/x-python","patch_set":26,"id":"5a3905b3_d5c7d493","line":5753,"range":{"start_line":5753,"start_character":53,"end_line":5753,"end_character":54},"updated":"2017-01-23 16:43:04.000000000","message":"Extra space on the end.","commit_id":"e22b31c832990334ae949cbf4ed98a35262637ac"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"43d294299a3453e4df74abc64fe6194544c0cfbc","unresolved":false,"context_lines":[{"line_number":6082,"context_line":"            # Re-throw the exception."},{"line_number":6083,"context_line":"            exception_message \u003d (_(\"Remote replication failed with exception:\""},{"line_number":6084,"context_line":"                                   \" %(e)s\")"},{"line_number":6085,"context_line":"                                 % {\u0027e\u0027: e})"},{"line_number":6086,"context_line":"            LOG.exception(exception_message)"},{"line_number":6087,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dexception_message)"},{"line_number":6088,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"5a3905b3_d598b47a","line":6085,"range":{"start_line":6085,"start_character":41,"end_line":6085,"end_character":42},"updated":"2017-01-23 16:43:04.000000000","message":"I think this should probably have six.text_type to be safe.","commit_id":"e22b31c832990334ae949cbf4ed98a35262637ac"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"43d294299a3453e4df74abc64fe6194544c0cfbc","unresolved":false,"context_lines":[{"line_number":6115,"context_line":"        except Exception as e:"},{"line_number":6116,"context_line":"            exception_message \u003d (_(\"Failed to get or create replication\""},{"line_number":6117,"context_line":"                                   \"group. Exception received: %(e)s\")"},{"line_number":6118,"context_line":"                                 % {\u0027e\u0027: e})"},{"line_number":6119,"context_line":"            LOG.exception(exception_message)"},{"line_number":6120,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":6121,"context_line":"                data\u003dexception_message)"}],"source_content_type":"text/x-python","patch_set":26,"id":"5a3905b3_159f9c5f","line":6118,"range":{"start_line":6118,"start_character":41,"end_line":6118,"end_character":42},"updated":"2017-01-23 16:43:04.000000000","message":"Same.","commit_id":"e22b31c832990334ae949cbf4ed98a35262637ac"}],"cinder/volume/drivers/emc/emc_vmax_fc.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"93bc5638267efd1641a8860b13d87da85b98f958","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                (bp vmax-volume-migration)"},{"line_number":77,"context_line":"              - Support for compression on All Flash"},{"line_number":78,"context_line":"              - Generic Volume Group feature (bp vmax-generic-volume-group)"},{"line_number":79,"context_line":"              - Volume replication (bp add-vmax-replication)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    \"\"\""},{"line_number":82,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"5a3905b3_671d4e66","line":79,"updated":"2017-01-19 04:33:21.000000000","message":"Volume replication 2.1","commit_id":"6c8edc83311608737a008e83fdf27a095b8d75cc"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"9b7ee6575a378d845168ce22ab3b2dac37275c12","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                (bp vmax-volume-migration)"},{"line_number":77,"context_line":"              - Support for compression on All Flash"},{"line_number":78,"context_line":"              - Generic Volume Group feature (bp vmax-generic-volume-group)"},{"line_number":79,"context_line":"              - Volume replication (bp add-vmax-replication)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    \"\"\""},{"line_number":82,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"5a3905b3_0b0475be","line":79,"in_reply_to":"5a3905b3_671d4e66","updated":"2017-01-19 15:37:07.000000000","message":"Sure","commit_id":"6c8edc83311608737a008e83fdf27a095b8d75cc"}],"cinder/volume/drivers/emc/emc_vmax_iscsi.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"93bc5638267efd1641a8860b13d87da85b98f958","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                (bp vmax-volume-migration)"},{"line_number":83,"context_line":"              - Support for compression on All Flash"},{"line_number":84,"context_line":"              - Generic Volume Group feature (bp vmax-generic-volume-group)"},{"line_number":85,"context_line":"              - Volume replication (bp add-vmax-replication)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    \"\"\""},{"line_number":88,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"5a3905b3_c72a827e","line":85,"updated":"2017-01-19 04:33:21.000000000","message":"Volume replication 2.1","commit_id":"6c8edc83311608737a008e83fdf27a095b8d75cc"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"9b7ee6575a378d845168ce22ab3b2dac37275c12","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                (bp vmax-volume-migration)"},{"line_number":83,"context_line":"              - Support for compression on All Flash"},{"line_number":84,"context_line":"              - Generic Volume Group feature (bp vmax-generic-volume-group)"},{"line_number":85,"context_line":"              - Volume replication (bp add-vmax-replication)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    \"\"\""},{"line_number":88,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"5a3905b3_0bf2b5d2","line":85,"in_reply_to":"5a3905b3_c72a827e","updated":"2017-01-19 15:37:07.000000000","message":"Will change","commit_id":"6c8edc83311608737a008e83fdf27a095b8d75cc"}],"cinder/volume/drivers/emc/emc_vmax_provision_v3.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"72e84d547fc5f89c492025ea01a107191e094fb8","unresolved":false,"context_lines":[{"line_number":346,"context_line":"        :param syncType: the synchronization type"},{"line_number":347,"context_line":"        :param sourceInstance: the source volume instance"},{"line_number":348,"context_line":"        :param targetInstance: the target volume instance"},{"line_number":349,"context_line":"        :param rdfGroupInstance: the rdf group instance"},{"line_number":350,"context_line":"        :return: rc, job"},{"line_number":351,"context_line":"        \"\"\""},{"line_number":352,"context_line":"        startTime \u003d time.time()"}],"source_content_type":"text/x-python","patch_set":15,"id":"da4df55a_b9b70385","line":349,"updated":"2016-12-23 22:28:11.000000000","message":"Missing extraSpecs","commit_id":"4fc2238b883b1125a41273171bb2c1eb2b15a245"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"72e84d547fc5f89c492025ea01a107191e094fb8","unresolved":false,"context_lines":[{"line_number":391,"context_line":"        :param sourceInstance: source volume instance"},{"line_number":392,"context_line":"        :param targetInstance: Target volume instance. Default None"},{"line_number":393,"context_line":"        :param rsdInstance: replication settingdata instance. Default None"},{"line_number":394,"context_line":"        :param sgInstanceName: pool instance name"},{"line_number":395,"context_line":"        :returns: int -- rc - return code"},{"line_number":396,"context_line":"        :returns: job - job object of the replica creation operation"},{"line_number":397,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"da4df55a_39acf333","line":394,"updated":"2016-12-23 22:28:11.000000000","message":"Add rdfGroupInstance","commit_id":"4fc2238b883b1125a41273171bb2c1eb2b15a245"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"72e84d547fc5f89c492025ea01a107191e094fb8","unresolved":false,"context_lines":[{"line_number":1032,"context_line":""},{"line_number":1033,"context_line":"    def _check_sync_state(self, conn, syncName):"},{"line_number":1034,"context_line":"        \"\"\"Get the copy state of a sync name."},{"line_number":1035,"context_line":""},{"line_number":1036,"context_line":"        :param syncName: the storage sync sv name"},{"line_number":1037,"context_line":"        :return: the copy state"},{"line_number":1038,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"da4df55a_d97127e2","line":1035,"updated":"2016-12-23 22:28:11.000000000","message":"Missing conn","commit_id":"4fc2238b883b1125a41273171bb2c1eb2b15a245"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"72e84d547fc5f89c492025ea01a107191e094fb8","unresolved":false,"context_lines":[{"line_number":1048,"context_line":"                _(\"Getting sync instance failed with: %(ex)s.\")"},{"line_number":1049,"context_line":"                % {\u0027ex\u0027: ex})"},{"line_number":1050,"context_line":"            LOG.exception(exceptionMessage)"},{"line_number":1051,"context_line":"            raise exception.VolumeBackendAPIException(exceptionMessage)"}],"source_content_type":"text/x-python","patch_set":15,"id":"da4df55a_19748fcd","line":1051,"updated":"2016-12-23 22:28:11.000000000","message":"data\u003dexceptionMessage","commit_id":"4fc2238b883b1125a41273171bb2c1eb2b15a245"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"fadc98c36385e4076d09340a7d95bbfa882cfe1d","unresolved":false,"context_lines":[{"line_number":245,"context_line":"        :param extraSpecs: the extra specifications"},{"line_number":246,"context_line":"        :param storageSystemName: the storage system name"},{"line_number":247,"context_line":"        :param doDisableCompression: flag for compression"},{"line_number":248,"context_line":"        :return:"},{"line_number":249,"context_line":"        \"\"\""},{"line_number":250,"context_line":"        pool \u003d extraSpecs[self.utils.POOL]"},{"line_number":251,"context_line":"        slo \u003d extraSpecs[self.utils.SLO]"}],"source_content_type":"text/x-python","patch_set":21,"id":"7a3c09a3_452d29fd","line":248,"updated":"2017-01-16 23:09:44.000000000","message":"Please either specify what is returned or remove this line.","commit_id":"a79ed83b6133dd594dc4266abeb7682c12af9670"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"09320fe67a92bb5d58afbf77c3a087b7c8a02876","unresolved":false,"context_lines":[{"line_number":346,"context_line":"        :param syncType: the synchronization type"},{"line_number":347,"context_line":"        :param sourceInstance: the source volume instance"},{"line_number":348,"context_line":"        :param targetInstance: the target volume instance"},{"line_number":349,"context_line":"        :param rdfGroupInstance: the rdf group instance"},{"line_number":350,"context_line":"        :return: rc, job"},{"line_number":351,"context_line":"        \"\"\""},{"line_number":352,"context_line":"        startTime \u003d time.time()"}],"source_content_type":"text/x-python","patch_set":25,"id":"5a3905b3_b706f51a","line":349,"updated":"2017-01-22 20:13:32.000000000","message":"extraSpecs is missing.","commit_id":"2a4c414ea59b60e39fa19566253ce27f1c43bf14"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"09320fe67a92bb5d58afbf77c3a087b7c8a02876","unresolved":false,"context_lines":[{"line_number":1032,"context_line":""},{"line_number":1033,"context_line":"    def _check_sync_state(self, conn, syncName):"},{"line_number":1034,"context_line":"        \"\"\"Get the copy state of a sync name."},{"line_number":1035,"context_line":""},{"line_number":1036,"context_line":"        :param syncName: the storage sync sv name"},{"line_number":1037,"context_line":"        :return: the copy state"},{"line_number":1038,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":25,"id":"5a3905b3_571cf169","line":1035,"updated":"2017-01-22 20:13:32.000000000","message":"Missing param conn","commit_id":"2a4c414ea59b60e39fa19566253ce27f1c43bf14"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"09320fe67a92bb5d58afbf77c3a087b7c8a02876","unresolved":false,"context_lines":[{"line_number":1048,"context_line":"                _(\"Getting sync instance failed with: %(ex)s.\")"},{"line_number":1049,"context_line":"                % {\u0027ex\u0027: ex})"},{"line_number":1050,"context_line":"            LOG.exception(exceptionMessage)"},{"line_number":1051,"context_line":"            raise exception.VolumeBackendAPIException(exceptionMessage)"}],"source_content_type":"text/x-python","patch_set":25,"id":"5a3905b3_7719ed78","line":1051,"range":{"start_line":1051,"start_character":54,"end_line":1051,"end_character":70},"updated":"2017-01-22 20:13:32.000000000","message":"data\u003dexceptionMessage","commit_id":"2a4c414ea59b60e39fa19566253ce27f1c43bf14"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"43d294299a3453e4df74abc64fe6194544c0cfbc","unresolved":false,"context_lines":[{"line_number":1048,"context_line":"        except Exception as ex:"},{"line_number":1049,"context_line":"            exceptionMessage \u003d ("},{"line_number":1050,"context_line":"                _(\"Getting sync instance failed with: %(ex)s.\")"},{"line_number":1051,"context_line":"                % {\u0027ex\u0027: ex})"},{"line_number":1052,"context_line":"            LOG.exception(exceptionMessage)"},{"line_number":1053,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":1054,"context_line":"                data\u003dexceptionMessage)"}],"source_content_type":"text/x-python","patch_set":26,"id":"5a3905b3_15db1c1c","line":1051,"range":{"start_line":1051,"start_character":25,"end_line":1051,"end_character":27},"updated":"2017-01-23 16:43:04.000000000","message":"six.text_type","commit_id":"e22b31c832990334ae949cbf4ed98a35262637ac"}],"cinder/volume/drivers/emc/emc_vmax_utils.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"72e84d547fc5f89c492025ea01a107191e094fb8","unresolved":false,"context_lines":[{"line_number":67,"context_line":"RDF_FAILOVER \u003d 10"},{"line_number":68,"context_line":"SMI_VERSION_83 \u003d 830"},{"line_number":69,"context_line":"IS_RE \u003d \u0027replication_enabled\u0027"},{"line_number":70,"context_line":"REPLICATION_FAILOVER \u003d fields.ReplicationStatus.FAILED_OVER"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"class EMCVMAXUtils(object):"}],"source_content_type":"text/x-python","patch_set":15,"id":"da4df55a_3995d3dd","line":70,"updated":"2016-12-23 22:28:11.000000000","message":"Just use fields.ReplicationStatus.FAILED_OVER directly.","commit_id":"4fc2238b883b1125a41273171bb2c1eb2b15a245"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"72e84d547fc5f89c492025ea01a107191e094fb8","unresolved":false,"context_lines":[{"line_number":2990,"context_line":"            return False"},{"line_number":2991,"context_line":"        else:"},{"line_number":2992,"context_line":"            if volume.get(\u0027replication_status\u0027):"},{"line_number":2993,"context_line":"                if volume[\u0027replication_status\u0027] \u003d\u003d REPLICATION_FAILOVER:"},{"line_number":2994,"context_line":"                    return True"},{"line_number":2995,"context_line":"                else:"},{"line_number":2996,"context_line":"                    return False"}],"source_content_type":"text/x-python","patch_set":15,"id":"da4df55a_d9a3e74d","line":2993,"updated":"2016-12-23 22:28:11.000000000","message":"Just use fields.ReplicationStatus.FAILED_OVER directly.","commit_id":"4fc2238b883b1125a41273171bb2c1eb2b15a245"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"93bc5638267efd1641a8860b13d87da85b98f958","unresolved":false,"context_lines":[{"line_number":2956,"context_line":"                    conn.GetInstance(syncInstanceName)"},{"line_number":2957,"context_line":"                    foundSyncInstanceName \u003d syncInstanceName"},{"line_number":2958,"context_line":"                    LOG.debug(\"Found sync Name: \""},{"line_number":2959,"context_line":"                              \"%(syncName)s.\","},{"line_number":2960,"context_line":"                              {\u0027syncName\u0027: foundSyncInstanceName})"},{"line_number":2961,"context_line":"                except Exception:"},{"line_number":2962,"context_line":"                    foundSyncInstanceName \u003d None"}],"source_content_type":"text/x-python","patch_set":23,"id":"5a3905b3_875f9a0d","line":2959,"range":{"start_line":2959,"start_character":30,"end_line":2959,"end_character":46},"updated":"2017-01-19 04:33:21.000000000","message":"There\u0027s no need to have this on a separate line.  Please move it up.","commit_id":"6c8edc83311608737a008e83fdf27a095b8d75cc"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"9b7ee6575a378d845168ce22ab3b2dac37275c12","unresolved":false,"context_lines":[{"line_number":2956,"context_line":"                    conn.GetInstance(syncInstanceName)"},{"line_number":2957,"context_line":"                    foundSyncInstanceName \u003d syncInstanceName"},{"line_number":2958,"context_line":"                    LOG.debug(\"Found sync Name: \""},{"line_number":2959,"context_line":"                              \"%(syncName)s.\","},{"line_number":2960,"context_line":"                              {\u0027syncName\u0027: foundSyncInstanceName})"},{"line_number":2961,"context_line":"                except Exception:"},{"line_number":2962,"context_line":"                    foundSyncInstanceName \u003d None"}],"source_content_type":"text/x-python","patch_set":23,"id":"5a3905b3_ebcba970","line":2959,"range":{"start_line":2959,"start_character":30,"end_line":2959,"end_character":46},"in_reply_to":"5a3905b3_875f9a0d","updated":"2017-01-19 15:37:07.000000000","message":"I will","commit_id":"6c8edc83311608737a008e83fdf27a095b8d75cc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"93bc5638267efd1641a8860b13d87da85b98f958","unresolved":false,"context_lines":[{"line_number":2973,"context_line":"                self.wait_for_sync(conn, foundSyncInstanceName, extraSpecs)"},{"line_number":2974,"context_line":"                LOG.warning(_LW("},{"line_number":2975,"context_line":"                    \"Synchronization process took \""},{"line_number":2976,"context_line":"                    \"took: %(delta)s H:MM:SS.\"),"},{"line_number":2977,"context_line":"                    {\u0027delta\u0027: self.get_time_delta(startTime,"},{"line_number":2978,"context_line":"                                                  time.time())})"},{"line_number":2979,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"5a3905b3_c7860265","line":2976,"range":{"start_line":2976,"start_character":20,"end_line":2976,"end_character":48},"updated":"2017-01-19 04:33:21.000000000","message":"Can you move this up?  This doesn\u0027t look like it will be longer than 79 chars.  Also you have a duplicate \"took\" here.","commit_id":"6c8edc83311608737a008e83fdf27a095b8d75cc"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"9b7ee6575a378d845168ce22ab3b2dac37275c12","unresolved":false,"context_lines":[{"line_number":2973,"context_line":"                self.wait_for_sync(conn, foundSyncInstanceName, extraSpecs)"},{"line_number":2974,"context_line":"                LOG.warning(_LW("},{"line_number":2975,"context_line":"                    \"Synchronization process took \""},{"line_number":2976,"context_line":"                    \"took: %(delta)s H:MM:SS.\"),"},{"line_number":2977,"context_line":"                    {\u0027delta\u0027: self.get_time_delta(startTime,"},{"line_number":2978,"context_line":"                                                  time.time())})"},{"line_number":2979,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"5a3905b3_cb950d41","line":2976,"range":{"start_line":2976,"start_character":20,"end_line":2976,"end_character":48},"in_reply_to":"5a3905b3_c7860265","updated":"2017-01-19 15:37:07.000000000","message":"Sure","commit_id":"6c8edc83311608737a008e83fdf27a095b8d75cc"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"43d294299a3453e4df74abc64fe6194544c0cfbc","unresolved":false,"context_lines":[{"line_number":2890,"context_line":"            except KeyError as ke:"},{"line_number":2891,"context_line":"                errorMessage \u003d (_(\"Failed to retrieve all necessary SRDF \""},{"line_number":2892,"context_line":"                                  \"information. Error received: %(ke)s.\") %"},{"line_number":2893,"context_line":"                                {\u0027ke\u0027: ke})"},{"line_number":2894,"context_line":"                LOG.exception(errorMessage)"},{"line_number":2895,"context_line":"                raise exception.VolumeBackendAPIException(data\u003derrorMessage)"},{"line_number":2896,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"5a3905b3_b5008867","line":2893,"range":{"start_line":2893,"start_character":39,"end_line":2893,"end_character":41},"updated":"2017-01-23 16:43:04.000000000","message":"six.text_type","commit_id":"e22b31c832990334ae949cbf4ed98a35262637ac"}],"releasenotes/notes/add-vmax-replication-490202c15503ae03.yaml":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"fadc98c36385e4076d09340a7d95bbfa882cfe1d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Implement volume replication for VMAX driver."}],"source_content_type":"text/x-yaml","patch_set":21,"id":"7a3c09a3_65da254e","line":3,"updated":"2017-01-16 23:09:44.000000000","message":"Add v2.1 volume replication support in the VMAX driver.","commit_id":"a79ed83b6133dd594dc4266abeb7682c12af9670"}]}
