)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e600e53edf49702a847929fdb5050cb21a6a9850","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"The last remaining task is to ensure we detect and deal with a restart"},{"line_number":30,"context_line":"when we\u0027re in a failed over state."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"Change-Id: I78244da226abce2544d0c3196fccdec50bf5b8e5"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"5a18252c_eaaf6b92","line":31,"updated":"2016-04-12 02:27:47.000000000","message":"Do you have a blueprint for this?  Please reference it.  Thanks!","commit_id":"0915c68711f39a979030636d5f8682ff36cb0373"}],"cinder/tests/unit/test_solidfire.py":[{"author":{"_account_id":16100,"name":"Chris Morrell","username":"chrismorrell","inactive":true},"change_message_id":"a04ed35dca5c8404c42fc60f825a1bd0c090c401","unresolved":false,"context_lines":[{"line_number":1759,"context_line":"                                               \u0027svip\u0027: \u002710.10.8.134\u0027, \u0027mvip\u0027:"},{"line_number":1760,"context_line":"                                               \u0027192.168.139.102\u0027, \u0027login\u0027:"},{"line_number":1761,"context_line":"                                               \u0027admin\u0027}, \u0027name\u0027:"},{"line_number":1762,"context_line":"              \u0027AutoTest2-6AjG-FOR-TEST-ONLY\u0027, \u0027clusterPairID\u0027: 33, \u0027uuid\u0027:"},{"line_number":1763,"context_line":"              \u00279c499d4b-8fff-48b4-b875-27601d5d9889\u0027, \u0027svip\u0027: \u002710.10.23.2\u0027,"},{"line_number":1764,"context_line":"              \u0027mvipNodeID\u0027: 1, \u0027repCount\u0027: 1, \u0027encryptionAtRestState\u0027:"},{"line_number":1765,"context_line":"              \u0027disabled\u0027, \u0027attributes\u0027: {}, \u0027mvip\u0027: \u0027192.168.139.102\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba0121b8_0c11275e","line":1762,"range":{"start_line":1762,"start_character":15,"end_line":1762,"end_character":43},"updated":"2016-04-01 20:51:42.000000000","message":"hah, AT2\u0027s present everywhere.","commit_id":"6b96fa249fb74403e536d2f28b7701e122e789f2"}],"cinder/volume/drivers/solidfire.py":[{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"d4c8f247dacf8d1ceda4a3382ec6d28524d56d77","unresolved":false,"context_lines":[{"line_number":1582,"context_line":"        data[\"driver_version\"] \u003d self.VERSION"},{"line_number":1583,"context_line":"        data[\"storage_protocol\"] \u003d \u0027iSCSI\u0027"},{"line_number":1584,"context_line":"        data[\u0027consistencygroup_support\u0027] \u003d True"},{"line_number":1585,"context_line":"        # TODO(jdg):  should we have a \"replication_status\" that includes"},{"line_number":1586,"context_line":"        # enabled, disabled, failed-over, error ?"},{"line_number":1587,"context_line":"        data[\u0027replication_enabled\u0027] \u003d self.replication_enabled"},{"line_number":1588,"context_line":"        if self.replication_enabled:"},{"line_number":1589,"context_line":"            data[\u0027replication\u0027] \u003d \u0027enabled\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba0121b8_0bde94dc","line":1586,"range":{"start_line":1585,"start_character":8,"end_line":1586,"end_character":49},"updated":"2016-03-31 05:01:19.000000000","message":"That sounds like it would be a good improvement we could do so we can keep the status up to date for the host.","commit_id":"6b96fa249fb74403e536d2f28b7701e122e789f2"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"874f370d7c1ea7e68ce8e26e195858eff91288fc","unresolved":false,"context_lines":[{"line_number":1582,"context_line":"        data[\"driver_version\"] \u003d self.VERSION"},{"line_number":1583,"context_line":"        data[\"storage_protocol\"] \u003d \u0027iSCSI\u0027"},{"line_number":1584,"context_line":"        data[\u0027consistencygroup_support\u0027] \u003d True"},{"line_number":1585,"context_line":"        # TODO(jdg):  should we have a \"replication_status\" that includes"},{"line_number":1586,"context_line":"        # enabled, disabled, failed-over, error ?"},{"line_number":1587,"context_line":"        data[\u0027replication_enabled\u0027] \u003d self.replication_enabled"},{"line_number":1588,"context_line":"        if self.replication_enabled:"},{"line_number":1589,"context_line":"            data[\u0027replication\u0027] \u003d \u0027enabled\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba0121b8_536785e8","line":1586,"range":{"start_line":1585,"start_character":8,"end_line":1586,"end_character":49},"in_reply_to":"ba0121b8_0bde94dc","updated":"2016-03-31 14:42:34.000000000","message":"Yeah, I was going to just implement it here in this patch, but want to make sure we get everybody to agree and do this consistently.\n\nOf course we\u0027re dealing with \"names\" in this case which is always a bit of a challenge :)  Maybe just use the same rep status enum we use in the service object?","commit_id":"6b96fa249fb74403e536d2f28b7701e122e789f2"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"380f4ef290c45334847f413c4a6e81e595d45ea7","unresolved":false,"context_lines":[{"line_number":1582,"context_line":"        data[\"driver_version\"] \u003d self.VERSION"},{"line_number":1583,"context_line":"        data[\"storage_protocol\"] \u003d \u0027iSCSI\u0027"},{"line_number":1584,"context_line":"        data[\u0027consistencygroup_support\u0027] \u003d True"},{"line_number":1585,"context_line":"        # TODO(jdg):  should we have a \"replication_status\" that includes"},{"line_number":1586,"context_line":"        # enabled, disabled, failed-over, error ?"},{"line_number":1587,"context_line":"        data[\u0027replication_enabled\u0027] \u003d self.replication_enabled"},{"line_number":1588,"context_line":"        if self.replication_enabled:"},{"line_number":1589,"context_line":"            data[\u0027replication\u0027] \u003d \u0027enabled\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba0121b8_e4940a8c","line":1586,"range":{"start_line":1585,"start_character":8,"end_line":1586,"end_character":49},"in_reply_to":"ba0121b8_536785e8","updated":"2016-03-31 17:23:12.000000000","message":"Haha, yea... guess we could make a spec and argue about names for a while at the summit :D","commit_id":"6b96fa249fb74403e536d2f28b7701e122e789f2"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"d4c8f247dacf8d1ceda4a3382ec6d28524d56d77","unresolved":false,"context_lines":[{"line_number":1831,"context_line":"                if rc[\u0027mvip\u0027] \u003d\u003d secondary_id:"},{"line_number":1832,"context_line":"                    remote \u003d rc"},{"line_number":1833,"context_line":"                    break"},{"line_number":1834,"context_line":"            if not remote:"},{"line_number":1835,"context_line":"                LOG.error(_LE(\"SolidFire driver received failover_host \""},{"line_number":1836,"context_line":"                              \"but was unable to find specified replication \""},{"line_number":1837,"context_line":"                              \"pair iwth id: %s.\") % secondary_id)"},{"line_number":1838,"context_line":"                raise exception.InvalidReplicationTarget"},{"line_number":1839,"context_line":"        else:"},{"line_number":1840,"context_line":"            remote \u003d self.cluster_pairs[0]"},{"line_number":1841,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ba0121b8_4661a1d2","line":1838,"range":{"start_line":1834,"start_character":12,"end_line":1838,"end_character":56},"updated":"2016-03-31 05:01:19.000000000","message":"I didn\u0027t see anywhere in the patch sets that you support the like failback action, but do you want to catch the \u0027default\u0027 secondary_id string and have a different error message or something?","commit_id":"6b96fa249fb74403e536d2f28b7701e122e789f2"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"380f4ef290c45334847f413c4a6e81e595d45ea7","unresolved":false,"context_lines":[{"line_number":1831,"context_line":"                if rc[\u0027mvip\u0027] \u003d\u003d secondary_id:"},{"line_number":1832,"context_line":"                    remote \u003d rc"},{"line_number":1833,"context_line":"                    break"},{"line_number":1834,"context_line":"            if not remote:"},{"line_number":1835,"context_line":"                LOG.error(_LE(\"SolidFire driver received failover_host \""},{"line_number":1836,"context_line":"                              \"but was unable to find specified replication \""},{"line_number":1837,"context_line":"                              \"pair iwth id: %s.\") % secondary_id)"},{"line_number":1838,"context_line":"                raise exception.InvalidReplicationTarget"},{"line_number":1839,"context_line":"        else:"},{"line_number":1840,"context_line":"            remote \u003d self.cluster_pairs[0]"},{"line_number":1841,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ba0121b8_04c81ea5","line":1838,"range":{"start_line":1834,"start_character":12,"end_line":1838,"end_character":56},"in_reply_to":"ba0121b8_40104d59","updated":"2016-03-31 17:23:12.000000000","message":"Gotcha, that makes sense. For mine I kinda feel the same way... its probably main use-case is for like a POC or something where people may just want to check a box on the list : /\n\nDefinitely worth a discussion in Austin.","commit_id":"6b96fa249fb74403e536d2f28b7701e122e789f2"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"874f370d7c1ea7e68ce8e26e195858eff91288fc","unresolved":false,"context_lines":[{"line_number":1831,"context_line":"                if rc[\u0027mvip\u0027] \u003d\u003d secondary_id:"},{"line_number":1832,"context_line":"                    remote \u003d rc"},{"line_number":1833,"context_line":"                    break"},{"line_number":1834,"context_line":"            if not remote:"},{"line_number":1835,"context_line":"                LOG.error(_LE(\"SolidFire driver received failover_host \""},{"line_number":1836,"context_line":"                              \"but was unable to find specified replication \""},{"line_number":1837,"context_line":"                              \"pair iwth id: %s.\") % secondary_id)"},{"line_number":1838,"context_line":"                raise exception.InvalidReplicationTarget"},{"line_number":1839,"context_line":"        else:"},{"line_number":1840,"context_line":"            remote \u003d self.cluster_pairs[0]"},{"line_number":1841,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ba0121b8_40104d59","line":1838,"range":{"start_line":1834,"start_character":12,"end_line":1838,"end_character":56},"in_reply_to":"ba0121b8_4661a1d2","updated":"2016-03-31 14:42:34.000000000","message":"Correct, I didn\u0027t implement/support that.  I sort of abandoned that idea during the work in the main change set IIRC.  My premise was that toggling back and forth was a tricky thing at a number of levels and wasn\u0027t a real use case other than test.\n\nWhat I\u0027ve been working on now is a \"make-primary\" type command that you failover, and then make that new target the primary and just go forward leaving the presumably dead cluster in the past.\n\nSomething I\u0027d love to chat about in Austin!","commit_id":"6b96fa249fb74403e536d2f28b7701e122e789f2"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"d4c8f247dacf8d1ceda4a3382ec6d28524d56d77","unresolved":false,"context_lines":[{"line_number":1875,"context_line":"                volume_updates.append({\u0027volume_id\u0027: v[\u0027id\u0027],"},{"line_number":1876,"context_line":"                                       \u0027updates\u0027: {\u0027status\u0027: \u0027error\u0027, }})"},{"line_number":1877,"context_line":""},{"line_number":1878,"context_line":"        # FIXME(jdg): This introduces a problem for us, up until now our driver"},{"line_number":1879,"context_line":"        # has been pretty much stateless and has allowed customers to run"},{"line_number":1880,"context_line":"        # active/active HA c-vol services with SolidFire.  The introduction of"},{"line_number":1881,"context_line":"        # the active_cluster and failed_over attributes is going to break that"},{"line_number":1882,"context_line":"        # but for now that\u0027s going to be the trade off of using replciation"},{"line_number":1883,"context_line":"        self.active_cluster_info \u003d remote"},{"line_number":1884,"context_line":"        self.failed_over \u003d True"},{"line_number":1885,"context_line":"        return remote[\u0027mvip\u0027], volume_updates"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba0121b8_eb01a039","line":1882,"range":{"start_line":1878,"start_character":8,"end_line":1882,"end_character":75},"updated":"2016-03-31 05:01:19.000000000","message":"same problem for all the cheesecake drivers I think, maybe we need some sort of meta... uh... loosely coupled key-value table in the db volume drivers could use for arbitrary stuff like this :D","commit_id":"6b96fa249fb74403e536d2f28b7701e122e789f2"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"874f370d7c1ea7e68ce8e26e195858eff91288fc","unresolved":false,"context_lines":[{"line_number":1875,"context_line":"                volume_updates.append({\u0027volume_id\u0027: v[\u0027id\u0027],"},{"line_number":1876,"context_line":"                                       \u0027updates\u0027: {\u0027status\u0027: \u0027error\u0027, }})"},{"line_number":1877,"context_line":""},{"line_number":1878,"context_line":"        # FIXME(jdg): This introduces a problem for us, up until now our driver"},{"line_number":1879,"context_line":"        # has been pretty much stateless and has allowed customers to run"},{"line_number":1880,"context_line":"        # active/active HA c-vol services with SolidFire.  The introduction of"},{"line_number":1881,"context_line":"        # the active_cluster and failed_over attributes is going to break that"},{"line_number":1882,"context_line":"        # but for now that\u0027s going to be the trade off of using replciation"},{"line_number":1883,"context_line":"        self.active_cluster_info \u003d remote"},{"line_number":1884,"context_line":"        self.failed_over \u003d True"},{"line_number":1885,"context_line":"        return remote[\u0027mvip\u0027], volume_updates"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba0121b8_e0c241e8","line":1882,"range":{"start_line":1878,"start_character":8,"end_line":1882,"end_character":75},"in_reply_to":"ba0121b8_eb01a039","updated":"2016-03-31 14:42:34.000000000","message":"Meta!!!  Dang it!!! :)\n\nYeah, I was trying to avoid it and keep things as light as possible but it keeps coming back to a table.  I think that\u0027s good, and I\u0027d rather go about it the way we did and add the table later than add the wrong one to start with.  \n\nAnyway, yeah; I\u0027m beginning to believe the next step should be a rep-services table of some sort.  We could also use that to get the rep stuff out of the service table to make Gorka a little happier.","commit_id":"6b96fa249fb74403e536d2f28b7701e122e789f2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7e412b438c4545a267dcfb8eb48b5013c3e83260","unresolved":false,"context_lines":[{"line_number":222,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":223,"context_line":"                    LOG.error(_LE(\u0027Cluster pairing failed: %s\u0027) % ex.msg)"},{"line_number":224,"context_line":"        remote_device[\u0027clusterPairID\u0027] \u003d pair_id"},{"line_number":225,"context_line":"        LOG.debug((\u0027Initialized Cluser pair with ID: %s\u0027) % pair_id)"},{"line_number":226,"context_line":"        return pair_id"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def _get_remote_cluster_info(self, remote_endpoint):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a18252c_6a007bab","line":225,"updated":"2016-04-12 02:26:49.000000000","message":"Same","commit_id":"0915c68711f39a979030636d5f8682ff36cb0373"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7e412b438c4545a267dcfb8eb48b5013c3e83260","unresolved":false,"context_lines":[{"line_number":253,"context_line":"                if rd[\u0027backend_id\u0027] \u003d\u003d ep[\u0027mvip\u0027]:"},{"line_number":254,"context_line":"                    remote_pair \u003d ep"},{"line_number":255,"context_line":"                    remote_info[\u0027clusterPairID\u0027] \u003d ep[\u0027clusterPairID\u0027]"},{"line_number":256,"context_line":"                    LOG.debug(\"Found remote pair: %s\" % remote_pair)"},{"line_number":257,"context_line":"                    break"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"            if not remote_pair:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a18252c_aa30d39f","line":256,"updated":"2016-04-12 02:26:49.000000000","message":"Same","commit_id":"0915c68711f39a979030636d5f8682ff36cb0373"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7e412b438c4545a267dcfb8eb48b5013c3e83260","unresolved":false,"context_lines":[{"line_number":1187,"context_line":"        # need to add parsing of rep_info eventually"},{"line_number":1188,"context_line":"        # in other words \"rep_info\" is not used yet!"},{"line_number":1189,"context_line":"        tgt_endpoint \u003d self.cluster_pairs[0][\u0027endpoint\u0027]"},{"line_number":1190,"context_line":"        LOG.debug(\"Replicating volume on remote cluster: %s\" % tgt_endpoint)"},{"line_number":1191,"context_line":"        params[\u0027attributes\u0027] \u003d src_params[\u0027attributes\u0027]"},{"line_number":1192,"context_line":"        params[\u0027username\u0027] \u003d self._get_sf_account_name(volume[\u0027project_id\u0027])"},{"line_number":1193,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a18252c_aa6293ab","line":1190,"updated":"2016-04-12 02:26:49.000000000","message":"Please use \",\" instead of \"%\" here for logging (the % sign in front of tgt_endpoint).","commit_id":"0915c68711f39a979030636d5f8682ff36cb0373"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7e412b438c4545a267dcfb8eb48b5013c3e83260","unresolved":false,"context_lines":[{"line_number":1209,"context_line":"        params \u003d src_params"},{"line_number":1210,"context_line":"        params[\u0027accountID\u0027] \u003d remote_account[\u0027accountID\u0027]"},{"line_number":1211,"context_line":"        LOG.debug(\"Create remote volume on: %(endpoint)s with account: \""},{"line_number":1212,"context_line":"                  \"%(account)s\" %"},{"line_number":1213,"context_line":"                  {\u0027endpoint\u0027: tgt_endpoint[\u0027url\u0027], \u0027account\u0027: remote_account})"},{"line_number":1214,"context_line":"        model_update \u003d self._do_volume_create("},{"line_number":1215,"context_line":"            remote_account, params, endpoint\u003dtgt_endpoint)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a18252c_0a0f47e2","line":1212,"updated":"2016-04-12 02:26:49.000000000","message":"Please use \",\" instead of \"%\".","commit_id":"0915c68711f39a979030636d5f8682ff36cb0373"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7e412b438c4545a267dcfb8eb48b5013c3e83260","unresolved":false,"context_lines":[{"line_number":1222,"context_line":"                                endpoint\u003dtgt_endpoint)"},{"line_number":1223,"context_line":""},{"line_number":1224,"context_line":"        # Enable volume pairing"},{"line_number":1225,"context_line":"        LOG.debug(\"Start volume pairing on volume ID: %s\" %"},{"line_number":1226,"context_line":"                  volume[\u0027volumeID\u0027])"},{"line_number":1227,"context_line":"        params \u003d {\u0027volumeID\u0027: volume[\u0027volumeID\u0027]}"},{"line_number":1228,"context_line":"        rep_key \u003d self._issue_api_request(\u0027StartVolumePairing\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a18252c_2af683d7","line":1225,"updated":"2016-04-12 02:26:49.000000000","message":"Same","commit_id":"0915c68711f39a979030636d5f8682ff36cb0373"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7e412b438c4545a267dcfb8eb48b5013c3e83260","unresolved":false,"context_lines":[{"line_number":1281,"context_line":"                        params \u003d {\u0027volumeID\u0027: vp[\u0027remoteVolumeID\u0027]}"},{"line_number":1282,"context_line":"                        LOG.debug(\"Issue Delete request on cluster: \""},{"line_number":1283,"context_line":"                                  \"%(remote)s with params: %(parameters)s\""},{"line_number":1284,"context_line":"                                  % {\u0027remote\u0027: cluster[\u0027endpoint\u0027][\u0027url\u0027],"},{"line_number":1285,"context_line":"                                     \u0027parameters\u0027: params})"},{"line_number":1286,"context_line":"                        self._issue_api_request(\u0027DeleteVolume\u0027, params,"},{"line_number":1287,"context_line":"                                                endpoint\u003dcluster[\u0027endpoint\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a18252c_ea2acb2b","line":1284,"updated":"2016-04-12 02:26:49.000000000","message":"Same","commit_id":"0915c68711f39a979030636d5f8682ff36cb0373"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7e412b438c4545a267dcfb8eb48b5013c3e83260","unresolved":false,"context_lines":[{"line_number":1834,"context_line":"            if not remote:"},{"line_number":1835,"context_line":"                LOG.error(_LE(\"SolidFire driver received failover_host \""},{"line_number":1836,"context_line":"                              \"but was unable to find specified replication \""},{"line_number":1837,"context_line":"                              \"pair iwth id: %s.\") % secondary_id)"},{"line_number":1838,"context_line":"                raise exception.InvalidReplicationTarget"},{"line_number":1839,"context_line":"        else:"},{"line_number":1840,"context_line":"            remote \u003d self.cluster_pairs[0]"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a18252c_aad73322","line":1837,"updated":"2016-04-12 02:26:49.000000000","message":"Please use \",\" instead of \"%\".\n\ntypo: s/iwth/with","commit_id":"0915c68711f39a979030636d5f8682ff36cb0373"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7e412b438c4545a267dcfb8eb48b5013c3e83260","unresolved":false,"context_lines":[{"line_number":1879,"context_line":"        # has been pretty much stateless and has allowed customers to run"},{"line_number":1880,"context_line":"        # active/active HA c-vol services with SolidFire.  The introduction of"},{"line_number":1881,"context_line":"        # the active_cluster and failed_over attributes is going to break that"},{"line_number":1882,"context_line":"        # but for now that\u0027s going to be the trade off of using replciation"},{"line_number":1883,"context_line":"        self.active_cluster_info \u003d remote"},{"line_number":1884,"context_line":"        self.failed_over \u003d True"},{"line_number":1885,"context_line":"        return remote[\u0027mvip\u0027], volume_updates"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a18252c_2ae4c30b","line":1882,"updated":"2016-04-12 02:26:49.000000000","message":"s/replciation/replication","commit_id":"0915c68711f39a979030636d5f8682ff36cb0373"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"04dfbba5f889edf38e9889de37378ad95e4c751c","unresolved":false,"context_lines":[{"line_number":1187,"context_line":"        # need to add parsing of rep_info eventually"},{"line_number":1188,"context_line":"        # in other words \"rep_info\" is not used yet!"},{"line_number":1189,"context_line":"        tgt_endpoint \u003d self.cluster_pairs[0][\u0027endpoint\u0027]"},{"line_number":1190,"context_line":"        LOG.debug(\"Replicating volume on remote cluster: %s\" % tgt_endpoint)"},{"line_number":1191,"context_line":"        params[\u0027attributes\u0027] \u003d src_params[\u0027attributes\u0027]"},{"line_number":1192,"context_line":"        params[\u0027username\u0027] \u003d self._get_sf_account_name(volume[\u0027project_id\u0027])"},{"line_number":1193,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_751a1b70","line":1190,"updated":"2016-04-15 13:36:27.000000000","message":"% \u003e ,","commit_id":"e14c8c00d5e4c591e85b9cc7f0232bd3745d5c0f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"04dfbba5f889edf38e9889de37378ad95e4c751c","unresolved":false,"context_lines":[{"line_number":1199,"context_line":"                endpoint\u003dtgt_endpoint)[\u0027result\u0027][\u0027accountID\u0027]"},{"line_number":1200,"context_line":"        except exception.SolidFireAPIException as ex:"},{"line_number":1201,"context_line":"            if \u0027xDuplicateUsername\u0027 not in ex.msg:"},{"line_number":1202,"context_line":"                raise ex"},{"line_number":1203,"context_line":""},{"line_number":1204,"context_line":"        remote_account \u003d ("},{"line_number":1205,"context_line":"            self._get_sfaccount_by_name(params[\u0027username\u0027],"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_b5515311","line":1202,"updated":"2016-04-15 13:36:27.000000000","message":"This should just be \"raise\".","commit_id":"e14c8c00d5e4c591e85b9cc7f0232bd3745d5c0f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"04dfbba5f889edf38e9889de37378ad95e4c751c","unresolved":false,"context_lines":[{"line_number":1209,"context_line":"        params \u003d src_params"},{"line_number":1210,"context_line":"        params[\u0027accountID\u0027] \u003d remote_account[\u0027accountID\u0027]"},{"line_number":1211,"context_line":"        LOG.debug(\"Create remote volume on: %(endpoint)s with account: \""},{"line_number":1212,"context_line":"                  \"%(account)s\" %"},{"line_number":1213,"context_line":"                  {\u0027endpoint\u0027: tgt_endpoint[\u0027url\u0027], \u0027account\u0027: remote_account})"},{"line_number":1214,"context_line":"        model_update \u003d self._do_volume_create("},{"line_number":1215,"context_line":"            remote_account, params, endpoint\u003dtgt_endpoint)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_15576703","line":1212,"updated":"2016-04-15 13:36:27.000000000","message":"% \u003e ,","commit_id":"e14c8c00d5e4c591e85b9cc7f0232bd3745d5c0f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"04dfbba5f889edf38e9889de37378ad95e4c751c","unresolved":false,"context_lines":[{"line_number":1222,"context_line":"                                endpoint\u003dtgt_endpoint)"},{"line_number":1223,"context_line":""},{"line_number":1224,"context_line":"        # Enable volume pairing"},{"line_number":1225,"context_line":"        LOG.debug(\"Start volume pairing on volume ID: %s\" %"},{"line_number":1226,"context_line":"                  volume[\u0027volumeID\u0027])"},{"line_number":1227,"context_line":"        params \u003d {\u0027volumeID\u0027: volume[\u0027volumeID\u0027]}"},{"line_number":1228,"context_line":"        rep_key \u003d self._issue_api_request(\u0027StartVolumePairing\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_5541df38","line":1225,"updated":"2016-04-15 13:36:27.000000000","message":"% \u003e ,","commit_id":"e14c8c00d5e4c591e85b9cc7f0232bd3745d5c0f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"04dfbba5f889edf38e9889de37378ad95e4c751c","unresolved":false,"context_lines":[{"line_number":1231,"context_line":"        params \u003d {\u0027volumeID\u0027: tgt_sfid,"},{"line_number":1232,"context_line":"                  \u0027volumePairingKey\u0027: rep_key}"},{"line_number":1233,"context_line":"        LOG.debug(\"Issue CompleteVolumePairing request on remote: \""},{"line_number":1234,"context_line":"                  \"%(endpoint)s, %(parameters)s\" %"},{"line_number":1235,"context_line":"                  {\u0027endpoint\u0027: tgt_endpoint[\u0027url\u0027], \u0027parameters\u0027: params})"},{"line_number":1236,"context_line":"        self._issue_api_request(\u0027CompleteVolumePairing\u0027,"},{"line_number":1237,"context_line":"                                params,"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_156e47c9","line":1234,"updated":"2016-04-15 13:36:27.000000000","message":"% \u003e ,","commit_id":"e14c8c00d5e4c591e85b9cc7f0232bd3745d5c0f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"04dfbba5f889edf38e9889de37378ad95e4c751c","unresolved":false,"context_lines":[{"line_number":1281,"context_line":"                        params \u003d {\u0027volumeID\u0027: vp[\u0027remoteVolumeID\u0027]}"},{"line_number":1282,"context_line":"                        LOG.debug(\"Issue Delete request on cluster: \""},{"line_number":1283,"context_line":"                                  \"%(remote)s with params: %(parameters)s\""},{"line_number":1284,"context_line":"                                  % {\u0027remote\u0027: cluster[\u0027endpoint\u0027][\u0027url\u0027],"},{"line_number":1285,"context_line":"                                     \u0027parameters\u0027: params})"},{"line_number":1286,"context_line":"                        self._issue_api_request(\u0027DeleteVolume\u0027, params,"},{"line_number":1287,"context_line":"                                                endpoint\u003dcluster[\u0027endpoint\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_75b69b3e","line":1284,"updated":"2016-04-15 13:36:27.000000000","message":"% \u003e ,","commit_id":"e14c8c00d5e4c591e85b9cc7f0232bd3745d5c0f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"04dfbba5f889edf38e9889de37378ad95e4c751c","unresolved":false,"context_lines":[{"line_number":1834,"context_line":"            if not remote:"},{"line_number":1835,"context_line":"                LOG.error(_LE(\"SolidFire driver received failover_host \""},{"line_number":1836,"context_line":"                              \"but was unable to find specified replication \""},{"line_number":1837,"context_line":"                              \"pair iwth id: %s.\") % secondary_id)"},{"line_number":1838,"context_line":"                raise exception.InvalidReplicationTarget"},{"line_number":1839,"context_line":"        else:"},{"line_number":1840,"context_line":"            remote \u003d self.cluster_pairs[0]"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_55dd5f6f","line":1837,"range":{"start_line":1837,"start_character":51,"end_line":1837,"end_character":52},"updated":"2016-04-15 13:36:27.000000000","message":"% \u003e ,","commit_id":"e14c8c00d5e4c591e85b9cc7f0232bd3745d5c0f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"04dfbba5f889edf38e9889de37378ad95e4c751c","unresolved":false,"context_lines":[{"line_number":1834,"context_line":"            if not remote:"},{"line_number":1835,"context_line":"                LOG.error(_LE(\"SolidFire driver received failover_host \""},{"line_number":1836,"context_line":"                              \"but was unable to find specified replication \""},{"line_number":1837,"context_line":"                              \"pair iwth id: %s.\") % secondary_id)"},{"line_number":1838,"context_line":"                raise exception.InvalidReplicationTarget"},{"line_number":1839,"context_line":"        else:"},{"line_number":1840,"context_line":"            remote \u003d self.cluster_pairs[0]"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_f5f74bf3","line":1837,"range":{"start_line":1837,"start_character":36,"end_line":1837,"end_character":40},"updated":"2016-04-15 13:36:27.000000000","message":"/iwth/with/","commit_id":"e14c8c00d5e4c591e85b9cc7f0232bd3745d5c0f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"04dfbba5f889edf38e9889de37378ad95e4c751c","unresolved":false,"context_lines":[{"line_number":1879,"context_line":"        # has been pretty much stateless and has allowed customers to run"},{"line_number":1880,"context_line":"        # active/active HA c-vol services with SolidFire.  The introduction of"},{"line_number":1881,"context_line":"        # the active_cluster and failed_over attributes is going to break that"},{"line_number":1882,"context_line":"        # but for now that\u0027s going to be the trade off of using replciation"},{"line_number":1883,"context_line":"        self.active_cluster_info \u003d remote"},{"line_number":1884,"context_line":"        self.failed_over \u003d True"},{"line_number":1885,"context_line":"        return remote[\u0027mvip\u0027], volume_updates"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_d55defed","line":1882,"range":{"start_line":1882,"start_character":64,"end_line":1882,"end_character":75},"updated":"2016-04-15 13:36:27.000000000","message":"nit: /replciation/replication/","commit_id":"e14c8c00d5e4c591e85b9cc7f0232bd3745d5c0f"}],"releasenotes/notes/solidfire-v2.1-replication-570a1f12f70e67b4.yaml":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bd28b5f87e975a9a825a83b9e6677c315dfe38d6","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"      - Added v2.1 replication support to the SolidFire driver."},{"line_number":4,"context_line":"other:"},{"line_number":5,"context_line":"    - Example cinder.conf entry: `replication_device\u003dbackend_id:\u003cremote-mvip\u003e,login:admin,password:admin`"},{"line_number":6,"context_line":"    - Example Volume Type Extra-Spec entry: `replication\u003denabled`"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"5a18252c_ba446e74","line":5,"updated":"2016-04-12 23:57:40.000000000","message":"It looks like Jenkins doesn\u0027t like `\n\n \n2016-04-12 18:38:20.907 | Exception occurred:\n2016-04-12 18:38:20.907 |   File \"/home/jenkins/workspace/gate-cinder-releasenotes/.tox/releasenotes/local/lib/python2.7/site-packages/yaml/scanner.py\", line 257, in fetch_more_tokens\n2016-04-12 18:38:20.907 |     % ch.encode(\u0027utf-8\u0027), self.get_mark())\n2016-04-12 18:38:20.907 | ScannerError: while scanning for the next token\n2016-04-12 18:38:20.907 | found character \u0027`\u0027 that cannot start any token\n2016-04-12 18:38:20.907 |   in \"\u003cunicode string\u003e\", line 5, column 34:\n2016-04-12 18:38:20.908 |         - Example cinder.conf entry: `replication_device\u003dbackend_id:\u003c ... \n2016-04-12 18:38:20.908 |                                      ^","commit_id":"8cf917508ceaf995d631bacaf2ddeefe32560e45"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bd28b5f87e975a9a825a83b9e6677c315dfe38d6","unresolved":false,"context_lines":[{"line_number":3,"context_line":"      - Added v2.1 replication support to the SolidFire driver."},{"line_number":4,"context_line":"other:"},{"line_number":5,"context_line":"    - Example cinder.conf entry: `replication_device\u003dbackend_id:\u003cremote-mvip\u003e,login:admin,password:admin`"},{"line_number":6,"context_line":"    - Example Volume Type Extra-Spec entry: `replication\u003denabled`"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"5a18252c_fa5ee643","line":6,"updated":"2016-04-12 23:57:40.000000000","message":"Here too","commit_id":"8cf917508ceaf995d631bacaf2ddeefe32560e45"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"04dfbba5f889edf38e9889de37378ad95e4c751c","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"    - Added v2.1 replication support to SolidFire driver."},{"line_number":4,"context_line":"other:"},{"line_number":5,"context_line":"    - cinder.conf entry"},{"line_number":6,"context_line":"      \"replication_device\u003dbackend_id:\u003cremote-mvip\u003e,login:\u003clogin\u003e,password:\u003cpasswd\u003e,svip:\u003csvip\u003e\""},{"line_number":7,"context_line":"    - Example extra-spec key"},{"line_number":8,"context_line":"      \"replication\u003denabled\""}],"source_content_type":"text/x-yaml","patch_set":7,"id":"1a122d0e_b5a5d3b6","line":5,"updated":"2016-04-15 13:36:27.000000000","message":"The generated release notes don\u0027t keep these together, so this \"other\" section is probably not going to make much sense.\n\nIt might be good to add it to the \"features\" entry denoting the addition of replication to SoldiFire. I believe normal RST formatting applies.","commit_id":"e14c8c00d5e4c591e85b9cc7f0232bd3745d5c0f"}]}
