def _override_master_to_point_in_time_after_operation(self, op_method): old_master_inst_id = utils.get_instance_id_bytenant(DBInstanceType.MASTER) master = utils.get_builtin_instance(old_master_inst_id) master_vid = master.virtual_instance_id # Prepare data before resize. db_count = 100 utils.generate_databases(master_vid, count = db_count) utils.check_generated_databases(master_vid, count = db_count) time.sleep(3) dt1 = datetime.datetime.now() time1 = dt1.strftime('%Y-%m-%d %H:%M:%S') def _get_restorable_time(sleep = None): if sleep != None: time.sleep(sleep) restorable_time = utils.get_restorable_time(master_vid) return restorable_time before_rt = _get_restorable_time(30) op_method() after_op_master = utils.get_builtin_instance(master_vid) after_rt = _get_restorable_time(30) assert before_rt.begin == after_rt.begin and after_rt.end > before_rt.end, \ ("before: [%s, %s], after: [%s, %s]" % (before_rt.begin, before_rt.end, after_rt.begin, after_rt.end)) # Clear data after resize. utils.clear_generated_databases(master_vid, count = db_count) utils.check_generated_databases(master_vid, count = 0) # Restore & check data correctness. utils.override_with_backup_byclient(master_vid, None, time1) utils.check_server_deleted(after_op_master.id, DBInstanceType.PENDING, timeout = RESTORE_TIME_OUT) utils.check_generated_databases(master_vid, count = db_count)
def override_with_backup(self, instance_id=None): self.inst_id = instance_id if not self.inst_id: self.create() self.inst_id = utils.get_instance_id_bytenant(DBInstanceType.MASTER) old_master_instance = utils.get_builtin_instance(self.inst_id) old_group_id = old_master_instance.group_id old_adm_user_1 = utils.check_mysql_adminuser(self.inst_id) backup1 = utils.create_backup_byclient(self.inst_id) utils.check_backup_status(backup1.id) new_password = "******" + str(random.randint(0, 100)) utils.reset_admin_user_byclient(self.inst_id, new_password) new_adm_user_1 = utils.check_mysql_adminuser(self.inst_id) assert old_adm_user_1['_password'] != new_adm_user_1['_password'], \ (old_adm_user_1['_password'], new_adm_user_1['_password']) backup2 = utils.create_backup_byclient(self.inst_id) utils.check_backup_status(backup2.id) utils.override_with_backup_byclient(self.inst_id, backup1.id) utils.check_server_deleted(old_master_instance.id, type = DBInstanceType.PENDING, timeout = 600) self.inst_id = utils.get_instance_id(old_group_id, DBInstanceType.MASTER) new_master_instance = utils.get_builtin_instance(self.inst_id) self.dbslave_id = utils.get_instance_id(old_group_id, DBInstanceType.STANDBY) self.vip_id = utils.get_vip_id(self.inst_id) self.group_id = new_master_instance.group_id self.validate() new_adm_user_2 = utils.check_mysql_adminuser(self.inst_id) assert old_adm_user_1['_password'] == new_adm_user_2['_password'], \ (old_adm_user_1['_password'], new_adm_user_2['_password'])
def override_to_point_in_time(self): self.create() old_master_inst = utils.get_builtin_instance(self.inst_id) master_vid = old_master_inst.virtual_instance_id db_count = 100 utils.generate_databases(self.inst_id, count = db_count) utils.check_generated_databases(self.inst_id, count = db_count) time.sleep(3) time1 = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') utils.clear_generated_databases(self.inst_id, count = db_count) time.sleep(3) dt2 = datetime.datetime.now() time2 = dt2.strftime('%Y-%m-%d %H:%M:%S') while True: restorable_time = utils.get_restorable_time(self.inst_id) dt = datetime.datetime.strptime(restorable_time.end, '%Y-%m-%d %H:%M:%S') if dt > dt2: break time.sleep(3) utils.override_with_backup_byclient(master_vid, None, time1) utils.check_server_deleted(old_master_inst.id, DBInstanceType.PENDING, timeout = RESTORE_TIME_OUT) new_master_inst1 = utils.get_builtin_instance(master_vid) self.inst_id = new_master_inst1.id utils.check_generated_databases(self.inst_id, count = db_count) time.sleep(3) utils.override_with_backup_byclient(master_vid, None, time2) utils.check_server_deleted(self.inst_id, DBInstanceType.PENDING, timeout = RESTORE_TIME_OUT) utils.check_generated_databases(master_vid, count = 0) self.inst_id = utils.get_instance_id(self.group_id, DBInstanceType.MASTER) self.dbslave_id = utils.get_instance_id(self.group_id, DBInstanceType.STANDBY) self.validate()