)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c5f39d324eedb4d75e41e1bb7b33ef0d52f5f636","unresolved":false,"context_lines":[{"line_number":35,"context_line":"   non-replicated type which will cause the non-working copy to be"},{"line_number":36,"context_line":"   deleted, and back to replicated, which will create a new copy. This"},{"line_number":37,"context_line":"   will be submitted in a separate patch after retype is merged."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"Implements: blueprint volume-mirroring"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"Change-Id: Ibf1dc3472acf90a4929047fcdefc98dfa141a48a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAAT3%2F%2FqJw%3D","line":38,"updated":"2014-01-04 00:13:51.000000000","message":"Need to add DocImpact","commit_id":"3bd5a4429aee3904645f6c20e4d03f580b0519f5"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"39330d04581e6e774cf4c623ac288f634c15061d","unresolved":false,"context_lines":[{"line_number":35,"context_line":"   non-replicated type which will cause the non-working copy to be"},{"line_number":36,"context_line":"   deleted, and back to replicated, which will create a new copy. This"},{"line_number":37,"context_line":"   will be submitted in a separate patch after retype is merged."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"Implements: blueprint volume-mirroring"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"Change-Id: Ibf1dc3472acf90a4929047fcdefc98dfa141a48a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAAUH%2F%2F4a0%3D","line":38,"in_reply_to":"AAAAT3%2F%2FqJw%3D","updated":"2014-01-07 11:06:06.000000000","message":"Done","commit_id":"3bd5a4429aee3904645f6c20e4d03f580b0519f5"},{"author":{"_account_id":8649,"name":"Bruce R. Montague","email":"bruce_montague@symantec.com","username":"brucem"},"change_message_id":"ad9fe3bbbbc5804cee1e35bf1416428c267e6bdd","unresolved":false,"context_lines":[{"line_number":22,"context_line":"      to create a replica, and then it will enable the replica. Each"},{"line_number":23,"context_line":"      driver is expected to implement any necessary function for"},{"line_number":24,"context_line":"      replication to work correctly (i.e., some drivers may not need to"},{"line_number":25,"context_line":"      implement both)."},{"line_number":26,"context_line":"4. A periodic task calls the driver to check the status of each"},{"line_number":27,"context_line":"   replication relationship and update when necessary. Sends"},{"line_number":28,"context_line":"   notification if relationship goes into error state."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"AAAAUX%2F%2FH88%3D","line":25,"updated":"2014-02-16 21:54:28.000000000","message":"What does \"implement both\" mean here? That the driver might not need to actually implement a secondary copy or replica via a secondary volume manager, if a single volume manager can create a \"native\" replicated volume via the storage technology it manages? If this, maybe \"explicitly create the secondary volume on a secondary backend).\"?","commit_id":"f899a62ba278b65d18a3deced5ce67fa577976d5"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"869432fdb93836116cb9adde4261ca0207d6e771","unresolved":false,"context_lines":[{"line_number":22,"context_line":"      to create a replica, and then it will enable the replica. Each"},{"line_number":23,"context_line":"      driver is expected to implement any necessary function for"},{"line_number":24,"context_line":"      replication to work correctly (i.e., some drivers may not need to"},{"line_number":25,"context_line":"      implement both)."},{"line_number":26,"context_line":"4. A periodic task calls the driver to check the status of each"},{"line_number":27,"context_line":"   replication relationship and update when necessary. Sends"},{"line_number":28,"context_line":"   notification if relationship goes into error state."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"AAAAUX%2F%2FGEs%3D","line":25,"in_reply_to":"AAAAUX%2F%2FH88%3D","updated":"2014-02-17 07:02:54.000000000","message":"Yes, that is what I meant.  When creating a volume, the primary copy\u0027s manager will call create_volume, then the secondary\u0027s manager will call create_replica, and then the primary\u0027s manager will call enable_replica.  This should be enough to enable replication on all types of back-ends, but may be overkill for some.  I will clarify the commit message.","commit_id":"f899a62ba278b65d18a3deced5ce67fa577976d5"}],"cinder/api/contrib/volume_replication.py":[{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c5f39d324eedb4d75e41e1bb7b33ef0d52f5f636","unresolved":false,"context_lines":[{"line_number":120,"context_line":"        unknown_opts \u003d [opt for opt in filters if opt not in allowed_filters]"},{"line_number":121,"context_line":"        if unknown_opts:"},{"line_number":122,"context_line":"            bad_opts \u003d \", \".join(unknown_opts)"},{"line_number":123,"context_line":"            log_msg \u003d _(\"Removing options \u0027%s\u0027 from query\") % bad_opts"},{"line_number":124,"context_line":"            LOG.debug(log_msg)"},{"line_number":125,"context_line":"            for opt in unknown_opts:"},{"line_number":126,"context_line":"                del filters[opt]"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2FqJU%3D","line":123,"updated":"2014-01-04 00:13:51.000000000","message":"Recommend ending message with \u0027.\u0027","commit_id":"3bd5a4429aee3904645f6c20e4d03f580b0519f5"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c5f39d324eedb4d75e41e1bb7b33ef0d52f5f636","unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        updates \u003d body[\u0027relationship\u0027]"},{"line_number":151,"context_line":"        if not isinstance(updates, dict):"},{"line_number":152,"context_line":"            log_msg \u003d _(\u0027Updates should be passed as dictionary\u0027)"},{"line_number":153,"context_line":"            LOG.debug(log_msg)"},{"line_number":154,"context_line":"            raise exc.HTTPBadRequest()"},{"line_number":155,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2FqJM%3D","line":152,"updated":"2014-01-04 00:13:51.000000000","message":"Recommend ending message with \u0027.\u0027","commit_id":"3bd5a4429aee3904645f6c20e4d03f580b0519f5"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"39330d04581e6e774cf4c623ac288f634c15061d","unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        updates \u003d body[\u0027relationship\u0027]"},{"line_number":151,"context_line":"        if not isinstance(updates, dict):"},{"line_number":152,"context_line":"            log_msg \u003d _(\u0027Updates should be passed as dictionary\u0027)"},{"line_number":153,"context_line":"            LOG.debug(log_msg)"},{"line_number":154,"context_line":"            raise exc.HTTPBadRequest()"},{"line_number":155,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2F4as%3D","line":152,"in_reply_to":"AAAAT3%2F%2FqJM%3D","updated":"2014-01-07 11:06:06.000000000","message":"Done","commit_id":"3bd5a4429aee3904645f6c20e4d03f580b0519f5"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c5f39d324eedb4d75e41e1bb7b33ef0d52f5f636","unresolved":false,"context_lines":[{"line_number":164,"context_line":"                raise exc.HTTPBadRequest()"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"        if \u0027swap\u0027 in update_dict:"},{"line_number":167,"context_line":"            LOG.audit(_(\u0027Swapping replication roles of relationship %s\u0027),"},{"line_number":168,"context_line":"                      str(id),"},{"line_number":169,"context_line":"                      context\u003dcontext)"},{"line_number":170,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2FqJI%3D","line":167,"updated":"2014-01-04 00:13:51.000000000","message":"Recommend ending message with \u0027.\u0027","commit_id":"3bd5a4429aee3904645f6c20e4d03f580b0519f5"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"39330d04581e6e774cf4c623ac288f634c15061d","unresolved":false,"context_lines":[{"line_number":164,"context_line":"                raise exc.HTTPBadRequest()"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"        if \u0027swap\u0027 in update_dict:"},{"line_number":167,"context_line":"            LOG.audit(_(\u0027Swapping replication roles of relationship %s\u0027),"},{"line_number":168,"context_line":"                      str(id),"},{"line_number":169,"context_line":"                      context\u003dcontext)"},{"line_number":170,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2F4aY%3D","line":167,"in_reply_to":"AAAAT3%2F%2FqJI%3D","updated":"2014-01-07 11:06:06.000000000","message":"Done","commit_id":"3bd5a4429aee3904645f6c20e4d03f580b0519f5"},{"author":{"_account_id":8649,"name":"Bruce R. Montague","email":"bruce_montague@symantec.com","username":"brucem"},"change_message_id":"52f5567d99cf517b9e816ec609bb349642fa75ce","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        if unknown_opts:"},{"line_number":122,"context_line":"            bad_opts \u003d \", \".join(unknown_opts)"},{"line_number":123,"context_line":"            log_msg \u003d _(\"Removing options \u0027%s\u0027 from query.\") % bad_opts"},{"line_number":124,"context_line":"            LOG.debug(log_msg)"},{"line_number":125,"context_line":"            for opt in unknown_opts:"},{"line_number":126,"context_line":"                del filters[opt]"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAUX%2F%2B8rI%3D","line":124,"updated":"2014-02-18 02:24:52.000000000","message":"Is it possible to get rid of the naturalization \"_(\"? (There was something about doing that to make it easier on translators?) Or could this be a \"log.info()\"? (Same pattern occurs 2 other times.)","commit_id":"a4bdd50c8afe9b8b41bb2d4490e7c8d3f046404d"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"ac7002ab042c11bf8bc1dcf52612999a8facb84e","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        if unknown_opts:"},{"line_number":122,"context_line":"            bad_opts \u003d \", \".join(unknown_opts)"},{"line_number":123,"context_line":"            log_msg \u003d _(\"Removing options \u0027%s\u0027 from query.\") % bad_opts"},{"line_number":124,"context_line":"            LOG.debug(log_msg)"},{"line_number":125,"context_line":"            for opt in unknown_opts:"},{"line_number":126,"context_line":"                del filters[opt]"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAU3%2F%2F8sU%3D","line":124,"in_reply_to":"AAAAUX%2F%2B8rI%3D","updated":"2014-02-24 17:02:52.000000000","message":"Done","commit_id":"a4bdd50c8afe9b8b41bb2d4490e7c8d3f046404d"}],"cinder/db/sqlalchemy/migrate_repo/versions/023_add_replication_relationships.py":[{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c5f39d324eedb4d75e41e1bb7b33ef0d52f5f636","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    try:"},{"line_number":63,"context_line":"        replication.drop()"},{"line_number":64,"context_line":"    except Exception:"},{"line_number":65,"context_line":"        LOG.error(_(\"replication relationships table not dropped\"))"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2FqJs%3D","line":65,"updated":"2014-01-04 00:13:51.000000000","message":"Recommend changing this to \"replication_relationships table not dropped.\"\n\nAlso, is there a reason you aren\u0027t raising the exception here.  It looks like other downgrade functions do that.","commit_id":"3bd5a4429aee3904645f6c20e4d03f580b0519f5"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"39330d04581e6e774cf4c623ac288f634c15061d","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    try:"},{"line_number":63,"context_line":"        replication.drop()"},{"line_number":64,"context_line":"    except Exception:"},{"line_number":65,"context_line":"        LOG.error(_(\"replication relationships table not dropped\"))"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2F4aE%3D","line":65,"in_reply_to":"AAAAT3%2F%2FqJs%3D","updated":"2014-01-07 11:06:06.000000000","message":"Done","commit_id":"3bd5a4429aee3904645f6c20e4d03f580b0519f5"}],"cinder/exception.py":[{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c5f39d324eedb4d75e41e1bb7b33ef0d52f5f636","unresolved":false,"context_lines":[{"line_number":564,"context_line":""},{"line_number":565,"context_line":""},{"line_number":566,"context_line":"class ReplicationRelationshipNotFound(NotFound):"},{"line_number":567,"context_line":"    message \u003d _(\"Replication replication %(replication_relationship_id)s \""},{"line_number":568,"context_line":"                \"could not be found.\")"},{"line_number":569,"context_line":""},{"line_number":570,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2FqiM%3D","line":567,"updated":"2014-01-04 00:13:51.000000000","message":"Typo:  Replication replication -\u003e Replication relationship","commit_id":"3bd5a4429aee3904645f6c20e4d03f580b0519f5"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"39330d04581e6e774cf4c623ac288f634c15061d","unresolved":false,"context_lines":[{"line_number":564,"context_line":""},{"line_number":565,"context_line":""},{"line_number":566,"context_line":"class ReplicationRelationshipNotFound(NotFound):"},{"line_number":567,"context_line":"    message \u003d _(\"Replication replication %(replication_relationship_id)s \""},{"line_number":568,"context_line":"                \"could not be found.\")"},{"line_number":569,"context_line":""},{"line_number":570,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2F4ZY%3D","line":567,"in_reply_to":"AAAAT3%2F%2FqiM%3D","updated":"2014-01-07 11:06:06.000000000","message":"Done","commit_id":"3bd5a4429aee3904645f6c20e4d03f580b0519f5"}],"cinder/replication/api.py":[{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c5f39d324eedb4d75e41e1bb7b33ef0d52f5f636","unresolved":false,"context_lines":[{"line_number":55,"context_line":"            if limit is not None:"},{"line_number":56,"context_line":"                limit \u003d int(limit)"},{"line_number":57,"context_line":"                if limit \u003c 0:"},{"line_number":58,"context_line":"                    msg \u003d _(\u0027limit param must be positive\u0027)"},{"line_number":59,"context_line":"                    raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":60,"context_line":"        except ValueError:"},{"line_number":61,"context_line":"            msg \u003d _(\u0027limit param must be an integer\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2FqhY%3D","line":58,"updated":"2014-01-04 00:13:51.000000000","message":"Recommend starting with capital and ending with \u0027.\u0027.","commit_id":"3bd5a4429aee3904645f6c20e4d03f580b0519f5"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"39330d04581e6e774cf4c623ac288f634c15061d","unresolved":false,"context_lines":[{"line_number":55,"context_line":"            if limit is not None:"},{"line_number":56,"context_line":"                limit \u003d int(limit)"},{"line_number":57,"context_line":"                if limit \u003c 0:"},{"line_number":58,"context_line":"                    msg \u003d _(\u0027limit param must be positive\u0027)"},{"line_number":59,"context_line":"                    raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":60,"context_line":"        except ValueError:"},{"line_number":61,"context_line":"            msg \u003d _(\u0027limit param must be an integer\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2F4Y0%3D","line":58,"in_reply_to":"AAAAT3%2F%2FqhY%3D","updated":"2014-01-07 11:06:06.000000000","message":"Done","commit_id":"3bd5a4429aee3904645f6c20e4d03f580b0519f5"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c5f39d324eedb4d75e41e1bb7b33ef0d52f5f636","unresolved":false,"context_lines":[{"line_number":58,"context_line":"                    msg \u003d _(\u0027limit param must be positive\u0027)"},{"line_number":59,"context_line":"                    raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":60,"context_line":"        except ValueError:"},{"line_number":61,"context_line":"            msg \u003d _(\u0027limit param must be an integer\u0027)"},{"line_number":62,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        rels \u003d self.db.replication_relationship_get_all(context, marker,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2Fqhg%3D","line":61,"updated":"2014-01-04 00:13:51.000000000","message":"Recommend starting with capital and ending with \u0027.\u0027.","commit_id":"3bd5a4429aee3904645f6c20e4d03f580b0519f5"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"39330d04581e6e774cf4c623ac288f634c15061d","unresolved":false,"context_lines":[{"line_number":58,"context_line":"                    msg \u003d _(\u0027limit param must be positive\u0027)"},{"line_number":59,"context_line":"                    raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":60,"context_line":"        except ValueError:"},{"line_number":61,"context_line":"            msg \u003d _(\u0027limit param must be an integer\u0027)"},{"line_number":62,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        rels \u003d self.db.replication_relationship_get_all(context, marker,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2F4Yw%3D","line":61,"in_reply_to":"AAAAT3%2F%2Fqhg%3D","updated":"2014-01-07 11:06:06.000000000","message":"Done","commit_id":"3bd5a4429aee3904645f6c20e4d03f580b0519f5"},{"author":{"_account_id":4418,"name":"Ronen Kat","email":"ronenkat@il.ibm.com","username":"ronenkat"},"change_message_id":"2aa590d2b435ec3c61e77ce03747f608bdd293ff","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        return rels"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def swap(self, context, relationship_id):"},{"line_number":80,"context_line":"        check_policy(context, \u0027swap\u0027)"},{"line_number":81,"context_line":"        rel \u003d self.db.replication_relationship_get(context, relationship_id)"},{"line_number":82,"context_line":"        self.volume_rpcapi.swap_replicas(context, rel)"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAU3%2F%2F9nc%3D","line":79,"updated":"2014-02-23 12:58:44.000000000","message":"Should make sure that the primary volume is \u0027available\u0027","commit_id":"a4bdd50c8afe9b8b41bb2d4490e7c8d3f046404d"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"ac7002ab042c11bf8bc1dcf52612999a8facb84e","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        return rels"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def swap(self, context, relationship_id):"},{"line_number":80,"context_line":"        check_policy(context, \u0027swap\u0027)"},{"line_number":81,"context_line":"        rel \u003d self.db.replication_relationship_get(context, relationship_id)"},{"line_number":82,"context_line":"        self.volume_rpcapi.swap_replicas(context, rel)"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAU3%2F%2F8oU%3D","line":79,"in_reply_to":"AAAAU3%2F%2F9nc%3D","updated":"2014-02-24 17:02:52.000000000","message":"Done","commit_id":"a4bdd50c8afe9b8b41bb2d4490e7c8d3f046404d"}],"cinder/scheduler/filter_scheduler.py":[{"author":{"_account_id":4418,"name":"Ronen Kat","email":"ronenkat@il.ibm.com","username":"ronenkat"},"change_message_id":"2aa590d2b435ec3c61e77ce03747f608bdd293ff","unresolved":false,"context_lines":[{"line_number":111,"context_line":"            caps1 \u003d host1.obj.capabilities"},{"line_number":112,"context_line":"            if not _host_has_replication_caps(caps1):"},{"line_number":113,"context_line":"                continue"},{"line_number":114,"context_line":"            partners1 \u003d [str(x) for x in caps1[\u0027replication_partners\u0027]]"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"            if target_rpo is not None:"},{"line_number":117,"context_line":"                target_rpo \u003d int(target_rpo)"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAU3%2F%2F9nU%3D","line":114,"updated":"2014-02-23 12:58:44.000000000","message":"Can move this down to where it\u0027s used","commit_id":"a4bdd50c8afe9b8b41bb2d4490e7c8d3f046404d"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"ac7002ab042c11bf8bc1dcf52612999a8facb84e","unresolved":false,"context_lines":[{"line_number":111,"context_line":"            caps1 \u003d host1.obj.capabilities"},{"line_number":112,"context_line":"            if not _host_has_replication_caps(caps1):"},{"line_number":113,"context_line":"                continue"},{"line_number":114,"context_line":"            partners1 \u003d [str(x) for x in caps1[\u0027replication_partners\u0027]]"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"            if target_rpo is not None:"},{"line_number":117,"context_line":"                target_rpo \u003d int(target_rpo)"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAU3%2F%2F4lo%3D","line":114,"in_reply_to":"AAAAU3%2F%2F9nU%3D","updated":"2014-02-24 17:02:52.000000000","message":"Done","commit_id":"a4bdd50c8afe9b8b41bb2d4490e7c8d3f046404d"},{"author":{"_account_id":10677,"name":"Ph. Marek","username":"phmarek","inactive":true},"change_message_id":"860dd02be71291e5ae0e1b7df0351a484f992cae","unresolved":false,"context_lines":[{"line_number":115,"context_line":"            if target_rpo is not None:"},{"line_number":116,"context_line":"                target_rpo \u003d int(target_rpo)"},{"line_number":117,"context_line":"                rpo_range \u003d caps1[\u0027replication_rpo_range\u0027]"},{"line_number":118,"context_line":"                if target_rpo \u003c rpo_range[0] or target_rpo \u003e rpo_range[1]:"},{"line_number":119,"context_line":"                    continue"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"            for host2 in weighed_hosts2:"}],"source_content_type":"text/x-python","patch_set":20,"id":"baada198_cd53a237","line":118,"updated":"2014-07-10 20:27:44.000000000","message":"Why do we check for \"target_rpo \u003e rpo_range[1]\"?\n\n\"If replication is too fast?\" Because we\u0027d like to revert to an older state?\nI believe that using snapshots would be more sane for that use case.\n\nOr is it just that I don\u0027t understand the reason?","commit_id":"5bd12b36a67842f3c7cb5a37ac9697e5afb57432"}],"cinder/tests/test_migrations.py":[{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c5f39d324eedb4d75e41e1bb7b33ef0d52f5f636","unresolved":false,"context_lines":[{"line_number":1079,"context_line":"            relationships \u003d sqlalchemy.Table(\u0027replication_relationships\u0027,"},{"line_number":1080,"context_line":"                                             metadata,"},{"line_number":1081,"context_line":"                                             autoload\u003dTrue)"},{"line_number":1082,"context_line":""},{"line_number":1083,"context_line":"            self.assertIsInstance(relationships.c.created_at.type,"},{"line_number":1084,"context_line":"                                  sqlalchemy.types.DATETIME)"},{"line_number":1085,"context_line":"            self.assertIsInstance(relationships.c.updated_at.type,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2FqPc%3D","line":1082,"updated":"2014-01-04 00:13:51.000000000","message":"This testcase will break migration testing for mysql, postgresql and DB2.  I have a change I am working on to resolve this that checks for the engine type and then sets DATETIME and BOOLEAN to the appropriate sqlalchemy.types.  For DB2 DATETIME is actually sqlalchemy.types.TIMESTAMP and BOOLEAN is sqlalchemy.types.SMALLINT .  For mysql BOOLEAN is actually sqlalchemy.dialects.mysql.TINYINT and for postgresql DATETIME is sqlalchemy.types.TIMESTAMP.\n\nAnyway, I am hoping to get my change in in the next couple of days.  Then you can rebase on that and fix up your test case accordingly.","commit_id":"3bd5a4429aee3904645f6c20e4d03f580b0519f5"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"39330d04581e6e774cf4c623ac288f634c15061d","unresolved":false,"context_lines":[{"line_number":1079,"context_line":"            relationships \u003d sqlalchemy.Table(\u0027replication_relationships\u0027,"},{"line_number":1080,"context_line":"                                             metadata,"},{"line_number":1081,"context_line":"                                             autoload\u003dTrue)"},{"line_number":1082,"context_line":""},{"line_number":1083,"context_line":"            self.assertIsInstance(relationships.c.created_at.type,"},{"line_number":1084,"context_line":"                                  sqlalchemy.types.DATETIME)"},{"line_number":1085,"context_line":"            self.assertIsInstance(relationships.c.updated_at.type,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2F4YQ%3D","line":1082,"in_reply_to":"AAAAT3%2F%2FqPc%3D","updated":"2014-01-07 11:06:06.000000000","message":"Done","commit_id":"3bd5a4429aee3904645f6c20e4d03f580b0519f5"},{"author":{"_account_id":8649,"name":"Bruce R. Montague","email":"bruce_montague@symantec.com","username":"brucem"},"change_message_id":"65509205daaaeef4cafbce527a92cd820f33d6ba","unresolved":false,"context_lines":[{"line_number":1109,"context_line":"                                  sqlalchemy.types.VARCHAR)"},{"line_number":1110,"context_line":"            self.assertIsInstance(relationships.c.extended_status.type,"},{"line_number":1111,"context_line":"                                  sqlalchemy.types.VARCHAR)"},{"line_number":1112,"context_line":""},{"line_number":1113,"context_line":"            migration_api.downgrade(engine, TestMigrations.REPOSITORY, 22)"},{"line_number":1114,"context_line":""},{"line_number":1115,"context_line":"            self.assertFalse(engine.dialect.has_table("}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAUX%2F%2BTZ4%3D","line":1112,"updated":"2014-02-22 02:05:27.000000000","message":"Should assertions for the columns \"driver_data\", \"primary_replication_unit_id\", and \"secondary_replication_unit_id\" also be in test_migration_023()?","commit_id":"a4bdd50c8afe9b8b41bb2d4490e7c8d3f046404d"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"ac7002ab042c11bf8bc1dcf52612999a8facb84e","unresolved":false,"context_lines":[{"line_number":1109,"context_line":"                                  sqlalchemy.types.VARCHAR)"},{"line_number":1110,"context_line":"            self.assertIsInstance(relationships.c.extended_status.type,"},{"line_number":1111,"context_line":"                                  sqlalchemy.types.VARCHAR)"},{"line_number":1112,"context_line":""},{"line_number":1113,"context_line":"            migration_api.downgrade(engine, TestMigrations.REPOSITORY, 22)"},{"line_number":1114,"context_line":""},{"line_number":1115,"context_line":"            self.assertFalse(engine.dialect.has_table("}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAU3%2F%2F4lQ%3D","line":1112,"in_reply_to":"AAAAUX%2F%2BTZ4%3D","updated":"2014-02-24 17:02:52.000000000","message":"Done","commit_id":"a4bdd50c8afe9b8b41bb2d4490e7c8d3f046404d"}],"cinder/volume/driver.py":[{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c5f39d324eedb4d75e41e1bb7b33ef0d52f5f636","unresolved":false,"context_lines":[{"line_number":485,"context_line":"        return (False, None)"},{"line_number":486,"context_line":""},{"line_number":487,"context_line":"    def create_replica(self, context, replication_relationship):"},{"line_number":488,"context_line":"        msg \u003d _(\"create_replica not implemented\")"},{"line_number":489,"context_line":"        raise NotImplementedError(msg)"},{"line_number":490,"context_line":""},{"line_number":491,"context_line":"    def enable_replica(self, context, replication_relationship):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2FqO4%3D","line":488,"updated":"2014-01-04 00:13:51.000000000","message":"Recommend ending these with \u0027.\u0027","commit_id":"3bd5a4429aee3904645f6c20e4d03f580b0519f5"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"39330d04581e6e774cf4c623ac288f634c15061d","unresolved":false,"context_lines":[{"line_number":485,"context_line":"        return (False, None)"},{"line_number":486,"context_line":""},{"line_number":487,"context_line":"    def create_replica(self, context, replication_relationship):"},{"line_number":488,"context_line":"        msg \u003d _(\"create_replica not implemented\")"},{"line_number":489,"context_line":"        raise NotImplementedError(msg)"},{"line_number":490,"context_line":""},{"line_number":491,"context_line":"    def enable_replica(self, context, replication_relationship):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2F4YI%3D","line":488,"in_reply_to":"AAAAT3%2F%2FqO4%3D","updated":"2014-01-07 11:06:06.000000000","message":"Done","commit_id":"3bd5a4429aee3904645f6c20e4d03f580b0519f5"},{"author":{"_account_id":7689,"name":"Bill Owen","email":"billowen@us.ibm.com","username":"billowen"},"change_message_id":"349976e8ad1b10c8a218fb12ad9f16d84df429ee","unresolved":false,"context_lines":[{"line_number":504,"context_line":"    def replication_swap(self, context, replication_relationship):"},{"line_number":505,"context_line":"        msg \u003d _(\"replication_swap not implemented.\")"},{"line_number":506,"context_line":"        raise NotImplementedError(msg)"},{"line_number":507,"context_line":""},{"line_number":508,"context_line":""},{"line_number":509,"context_line":"class ISCSIDriver(VolumeDriver):"},{"line_number":510,"context_line":"    \"\"\"Executes commands relating to ISCSI volumes."}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2FblE%3D","line":507,"updated":"2014-01-14 00:31:19.000000000","message":"Would it be more consistent with other method names if the replication related methods were named using \u003cobjectype\u003e_\u003caction\u003e format?\n\nFor example:\nreplica_create\nreplica_enable\nreplica_check\nreplica_disable\nreplica_delete\nreplica_swap","commit_id":"c5a1df27d97fc0c12404623d6bacf24850c5ca98"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"819fcddc693d15a00978abf16312b7acce9f658e","unresolved":false,"context_lines":[{"line_number":504,"context_line":"    def replication_swap(self, context, replication_relationship):"},{"line_number":505,"context_line":"        msg \u003d _(\"replication_swap not implemented.\")"},{"line_number":506,"context_line":"        raise NotImplementedError(msg)"},{"line_number":507,"context_line":""},{"line_number":508,"context_line":""},{"line_number":509,"context_line":"class ISCSIDriver(VolumeDriver):"},{"line_number":510,"context_line":"    \"\"\"Executes commands relating to ISCSI volumes."}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2FZNU%3D","line":507,"in_reply_to":"AAAAUH%2F%2FblE%3D","updated":"2014-01-14 11:25:03.000000000","message":"This would be inconsistent with create_volume, delete_volume, etc.  I will change replication_swap to swap_replicas to be more consistent with the others though.","commit_id":"c5a1df27d97fc0c12404623d6bacf24850c5ca98"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"3aa402c5e342bd6ee8c4bc74029761166f0292a9","unresolved":false,"context_lines":[{"line_number":518,"context_line":"        raise NotImplementedError(msg)"},{"line_number":519,"context_line":""},{"line_number":520,"context_line":"    def replication_status_check(self, context, replication_relationship):"},{"line_number":521,"context_line":"        return None"},{"line_number":522,"context_line":""},{"line_number":523,"context_line":"    def disable_replica(self, context, replication_relationship):"},{"line_number":524,"context_line":"        msg \u003d _(\"disable_replica not implemented.\")"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAU3%2F%2FZG0%3D","line":521,"updated":"2014-02-26 22:45:47.000000000","message":"Should probably just be \"pass\" to be consistent w/ the rest of the operations that are no-ops here.","commit_id":"d2ad19817d9e14eb6743eefb202b30e7d758badd"}],"cinder/volume/flows/create_volume/__init__.py":[{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c5f39d324eedb4d75e41e1bb7b33ef0d52f5f636","unresolved":false,"context_lines":[{"line_number":1496,"context_line":"        except exception.CinderException:"},{"line_number":1497,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":1498,"context_line":"                LOG.exception(_(\"Failed fetching replica %(secondary_id)s of \""},{"line_number":1499,"context_line":"                                \"volume %(volume_id)s\") %"},{"line_number":1500,"context_line":"                              {\u0027secondary_id\u0027: secondary_id,"},{"line_number":1501,"context_line":"                               \u0027volume_id\u0027: volume[\u0027id\u0027]})"},{"line_number":1502,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2FqOo%3D","line":1499,"updated":"2014-01-04 00:13:51.000000000","message":"Suggest ending with \u0027.\u0027","commit_id":"3bd5a4429aee3904645f6c20e4d03f580b0519f5"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"39330d04581e6e774cf4c623ac288f634c15061d","unresolved":false,"context_lines":[{"line_number":1496,"context_line":"        except exception.CinderException:"},{"line_number":1497,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":1498,"context_line":"                LOG.exception(_(\"Failed fetching replica %(secondary_id)s of \""},{"line_number":1499,"context_line":"                                \"volume %(volume_id)s\") %"},{"line_number":1500,"context_line":"                              {\u0027secondary_id\u0027: secondary_id,"},{"line_number":1501,"context_line":"                               \u0027volume_id\u0027: volume[\u0027id\u0027]})"},{"line_number":1502,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2F4W8%3D","line":1499,"in_reply_to":"AAAAT3%2F%2FqOo%3D","updated":"2014-01-07 11:06:06.000000000","message":"Done","commit_id":"3bd5a4429aee3904645f6c20e4d03f580b0519f5"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c5f39d324eedb4d75e41e1bb7b33ef0d52f5f636","unresolved":false,"context_lines":[{"line_number":1504,"context_line":"            self.rpcapi.create_replica(context, relationship)"},{"line_number":1505,"context_line":"        except exception.CinderException:"},{"line_number":1506,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":1507,"context_line":"                LOG.exception(_(\"Failed to create replica of volume %s\") %"},{"line_number":1508,"context_line":"                              volume[\u0027id\u0027])"},{"line_number":1509,"context_line":"        return self.db.replication_relationship_get_by_volume_id("},{"line_number":1510,"context_line":"            context, volume[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2FqOk%3D","line":1507,"updated":"2014-01-04 00:13:51.000000000","message":"Suggest ending with \u0027.\u0027","commit_id":"3bd5a4429aee3904645f6c20e4d03f580b0519f5"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"39330d04581e6e774cf4c623ac288f634c15061d","unresolved":false,"context_lines":[{"line_number":1504,"context_line":"            self.rpcapi.create_replica(context, relationship)"},{"line_number":1505,"context_line":"        except exception.CinderException:"},{"line_number":1506,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":1507,"context_line":"                LOG.exception(_(\"Failed to create replica of volume %s\") %"},{"line_number":1508,"context_line":"                              volume[\u0027id\u0027])"},{"line_number":1509,"context_line":"        return self.db.replication_relationship_get_by_volume_id("},{"line_number":1510,"context_line":"            context, volume[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2F4XA%3D","line":1507,"in_reply_to":"AAAAT3%2F%2FqOk%3D","updated":"2014-01-07 11:06:06.000000000","message":"Done","commit_id":"3bd5a4429aee3904645f6c20e4d03f580b0519f5"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c5f39d324eedb4d75e41e1bb7b33ef0d52f5f636","unresolved":false,"context_lines":[{"line_number":1529,"context_line":"            self.db.replication_relationship_update(context, rel[\u0027id\u0027], update)"},{"line_number":1530,"context_line":"        except exception.CinderException:"},{"line_number":1531,"context_line":"            # Don\u0027t let this cause further exceptions."},{"line_number":1532,"context_line":"            LOG.exception(_(\"Failed to error out relationship\"))"},{"line_number":1533,"context_line":""},{"line_number":1534,"context_line":""},{"line_number":1535,"context_line":"class EnableVolumeReplica(base.CinderTask):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2FqOU%3D","line":1532,"updated":"2014-01-04 00:13:51.000000000","message":"Suggesting ending with \u0027.\u0027","commit_id":"3bd5a4429aee3904645f6c20e4d03f580b0519f5"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"39330d04581e6e774cf4c623ac288f634c15061d","unresolved":false,"context_lines":[{"line_number":1529,"context_line":"            self.db.replication_relationship_update(context, rel[\u0027id\u0027], update)"},{"line_number":1530,"context_line":"        except exception.CinderException:"},{"line_number":1531,"context_line":"            # Don\u0027t let this cause further exceptions."},{"line_number":1532,"context_line":"            LOG.exception(_(\"Failed to error out relationship\"))"},{"line_number":1533,"context_line":""},{"line_number":1534,"context_line":""},{"line_number":1535,"context_line":"class EnableVolumeReplica(base.CinderTask):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2F4XI%3D","line":1532,"in_reply_to":"AAAAT3%2F%2FqOU%3D","updated":"2014-01-07 11:06:06.000000000","message":"Done","commit_id":"3bd5a4429aee3904645f6c20e4d03f580b0519f5"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c5f39d324eedb4d75e41e1bb7b33ef0d52f5f636","unresolved":false,"context_lines":[{"line_number":1590,"context_line":"        except exception.CinderException:"},{"line_number":1591,"context_line":"            # Don\u0027t let this cause further exceptions."},{"line_number":1592,"context_line":"            LOG.exception(_(\"Failed to error out relationship\"))"},{"line_number":1593,"context_line":""},{"line_number":1594,"context_line":""},{"line_number":1595,"context_line":"class CreateVolumeOnFinishTask(NotifyVolumeActionTask):"},{"line_number":1596,"context_line":"    \"\"\"On successful volume creation this will perform final volume actions."}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2FqOM%3D","line":1593,"updated":"2014-01-04 00:13:51.000000000","message":"Suggesting ending with \u0027.\u0027","commit_id":"3bd5a4429aee3904645f6c20e4d03f580b0519f5"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"39330d04581e6e774cf4c623ac288f634c15061d","unresolved":false,"context_lines":[{"line_number":1590,"context_line":"        except exception.CinderException:"},{"line_number":1591,"context_line":"            # Don\u0027t let this cause further exceptions."},{"line_number":1592,"context_line":"            LOG.exception(_(\"Failed to error out relationship\"))"},{"line_number":1593,"context_line":""},{"line_number":1594,"context_line":""},{"line_number":1595,"context_line":"class CreateVolumeOnFinishTask(NotifyVolumeActionTask):"},{"line_number":1596,"context_line":"    \"\"\"On successful volume creation this will perform final volume actions."}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2F4Xc%3D","line":1593,"in_reply_to":"AAAAT3%2F%2FqOM%3D","updated":"2014-01-07 11:06:06.000000000","message":"Done","commit_id":"3bd5a4429aee3904645f6c20e4d03f580b0519f5"}],"cinder/volume/manager.py":[{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c5f39d324eedb4d75e41e1bb7b33ef0d52f5f636","unresolved":false,"context_lines":[{"line_number":360,"context_line":"            # Volume is still attached, need to detach first"},{"line_number":361,"context_line":"            raise exception.VolumeAttached(volume_id\u003dvolume_id)"},{"line_number":362,"context_line":"        if volume_ref[\u0027host\u0027] !\u003d self.host:"},{"line_number":363,"context_line":"            LOG.error(\"AVISHAY \" + self.host)"},{"line_number":364,"context_line":"            raise exception.InvalidVolume("},{"line_number":365,"context_line":"                reason\u003d_(\"volume is not local to this node\"))"},{"line_number":366,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2FqOA%3D","line":363,"updated":"2014-01-04 00:13:51.000000000","message":"Guessing this is debug you meant to remove?  :-)","commit_id":"3bd5a4429aee3904645f6c20e4d03f580b0519f5"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"39330d04581e6e774cf4c623ac288f634c15061d","unresolved":false,"context_lines":[{"line_number":360,"context_line":"            # Volume is still attached, need to detach first"},{"line_number":361,"context_line":"            raise exception.VolumeAttached(volume_id\u003dvolume_id)"},{"line_number":362,"context_line":"        if volume_ref[\u0027host\u0027] !\u003d self.host:"},{"line_number":363,"context_line":"            LOG.error(\"AVISHAY \" + self.host)"},{"line_number":364,"context_line":"            raise exception.InvalidVolume("},{"line_number":365,"context_line":"                reason\u003d_(\"volume is not local to this node\"))"},{"line_number":366,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2F4Ws%3D","line":363,"in_reply_to":"AAAAT3%2F%2FqOA%3D","updated":"2014-01-07 11:06:06.000000000","message":"Done","commit_id":"3bd5a4429aee3904645f6c20e4d03f580b0519f5"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c5f39d324eedb4d75e41e1bb7b33ef0d52f5f636","unresolved":false,"context_lines":[{"line_number":1055,"context_line":"                                                    update)"},{"line_number":1056,"context_line":"        except Exception:"},{"line_number":1057,"context_line":"            LOG.exception(_(\u0027Error swapping roles in replication relationship \u0027"},{"line_number":1058,"context_line":"                            \u0027%s\u0027) % relationship[\u0027id\u0027])"},{"line_number":1059,"context_line":"            update \u003d {\u0027status\u0027: \u0027error\u0027,"},{"line_number":1060,"context_line":"                      \u0027extended_status\u0027: \u0027Failed to swap replication roles.\u0027}"},{"line_number":1061,"context_line":"            self.db.replication_relationship_update(context,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2FqN4%3D","line":1058,"updated":"2014-01-04 00:13:51.000000000","message":"Suggest ending with \u0027.\u0027","commit_id":"3bd5a4429aee3904645f6c20e4d03f580b0519f5"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"39330d04581e6e774cf4c623ac288f634c15061d","unresolved":false,"context_lines":[{"line_number":1055,"context_line":"                                                    update)"},{"line_number":1056,"context_line":"        except Exception:"},{"line_number":1057,"context_line":"            LOG.exception(_(\u0027Error swapping roles in replication relationship \u0027"},{"line_number":1058,"context_line":"                            \u0027%s\u0027) % relationship[\u0027id\u0027])"},{"line_number":1059,"context_line":"            update \u003d {\u0027status\u0027: \u0027error\u0027,"},{"line_number":1060,"context_line":"                      \u0027extended_status\u0027: \u0027Failed to swap replication roles.\u0027}"},{"line_number":1061,"context_line":"            self.db.replication_relationship_update(context,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2F4Wg%3D","line":1058,"in_reply_to":"AAAAT3%2F%2FqN4%3D","updated":"2014-01-07 11:06:06.000000000","message":"Would rather not add period after relationship ID","commit_id":"3bd5a4429aee3904645f6c20e4d03f580b0519f5"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c5f39d324eedb4d75e41e1bb7b33ef0d52f5f636","unresolved":false,"context_lines":[{"line_number":1084,"context_line":""},{"line_number":1085,"context_line":"    @periodic_task.periodic_task"},{"line_number":1086,"context_line":"    def _update_replication_relationship_status(self, context):"},{"line_number":1087,"context_line":"        LOG.info(_(\"Updating replication relationship status\"))"},{"line_number":1088,"context_line":"        if not self.driver.initialized:"},{"line_number":1089,"context_line":"            if self.driver.configuration.config_group is None:"},{"line_number":1090,"context_line":"                config_group \u003d \u0027\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2FqN0%3D","line":1087,"updated":"2014-01-04 00:13:51.000000000","message":"Suggest ending with \u0027.\u0027","commit_id":"3bd5a4429aee3904645f6c20e4d03f580b0519f5"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"39330d04581e6e774cf4c623ac288f634c15061d","unresolved":false,"context_lines":[{"line_number":1084,"context_line":""},{"line_number":1085,"context_line":"    @periodic_task.periodic_task"},{"line_number":1086,"context_line":"    def _update_replication_relationship_status(self, context):"},{"line_number":1087,"context_line":"        LOG.info(_(\"Updating replication relationship status\"))"},{"line_number":1088,"context_line":"        if not self.driver.initialized:"},{"line_number":1089,"context_line":"            if self.driver.configuration.config_group is None:"},{"line_number":1090,"context_line":"                config_group \u003d \u0027\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2F4V0%3D","line":1087,"in_reply_to":"AAAAT3%2F%2FqN0%3D","updated":"2014-01-07 11:06:06.000000000","message":"Done","commit_id":"3bd5a4429aee3904645f6c20e4d03f580b0519f5"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c5f39d324eedb4d75e41e1bb7b33ef0d52f5f636","unresolved":false,"context_lines":[{"line_number":1107,"context_line":"                        context, relationship)"},{"line_number":1108,"context_line":"                except Exception as ex:"},{"line_number":1109,"context_line":"                    LOG.error(_(\"Error checking replication status for \""},{"line_number":1110,"context_line":"                                \"relationship %s\") % relationship[\u0027id\u0027])"},{"line_number":1111,"context_line":"                if model_update:"},{"line_number":1112,"context_line":"                    self.db.replication_relationship_update(context,"},{"line_number":1113,"context_line":"                                                            relationship[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2FqNw%3D","line":1110,"updated":"2014-01-04 00:13:51.000000000","message":"Suggest ending with \u0027.\u0027","commit_id":"3bd5a4429aee3904645f6c20e4d03f580b0519f5"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"39330d04581e6e774cf4c623ac288f634c15061d","unresolved":false,"context_lines":[{"line_number":1107,"context_line":"                        context, relationship)"},{"line_number":1108,"context_line":"                except Exception as ex:"},{"line_number":1109,"context_line":"                    LOG.error(_(\"Error checking replication status for \""},{"line_number":1110,"context_line":"                                \"relationship %s\") % relationship[\u0027id\u0027])"},{"line_number":1111,"context_line":"                if model_update:"},{"line_number":1112,"context_line":"                    self.db.replication_relationship_update(context,"},{"line_number":1113,"context_line":"                                                            relationship[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2F4Vc%3D","line":1110,"in_reply_to":"AAAAT3%2F%2FqNw%3D","updated":"2014-01-07 11:06:06.000000000","message":"Would rather not, same as above","commit_id":"3bd5a4429aee3904645f6c20e4d03f580b0519f5"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"08271007cda9fac26d83102d3096bc8da58f9639","unresolved":false,"context_lines":[{"line_number":1239,"context_line":"            utils.require_driver_initialized(self.driver)"},{"line_number":1240,"context_line":"        except exception.DriverNotInitialized:"},{"line_number":1241,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":1242,"context_line":"                self.db.volume_update(context, relationship[\u0027secondary_id\u0027],"},{"line_number":1243,"context_line":"                                      {\u0027status\u0027: \u0027error\u0027})"},{"line_number":1244,"context_line":"                update \u003d {\u0027status\u0027: \u0027error\u0027,"},{"line_number":1245,"context_line":"                          \u0027extended_status\u0027: \u0027Driver not initialized.\u0027}"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2Buhk%3D","line":1242,"updated":"2014-01-22 18:56:24.000000000","message":"cinder/volume/manager.py:1242:1: F821 undefined name \u0027relationship\u0027","commit_id":"bb7204b28dd785cac7d7f0aa9ee82af40f4dfe2e"},{"author":{"_account_id":7689,"name":"Bill Owen","email":"billowen@us.ibm.com","username":"billowen"},"change_message_id":"d4327aabf9ba250889854a5d944e772c5b31b51b","unresolved":false,"context_lines":[{"line_number":1303,"context_line":"                                                            relationship_id)"},{"line_number":1304,"context_line":"        try:"},{"line_number":1305,"context_line":"            self.driver.swap_replicas(context, relationship)"},{"line_number":1306,"context_line":"            update \u003d {\u0027primary_id\u0027: relationship[\u0027secondary_id\u0027],"},{"line_number":1307,"context_line":"                      \u0027secondary_id\u0027: relationship[\u0027primary_id\u0027]}"},{"line_number":1308,"context_line":"            self.db.replication_relationship_swap(context, relationship_id)"},{"line_number":1309,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F%2BEEs%3D","line":1306,"updated":"2014-01-30 15:06:30.000000000","message":"Is this instance of update dict used?","commit_id":"e5c61474752dcf28a6364e88ec271f3a97e2a5ce"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"3655409453eaebd84ca07be1e7c510eee6a912b3","unresolved":false,"context_lines":[{"line_number":1303,"context_line":"                                                            relationship_id)"},{"line_number":1304,"context_line":"        try:"},{"line_number":1305,"context_line":"            self.driver.swap_replicas(context, relationship)"},{"line_number":1306,"context_line":"            update \u003d {\u0027primary_id\u0027: relationship[\u0027secondary_id\u0027],"},{"line_number":1307,"context_line":"                      \u0027secondary_id\u0027: relationship[\u0027primary_id\u0027]}"},{"line_number":1308,"context_line":"            self.db.replication_relationship_swap(context, relationship_id)"},{"line_number":1309,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F95Aw%3D","line":1306,"in_reply_to":"AAAAUH%2F%2BEEs%3D","updated":"2014-02-02 19:44:10.000000000","message":"Done","commit_id":"e5c61474752dcf28a6364e88ec271f3a97e2a5ce"},{"author":{"_account_id":4418,"name":"Ronen Kat","email":"ronenkat@il.ibm.com","username":"ronenkat"},"change_message_id":"2aa590d2b435ec3c61e77ce03747f608bdd293ff","unresolved":false,"context_lines":[{"line_number":1360,"context_line":"                LOG.exception(_(\u0027volume %(vol)s: error updating model for \u0027"},{"line_number":1361,"context_line":"                                \u0027replica %(rep)s\u0027) % msg_dict)"},{"line_number":1362,"context_line":""},{"line_number":1363,"context_line":"    def swap_replicas(self, ctxt, relationship_id):"},{"line_number":1364,"context_line":"        \"\"\"Swaps roles of primary and secondary volumes in a relationship.\"\"\""},{"line_number":1365,"context_line":"        try:"},{"line_number":1366,"context_line":"            utils.require_driver_initialized(self.driver)"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAU3%2F%2F9nY%3D","line":1363,"updated":"2014-02-23 12:58:44.000000000","message":"Swap should send a notification","commit_id":"a4bdd50c8afe9b8b41bb2d4490e7c8d3f046404d"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"ac7002ab042c11bf8bc1dcf52612999a8facb84e","unresolved":false,"context_lines":[{"line_number":1360,"context_line":"                LOG.exception(_(\u0027volume %(vol)s: error updating model for \u0027"},{"line_number":1361,"context_line":"                                \u0027replica %(rep)s\u0027) % msg_dict)"},{"line_number":1362,"context_line":""},{"line_number":1363,"context_line":"    def swap_replicas(self, ctxt, relationship_id):"},{"line_number":1364,"context_line":"        \"\"\"Swaps roles of primary and secondary volumes in a relationship.\"\"\""},{"line_number":1365,"context_line":"        try:"},{"line_number":1366,"context_line":"            utils.require_driver_initialized(self.driver)"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAU3%2F%2F4kA%3D","line":1363,"in_reply_to":"AAAAU3%2F%2F9nY%3D","updated":"2014-02-24 17:02:52.000000000","message":"Added to API","commit_id":"a4bdd50c8afe9b8b41bb2d4490e7c8d3f046404d"}],"cinder/volume/rpcapi.py":[{"author":{"_account_id":4418,"name":"Ronen Kat","email":"ronenkat@il.ibm.com","username":"ronenkat"},"change_message_id":"2aa590d2b435ec3c61e77ce03747f608bdd293ff","unresolved":false,"context_lines":[{"line_number":225,"context_line":"                         version\u003d\u00271.15\u0027)"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"    def swap_replicas(self, ctxt, relationship):"},{"line_number":228,"context_line":"        host \u003d relationship[\u0027primary_volume\u0027][\u0027host\u0027]"},{"line_number":229,"context_line":"        return self.cast(ctxt,"},{"line_number":230,"context_line":"                         self.make_msg(\u0027swap_replicas\u0027,"},{"line_number":231,"context_line":"                                       relationship_id\u003drelationship[\u0027id\u0027]),"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAU3%2F%2F9no%3D","line":228,"updated":"2014-02-23 12:58:44.000000000","message":"Should be run on the secondary - the primary may be down","commit_id":"a4bdd50c8afe9b8b41bb2d4490e7c8d3f046404d"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"ac7002ab042c11bf8bc1dcf52612999a8facb84e","unresolved":false,"context_lines":[{"line_number":225,"context_line":"                         version\u003d\u00271.15\u0027)"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"    def swap_replicas(self, ctxt, relationship):"},{"line_number":228,"context_line":"        host \u003d relationship[\u0027primary_volume\u0027][\u0027host\u0027]"},{"line_number":229,"context_line":"        return self.cast(ctxt,"},{"line_number":230,"context_line":"                         self.make_msg(\u0027swap_replicas\u0027,"},{"line_number":231,"context_line":"                                       relationship_id\u003drelationship[\u0027id\u0027]),"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAU3%2F%2F4j0%3D","line":228,"in_reply_to":"AAAAU3%2F%2F9no%3D","updated":"2014-02-24 17:02:52.000000000","message":"Done","commit_id":"a4bdd50c8afe9b8b41bb2d4490e7c8d3f046404d"}]}
