)]}'
{"trove/common/cfg.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"d6aa4c94d2c661a16e13d52dda032815a6ba8968","unresolved":false,"context_lines":[{"line_number":306,"context_line":"    cfg.StrOpt(\u0027replication_namespace\u0027,"},{"line_number":307,"context_line":"               default\u003d\u0027trove.guestagent.strategies.replication.mysql_binlog\u0027,"},{"line_number":308,"context_line":"               help\u003d\u0027Namespace to load replication strategies from.\u0027),"},{"line_number":309,"context_line":"    cfg.StrOpt(\u0027replication_user\u0027, default\u003d\u0027slave_user\u0027,"},{"line_number":310,"context_line":"               help\u003d\u0027Userid for replication slave.\u0027, secret\u003dTrue),"},{"line_number":311,"context_line":"    cfg.StrOpt(\u0027replication_password\u0027, default\u003d\u0027NETOU7897NNLOU\u0027,"},{"line_number":312,"context_line":"               help\u003d\u0027Password for replication slave user.\u0027, secret\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_7eda254c","side":"PARENT","line":309,"updated":"2014-09-11 21:04:03.000000000","message":"you can\u0027t just delete it, first you need to mark it as deprecated, and after first milestone you\u0027ll be able to delete it from code","commit_id":"70417f0b1d411343ab552f32bc4b12ad9724e9d3"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"2ecdb8c59849a4a12c56413b58a04b7c2b190d0f","unresolved":false,"context_lines":[{"line_number":306,"context_line":"    cfg.StrOpt(\u0027replication_namespace\u0027,"},{"line_number":307,"context_line":"               default\u003d\u0027trove.guestagent.strategies.replication.mysql_binlog\u0027,"},{"line_number":308,"context_line":"               help\u003d\u0027Namespace to load replication strategies from.\u0027),"},{"line_number":309,"context_line":"    cfg.StrOpt(\u0027replication_user\u0027, default\u003d\u0027slave_user\u0027,"},{"line_number":310,"context_line":"               help\u003d\u0027Userid for replication slave.\u0027, secret\u003dTrue),"},{"line_number":311,"context_line":"    cfg.StrOpt(\u0027replication_password\u0027, default\u003d\u0027NETOU7897NNLOU\u0027,"},{"line_number":312,"context_line":"               help\u003d\u0027Password for replication slave user.\u0027, secret\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_ac6c18d1","side":"PARENT","line":309,"in_reply_to":"fa98f980_7eda254c","updated":"2014-09-15 17:38:13.000000000","message":"I thought that since no one has used it first, we could just delete it.  Checked with SlickNik and he concurs.","commit_id":"70417f0b1d411343ab552f32bc4b12ad9724e9d3"}],"trove/guestagent/datastore/mysql/manager.py":[{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"2fbc6ee92dc031d0224711c5eabd1d1c47748152","unresolved":false,"context_lines":[{"line_number":277,"context_line":"        replica_info \u003d replication.detach_slave(app)"},{"line_number":278,"context_line":"        return replica_info"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"    def release_replica(self, context, replica_info):"},{"line_number":281,"context_line":"        LOG.debug(\"Releasing replica from master.\")"},{"line_number":282,"context_line":"        replication \u003d REPLICATION_STRATEGY_CLASS(context)"},{"line_number":283,"context_line":"        replication.release_replica(MySqlAdmin(), replica_info)"}],"source_content_type":"text/x-python","patch_set":2,"id":"da9df570_1abb33e6","line":280,"updated":"2014-09-23 19:38:58.000000000","message":"i have many bugs to go through, so i don\u0027t have the time to understand why we\u0027re introducing a \"release_replica\" op to deal with randomized user/passwords? either this is unoptimally named, or something unrelated to the bug is getting sneaked in.","commit_id":"f55c6e6dbaa47670b4d037a76f58ee2defe0cbfe"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"e0372b296b8c7a794e59b7d2de80dd6581db7853","unresolved":false,"context_lines":[{"line_number":277,"context_line":"        replica_info \u003d replication.detach_slave(app)"},{"line_number":278,"context_line":"        return replica_info"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"    def release_replica(self, context, replica_info):"},{"line_number":281,"context_line":"        LOG.debug(\"Releasing replica from master.\")"},{"line_number":282,"context_line":"        replication \u003d REPLICATION_STRATEGY_CLASS(context)"},{"line_number":283,"context_line":"        replication.release_replica(MySqlAdmin(), replica_info)"}],"source_content_type":"text/x-python","patch_set":2,"id":"baa201ad_fb520a12","line":280,"in_reply_to":"baa201ad_97abb488","updated":"2014-09-30 21:39:52.000000000","message":"maybe release_replica_from_source ?","commit_id":"f55c6e6dbaa47670b4d037a76f58ee2defe0cbfe"},{"author":{"_account_id":5293,"name":"Nikhil","email":"SlickNik@gmail.com","username":"slicknik"},"change_message_id":"014f6a5c5c0b799fe16110d6f6f32d0fb31a389f","unresolved":false,"context_lines":[{"line_number":277,"context_line":"        replica_info \u003d replication.detach_slave(app)"},{"line_number":278,"context_line":"        return replica_info"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"    def release_replica(self, context, replica_info):"},{"line_number":281,"context_line":"        LOG.debug(\"Releasing replica from master.\")"},{"line_number":282,"context_line":"        replication \u003d REPLICATION_STRATEGY_CLASS(context)"},{"line_number":283,"context_line":"        replication.release_replica(MySqlAdmin(), replica_info)"}],"source_content_type":"text/x-python","patch_set":2,"id":"da9df570_5a49d7b5","line":280,"in_reply_to":"da9df570_1abb33e6","updated":"2014-09-26 22:59:38.000000000","message":"I don\u0027t think anything is being sneaked in here. :)\n\nI think it\u0027s just a case of it being a not so optimally named function. I dug through and all this function is doing is cleaning up the slave user account that was created when replication was set up. Perhaps we should rename the function to reflect what it is doing. Perhaps name it something like clean_up_replica_account?","commit_id":"f55c6e6dbaa47670b4d037a76f58ee2defe0cbfe"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"97a712fe3c1eabe982a1331f89b3642dd6d20d3a","unresolved":false,"context_lines":[{"line_number":277,"context_line":"        replica_info \u003d replication.detach_slave(app)"},{"line_number":278,"context_line":"        return replica_info"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"    def release_replica(self, context, replica_info):"},{"line_number":281,"context_line":"        LOG.debug(\"Releasing replica from master.\")"},{"line_number":282,"context_line":"        replication \u003d REPLICATION_STRATEGY_CLASS(context)"},{"line_number":283,"context_line":"        replication.release_replica(MySqlAdmin(), replica_info)"}],"source_content_type":"text/x-python","patch_set":2,"id":"baa201ad_97abb488","line":280,"in_reply_to":"da9df570_5a49d7b5","updated":"2014-09-29 18:56:11.000000000","message":"The idea was to have the method not be specific to MySQL\u0027s implementation, as it is called from Taskmanager, but rather to be a general purpose hook for any cleanup on the master when a slave is detached.  I wasn\u0027t especially fond of the name myself, but it was the best I could come up with.  I would have liked to call it something like notify_slave_detachment(), but that sort of naming convention doesn\u0027t seem to be used anywhere in OpenStack that I\u0027ve seen.","commit_id":"f55c6e6dbaa47670b4d037a76f58ee2defe0cbfe"}],"trove/guestagent/strategies/replication/mysql_binlog.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"d6aa4c94d2c661a16e13d52dda032815a6ba8968","unresolved":false,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        while replication_user is None:"},{"line_number":81,"context_line":"            try:"},{"line_number":82,"context_line":"                mysql_user.name \u003d \u0027slave_\u0027 + str(random.randint(1, 1000000))"},{"line_number":83,"context_line":"                MySqlAdmin().create_user([mysql_user.serialize()])"},{"line_number":84,"context_line":"                LOG.debug(\"Trying to create replication user \" +"},{"line_number":85,"context_line":"                          mysql_user.name)"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_7ea8658c","line":82,"updated":"2014-09-11 21:04:03.000000000","message":"not truly unique, at all, you need to use UUID instead","commit_id":"467bb08f5375e1beebad438e60b29e07b982742a"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"2ecdb8c59849a4a12c56413b58a04b7c2b190d0f","unresolved":false,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        while replication_user is None:"},{"line_number":81,"context_line":"            try:"},{"line_number":82,"context_line":"                mysql_user.name \u003d \u0027slave_\u0027 + str(random.randint(1, 1000000))"},{"line_number":83,"context_line":"                MySqlAdmin().create_user([mysql_user.serialize()])"},{"line_number":84,"context_line":"                LOG.debug(\"Trying to create replication user \" +"},{"line_number":85,"context_line":"                          mysql_user.name)"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_412740b6","line":82,"in_reply_to":"fa98f980_7ea8658c","updated":"2014-09-15 17:38:13.000000000","message":"Can\u0027t use UUID - it\u0027s too long.  I know it\u0027s not unique, that\u0027s why there\u0027s code to retry if it fails.","commit_id":"467bb08f5375e1beebad438e60b29e07b982742a"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"d6aa4c94d2c661a16e13d52dda032815a6ba8968","unresolved":false,"context_lines":[{"line_number":90,"context_line":"            except Exception:"},{"line_number":91,"context_line":"                retry_count +\u003d 1"},{"line_number":92,"context_line":"                if retry_count \u003e 5:"},{"line_number":93,"context_line":"                    LOG.error(_(\"Replication user retry count exceeded\"))"},{"line_number":94,"context_line":"                    raise"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        return replication_user"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_be956d41","line":93,"updated":"2014-09-11 21:04:03.000000000","message":"missing period","commit_id":"467bb08f5375e1beebad438e60b29e07b982742a"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"fd26d5c8c9a4f50a5b004564c2d5331f09b8c3ef","unresolved":false,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        while replication_user is None:"},{"line_number":81,"context_line":"            try:"},{"line_number":82,"context_line":"                mysql_user.name \u003d \u0027slave_\u0027 + str(random.randint(1, 1000000))"},{"line_number":83,"context_line":"                MySqlAdmin().create_user([mysql_user.serialize()])"},{"line_number":84,"context_line":"                LOG.debug(\"Trying to create replication user \" +"},{"line_number":85,"context_line":"                          mysql_user.name)"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa98f980_99cdbcba","line":82,"updated":"2014-09-16 14:36:47.000000000","message":"Actually, we can use UUID, but we need to cut off specific lenght.\nTo be clear, cutted UUID would be reproduced with probability that can be calculated with next formula:\n \n     MAX_PROB \u003d 1/2^-8*(len(UUID) - redundant_lenth)\n\nand this probability is much lower than\n\n     1/1000000\n\nso, i\u0027d suggest to use UUIDs intead of string representation of Integer.","commit_id":"f55c6e6dbaa47670b4d037a76f58ee2defe0cbfe"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"5a84e54a902a6844b56cec9d4688008b009a8201","unresolved":false,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        while replication_user is None:"},{"line_number":81,"context_line":"            try:"},{"line_number":82,"context_line":"                mysql_user.name \u003d \u0027slave_\u0027 + str(random.randint(1, 1000000))"},{"line_number":83,"context_line":"                MySqlAdmin().create_user([mysql_user.serialize()])"},{"line_number":84,"context_line":"                LOG.debug(\"Trying to create replication user \" +"},{"line_number":85,"context_line":"                          mysql_user.name)"}],"source_content_type":"text/x-python","patch_set":2,"id":"da9df570_4caa8e1a","line":82,"in_reply_to":"da9df570_82db641a","updated":"2014-09-22 20:05:43.000000000","message":"i\u0027m up for substr(uuid)","commit_id":"f55c6e6dbaa47670b4d037a76f58ee2defe0cbfe"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"00490e5e40772fb76cd32c797a51bae7eb43a64a","unresolved":false,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        while replication_user is None:"},{"line_number":81,"context_line":"            try:"},{"line_number":82,"context_line":"                mysql_user.name \u003d \u0027slave_\u0027 + str(random.randint(1, 1000000))"},{"line_number":83,"context_line":"                MySqlAdmin().create_user([mysql_user.serialize()])"},{"line_number":84,"context_line":"                LOG.debug(\"Trying to create replication user \" +"},{"line_number":85,"context_line":"                          mysql_user.name)"}],"source_content_type":"text/x-python","patch_set":2,"id":"da9df570_82db641a","line":82,"in_reply_to":"da9df570_ad2ce14b","updated":"2014-09-22 18:11:50.000000000","message":"Sorry, can do UUID but not UUID of replica source as it needs to be different for each replica.  Can do substr(random UUID), but it needs to be made unique somehow.","commit_id":"f55c6e6dbaa47670b4d037a76f58ee2defe0cbfe"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"cc4ffd3d76d4da126f8e9f6c98031428de197add","unresolved":false,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        while replication_user is None:"},{"line_number":81,"context_line":"            try:"},{"line_number":82,"context_line":"                mysql_user.name \u003d \u0027slave_\u0027 + str(random.randint(1, 1000000))"},{"line_number":83,"context_line":"                MySqlAdmin().create_user([mysql_user.serialize()])"},{"line_number":84,"context_line":"                LOG.debug(\"Trying to create replication user \" +"},{"line_number":85,"context_line":"                          mysql_user.name)"}],"source_content_type":"text/x-python","patch_set":2,"id":"da9df570_ad2ce14b","line":82,"in_reply_to":"da9df570_d339d6d9","updated":"2014-09-22 14:13:25.000000000","message":"OK, I can do that, but how do I make it unique?","commit_id":"f55c6e6dbaa47670b4d037a76f58ee2defe0cbfe"},{"author":{"_account_id":5293,"name":"Nikhil","email":"SlickNik@gmail.com","username":"slicknik"},"change_message_id":"855519f6e07f354bc5a4064b4333476f9fb2ddcf","unresolved":false,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        while replication_user is None:"},{"line_number":81,"context_line":"            try:"},{"line_number":82,"context_line":"                mysql_user.name \u003d \u0027slave_\u0027 + str(random.randint(1, 1000000))"},{"line_number":83,"context_line":"                MySqlAdmin().create_user([mysql_user.serialize()])"},{"line_number":84,"context_line":"                LOG.debug(\"Trying to create replication user \" +"},{"line_number":85,"context_line":"                          mysql_user.name)"}],"source_content_type":"text/x-python","patch_set":2,"id":"da9df570_d339d6d9","line":82,"in_reply_to":"fa98f980_99cdbcba","updated":"2014-09-22 03:28:50.000000000","message":"Rather than choosing a random UUID, would it make sense to use something like the ID of the replica source? (or first however many characters of that ID?) That would make it easier to correlate the two.","commit_id":"f55c6e6dbaa47670b4d037a76f58ee2defe0cbfe"}],"trove/taskmanager/manager.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"d6aa4c94d2c661a16e13d52dda032815a6ba8968","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def detach_replica(self, context, instance_id):"},{"line_number":62,"context_line":"        slave \u003d models.BuiltInstanceTasks.load(context, instance_id)"},{"line_number":63,"context_line":"        master_id \u003d slave.slave_of_id"},{"line_number":64,"context_line":"        master \u003d models.BuiltInstanceTasks.load(context, master_id)"},{"line_number":65,"context_line":"        slave.detach_replica(master)"},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_3e909d42","line":63,"updated":"2014-09-11 21:04:03.000000000","message":"don\u0027t see need to use one more variable to for master id.","commit_id":"467bb08f5375e1beebad438e60b29e07b982742a"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"2ecdb8c59849a4a12c56413b58a04b7c2b190d0f","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def detach_replica(self, context, instance_id):"},{"line_number":62,"context_line":"        slave \u003d models.BuiltInstanceTasks.load(context, instance_id)"},{"line_number":63,"context_line":"        master_id \u003d slave.slave_of_id"},{"line_number":64,"context_line":"        master \u003d models.BuiltInstanceTasks.load(context, master_id)"},{"line_number":65,"context_line":"        slave.detach_replica(master)"},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_e13754e1","line":63,"in_reply_to":"fa98f980_3e909d42","updated":"2014-09-15 17:38:13.000000000","message":"Done for clarity.","commit_id":"467bb08f5375e1beebad438e60b29e07b982742a"}],"trove/taskmanager/models.py":[{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"0bdd63a4047bb1a939e34cdca17044881a1caad4","unresolved":false,"context_lines":[{"line_number":932,"context_line":"            LOG.exception(_(\"Failed to detach replica %s.\") % self.id)"},{"line_number":933,"context_line":""},{"line_number":934,"context_line":"    def release_replica(self, replica_info):"},{"line_number":935,"context_line":"        LOG.debug(\"Calling detach_replica on %s\" % self.id)"},{"line_number":936,"context_line":"        self.guest.release_replica(replica_info)"},{"line_number":937,"context_line":""},{"line_number":938,"context_line":"    def reboot(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_672de9fd","line":935,"updated":"2014-09-15 18:37:33.000000000","message":"calling release replica","commit_id":"467bb08f5375e1beebad438e60b29e07b982742a"}]}
