)]}'
{"trove/guestagent/datastore/experimental/redis/manager.py":[{"author":{"_account_id":10453,"name":"octopuszhang","email":"zhangyf@rc.inesa.com","username":"1"},"change_message_id":"b395295f350c64dbfd1abf2b195518a529680aa1","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":33,"context_line":"CONF \u003d cfg.CONF"},{"line_number":34,"context_line":"MANAGER \u003d CONF.datastore_manager if CONF.datastore_manager else \u0027redis\u0027"},{"line_number":35,"context_line":"REPLICATION_STRATEGY \u003d CONF.get(MANAGER).replication_strategy"},{"line_number":36,"context_line":"REPLICATION_NAMESPACE \u003d CONF.get(MANAGER).replication_namespace"},{"line_number":37,"context_line":"REPLICATION_STRATEGY_CLASS \u003d get_replication_strategy(REPLICATION_STRATEGY,"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_147b3329","line":34,"updated":"2015-08-07 02:20:44.000000000","message":"MANAGER \u003d CONF.datastore_manager or redis？","commit_id":"73856a7e07c66e75f1f734b46ace85f2738900f3"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"40f6d0853738930658d71d73f81e2f26fa6b58db","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":33,"context_line":"CONF \u003d cfg.CONF"},{"line_number":34,"context_line":"MANAGER \u003d CONF.datastore_manager if CONF.datastore_manager else \u0027redis\u0027"},{"line_number":35,"context_line":"REPLICATION_STRATEGY \u003d CONF.get(MANAGER).replication_strategy"},{"line_number":36,"context_line":"REPLICATION_NAMESPACE \u003d CONF.get(MANAGER).replication_namespace"},{"line_number":37,"context_line":"REPLICATION_STRATEGY_CLASS \u003d get_replication_strategy(REPLICATION_STRATEGY,"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_a21ea55c","line":34,"in_reply_to":"1a4dcd0f_147b3329","updated":"2015-08-07 14:59:48.000000000","message":"Yeah, I like that syntax better.  Done.","commit_id":"73856a7e07c66e75f1f734b46ace85f2738900f3"}],"trove/taskmanager/manager.py":[{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"5b93f1f122484ff616dfc334810dfa34627d32a7","unresolved":false,"context_lines":[{"line_number":105,"context_line":"            exception_replicas \u003d []"},{"line_number":106,"context_line":"            for replica in replica_models:"},{"line_number":107,"context_line":"                try:"},{"line_number":108,"context_line":"                    replica.wait_for_txn(latest_txn_id)"},{"line_number":109,"context_line":"                    if replica.id !\u003d master_candidate.id:"},{"line_number":110,"context_line":"                        replica.detach_replica(old_master, for_failover\u003dTrue)"},{"line_number":111,"context_line":"                        replica.attach_replica(master_candidate)"}],"source_content_type":"text/x-python","patch_set":9,"id":"da20952f_42d6c428","side":"PARENT","line":108,"updated":"2015-09-01 04:32:07.000000000","message":"why was this removed?","commit_id":"f10f5d033a0c2428904558519498f4fed4ccaf4a"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"7dfd3a784da2bd378b245fd705485e3451504fd4","unresolved":false,"context_lines":[{"line_number":105,"context_line":"            exception_replicas \u003d []"},{"line_number":106,"context_line":"            for replica in replica_models:"},{"line_number":107,"context_line":"                try:"},{"line_number":108,"context_line":"                    replica.wait_for_txn(latest_txn_id)"},{"line_number":109,"context_line":"                    if replica.id !\u003d master_candidate.id:"},{"line_number":110,"context_line":"                        replica.detach_replica(old_master, for_failover\u003dTrue)"},{"line_number":111,"context_line":"                        replica.attach_replica(master_candidate)"}],"source_content_type":"text/x-python","patch_set":9,"id":"da20952f_a833e361","side":"PARENT","line":108,"in_reply_to":"da20952f_42d6c428","updated":"2015-09-01 16:18:22.000000000","message":"It was causing Redis to fail, and I checked with Morgan and it isn\u0027t necessary for mysql either (only the master candidate needs to do this, and it happens on line 93) - this could be considered overkill, and since it affected Redis, I removed it.","commit_id":"f10f5d033a0c2428904558519498f4fed4ccaf4a"}],"trove/tests/api/runners/replication_runners.py":[{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"6cf76260fda4422aa0f14efd3e292904b60c3807","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def assert_verify_replica_data(self, master_id):"},{"line_number":99,"context_line":"        # make sure we have the data we expect, but wait for it to get there"},{"line_number":100,"context_line":"        sleep(30)"},{"line_number":101,"context_line":"        replica_ids \u003d self._get_replica_set(master_id)"},{"line_number":102,"context_line":"        for replica_id in replica_ids:"},{"line_number":103,"context_line":"            replica_instance \u003d self._get_instance_info(replica_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa1b9901_7c04957d","line":100,"updated":"2015-08-17 23:33:52.000000000","message":"Hmm, this may be an instance variable - easy to override in case a different datastore needs more/less time.","commit_id":"451cbfcb8e8b5b433dab5cf0c6ad32d5090b7ea6"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"664099a04a8654f8c70b66a0cd1996715635dbfe","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def assert_verify_replica_data(self, master_id):"},{"line_number":99,"context_line":"        # make sure we have the data we expect, but wait for it to get there"},{"line_number":100,"context_line":"        sleep(30)"},{"line_number":101,"context_line":"        replica_ids \u003d self._get_replica_set(master_id)"},{"line_number":102,"context_line":"        for replica_id in replica_ids:"},{"line_number":103,"context_line":"            replica_instance \u003d self._get_instance_info(replica_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"da20952f_283e2028","line":100,"in_reply_to":"fa1b9901_7c04957d","updated":"2015-08-31 20:17:41.000000000","message":"I could add this into the helper class - good idea","commit_id":"451cbfcb8e8b5b433dab5cf0c6ad32d5090b7ea6"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"6cf76260fda4422aa0f14efd3e292904b60c3807","unresolved":false,"context_lines":[{"line_number":202,"context_line":"            expected_http_code\u003dexpected_http_code)"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    def assert_delete_instances("},{"line_number":205,"context_line":"            self, instance_ids, expected_last_state\u003d[\u0027SHUTDOWN\u0027],"},{"line_number":206,"context_line":"            expected_http_code\u003d202):"},{"line_number":207,"context_line":"        instance_ids \u003d (instance_ids if utils.is_collection(instance_ids)"},{"line_number":208,"context_line":"                        else [instance_ids])"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa1b9901_3c9ffd04","line":205,"range":{"start_line":205,"start_character":32,"end_line":205,"end_character":64},"updated":"2015-08-17 23:33:52.000000000","message":"I think the default value is not necessary here - it is set by the caller.","commit_id":"451cbfcb8e8b5b433dab5cf0c6ad32d5090b7ea6"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"664099a04a8654f8c70b66a0cd1996715635dbfe","unresolved":false,"context_lines":[{"line_number":202,"context_line":"            expected_http_code\u003dexpected_http_code)"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    def assert_delete_instances("},{"line_number":205,"context_line":"            self, instance_ids, expected_last_state\u003d[\u0027SHUTDOWN\u0027],"},{"line_number":206,"context_line":"            expected_http_code\u003d202):"},{"line_number":207,"context_line":"        instance_ids \u003d (instance_ids if utils.is_collection(instance_ids)"},{"line_number":208,"context_line":"                        else [instance_ids])"}],"source_content_type":"text/x-python","patch_set":9,"id":"da20952f_2825c007","line":205,"range":{"start_line":205,"start_character":32,"end_line":205,"end_character":64},"in_reply_to":"fa1b9901_3c9ffd04","updated":"2015-08-31 20:17:41.000000000","message":"Yes, you\u0027re right - I\u0027ll remove it","commit_id":"451cbfcb8e8b5b433dab5cf0c6ad32d5090b7ea6"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"5b93f1f122484ff616dfc334810dfa34627d32a7","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        self.report.log(\"Deleting a replication set: %s\" % master_id)"},{"line_number":224,"context_line":"        replica_ids \u003d self._get_replica_set(master_id)"},{"line_number":225,"context_line":"        self.assert_delete_instances(replica_ids, expected_last_state,"},{"line_number":226,"context_line":"                                     expected_http_code)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"class RedisReplicationRunner(ReplicationRunner):"}],"source_content_type":"text/x-python","patch_set":9,"id":"da20952f_02aa0c85","line":226,"updated":"2015-09-01 04:32:07.000000000","message":"seems like the pattern for these are are just all making multiple calls just to get to the test. this seems like overkill.","commit_id":"451cbfcb8e8b5b433dab5cf0c6ad32d5090b7ea6"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"916034ab586ea095df93c7d535d35208d005fcd0","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        self.report.log(\"Deleting a replication set: %s\" % master_id)"},{"line_number":224,"context_line":"        replica_ids \u003d self._get_replica_set(master_id)"},{"line_number":225,"context_line":"        self.assert_delete_instances(replica_ids, expected_last_state,"},{"line_number":226,"context_line":"                                     expected_http_code)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"class RedisReplicationRunner(ReplicationRunner):"}],"source_content_type":"text/x-python","patch_set":9,"id":"da20952f_e5eb4177","line":226,"in_reply_to":"da20952f_02aa0c85","updated":"2015-09-01 16:22:09.000000000","message":"It was designed this was to allow a descendant class to override just the part that it needed to (for example, just changing the list of expected states) and the rest of the code wouldn\u0027t need changing.  As it turned out, it wasn\u0027t required nearly as much as we originally thought (most specifically in MongoDB negative cluster actions), but the pattern is still there ...","commit_id":"451cbfcb8e8b5b433dab5cf0c6ad32d5090b7ea6"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"50d18e53b1e2602de1926b5f771c2042adc5a80b","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        self.report.log(\"Deleting a replication set: %s\" % master_id)"},{"line_number":224,"context_line":"        replica_ids \u003d self._get_replica_set(master_id)"},{"line_number":225,"context_line":"        self.assert_delete_instances(replica_ids, expected_last_state,"},{"line_number":226,"context_line":"                                     expected_http_code)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"class RedisReplicationRunner(ReplicationRunner):"}],"source_content_type":"text/x-python","patch_set":9,"id":"da20952f_e9ac6a37","line":226,"in_reply_to":"da20952f_02aa0c85","updated":"2015-09-01 22:59:03.000000000","message":"It was designed this way to facilitate overriding by descendant classes.  Ultimately this wasn\u0027t as big an issue as originally thought (it is used in MongoDB negative tests), so I agree it appears to be overkill, however the pattern is there ...","commit_id":"451cbfcb8e8b5b433dab5cf0c6ad32d5090b7ea6"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"6cf76260fda4422aa0f14efd3e292904b60c3807","unresolved":false,"context_lines":[{"line_number":228,"context_line":""},{"line_number":229,"context_line":"class RedisReplicationRunner(ReplicationRunner):"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    # TODO(peterstac) - Most of this could be refactored into a helper mixin"},{"line_number":232,"context_line":"    LOAD_RECORD_SIZE \u003d 1000"},{"line_number":233,"context_line":"    KEY_PATTERN \u003d \u0027user:%s\u0027"},{"line_number":234,"context_line":"    VALUE_PATTERN \u003d \u0027id:%s\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa1b9901_bc2f8da0","line":231,"updated":"2015-08-17 23:33:52.000000000","message":"+1: I agree. Plus, see my comments on the backup patch set.","commit_id":"451cbfcb8e8b5b433dab5cf0c6ad32d5090b7ea6"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"664099a04a8654f8c70b66a0cd1996715635dbfe","unresolved":false,"context_lines":[{"line_number":228,"context_line":""},{"line_number":229,"context_line":"class RedisReplicationRunner(ReplicationRunner):"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    # TODO(peterstac) - Most of this could be refactored into a helper mixin"},{"line_number":232,"context_line":"    LOAD_RECORD_SIZE \u003d 1000"},{"line_number":233,"context_line":"    KEY_PATTERN \u003d \u0027user:%s\u0027"},{"line_number":234,"context_line":"    VALUE_PATTERN \u003d \u0027id:%s\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"da20952f_0871dc0e","line":231,"in_reply_to":"fa1b9901_bc2f8da0","updated":"2015-08-31 20:17:41.000000000","message":"Done - code moved to helper class (in the backup changeset)","commit_id":"451cbfcb8e8b5b433dab5cf0c6ad32d5090b7ea6"}],"trove/tests/int_tests.py":[{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"817517dc327bd390e80eb08958a2b603b6d65d26","unresolved":false,"context_lines":[{"line_number":128,"context_line":"replication_groups \u003d list(datastore_groups)"},{"line_number":129,"context_line":"replication_groups.extend([replication_group.GROUP])"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"register([\"redis\", \"cassandra\", \"couchbase\", \"postgresql\", \"mysql_blackbox\"],"},{"line_number":132,"context_line":"         instance_actions_groups)"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"register(\"mongodb\","}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_10574d03","line":131,"updated":"2015-08-10 16:10:29.000000000","message":"I think Redis is registered on line 138.","commit_id":"5b537a970b4e9c82d53d93553527cee0b1e5fd00"}]}
