From e402d779c7cb2cf08e24bbfc2f7093097c4bd519 Mon Sep 17 00:00:00 2001 From: Sergei Petrunia Date: Thu, 25 Jan 2018 14:08:11 +0300 Subject: [PATCH 01/18] Import myrocks_hotbackup from the upstream - They have it in scripts/myrocks_hotbackup, so we don't get it during merges. this will be fixed - OTOH the testsuite is already being merged into storage/rocksdb/mysql-test/rocksdb (but isn't run due to using many upstream-only features) --- storage/rocksdb/myrocks_hotbackup | 686 ++++++++++++++++++++++++++++++ 1 file changed, 686 insertions(+) create mode 100755 storage/rocksdb/myrocks_hotbackup diff --git a/storage/rocksdb/myrocks_hotbackup b/storage/rocksdb/myrocks_hotbackup new file mode 100755 index 00000000000..cb10bb902c0 --- /dev/null +++ b/storage/rocksdb/myrocks_hotbackup @@ -0,0 +1,686 @@ +#!/usr/bin/env python + +from __future__ import division +from optparse import OptionParser +import collections +import signal +import os +import stat +import sys +import re +import commands +import subprocess +import logging +import logging.handlers +import time +import datetime +import shutil +import traceback +import tempfile + +import MySQLdb +import MySQLdb.connections +from MySQLdb import OperationalError, ProgrammingError + +logger = None +opts = None +rocksdb_files = ['MANIFEST', 'CURRENT', 'OPTIONS'] +rocksdb_data_suffix = '.sst' +rocksdb_wal_suffix = '.log' +exclude_files = ['master.info', 'relay-log.info', 'worker-relay-log.info', + 'auto.cnf', 'gaplock.log', 'ibdata', 'ib_logfile', '.trash'] +wdt_bin = 'wdt' + +def is_manifest(fname): + for m in rocksdb_files: + if fname.startswith(m): + return True + return False + +class Writer(object): + a = None + def __init__(self): + a = None + +class StreamWriter(Writer): + stream_cmd= '' + + def __init__(self, stream_option): + super(StreamWriter, self).__init__() + if stream_option == 'tar': + self.stream_cmd= 'tar chf -' + elif stream_option == 'xbstream': + self.stream_cmd= 'xbstream -c' + else: + raise Exception("Only tar or xbstream is supported as streaming option.") + + def write(self, file_name): + rc= os.system(self.stream_cmd + " " + file_name) + if (rc != 0): + raise Exception("Got error on stream write: " + str(rc) + " " + file_name) + + +class MiscFilesProcessor(): + datadir = None + wildcard = r'.*\.[frm|MYD|MYI|MAD|MAI|MRG|TRG|TRN|ARM|ARZ|CSM|CSV|opt|par]' + regex = None + start_backup_time = None + skip_check_frm_timestamp = None + + def __init__(self, datadir, skip_check_frm_timestamp, start_backup_time): + self.datadir = datadir + self.regex = re.compile(self.wildcard) + self.skip_check_frm_timestamp = skip_check_frm_timestamp + self.start_backup_time = start_backup_time + + def process_db(self, db): + # do nothing + pass + + def process_file(self, path): + # do nothing + pass + + def check_frm_timestamp(self, fname, path): + if not self.skip_check_frm_timestamp and fname.endswith('.frm'): + if os.path.getmtime(path) > self.start_backup_time: + logger.error('FRM file %s was updated after starting backups. ' + 'Schema could have changed and the resulting copy may ' + 'not be valid. Aborting. ' + '(backup time: %s, file modifled time: %s)', + path, datetime.datetime.fromtimestamp(self.start_backup_time).strftime('%Y-%m-%d %H:%M:%S'), + datetime.datetime.fromtimestamp(os.path.getmtime(path)).strftime('%Y-%m-%d %H:%M:%S')) + raise Exception("Inconsistent frm file timestamp"); + + def process(self): + os.chdir(self.datadir) + for db in self.get_databases(): + logger.info("Starting MySQL misc file traversal from database %s..", db) + self.process_db(db) + for f in self.get_files(db): + if self.match(f): + rel_path = os.path.join(db, f) + self.check_frm_timestamp(f, rel_path) + self.process_file(rel_path) + logger.info("Traversing misc files from data directory..") + for f in self.get_files(""): + should_skip = False + for e in exclude_files: + if f.startswith(e) or f.endswith(e): + logger.info("Skipping %s", f) + should_skip = True + break + if not should_skip: + self.process_file(f) + + def match(self, filename): + if self.regex.match(filename): + return True + else: + return False + + def get_databases(self): + dbs = [] + dirs = [ d for d in os.listdir(self.datadir) \ + if not os.path.isfile(os.path.join(self.datadir,d))] + for db in dirs: + if not db.startswith('.') and not self._is_socket(db): + dbs.append(db) + return dbs + + def get_files(self, db): + dbdir = self.datadir + "/" + db + return [ f for f in os.listdir(dbdir) \ + if os.path.isfile(os.path.join(dbdir,f))] + + def _is_socket(self, item): + mode = os.stat(os.path.join(self.datadir, item)).st_mode + if stat.S_ISSOCK(mode): + return True + return False + + +class MySQLBackup(MiscFilesProcessor): + writer = None + + def __init__(self, datadir, writer, skip_check_frm_timestamp, start_backup_time): + MiscFilesProcessor.__init__(self, datadir, skip_check_frm_timestamp, start_backup_time) + self.writer = writer + + def process_file(self, fname): # overriding base class + self.writer.write(fname) + + +class MiscFilesLinkCreator(MiscFilesProcessor): + snapshot_dir = None + + def __init__(self, datadir, snapshot_dir, skip_check_frm_timestamp, start_backup_time): + MiscFilesProcessor.__init__(self, datadir, skip_check_frm_timestamp, start_backup_time) + self.snapshot_dir = snapshot_dir + + def process_db(self, db): + snapshot_sub_dir = os.path.join(self.snapshot_dir, db) + os.makedirs(snapshot_sub_dir) + + def process_file(self, path): + dst_path = os.path.join(self.snapshot_dir, path) + os.link(path, dst_path) + + +# RocksDB backup +class RocksDBBackup(): + source_dir = None + writer = None + # sst files sent in this backup round + sent_sst = {} + # target sst files in this backup round + target_sst = {} + # sst files sent in all backup rounds + total_sent_sst= {} + # sum of sst file size sent in this backup round + sent_sst_size = 0 + # sum of target sst file size in this backup round + # if sent_sst_size becomes equal to target_sst_size, + # it means the backup round finished backing up all sst files + target_sst_size = 0 + # sum of all sst file size sent all backup rounds + total_sent_sst_size= 0 + # sum of all target sst file size from all backup rounds + total_target_sst_size = 0 + show_progress_size_interval= 1073741824 # 1GB + wal_files= [] + manifest_files= [] + finished= False + + def __init__(self, source_dir, writer, prev): + self.source_dir = source_dir + self.writer = writer + os.chdir(self.source_dir) + self.init_target_files(prev) + + def init_target_files(self, prev): + sst = {} + self.sent_sst = {} + self.target_sst= {} + self.total_sent_sst = {} + self.sent_sst_size = 0 + self.target_sst_size = 0 + self.total_sent_sst_size= 0 + self.total_target_sst_size= 0 + self.wal_files= [] + self.manifest_files= [] + + for f in os.listdir(self.source_dir): + if f.endswith(rocksdb_data_suffix): + # exactly the same file (same size) was sent in previous backup rounds + if prev is not None and f in prev.total_sent_sst and int(os.stat(f).st_size) == prev.total_sent_sst[f]: + continue + sst[f]= int(os.stat(f).st_size) + self.target_sst_size = self.target_sst_size + os.stat(f).st_size + elif is_manifest(f): + self.manifest_files.append(f) + elif f.endswith(rocksdb_wal_suffix): + self.wal_files.append(f) + self.target_sst= collections.OrderedDict(sorted(sst.items())) + + if prev is not None: + self.total_sent_sst = prev.total_sent_sst + self.total_sent_sst_size = prev.total_sent_sst_size + self.total_target_sst_size = self.target_sst_size + prev.total_sent_sst_size + else: + self.total_target_sst_size = self.target_sst_size + + def do_backup_single(self, fname): + self.writer.write(fname) + os.remove(fname) + + def do_backup_sst(self, fname, size): + self.do_backup_single(fname) + self.sent_sst[fname]= size + self.total_sent_sst[fname]= size + self.sent_sst_size = self.sent_sst_size + size + self.total_sent_sst_size = self.total_sent_sst_size + size + + def do_backup_manifest(self): + for f in self.manifest_files: + self.do_backup_single(f) + + def do_backup_wal(self): + for f in self.wal_files: + self.do_backup_single(f) + + # this is the last snapshot round. backing up all the rest files + def do_backup_final(self): + logger.info("Backup WAL..") + self.do_backup_wal() + logger.info("Backup Manifest..") + self.do_backup_manifest() + self.do_cleanup() + self.finished= True + + def do_cleanup(self): + shutil.rmtree(self.source_dir) + logger.info("Cleaned up checkpoint from %s", self.source_dir) + + def do_backup_until(self, time_limit): + logger.info("Starting backup from snapshot: target files %d", len(self.target_sst)) + start_time= time.time() + last_progress_time= start_time + progress_size= 0 + for fname, size in self.target_sst.iteritems(): + self.do_backup_sst(fname, size) + progress_size= progress_size + size + elapsed_seconds = time.time() - start_time + progress_seconds = time.time() - last_progress_time + + if self.should_show_progress(size): + self.show_progress(progress_size, progress_seconds) + progress_size=0 + last_progress_time= time.time() + + if elapsed_seconds > time_limit and self.has_sent_all_sst() is False: + logger.info("Snapshot round finished. Elapsed Time: %5.2f. Remaining sst files: %d", + elapsed_seconds, len(self.target_sst) - len(self.sent_sst)) + self.do_cleanup() + break; + if self.has_sent_all_sst(): + self.do_backup_final() + + return self + + def should_show_progress(self, size): + if int(self.total_sent_sst_size/self.show_progress_size_interval) > int((self.total_sent_sst_size-size)/self.show_progress_size_interval): + return True + else: + return False + + def show_progress(self, size, seconds): + logger.info("Backup Progress: %5.2f%% Sent %6.2f GB of %6.2f GB data, Transfer Speed: %6.2f MB/s", + self.total_sent_sst_size*100/self.total_target_sst_size, + self.total_sent_sst_size/1024/1024/1024, + self.total_target_sst_size/1024/1024/1024, + size/seconds/1024/1024) + + def print_backup_report(self): + logger.info("Sent %6.2f GB of sst files, %d files in total.", + self.total_sent_sst_size/1024/1024/1024, + len(self.total_sent_sst)) + + def has_sent_all_sst(self): + if self.sent_sst_size == self.target_sst_size: + return True + return False + + +class MySQLUtil: + @staticmethod + def connect(user, password, port, socket=None): + if socket: + dbh = MySQLdb.Connect(user=user, + passwd=password, + unix_socket=socket) + else: + dbh = MySQLdb.Connect(user=user, + passwd=password, + port=port, + host="127.0.0.1") + return dbh + + @staticmethod + def create_checkpoint(dbh, checkpoint_dir): + sql = ("SET GLOBAL rocksdb_create_checkpoint='{0}'" + .format(checkpoint_dir)) + cur= dbh.cursor() + cur.execute(sql) + cur.close() + + @staticmethod + def get_datadir(dbh): + sql = "SELECT @@datadir" + cur = dbh.cursor() + cur.execute(sql) + row = cur.fetchone() + return row[0] + + +class BackupRunner: + datadir = None + start_backup_time = None + + def __init__(self, datadir): + self.datadir = datadir + self.start_backup_time = time.time() + + def start_backup_round(self, backup_round, prev_backup): + def signal_handler(*args): + logger.info("Got signal. Exit") + if b is not None: + logger.info("Cleaning up snapshot directory..") + b.do_cleanup() + sys.exit(1) + + b = None + try: + signal.signal(signal.SIGINT, signal_handler) + w = None + if opts.output_stream: + w = StreamWriter(opts.output_stream) + else: + raise Exception("Currently only streaming backup is supported.") + + snapshot_dir = opts.checkpoint_directory + '/' + str(backup_round) + dbh = MySQLUtil.connect(opts.mysql_user, + opts.mysql_password, + opts.mysql_port, + opts.mysql_socket) + if not self.datadir: + self.datadir = MySQLUtil.get_datadir(dbh) + logger.info("Set datadir: %s", self.datadir) + logger.info("Creating checkpoint at %s", snapshot_dir) + MySQLUtil.create_checkpoint(dbh, snapshot_dir) + logger.info("Created checkpoint at %s", snapshot_dir) + b = RocksDBBackup(snapshot_dir, w, prev_backup) + return b.do_backup_until(opts.checkpoint_interval) + except Exception as e: + logger.error(e) + logger.error(traceback.format_exc()) + if b is not None: + logger.info("Cleaning up snapshot directory.") + b.do_cleanup() + sys.exit(1) + + def backup_mysql(self): + try: + w = None + if opts.output_stream: + w = StreamWriter(opts.output_stream) + else: + raise Exception("Currently only streaming backup is supported.") + b = MySQLBackup(self.datadir, w, opts.skip_check_frm_timestamp, + self.start_backup_time) + logger.info("Taking MySQL misc backups..") + b.process() + logger.info("MySQL misc backups done.") + except Exception as e: + logger.error(e) + logger.error(traceback.format_exc()) + sys.exit(1) + + +class WDTBackup: + datadir = None + start_backup_time = None + + def __init__(self, datadir): + self.datadir = datadir + self.start_backup_time = time.time() + + def cleanup(self, snapshot_dir, server_log): + if server_log: + server_log.seek(0) + logger.info("WDT server log:") + logger.info(server_log.read()) + server_log.close() + if snapshot_dir: + logger.info("Cleaning up snapshot dir %s", snapshot_dir) + shutil.rmtree(snapshot_dir) + + def backup_with_timeout(self, backup_round): + def signal_handler(*args): + logger.info("Got signal. Exit") + self.cleanup(snapshot_dir, server_log) + sys.exit(1) + + logger.info("Starting backup round %d", backup_round) + snapshot_dir = None + server_log = None + try: + signal.signal(signal.SIGINT, signal_handler) + # create rocksdb snapshot + snapshot_dir = os.path.join(opts.checkpoint_directory, str(backup_round)) + dbh = MySQLUtil.connect(opts.mysql_user, + opts.mysql_password, + opts.mysql_port, + opts.mysql_socket) + logger.info("Creating checkpoint at %s", snapshot_dir) + MySQLUtil.create_checkpoint(dbh, snapshot_dir) + logger.info("Created checkpoint at %s", snapshot_dir) + + # get datadir if not provided + if not self.datadir: + self.datadir = MySQLUtil.get_datadir(dbh) + logger.info("Set datadir: %s", self.datadir) + + # create links for misc files + link_creator = MiscFilesLinkCreator(self.datadir, snapshot_dir, + opts.skip_check_frm_timestamp, + self.start_backup_time) + link_creator.process() + + current_path = os.path.join(opts.backupdir, "CURRENT") + + # construct receiver cmd, using the data directory as recovery-id. + # we delete the current file because it is not append-only, therefore not + # resumable. + remote_cmd = ( + "ssh {0} rm -f {1}; " + "{2} -directory {3} -enable_download_resumption " + "-recovery_id {4} -start_port 0 -abort_after_seconds {5} {6}" + ).format(opts.destination, + current_path, + wdt_bin, + opts.backupdir, + self.datadir, + opts.checkpoint_interval, + opts.extra_wdt_receiver_options) + logger.info("WDT remote cmd %s", remote_cmd) + server_log = tempfile.TemporaryFile() + remote_process = subprocess.Popen(remote_cmd.split(), + stdout=subprocess.PIPE, + stderr=server_log) + wdt_url = remote_process.stdout.readline().strip() + if not wdt_url: + raise Exception("Unable to get connection url from wdt receiver") + sender_cmd = ( + "{0} -connection_url \'{1}\' -directory {2} -app_name=myrocks " + "-avg_mbytes_per_sec {3} " + "-enable_download_resumption -abort_after_seconds {4} {5}" + ).format(wdt_bin, + wdt_url, + snapshot_dir, + opts.avg_mbytes_per_sec, + opts.checkpoint_interval, + opts.extra_wdt_sender_options) + sender_status = os.system(sender_cmd) >> 8 + remote_status = remote_process.wait() + self.cleanup(snapshot_dir, server_log) + # TODO: handle retryable and non-retyable errors differently + return (sender_status == 0 and remote_status == 0) + + except Exception as e: + logger.error(e) + logger.error(traceback.format_exc()) + self.cleanup(snapshot_dir, server_log) + sys.exit(1) + + +def backup_using_wdt(): + if not opts.destination: + logger.error("Must provide remote destination when using WDT") + sys.exit(1) + + # TODO: detect whether WDT is installed + logger.info("Backing up myrocks to %s using WDT", opts.destination) + wdt_backup = WDTBackup(opts.datadir) + finished = False + backup_round = 1 + while not finished: + start_time = time.time() + finished = wdt_backup.backup_with_timeout(backup_round) + end_time = time.time() + duration_seconds = end_time - start_time + if (not finished) and (duration_seconds < opts.checkpoint_interval): + # round finished before timeout + sleep_duration = (opts.checkpoint_interval - duration_seconds) + logger.info("Sleeping for %f seconds", sleep_duration) + time.sleep(sleep_duration) + + backup_round = backup_round + 1 + logger.info("Finished myrocks backup using WDT") + + +def init_logger(): + global logger + logger = logging.getLogger('myrocks_hotbackup') + logger.setLevel(logging.INFO) + h1= logging.StreamHandler(sys.stderr) + f = logging.Formatter("%(asctime)s.%(msecs)03d %(levelname)s %(message)s", + "%Y-%m-%d %H:%M:%S") + h1.setFormatter(f) + logger.addHandler(h1) + +backup_wdt_usage = ("Backup using WDT: myrocks_hotbackup " + "--user=root --password=pw --stream=wdt " + "--checkpoint_dir= --destination= --backup_dir=" + ". This has to be executed at the src " + "host.") +backup_usage= "Backup: set -o pipefail; myrocks_hotbackup --user=root --password=pw --port=3306 --checkpoint_dir= | ssh -o NoneEnabled=yes remote_server 'tar -xi -C ' . You need to execute backup command on a server where you take backups." +move_back_usage= "Move-Back: myrocks_hotbackup --move_back --datadir= --rocksdb_datadir= --rocksdb_waldir= --backup_dir= . You need to execute move-back command on a server where backup files are sent." + + +def parse_options(): + global opts + parser = OptionParser(usage = "\n\n" + backup_usage + "\n\n" + \ + backup_wdt_usage + "\n\n" + move_back_usage) + parser.add_option('-i', '--interval', type='int', dest='checkpoint_interval', + default=300, + help='Number of seconds to renew checkpoint') + parser.add_option('-c', '--checkpoint_dir', type='string', dest='checkpoint_directory', + default='/data/mysql/backup/snapshot', + help='Local directory name where checkpoints will be created.') + parser.add_option('-d', '--datadir', type='string', dest='datadir', + default=None, + help='backup mode: src MySQL datadir. move_back mode: dest MySQL datadir') + parser.add_option('-s', '--stream', type='string', dest='output_stream', + default='tar', + help='Setting streaming backup options. Currently tar, WDT ' + 'and xbstream are supported. Default is tar') + parser.add_option('--destination', type='string', dest='destination', + default='', + help='Remote server name. Only used for WDT mode so far.') + parser.add_option('--avg_mbytes_per_sec', type='int', + dest='avg_mbytes_per_sec', + default=500, + help='Average backup rate in MBytes/sec. WDT only.') + parser.add_option('--extra_wdt_sender_options', type='string', + dest='extra_wdt_sender_options', + default='', + help='Extra options for WDT sender') + parser.add_option('--extra_wdt_receiver_options', type='string', + dest='extra_wdt_receiver_options', + default='', + help='Extra options for WDT receiver') + parser.add_option('-u', '--user', type='string', dest='mysql_user', + default='root', + help='MySQL user name') + parser.add_option('-p', '--password', type='string', dest='mysql_password', + default='', + help='MySQL password name') + parser.add_option('-P', '--port', type='int', dest='mysql_port', + default=3306, + help='MySQL port number') + parser.add_option('-S', '--socket', type='string', dest='mysql_socket', + default=None, + help='MySQL socket path. Takes precedence over --port.') + parser.add_option('-m', '--move_back', action='store_true', dest='move_back', + default=False, + help='Moving MyRocks backup files to proper locations.') + parser.add_option('-r', '--rocksdb_datadir', type='string', dest='rocksdb_datadir', + default=None, + help='RocksDB target data directory where backup data files will be moved. Must be empty.') + parser.add_option('-w', '--rocksdb_waldir', type='string', dest='rocksdb_waldir', + default=None, + help='RocksDB target data directory where backup wal files will be moved. Must be empty.') + parser.add_option('-b', '--backup_dir', type='string', dest='backupdir', + default=None, + help='backup mode for WDT: Remote directory to store ' + 'backup. move_back mode: Locations where backup ' + 'files are stored.') + parser.add_option('-f', '--skip_check_frm_timestamp', + dest='skip_check_frm_timestamp', + action='store_true', default=False, + help='skipping to check if frm files are updated after starting backup.') + parser.add_option('-D', '--debug_signal_file', type='string', dest='debug_signal_file', + default=None, + help='debugging purpose: waiting until the specified file is created') + + opts, args = parser.parse_args() + + +def create_moveback_dir(directory): + if not os.path.exists(directory): + os.makedirs(directory) + else: + for f in os.listdir(directory): + logger.error("Directory %s has file or directory %s!", directory, f) + raise + +def print_move_back_usage(): + logger.warning(move_back_usage) + +def move_back(): + if opts.rocksdb_datadir is None or opts.rocksdb_waldir is None or opts.backupdir is None or opts.datadir is None: + print_move_back_usage() + sys.exit() + create_moveback_dir(opts.datadir) + create_moveback_dir(opts.rocksdb_datadir) + create_moveback_dir(opts.rocksdb_waldir) + + os.chdir(opts.backupdir) + for f in os.listdir(opts.backupdir): + if os.path.isfile(os.path.join(opts.backupdir,f)): + if f.endswith(rocksdb_wal_suffix): + shutil.move(f, opts.rocksdb_waldir) + elif f.endswith(rocksdb_data_suffix) or is_manifest(f): + shutil.move(f, opts.rocksdb_datadir) + else: + shutil.move(f, opts.datadir) + else: #directory + if f.endswith('.rocksdb'): + continue + shutil.move(f, opts.datadir) + +def start_backup(): + logger.info("Starting backup.") + runner = BackupRunner(opts.datadir) + b = None + backup_round= 1 + while True: + b = runner.start_backup_round(backup_round, b) + backup_round = backup_round + 1 + if b.finished is True: + b.print_backup_report() + logger.info("RocksDB Backup Done.") + break + if opts.debug_signal_file: + while not os.path.exists(opts.debug_signal_file): + logger.info("Waiting until %s is created..", opts.debug_signal_file) + time.sleep(1) + runner.backup_mysql() + logger.info("All Backups Done.") + + +def main(): + parse_options() + init_logger() + + if opts.move_back is True: + move_back() + elif opts.output_stream == 'wdt': + backup_using_wdt() + else: + start_backup() + +if __name__ == "__main__": + main() From 9a23b223469fba85ddf259a5ff3fac2596f854cf Mon Sep 17 00:00:00 2001 From: Sergei Petrunia Date: Thu, 25 Jan 2018 14:43:18 +0300 Subject: [PATCH 02/18] Adjust myrocks_hotbackup to work with MariaDB. --- storage/rocksdb/myrocks_hotbackup | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage/rocksdb/myrocks_hotbackup b/storage/rocksdb/myrocks_hotbackup index cb10bb902c0..ef1e934f3fd 100755 --- a/storage/rocksdb/myrocks_hotbackup +++ b/storage/rocksdb/myrocks_hotbackup @@ -124,7 +124,7 @@ class MiscFilesProcessor(): dirs = [ d for d in os.listdir(self.datadir) \ if not os.path.isfile(os.path.join(self.datadir,d))] for db in dirs: - if not db.startswith('.') and not self._is_socket(db): + if not db.startswith('.') and not self._is_socket(db) and not db == "#rocksdb": dbs.append(db) return dbs From 699123fdc3b770451771d9e976bb2728c1db1b5b Mon Sep 17 00:00:00 2001 From: Vicentiu Ciorbaru Date: Wed, 7 Feb 2018 11:13:29 +0000 Subject: [PATCH 03/18] Fix rocksdb compiler version identification with GCC GCC 7 with only dumpversion flag returns the major version only. dumpfullversion flag makes it work with both new and old gcc. --- debian/autobake-deb.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/debian/autobake-deb.sh b/debian/autobake-deb.sh index 688698dad8a..b2d30a6deb3 100755 --- a/debian/autobake-deb.sh +++ b/debian/autobake-deb.sh @@ -74,7 +74,10 @@ fi # Convert gcc version to numberical value. Format is Mmmpp where M is Major # version, mm is minor version and p is patch. -GCCVERSION=$(gcc -dumpversion | sed -e 's/\.\([0-9][0-9]\)/\1/g' -e 's/\.\([0-9]\)/0\1/g' -e 's/^[0-9]\{3,4\}$/&00/') +# -dumpfullversion & -dumpversion to make it uniform across old and new (>=7) +GCCVERSION=$(gcc -dumpfullversion -dumpversion | sed -e 's/\.\([0-9][0-9]\)/\1/g' \ + -e 's/\.\([0-9]\)/0\1/g' \ + -e 's/^[0-9]\{3,4\}$/&00/') # Don't build rocksdb package if gcc version is less than 4.8 or we are running on # x86 32 bit. if [[ $GCCVERSION -lt 40800 ]] || [[ $(arch) =~ i[346]86 ]] From cbe566dc42a94f7312a4c4135345dc3af90ece71 Mon Sep 17 00:00:00 2001 From: Vicentiu Ciorbaru Date: Wed, 7 Feb 2018 12:32:58 +0000 Subject: [PATCH 04/18] Add myrocks_hotbackup part of rocksdb plugin in cmake --- storage/rocksdb/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/storage/rocksdb/CMakeLists.txt b/storage/rocksdb/CMakeLists.txt index 6cb7eb1d439..bf95201fb4b 100644 --- a/storage/rocksdb/CMakeLists.txt +++ b/storage/rocksdb/CMakeLists.txt @@ -208,6 +208,8 @@ TARGET_LINK_LIBRARIES(sst_dump rocksdblib) MYSQL_ADD_EXECUTABLE(mysql_ldb tools/mysql_ldb.cc COMPONENT rocksdb-engine) TARGET_LINK_LIBRARIES(mysql_ldb rocksdb_tools rocksdb_aux_lib) +INSTALL_SCRIPT(myrocks_hotbackup COMPONENT rocksdb-engine) + IF(CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") SET_TARGET_PROPERTIES(rocksdb_tools sst_dump mysql_ldb PROPERTIES COMPILE_FLAGS -frtti) ENDIF() From adbf6caad6c588102f0346f6cf203757688ae1a4 Mon Sep 17 00:00:00 2001 From: Vicentiu Ciorbaru Date: Wed, 7 Feb 2018 11:36:13 +0000 Subject: [PATCH 05/18] debian/control Include myrocks_hotbackup into mariadb-plugin-rocksdb --- debian/autobake-deb.sh | 2 +- debian/control | 1 + debian/mariadb-plugin-rocksdb.install | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/debian/autobake-deb.sh b/debian/autobake-deb.sh index b2d30a6deb3..157f33eb298 100755 --- a/debian/autobake-deb.sh +++ b/debian/autobake-deb.sh @@ -82,7 +82,7 @@ GCCVERSION=$(gcc -dumpfullversion -dumpversion | sed -e 's/\.\([0-9][0-9]\)/\1/g # x86 32 bit. if [[ $GCCVERSION -lt 40800 ]] || [[ $(arch) =~ i[346]86 ]] then - sed '/Package: mariadb-plugin-rocksdb/,+9d' -i debian/control + sed '/Package: mariadb-plugin-rocksdb/,+10d' -i debian/control fi if [[ $GCCVERSION -lt 40800 ]] then diff --git a/debian/control b/debian/control index 79936870579..15a7d8d7a36 100644 --- a/debian/control +++ b/debian/control @@ -455,6 +455,7 @@ Architecture: any Depends: mariadb-server-10.2 (= ${binary:Version}), ${misc:Depends}, ${shlibs:Depends} +Recommends: python-mysqldb Description: RocksDB storage engine for MariaDB The RocksDB storage engine is a high performance storage engine, aimed at maximising storage efficiency while maintaining InnoDB-like performance. diff --git a/debian/mariadb-plugin-rocksdb.install b/debian/mariadb-plugin-rocksdb.install index ee45a822e0c..fd71995b6a3 100644 --- a/debian/mariadb-plugin-rocksdb.install +++ b/debian/mariadb-plugin-rocksdb.install @@ -1,4 +1,5 @@ etc/mysql/conf.d/rocksdb.cnf etc/mysql/mariadb.conf.d usr/lib/mysql/plugin/ha_rocksdb.so usr/bin/mysql_ldb +usr/bin/myrocks_hotbackup usr/bin/sst_dump From 06d77eb43a5f1e5bc24555e51d19d209d2b92615 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Lindstr=C3=B6m?= Date: Thu, 8 Feb 2018 14:55:01 +0200 Subject: [PATCH 06/18] MDEV-14427: encryption.innodb-bad-key-change failed in buildbot Timing problem as sometimes table is marked as encrypted but sometimes we are not sure and table is just marked missing. --- .../encryption/r/innodb-bad-key-change.result | 48 ------------------- .../encryption/t/innodb-bad-key-change.test | 42 +++++++--------- 2 files changed, 16 insertions(+), 74 deletions(-) diff --git a/mysql-test/suite/encryption/r/innodb-bad-key-change.result b/mysql-test/suite/encryption/r/innodb-bad-key-change.result index 4e4fd89d1ae..d581b98513d 100644 --- a/mysql-test/suite/encryption/r/innodb-bad-key-change.result +++ b/mysql-test/suite/encryption/r/innodb-bad-key-change.result @@ -28,14 +28,7 @@ foobar 2 # Restart server with keysbad3.txt SELECT * FROM t1; ERROR HY000: Got error 192 'Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match.' from InnoDB -SHOW WARNINGS; -Level Code Message -Warning 192 Table test/t1 in tablespace is encrypted but encryption service or used key_id is not available. Can't continue reading table. -Warning 192 Table "test"."t1" in file ./test/t1.ibd is encrypted but encryption service or used key_id is not available. Can't continue reading table. -Error 1296 Got error 192 'Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match.' from InnoDB DROP TABLE t1; -SHOW WARNINGS; -Level Code Message # Start server with keys3.txt SET GLOBAL innodb_default_encryption_key_id=5; CREATE TABLE t2 (c VARCHAR(8), id int not null primary key, b int, key(b)) ENGINE=InnoDB ENCRYPTED=YES; @@ -44,73 +37,32 @@ INSERT INTO t2 VALUES ('foobar',1,2); # Restart server with keys2.txt SELECT * FROM t2; ERROR HY000: Got error 192 'Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match.' from InnoDB -SHOW WARNINGS; -Level Code Message -Warning 192 Table test/t2 in tablespace is encrypted but encryption service or used key_id is not available. Can't continue reading table. -Warning 192 Table "test"."t2" in file ./test/t2.ibd is encrypted but encryption service or used key_id is not available. Can't continue reading table. -Error 1296 Got error 192 'Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match.' from InnoDB SELECT * FROM t2 where id = 1; ERROR HY000: Got error 192 'Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match.' from InnoDB -SHOW WARNINGS; -Level Code Message -Warning 192 Table "test"."t2" in file ./test/t2.ibd is encrypted but encryption service or used key_id is not available. Can't continue reading table. -Error 1296 Got error 192 'Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match.' from InnoDB SELECT * FROM t2 where b = 1; ERROR HY000: Got error 192 'Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match.' from InnoDB -SHOW WARNINGS; -Level Code Message -Warning 192 Table "test"."t2" in file ./test/t2.ibd is encrypted but encryption service or used key_id is not available. Can't continue reading table. -Error 1296 Got error 192 'Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match.' from InnoDB INSERT INTO t2 VALUES ('tmp',3,3); ERROR HY000: Got error 192 'Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match.' from InnoDB -SHOW WARNINGS; -Level Code Message -Warning 192 Table "test"."t2" in file ./test/t2.ibd is encrypted but encryption service or used key_id is not available. Can't continue reading table. -Error 1296 Got error 192 'Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match.' from InnoDB DELETE FROM t2 where b = 3; ERROR HY000: Got error 192 'Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match.' from InnoDB -SHOW WARNINGS; -Level Code Message -Warning 192 Table "test"."t2" in file ./test/t2.ibd is encrypted but encryption service or used key_id is not available. Can't continue reading table. -Error 1296 Got error 192 'Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match.' from InnoDB DELETE FROM t2 where id = 3; ERROR HY000: Got error 192 'Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match.' from InnoDB -SHOW WARNINGS; -Level Code Message -Warning 192 Table "test"."t2" in file ./test/t2.ibd is encrypted but encryption service or used key_id is not available. Can't continue reading table. -Error 1296 Got error 192 'Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match.' from InnoDB UPDATE t2 set b = b +1; ERROR HY000: Got error 192 'Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match.' from InnoDB -SHOW WARNINGS; -Level Code Message -Warning 192 Table "test"."t2" in file ./test/t2.ibd is encrypted but encryption service or used key_id is not available. Can't continue reading table. -Error 1296 Got error 192 'Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match.' from InnoDB OPTIMIZE TABLE t2; Table Op Msg_type Msg_text test.t2 optimize Warning Table "test"."t2" in file ./test/t2.ibd is encrypted but encryption service or used key_id is not available. Can't continue reading table. test.t2 optimize Error Got error 192 'Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match.' from InnoDB test.t2 optimize error Corrupt -SHOW WARNINGS; -Level Code Message ALTER TABLE t2 ADD COLUMN d INT; ERROR HY000: Got error 192 'Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match.' from InnoDB -SHOW WARNINGS; -Level Code Message -Warning 192 Table "test"."t2" in file ./test/t2.ibd is encrypted but encryption service or used key_id is not available. Can't continue reading table. -Error 1296 Got error 192 'Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match.' from InnoDB ANALYZE TABLE t2; Table Op Msg_type Msg_text test.t2 analyze Warning Table "test"."t2" in file ./test/t2.ibd is encrypted but encryption service or used key_id is not available. Can't continue reading table. test.t2 analyze Error Got error 192 'Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match.' from InnoDB test.t2 analyze error Corrupt -SHOW WARNINGS; -Level Code Message TRUNCATE TABLE t2; ERROR HY000: Got error 192 'Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match.' from InnoDB -SHOW WARNINGS; -Level Code Message -Warning 192 Table "test"."t2" in file ./test/t2.ibd is encrypted but encryption service or used key_id is not available. Can't continue reading table. -Error 1296 Got error 192 'Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match.' from InnoDB DROP TABLE t2; # Start server with keys2.txt diff --git a/mysql-test/suite/encryption/t/innodb-bad-key-change.test b/mysql-test/suite/encryption/t/innodb-bad-key-change.test index 66546872c25..6fa5fc9847f 100644 --- a/mysql-test/suite/encryption/t/innodb-bad-key-change.test +++ b/mysql-test/suite/encryption/t/innodb-bad-key-change.test @@ -40,18 +40,18 @@ SELECT * FROM t1; -- let $restart_parameters=--file-key-management-filename=$MYSQL_TEST_DIR/std_data/keysbad3.txt -- source include/restart_mysqld.inc +--disable_warnings --error ER_GET_ERRMSG SELECT * FROM t1; ---replace_regex /tablespace [0-9]*/tablespace / /key_id [0-9]*/key_id / -SHOW WARNINGS; +--enable_warnings -- let $restart_parameters=--file-key-management-filename=$MYSQL_TEST_DIR/std_data/keysbad3.txt -- source include/restart_mysqld.inc +--disable_warnings --replace_regex /tablespace [0-9]*/tablespace / DROP TABLE t1; ---replace_regex /tablespace [0-9]*/tablespace / /key_id [0-9]*/key_id / -SHOW WARNINGS; +--enable_warnings # # MDEV-8591: Database page corruption on disk or a failed space, Assertion failure in file buf0buf.cc @@ -71,51 +71,41 @@ INSERT INTO t2 VALUES ('foobar',1,2); -- let $restart_parameters=--file-key-management-filename=$MYSQL_TEST_DIR/std_data/keys2.txt -- source include/restart_mysqld.inc +--disable_warnings --error ER_GET_ERRMSG SELECT * FROM t2; ---replace_regex /tablespace [0-9]*/tablespace / /key_id [0-9]*/key_id / -SHOW WARNINGS; + --error ER_GET_ERRMSG SELECT * FROM t2 where id = 1; ---replace_regex /tablespace [0-9]*/tablespace / /key_id [0-9]*/key_id / -SHOW WARNINGS; + --error ER_GET_ERRMSG SELECT * FROM t2 where b = 1; ---replace_regex /tablespace [0-9]*/tablespace / /key_id [0-9]*/key_id / -SHOW WARNINGS; + --replace_regex /tablespace [0-9]*/tablespace / --error ER_GET_ERRMSG INSERT INTO t2 VALUES ('tmp',3,3); ---replace_regex /tablespace [0-9]*/tablespace / /key_id [0-9]*/key_id / -SHOW WARNINGS; + --error ER_GET_ERRMSG DELETE FROM t2 where b = 3; ---replace_regex /tablespace [0-9]*/tablespace / /key_id [0-9]*/key_id / -SHOW WARNINGS; + --error ER_GET_ERRMSG DELETE FROM t2 where id = 3; ---replace_regex /tablespace [0-9]*/tablespace / /key_id [0-9]*/key_id / -SHOW WARNINGS; + --error ER_GET_ERRMSG UPDATE t2 set b = b +1; ---replace_regex /tablespace [0-9]*/tablespace / /key_id [0-9]*/key_id / -SHOW WARNINGS; + OPTIMIZE TABLE t2; ---replace_regex /tablespace [0-9]*/tablespace / /key_id [0-9]*/key_id / -SHOW WARNINGS; + --error ER_GET_ERRMSG ALTER TABLE t2 ADD COLUMN d INT; ---replace_regex /tablespace [0-9]*/tablespace / /key_id [0-9]*/key_id / -SHOW WARNINGS; + ANALYZE TABLE t2; ---replace_regex /tablespace [0-9]*/tablespace / /key_id [0-9]*/key_id / -SHOW WARNINGS; + --error ER_GET_ERRMSG TRUNCATE TABLE t2; ---replace_regex /tablespace [0-9]*/tablespace / /key_id [0-9]*/key_id / -SHOW WARNINGS; DROP TABLE t2; +--enable_warnings --echo --echo # Start server with keys2.txt From 6f0b316fbe83d2cf555f867dda262896d18fbbf6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vicen=C8=9Biu=20Ciorbaru?= Date: Thu, 8 Feb 2018 21:12:11 +0200 Subject: [PATCH 07/18] Update wrong xtradb version The update was lost during merge. --- storage/xtradb/include/univ.i | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage/xtradb/include/univ.i b/storage/xtradb/include/univ.i index 96e67f88c8a..c9e5aa62d22 100644 --- a/storage/xtradb/include/univ.i +++ b/storage/xtradb/include/univ.i @@ -45,7 +45,7 @@ Created 1/20/1994 Heikki Tuuri #define INNODB_VERSION_MAJOR 5 #define INNODB_VERSION_MINOR 6 -#define INNODB_VERSION_BUGFIX 36 +#define INNODB_VERSION_BUGFIX 38 #ifndef PERCONA_INNODB_VERSION #define PERCONA_INNODB_VERSION 83.0 From 47d1679ac69e96b201622bc0f5b3e5526ba571f2 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Tue, 6 Feb 2018 20:26:59 +0100 Subject: [PATCH 08/18] fix encryption.tempfiles to check that encrypt_tmp_files is ON --- mysql-test/suite/encryption/r/tempfiles.result | 3 +++ mysql-test/suite/encryption/t/tempfiles.opt | 1 + mysql-test/suite/encryption/t/tempfiles.test | 2 ++ 3 files changed, 6 insertions(+) create mode 100644 mysql-test/suite/encryption/t/tempfiles.opt diff --git a/mysql-test/suite/encryption/r/tempfiles.result b/mysql-test/suite/encryption/r/tempfiles.result index a0b7596dd5a..168f79b60e9 100644 --- a/mysql-test/suite/encryption/r/tempfiles.result +++ b/mysql-test/suite/encryption/r/tempfiles.result @@ -1,3 +1,6 @@ +select @@encrypt_tmp_files; +@@encrypt_tmp_files +1 CREATE TABLE t1(a INT); INSERT INTO t1 VALUES(1),(2); DELETE FROM t1 WHERE a=1; diff --git a/mysql-test/suite/encryption/t/tempfiles.opt b/mysql-test/suite/encryption/t/tempfiles.opt new file mode 100644 index 00000000000..2b90f474428 --- /dev/null +++ b/mysql-test/suite/encryption/t/tempfiles.opt @@ -0,0 +1 @@ +--encrypt-tmp-files diff --git a/mysql-test/suite/encryption/t/tempfiles.test b/mysql-test/suite/encryption/t/tempfiles.test index 34dcbdf5963..fc718f4d2ab 100644 --- a/mysql-test/suite/encryption/t/tempfiles.test +++ b/mysql-test/suite/encryption/t/tempfiles.test @@ -11,6 +11,8 @@ source include/have_binlog_format_row.inc; # engine. But there's no need to run it twice for InnoDB and XtraDB. source include/have_xtradb.inc; +select @@encrypt_tmp_files; + # # MyISAM messing around with IO_CACHE::file # From 60dfe12be3adaa03a8d409ca2da58e78e6d0c972 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Wed, 7 Feb 2018 18:54:11 +0100 Subject: [PATCH 09/18] MDEV-14868 MariaDB server crashes after using ROLLBACK TO when encrypt_tmp_files=ON Fix reinit_io_cache(WRITE_CACHE) with non-zero seek_offset. Run encryption.tempfiles with and without binlog checksums. --- mysql-test/suite/encryption/t/tempfiles.combinations | 5 +++++ mysys/mf_iocache.c | 2 +- sql/mf_iocache_encr.cc | 5 +++-- 3 files changed, 9 insertions(+), 3 deletions(-) create mode 100644 mysql-test/suite/encryption/t/tempfiles.combinations diff --git a/mysql-test/suite/encryption/t/tempfiles.combinations b/mysql-test/suite/encryption/t/tempfiles.combinations new file mode 100644 index 00000000000..7010d2c100d --- /dev/null +++ b/mysql-test/suite/encryption/t/tempfiles.combinations @@ -0,0 +1,5 @@ +[none] +binlog-checksum=NONE + +[crc32] +binlog-checksum=CRC32 diff --git a/mysys/mf_iocache.c b/mysys/mf_iocache.c index a0ddc3e40a5..56b1ae3fc6e 100644 --- a/mysys/mf_iocache.c +++ b/mysys/mf_iocache.c @@ -440,7 +440,7 @@ my_bool reinit_io_cache(IO_CACHE *info, enum cache_type type, info->read_end= info->buffer; _my_b_encr_read(info, 0, 0); /* prefill the buffer */ info->write_pos= info->read_pos; - info->pos_in_file+= info->buffer_length; + info->seek_not_done=1; } } else diff --git a/sql/mf_iocache_encr.cc b/sql/mf_iocache_encr.cc index ae314d826a0..149e6feb605 100644 --- a/sql/mf_iocache_encr.cc +++ b/sql/mf_iocache_encr.cc @@ -145,9 +145,10 @@ static int my_b_encr_write(IO_CACHE *info, const uchar *Buffer, size_t Count) if (info->seek_not_done) { - DBUG_ASSERT(info->pos_in_file == 0); + DBUG_ASSERT(info->pos_in_file % info->buffer_length == 0); + size_t wpos= info->pos_in_file / info->buffer_length * crypt_data->block_length; - if ((mysql_file_seek(info->file, 0, MY_SEEK_SET, MYF(0)) == MY_FILEPOS_ERROR)) + if ((mysql_file_seek(info->file, wpos, MY_SEEK_SET, MYF(0)) == MY_FILEPOS_ERROR)) { info->error= -1; DBUG_RETURN(1); From b75d8453d4f41ff9ba0468747585d019ad7c4d0c Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Wed, 7 Feb 2018 19:08:53 +0100 Subject: [PATCH 10/18] MDEV-14868 MariaDB server crashes after using ROLLBACK TO when encrypt_tmp_files=ON add a test that restores the data from a binlog --- .../suite/encryption/r/tempfiles.result | 66 +++++++++++++++++-- mysql-test/suite/encryption/t/tempfiles.test | 22 +++++-- 2 files changed, 76 insertions(+), 12 deletions(-) diff --git a/mysql-test/suite/encryption/r/tempfiles.result b/mysql-test/suite/encryption/r/tempfiles.result index 168f79b60e9..658b7dc291b 100644 --- a/mysql-test/suite/encryption/r/tempfiles.result +++ b/mysql-test/suite/encryption/r/tempfiles.result @@ -28,6 +28,7 @@ h 10 i 10 j 10 drop table t1; +reset master; set global binlog_cache_size=8192; create table t1 (a text) engine=innodb; start transaction; @@ -36,14 +37,67 @@ commit; start transaction; insert t1 select repeat(seq, 1000) from seq_1_to_8; commit; -drop table t1; -create table t1 (a text) engine=innodb; +create table t2 (a text) engine=innodb; start transaction; -insert t1 select repeat(seq, 1000) from seq_1_to_15; +insert t2 select repeat(seq, 1000) from seq_1_to_15; savepoint foo; -insert t1 select repeat(seq, 1000) from seq_16_to_30; +insert t2 select repeat(seq, 1000) from seq_16_to_30; rollback to savepoint foo; -insert t1 select repeat(seq, 1000) from seq_31_to_40; +insert t2 select repeat(seq, 1000) from seq_31_to_40; commit; -drop table t1; +flush binary logs; +drop table t1, t2; set global binlog_cache_size=default; +select left(a, 10) from t1; +left(a, 10) +1111111111 +2222222222 +3333333333 +4444444444 +5555555555 +6666666666 +7777777777 +8888888888 +9999999999 +1010101010 +1111111111 +1212121212 +1313131313 +1414141414 +1515151515 +1111111111 +2222222222 +3333333333 +4444444444 +5555555555 +6666666666 +7777777777 +8888888888 +select left(a, 10) from t2; +left(a, 10) +1111111111 +2222222222 +3333333333 +4444444444 +5555555555 +6666666666 +7777777777 +8888888888 +9999999999 +1010101010 +1111111111 +1212121212 +1313131313 +1414141414 +1515151515 +3131313131 +3232323232 +3333333333 +3434343434 +3535353535 +3636363636 +3737373737 +3838383838 +3939393939 +4040404040 +drop table t1, t2; diff --git a/mysql-test/suite/encryption/t/tempfiles.test b/mysql-test/suite/encryption/t/tempfiles.test index fc718f4d2ab..5232bcb5d12 100644 --- a/mysql-test/suite/encryption/t/tempfiles.test +++ b/mysql-test/suite/encryption/t/tempfiles.test @@ -33,6 +33,7 @@ update t1 set c=v, t=v; select sql_big_result t,count(t) from t1 group by t limit 10; drop table t1; +reset master; set global binlog_cache_size=8192; connect con1, localhost, root; @@ -50,7 +51,6 @@ commit; start transaction; insert t1 select repeat(seq, 1000) from seq_1_to_8; commit; -drop table t1; disconnect con1; connect con2, localhost, root; @@ -60,17 +60,27 @@ connect con2, localhost, root; # Start a transaction, write until the cache goes to disk, # create a savepoint, write more blocks to disk, rollback to savepoint. # -create table t1 (a text) engine=innodb; +create table t2 (a text) engine=innodb; start transaction; -insert t1 select repeat(seq, 1000) from seq_1_to_15; +insert t2 select repeat(seq, 1000) from seq_1_to_15; savepoint foo; -insert t1 select repeat(seq, 1000) from seq_16_to_30; +insert t2 select repeat(seq, 1000) from seq_16_to_30; rollback to savepoint foo; -insert t1 select repeat(seq, 1000) from seq_31_to_40; +insert t2 select repeat(seq, 1000) from seq_31_to_40; commit; -drop table t1; disconnect con2; connection default; +flush binary logs; + +drop table t1, t2; + set global binlog_cache_size=default; + +let $MYSQLD_DATADIR= `select @@datadir`; +exec $MYSQL_BINLOG $MYSQLD_DATADIR/master-bin.000001 | $MYSQL; + +select left(a, 10) from t1; +select left(a, 10) from t2; +drop table t1, t2; From 564891c5328c20089ba7d1ab450143a3abe3e0d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Lindstr=C3=B6m?= Date: Fri, 9 Feb 2018 17:17:32 +0200 Subject: [PATCH 11/18] MDEV-14508: encryption.innodb-compressed-blob failed in buildbot, assertion in btr0cur.cc line 1398 Before that line there is call to buf_page_get_gen that could return block = NULL when decrypting a page fails. However, we should set error to be != DB_SUCCESS also. In error log there was error about decompression but in that code there is one case where error is not set correctly. --- storage/innobase/buf/buf0buf.cc | 2 ++ storage/xtradb/buf/buf0buf.cc | 2 ++ 2 files changed, 4 insertions(+) diff --git a/storage/innobase/buf/buf0buf.cc b/storage/innobase/buf/buf0buf.cc index 369f62d6483..e3c2337659e 100644 --- a/storage/innobase/buf/buf0buf.cc +++ b/storage/innobase/buf/buf0buf.cc @@ -3453,6 +3453,8 @@ evict_from_pool: buf_block_unfix(fix_block); buf_pool_mutex_exit(buf_pool); rw_lock_x_unlock(&fix_block->lock); + + *err = DB_PAGE_CORRUPTED; return NULL; } } diff --git a/storage/xtradb/buf/buf0buf.cc b/storage/xtradb/buf/buf0buf.cc index 80ff1c14a64..83e38fbcc98 100644 --- a/storage/xtradb/buf/buf0buf.cc +++ b/storage/xtradb/buf/buf0buf.cc @@ -3369,6 +3369,8 @@ evict_from_pool: mutex_enter(&buf_pool->LRU_list_mutex); buf_block_unfix(fix_block); mutex_exit(&buf_pool->LRU_list_mutex); + + *err = DB_PAGE_CORRUPTED; return NULL; } } From b0a92333c00f8facd20c55cf7a8dfaf896b7f24d Mon Sep 17 00:00:00 2001 From: Alexander Barkov Date: Fri, 9 Feb 2018 19:47:00 +0400 Subject: [PATCH 12/18] MDEV-15262 Wrong results for SELECT..WHERE non_indexed_datetime_column=indexed_time_column --- mysql-test/r/type_time_6065.result | 44 ++++++++++++++++++++++++++++++ mysql-test/t/type_time_6065.test | 23 ++++++++++++++++ sql/field.cc | 7 +++++ 3 files changed, 74 insertions(+) diff --git a/mysql-test/r/type_time_6065.result b/mysql-test/r/type_time_6065.result index db3efc3bcbb..1f64f9e90e2 100644 --- a/mysql-test/r/type_time_6065.result +++ b/mysql-test/r/type_time_6065.result @@ -2308,3 +2308,47 @@ col_int_nokey 1 DROP TABLE t1,t2,t3; SET TIMESTAMP=0; +# +# MDEV-15262 Wrong results for SELECT..WHERE non_indexed_datetime_column=indexed_time_column +# +SET TIMESTAMP=UNIX_TIMESTAMP('2012-01-31 10:14:35'); +CREATE TABLE t1 (col_time_key TIME, KEY(col_time_key)); +CREATE TABLE t2 (col_datetime_key DATETIME); +INSERT INTO t1 VALUES ('-760:00:00'),('760:00:00'); +INSERT INTO t1 VALUES ('-770:00:00'),('770:00:00'); +INSERT INTO t2 SELECT * FROM t1; +SELECT * FROM t2 STRAIGHT_JOIN t1 IGNORE INDEX(col_time_key) WHERE col_time_key = col_datetime_key; +col_datetime_key col_time_key +2011-12-30 08:00:00 -760:00:00 +2012-03-02 16:00:00 760:00:00 +2011-12-29 22:00:00 -770:00:00 +2012-03-03 02:00:00 770:00:00 +SELECT * FROM t2 STRAIGHT_JOIN t1 FORCE INDEX (col_time_key) WHERE col_time_key = col_datetime_key; +col_datetime_key col_time_key +2011-12-29 22:00:00 -770:00:00 +2011-12-30 08:00:00 -760:00:00 +2012-03-02 16:00:00 760:00:00 +2012-03-03 02:00:00 770:00:00 +INSERT INTO t1 VALUES ('-838:59:59'),('838:59:59'); +INSERT INTO t2 VALUES (DATE_ADD(CURRENT_DATE, INTERVAL '-838:59:59' HOUR_SECOND)); +INSERT INTO t2 VALUES (DATE_ADD(CURRENT_DATE, INTERVAL '838:59:59' HOUR_SECOND)); +INSERT INTO t2 VALUES (DATE_ADD(CURRENT_DATE, INTERVAL '-839:00:00' HOUR_SECOND)); +INSERT INTO t2 VALUES (DATE_ADD(CURRENT_DATE, INTERVAL '839:00:00' HOUR_SECOND)); +SELECT * FROM t2 STRAIGHT_JOIN t1 IGNORE INDEX(col_time_key) WHERE col_time_key = col_datetime_key; +col_datetime_key col_time_key +2011-12-30 08:00:00 -760:00:00 +2012-03-02 16:00:00 760:00:00 +2011-12-29 22:00:00 -770:00:00 +2012-03-03 02:00:00 770:00:00 +2011-12-27 01:00:01 -838:59:59 +2012-03-05 22:59:59 838:59:59 +SELECT * FROM t2 STRAIGHT_JOIN t1 FORCE INDEX (col_time_key) WHERE col_time_key = col_datetime_key; +col_datetime_key col_time_key +2011-12-29 22:00:00 -770:00:00 +2011-12-30 08:00:00 -760:00:00 +2012-03-02 16:00:00 760:00:00 +2012-03-03 02:00:00 770:00:00 +2011-12-27 01:00:01 -838:59:59 +2012-03-05 22:59:59 838:59:59 +DROP TABLE t1, t2; +SET TIMESTAMP=DEFAULT; diff --git a/mysql-test/t/type_time_6065.test b/mysql-test/t/type_time_6065.test index 6e29b849be5..fc91c530760 100644 --- a/mysql-test/t/type_time_6065.test +++ b/mysql-test/t/type_time_6065.test @@ -172,6 +172,29 @@ eval $query; DROP TABLE t1,t2,t3; SET TIMESTAMP=0; # back to current time + +--echo # +--echo # MDEV-15262 Wrong results for SELECT..WHERE non_indexed_datetime_column=indexed_time_column +--echo # + +SET TIMESTAMP=UNIX_TIMESTAMP('2012-01-31 10:14:35'); +CREATE TABLE t1 (col_time_key TIME, KEY(col_time_key)); +CREATE TABLE t2 (col_datetime_key DATETIME); +INSERT INTO t1 VALUES ('-760:00:00'),('760:00:00'); +INSERT INTO t1 VALUES ('-770:00:00'),('770:00:00'); +INSERT INTO t2 SELECT * FROM t1; +SELECT * FROM t2 STRAIGHT_JOIN t1 IGNORE INDEX(col_time_key) WHERE col_time_key = col_datetime_key; +SELECT * FROM t2 STRAIGHT_JOIN t1 FORCE INDEX (col_time_key) WHERE col_time_key = col_datetime_key; +INSERT INTO t1 VALUES ('-838:59:59'),('838:59:59'); +INSERT INTO t2 VALUES (DATE_ADD(CURRENT_DATE, INTERVAL '-838:59:59' HOUR_SECOND)); +INSERT INTO t2 VALUES (DATE_ADD(CURRENT_DATE, INTERVAL '838:59:59' HOUR_SECOND)); +INSERT INTO t2 VALUES (DATE_ADD(CURRENT_DATE, INTERVAL '-839:00:00' HOUR_SECOND)); +INSERT INTO t2 VALUES (DATE_ADD(CURRENT_DATE, INTERVAL '839:00:00' HOUR_SECOND)); +SELECT * FROM t2 STRAIGHT_JOIN t1 IGNORE INDEX(col_time_key) WHERE col_time_key = col_datetime_key; +SELECT * FROM t2 STRAIGHT_JOIN t1 FORCE INDEX (col_time_key) WHERE col_time_key = col_datetime_key; +DROP TABLE t1, t2; +SET TIMESTAMP=DEFAULT; + # # End of 10.0 tests # diff --git a/sql/field.cc b/sql/field.cc index c36fff06a07..a9a7d54929b 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -5330,6 +5330,13 @@ static void calc_datetime_days_diff(MYSQL_TIME *ltime, long days) ltime->second) * 1000000LL + ltime->second_part); unpack_time(timediff, ltime); + /* + unpack_time() broke down hours into ltime members hour,day,month. + Mix them back to ltime->hour using the same factors + that pack_time()/unpack_time() use (i.e. 32 for month). + */ + ltime->hour+= (ltime->month * 32 + ltime->day) * 24; + ltime->month= ltime->day= 0; } ltime->time_type= MYSQL_TIMESTAMP_TIME; } From 12d5307e95687e543f80aa3e8636a2ab8b96fe8d Mon Sep 17 00:00:00 2001 From: Monty Date: Sat, 10 Feb 2018 14:24:15 +0200 Subject: [PATCH 13/18] MDEV-13508 ALTER TABLE that renames columns and CHECK constraints Fixed by adding Item::rename_fields_processor Signed-off-by: Monty --- mysql-test/r/alter_table.result | 33 +++++++++++++++++++++++++++++++++ mysql-test/t/alter_table.test | 18 ++++++++++++++++++ sql/item.cc | 28 ++++++++++++++++++++++++++++ sql/item.h | 8 ++++++++ sql/sql_alter.h | 1 + sql/sql_list.cc | 18 ++++++++++-------- sql/sql_list.h | 5 ++++- sql/sql_table.cc | 29 +++++++++++++++++++++++++++++ sql/sql_yacc.yy | 3 ++- 9 files changed, 133 insertions(+), 10 deletions(-) diff --git a/mysql-test/r/alter_table.result b/mysql-test/r/alter_table.result index b8f51ee25ad..0845459f6b6 100644 --- a/mysql-test/r/alter_table.result +++ b/mysql-test/r/alter_table.result @@ -2276,5 +2276,38 @@ t1 CREATE TABLE `t1` ( ) ENGINE=MyISAM DEFAULT CHARSET=latin1 drop table t1; # +# MDEV-13508 Check that rename of columns changes defaults, virtual +# columns and constraints +# +create table t1 (a int, b int, check(a>b)); +alter table t1 change column a b int, change column b a int; +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `b` int(11) DEFAULT NULL, + `a` int(11) DEFAULT NULL, + CONSTRAINT `CONSTRAINT_1` CHECK (`b` > `a`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +drop table t1; +create table t1 (a int primary key, b int, c int default (a+b) check (a+b>0), +d int as (a+b), +key (b), +constraint test check (a+b > 1)); +alter table t1 change b new_b int not null, add column b char(1), add constraint new check (length(b) > 0); +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) NOT NULL, + `new_b` int(11) NOT NULL, + `c` int(11) DEFAULT (`a` + `new_b`) CHECK (`a` + `new_b` > 0), + `d` int(11) GENERATED ALWAYS AS (`a` + `new_b`) VIRTUAL, + `b` char(1) DEFAULT NULL, + PRIMARY KEY (`a`), + KEY `b` (`new_b`), + CONSTRAINT `test` CHECK (`a` + `new_b` > 1), + CONSTRAINT `new` CHECK (length(`b`) > 0) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +drop table t1; +# # End of 10.2 tests # diff --git a/mysql-test/t/alter_table.test b/mysql-test/t/alter_table.test index 79a01d5e0c4..63d24c0740d 100644 --- a/mysql-test/t/alter_table.test +++ b/mysql-test/t/alter_table.test @@ -1882,6 +1882,24 @@ alter table t1 drop column a, drop index a; show create table t1; drop table t1; +--echo # +--echo # MDEV-13508 Check that rename of columns changes defaults, virtual +--echo # columns and constraints +--echo # + +create table t1 (a int, b int, check(a>b)); +alter table t1 change column a b int, change column b a int; +show create table t1; +drop table t1; + +create table t1 (a int primary key, b int, c int default (a+b) check (a+b>0), + d int as (a+b), + key (b), + constraint test check (a+b > 1)); +alter table t1 change b new_b int not null, add column b char(1), add constraint new check (length(b) > 0); +show create table t1; +drop table t1; + --echo # --echo # End of 10.2 tests --echo # diff --git a/sql/item.cc b/sql/item.cc index a46c17a0dbb..03949c1ceef 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -885,6 +885,34 @@ bool Item_field::add_field_to_set_processor(void *arg) DBUG_RETURN(FALSE); } + +/** + Rename fields in an expression to new field name as speficied by ALTER TABLE +*/ + +bool Item_field::rename_fields_processor(void *arg) +{ + Item::func_processor_rename *rename= (Item::func_processor_rename*) arg; + List_iterator def_it(rename->fields); + Create_field *def; + + while ((def=def_it++)) + { + if (def->change && + (!db_name || !db_name[0] || + !my_strcasecmp(table_alias_charset, db_name, rename->db_name.str)) && + (!table_name || !table_name[0] || + !my_strcasecmp(table_alias_charset, table_name, rename->table_name.str)) && + !my_strcasecmp(system_charset_info, field_name, def->change)) + { + field_name= def->field_name; + break; + } + } + return 0; +} + + /** Check if an Item_field references some field from a list of fields. diff --git a/sql/item.h b/sql/item.h index 727185a1deb..325514d19aa 100644 --- a/sql/item.h +++ b/sql/item.h @@ -1667,6 +1667,7 @@ public: */ virtual bool check_partition_func_processor(void *arg) { return 1;} virtual bool vcol_in_partition_func_processor(void *arg) { return 0; } + virtual bool rename_fields_processor(void *arg) { return 0; } /** Processor used to check acceptability of an item in the defining expression for a virtual column @@ -1680,6 +1681,12 @@ public: uint errors; /* Bits of possible errors */ const char *name; /* Not supported function */ }; + struct func_processor_rename + { + LEX_CSTRING db_name; + LEX_CSTRING table_name; + List fields; + }; virtual bool check_vcol_func_processor(void *arg) { return mark_unsupported_function(full_name(), arg, VCOL_IMPOSSIBLE); @@ -2639,6 +2646,7 @@ public: bool update_table_bitmaps_processor(void *arg); bool switch_to_nullable_fields_processor(void *arg); bool update_vcol_processor(void *arg); + bool rename_fields_processor(void *arg); bool check_vcol_func_processor(void *arg) { context= 0; diff --git a/sql/sql_alter.h b/sql/sql_alter.h index 5668a0f52be..4c75bd4a509 100644 --- a/sql/sql_alter.h +++ b/sql/sql_alter.h @@ -123,6 +123,7 @@ public: static const uint ALTER_ADD_CHECK_CONSTRAINT = 1L << 27; static const uint ALTER_DROP_CHECK_CONSTRAINT = 1L << 28; + static const uint ALTER_RENAME_COLUMN = 1L << 29; enum enum_enable_or_disable { LEAVE_AS_IS, ENABLE, DISABLE }; diff --git a/sql/sql_list.cc b/sql/sql_list.cc index 2c1b3c47d55..c63c83f0645 100644 --- a/sql/sql_list.cc +++ b/sql/sql_list.cc @@ -38,21 +38,21 @@ void free_list(I_List *list) } -base_list::base_list(const base_list &rhs, MEM_ROOT *mem_root) +bool base_list::copy(const base_list *rhs, MEM_ROOT *mem_root) { - if (rhs.elements) + bool error= 0; + if (rhs->elements) { /* It's okay to allocate an array of nodes at once: we never call a destructor for list_node objects anyway. */ - first= (list_node*) alloc_root(mem_root, - sizeof(list_node) * rhs.elements); - if (first) + if ((first= (list_node*) alloc_root(mem_root, + sizeof(list_node) * rhs->elements))) { - elements= rhs.elements; + elements= rhs->elements; list_node *dst= first; - list_node *src= rhs.first; + list_node *src= rhs->first; for (; dst < first + elements - 1; dst++, src= src->next) { dst->info= src->info; @@ -63,10 +63,12 @@ base_list::base_list(const base_list &rhs, MEM_ROOT *mem_root) dst->next= &end_of_list; /* Setup 'last' member */ last= &dst->next; - return; + return 0; } + error= 1; } elements= 0; first= &end_of_list; last= &first; + return error; } diff --git a/sql/sql_list.h b/sql/sql_list.h index 321041cf200..c27ed44cb9c 100644 --- a/sql/sql_list.h +++ b/sql/sql_list.h @@ -200,7 +200,8 @@ public: need to copy elements by value, you should employ list_copy_and_replace_each_value after creating a copy. */ - base_list(const base_list &rhs, MEM_ROOT *mem_root); + bool copy(const base_list *rhs, MEM_ROOT *mem_root); + base_list(const base_list &rhs, MEM_ROOT *mem_root) { copy(&rhs, mem_root); } inline base_list(bool error) { } inline bool push_back(void *info) { @@ -536,6 +537,8 @@ public: inline void disjoin(List *list) { base_list::disjoin(list); } inline bool add_unique(T *a, bool (*eq)(T *a, T *b)) { return base_list::add_unique(a, (List_eq *)eq); } + inline bool copy(const List *list, MEM_ROOT *root) + { return base_list::copy(list, root); } void delete_elements(void) { list_node *element,*next; diff --git a/sql/sql_table.cc b/sql/sql_table.cc index da001674887..40e551852cd 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -7558,6 +7558,7 @@ mysql_prepare_alter_table(THD *thd, TABLE *table, List new_constraint_list; uint db_create_options= (table->s->db_create_options & ~(HA_OPTION_PACK_RECORD)); + Item::func_processor_rename column_rename_param; uint used_fields; KEY *key_info=table->key_info; bool rc= TRUE; @@ -7607,6 +7608,13 @@ mysql_prepare_alter_table(THD *thd, TABLE *table, if (!(used_fields & HA_CREATE_USED_CONNECTION)) create_info->connect_string= table->s->connect_string; + column_rename_param.db_name.str= table->s->db.str; + column_rename_param.db_name.length= table->s->db.length; + column_rename_param.table_name.str= table->s->table_name.str; + column_rename_param.table_name.length= table->s->table_name.length; + if (column_rename_param.fields.copy(&alter_info->create_list, thd->mem_root)) + DBUG_RETURN(1); // OOM + restore_record(table, s->default_values); // Empty record for DEFAULT if ((create_info->fields_option_struct= (ha_field_option_struct**) @@ -7651,6 +7659,24 @@ mysql_prepare_alter_table(THD *thd, TABLE *table, bitmap_set_bit(dropped_fields, field->field_index); continue; } + + /* + If we are doing a rename of a column, update all references in virtual + column expressions, constraints and defaults to use the new column name + */ + if (alter_info->flags & Alter_info::ALTER_RENAME_COLUMN) + { + if (field->vcol_info) + field->vcol_info->expr->walk(&Item::rename_fields_processor, 1, + &column_rename_param); + if (field->check_constraint) + field->check_constraint->expr->walk(&Item::rename_fields_processor, 1, + &column_rename_param); + if (field->default_value) + field->default_value->expr->walk(&Item::rename_fields_processor, 1, + &column_rename_param); + } + /* Check if field is changed */ def_it.rewind(); while ((def=def_it++)) @@ -8060,7 +8086,10 @@ mysql_prepare_alter_table(THD *thd, TABLE *table, } } if (!drop) + { + check->expr->walk(&Item::rename_fields_processor, 1, &column_rename_param); new_constraint_list.push_back(check, thd->mem_root); + } } } /* Add new constraints */ diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 1fcc568af09..112cf9877b4 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -7606,7 +7606,8 @@ alter_list_item: | CHANGE opt_column opt_if_exists_table_element field_ident field_spec opt_place { - Lex->alter_info.flags|= Alter_info::ALTER_CHANGE_COLUMN; + Lex->alter_info.flags|= (Alter_info::ALTER_CHANGE_COLUMN | + Alter_info::ALTER_RENAME_COLUMN); Lex->create_last_non_select_table= Lex->last_table(); $5->change= $4.str; $5->after= $6; From 76dc6af24c8cc70eba42c11d0eb36e64b739f3b7 Mon Sep 17 00:00:00 2001 From: Monty Date: Sat, 10 Feb 2018 14:27:06 +0200 Subject: [PATCH 14/18] TokuDB didn't compile with valgrind TokuDB uses USE_VALGRIND while MariaDB uses HAVE_valgrind Fixed by defining USE_VALGRIND in TokuDB if HAVE_valgrind is used --- storage/tokudb/PerconaFT/portability/toku_race_tools.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/storage/tokudb/PerconaFT/portability/toku_race_tools.h b/storage/tokudb/PerconaFT/portability/toku_race_tools.h index 8482a164fb8..9ed46ec909d 100644 --- a/storage/tokudb/PerconaFT/portability/toku_race_tools.h +++ b/storage/tokudb/PerconaFT/portability/toku_race_tools.h @@ -40,6 +40,11 @@ Copyright (c) 2006, 2015, Percona and/or its affiliates. All rights reserved. #include +#ifdef HAVE_valgrind +#undef USE_VALGRIND +#define USE_VALGRIND 1 +#endif + #if defined(__linux__) && USE_VALGRIND # include From 7ed01563842cef3a5f8fe13d8538cd766fb8fc7a Mon Sep 17 00:00:00 2001 From: Monty Date: Sat, 10 Feb 2018 14:27:29 +0200 Subject: [PATCH 15/18] Removed compiler warnings --- storage/sphinx/ha_sphinx.cc | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/storage/sphinx/ha_sphinx.cc b/storage/sphinx/ha_sphinx.cc index 41d68645fc6..688431a90ef 100644 --- a/storage/sphinx/ha_sphinx.cc +++ b/storage/sphinx/ha_sphinx.cc @@ -1041,8 +1041,8 @@ static bool ParseUrl ( CSphSEShare * share, TABLE * table, bool bCreate ) bool bOk = true; bool bQL = false; char * sScheme = NULL; - char * sHost = SPHINXAPI_DEFAULT_HOST; - char * sIndex = SPHINXAPI_DEFAULT_INDEX; + char * sHost = (char*) SPHINXAPI_DEFAULT_HOST; + char * sIndex = (char*) SPHINXAPI_DEFAULT_INDEX; int iPort = SPHINXAPI_DEFAULT_PORT; // parse connection string, if any @@ -1068,12 +1068,12 @@ static bool ParseUrl ( CSphSEShare * share, TABLE * table, bool bCreate ) sHost--; // reuse last slash iPort = 0; if (!( sIndex = strrchr ( sHost, ':' ) )) - sIndex = SPHINXAPI_DEFAULT_INDEX; + sIndex = (char*) SPHINXAPI_DEFAULT_INDEX; else { *sIndex++ = '\0'; if ( !*sIndex ) - sIndex = SPHINXAPI_DEFAULT_INDEX; + sIndex = (char*) SPHINXAPI_DEFAULT_INDEX; } bOk = true; break; @@ -1095,11 +1095,11 @@ static bool ParseUrl ( CSphSEShare * share, TABLE * table, bool bCreate ) if ( sIndex ) *sIndex++ = '\0'; else - sIndex = SPHINXAPI_DEFAULT_INDEX; + sIndex = (char*) SPHINXAPI_DEFAULT_INDEX; iPort = atoi(sPort); if ( !iPort ) - iPort = SPHINXAPI_DEFAULT_PORT; + iPort = SPHINXAPI_DEFAULT_PORT; } } else { @@ -1107,7 +1107,7 @@ static bool ParseUrl ( CSphSEShare * share, TABLE * table, bool bCreate ) if ( sIndex ) *sIndex++ = '\0'; else - sIndex = SPHINXAPI_DEFAULT_INDEX; + sIndex = (char*) SPHINXAPI_DEFAULT_INDEX; } bOk = true; break; @@ -1303,8 +1303,8 @@ CSphSEQuery::CSphSEQuery ( const char * sQuery, int iLength, const char * sIndex , m_sGeoLongAttr ( "" ) , m_fGeoLatitude ( 0.0f ) , m_fGeoLongitude ( 0.0f ) - , m_sComment ( "" ) - , m_sSelect ( "*" ) + , m_sComment ( (char*) "" ) + , m_sSelect ( (char*) "*" ) , m_pBuf ( NULL ) , m_pCur ( NULL ) From a2feeb3d6f0b994562d9ad7622438897b253ecd0 Mon Sep 17 00:00:00 2001 From: Alexander Barkov Date: Sat, 10 Feb 2018 21:51:24 +0400 Subject: [PATCH 16/18] After-merge fixes for "sys_vars.sysvars_innodb '32bit,xtradb'" test results. --- mysql-test/suite/sys_vars/r/sysvars_innodb,32bit,xtradb.rdiff | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mysql-test/suite/sys_vars/r/sysvars_innodb,32bit,xtradb.rdiff b/mysql-test/suite/sys_vars/r/sysvars_innodb,32bit,xtradb.rdiff index a57fc12948c..f04fd5ed399 100644 --- a/mysql-test/suite/sys_vars/r/sysvars_innodb,32bit,xtradb.rdiff +++ b/mysql-test/suite/sys_vars/r/sysvars_innodb,32bit,xtradb.rdiff @@ -1236,7 +1236,7 @@ VARIABLE_NAME INNODB_VERSION SESSION_VALUE NULL -GLOBAL_VALUE 5.6.37 -+GLOBAL_VALUE 5.6.36-83.0 ++GLOBAL_VALUE 5.6.38-83.0 GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE NULL VARIABLE_SCOPE GLOBAL From b88542681b884951308e49c99caa3435cb719f09 Mon Sep 17 00:00:00 2001 From: Alexey Botchkov Date: Sat, 10 Feb 2018 22:17:49 +0400 Subject: [PATCH 17/18] MDEV-14611 ALTER TABLE EXCHANGE PARTITION does not work properly when used with DATA DIRECTORY. When table is renamed, the InnoDB's dictionary cache didn't change the ib_table->data_dir_path accordingly. Now it's set to NULL. --- .../r/partition_basic_symlink_innodb.result | 193 ++++++++++++++++++ .../t/partition_basic_symlink_innodb.test | 143 ++++++++++++- storage/innobase/row/row0mysql.cc | 1 + storage/xtradb/row/row0mysql.cc | 1 + 4 files changed, 336 insertions(+), 2 deletions(-) diff --git a/mysql-test/suite/parts/r/partition_basic_symlink_innodb.result b/mysql-test/suite/parts/r/partition_basic_symlink_innodb.result index d7a77e5e54a..405511543bf 100644 --- a/mysql-test/suite/parts/r/partition_basic_symlink_innodb.result +++ b/mysql-test/suite/parts/r/partition_basic_symlink_innodb.result @@ -127,5 +127,198 @@ t1#P#p0.ibd t1#P#p1.ibd DROP TABLE t1; # +# MDEV-14611 ALTER TABLE EXCHANGE PARTITION does not work +# properly when used with DATA DIRECTORY +# +SET GLOBAL innodb_file_per_table = ON; +CREATE TABLE t1 +( +myid INT(11) NOT NULL, +myval VARCHAR(10), +PRIMARY KEY (myid) +) ENGINE=INNODB PARTITION BY KEY (myid) +( +PARTITION p0001 DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' ENGINE = INNODB, +PARTITION p0002 DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' ENGINE = INNODB, +PARTITION p0003 DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' ENGINE = INNODB, +PARTITION p0004 DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' ENGINE = INNODB +); +CREATE TABLE t2 +( +myid INT(11) NOT NULL, +myval VARCHAR(10), +PRIMARY KEY (myid) +) ENGINE=INNODB DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir'; +ALTER TABLE t1 EXCHANGE PARTITION p0001 WITH TABLE t2; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `myid` int(11) NOT NULL, + `myval` varchar(10) DEFAULT NULL, + PRIMARY KEY (`myid`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (myid) +(PARTITION p0001 DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' ENGINE = InnoDB, + PARTITION p0002 DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' ENGINE = InnoDB, + PARTITION p0003 DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' ENGINE = InnoDB, + PARTITION p0004 DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' ENGINE = InnoDB) */ +DROP TABLE t1, t2; +CREATE TABLE t1 +( +myid INT(11) NOT NULL, +myval VARCHAR(10), +PRIMARY KEY (myid) +) ENGINE=INNODB PARTITION BY RANGE (myid) +( +PARTITION p0001 VALUES LESS THAN (50) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' ENGINE = INNODB, +PARTITION p0002 VALUES LESS THAN (150) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' ENGINE = INNODB, +PARTITION p0003 VALUES LESS THAN (1050) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' ENGINE = INNODB, +PARTITION p0004 VALUES LESS THAN (10050) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' ENGINE = INNODB +); +CREATE TABLE t2 +( +myid INT(11) NOT NULL, +myval VARCHAR(10), +PRIMARY KEY (myid) +) ENGINE=INNODB DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir'; +insert into t1 values (1, 'one'); +insert into t2 values (2, 'two'), (3, 'threee'), (4, 'four'); +select * from t1; +myid myval +1 one +ALTER TABLE t1 EXCHANGE PARTITION p0001 WITH TABLE t2; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `myid` int(11) NOT NULL, + `myval` varchar(10) DEFAULT NULL, + PRIMARY KEY (`myid`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (myid) +(PARTITION p0001 VALUES LESS THAN (50) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' ENGINE = InnoDB, + PARTITION p0002 VALUES LESS THAN (150) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' ENGINE = InnoDB, + PARTITION p0003 VALUES LESS THAN (1050) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' ENGINE = InnoDB, + PARTITION p0004 VALUES LESS THAN (10050) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' ENGINE = InnoDB) */ +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `myid` int(11) NOT NULL, + `myval` varchar(10) DEFAULT NULL, + PRIMARY KEY (`myid`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/mysql-test-data-dir/' +select * from t1; +myid myval +2 two +3 threee +4 four +select * from t2; +myid myval +1 one +DROP TABLE t1, t2; +CREATE TABLE t1 +( +myid INT(11) NOT NULL, +myval VARCHAR(10), +PRIMARY KEY (myid) +) ENGINE=INNODB PARTITION BY RANGE (myid) +( +PARTITION p0001 VALUES LESS THAN (50) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' ENGINE = INNODB, +PARTITION p0002 VALUES LESS THAN (150) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' ENGINE = INNODB, +PARTITION p0003 VALUES LESS THAN (1050) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' ENGINE = INNODB, +PARTITION p0004 VALUES LESS THAN (10050) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' ENGINE = INNODB +); +CREATE TABLE t2 +( +myid INT(11) NOT NULL, +myval VARCHAR(10), +PRIMARY KEY (myid) +) ENGINE=INNODB; +insert into t1 values (1, 'one'); +insert into t2 values (2, 'two'), (3, 'threee'), (4, 'four'); +select * from t1; +myid myval +1 one +ALTER TABLE t1 EXCHANGE PARTITION p0001 WITH TABLE t2; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `myid` int(11) NOT NULL, + `myval` varchar(10) DEFAULT NULL, + PRIMARY KEY (`myid`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (myid) +(PARTITION p0001 VALUES LESS THAN (50) ENGINE = InnoDB, + PARTITION p0002 VALUES LESS THAN (150) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' ENGINE = InnoDB, + PARTITION p0003 VALUES LESS THAN (1050) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' ENGINE = InnoDB, + PARTITION p0004 VALUES LESS THAN (10050) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' ENGINE = InnoDB) */ +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `myid` int(11) NOT NULL, + `myval` varchar(10) DEFAULT NULL, + PRIMARY KEY (`myid`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/mysql-test-data-dir/' +select * from t1; +myid myval +2 two +3 threee +4 four +select * from t2; +myid myval +1 one +DROP TABLE t1, t2; +CREATE TABLE t1 +( +myid INT(11) NOT NULL, +myval VARCHAR(10), +PRIMARY KEY (myid) +) ENGINE=INNODB PARTITION BY RANGE (myid) +( +PARTITION p0001 VALUES LESS THAN (50) ENGINE = INNODB, +PARTITION p0002 VALUES LESS THAN (150) ENGINE = INNODB, +PARTITION p0003 VALUES LESS THAN (1050) ENGINE = INNODB, +PARTITION p0004 VALUES LESS THAN (10050) ENGINE = INNODB +); +CREATE TABLE t2 +( +myid INT(11) NOT NULL, +myval VARCHAR(10), +PRIMARY KEY (myid) +) ENGINE=INNODB DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir'; +insert into t1 values (1, 'one'); +insert into t2 values (2, 'two'), (3, 'threee'), (4, 'four'); +select * from t1; +myid myval +1 one +ALTER TABLE t1 EXCHANGE PARTITION p0001 WITH TABLE t2; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `myid` int(11) NOT NULL, + `myval` varchar(10) DEFAULT NULL, + PRIMARY KEY (`myid`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (myid) +(PARTITION p0001 VALUES LESS THAN (50) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' ENGINE = InnoDB, + PARTITION p0002 VALUES LESS THAN (150) ENGINE = InnoDB, + PARTITION p0003 VALUES LESS THAN (1050) ENGINE = InnoDB, + PARTITION p0004 VALUES LESS THAN (10050) ENGINE = InnoDB) */ +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `myid` int(11) NOT NULL, + `myval` varchar(10) DEFAULT NULL, + PRIMARY KEY (`myid`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +select * from t1; +myid myval +2 two +3 threee +4 four +select * from t2; +myid myval +1 one +DROP TABLE t1, t2; +# # Cleanup # diff --git a/mysql-test/suite/parts/t/partition_basic_symlink_innodb.test b/mysql-test/suite/parts/t/partition_basic_symlink_innodb.test index 35dc2d5e004..31448c7a9fe 100644 --- a/mysql-test/suite/parts/t/partition_basic_symlink_innodb.test +++ b/mysql-test/suite/parts/t/partition_basic_symlink_innodb.test @@ -147,6 +147,147 @@ SHOW CREATE TABLE t1; DROP TABLE t1; +--echo # +--echo # MDEV-14611 ALTER TABLE EXCHANGE PARTITION does not work +--echo # properly when used with DATA DIRECTORY +--echo # +let $data_dir_path= $MYSQLTEST_VARDIR/mysql-test-data-dir; +let $alt_data_dir_path= $MYSQLTEST_VARDIR/mysql-test-idx-dir; +SET GLOBAL innodb_file_per_table = ON; +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +eval CREATE TABLE t1 +( + myid INT(11) NOT NULL, + myval VARCHAR(10), + PRIMARY KEY (myid) +) ENGINE=INNODB PARTITION BY KEY (myid) + ( + PARTITION p0001 DATA DIRECTORY = '$data_dir_path' ENGINE = INNODB, + PARTITION p0002 DATA DIRECTORY = '$data_dir_path' ENGINE = INNODB, + PARTITION p0003 DATA DIRECTORY = '$data_dir_path' ENGINE = INNODB, + PARTITION p0004 DATA DIRECTORY = '$data_dir_path' ENGINE = INNODB + ); + +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +eval CREATE TABLE t2 +( + myid INT(11) NOT NULL, + myval VARCHAR(10), + PRIMARY KEY (myid) +) ENGINE=INNODB DATA DIRECTORY = '$data_dir_path'; + +ALTER TABLE t1 EXCHANGE PARTITION p0001 WITH TABLE t2; + +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +SHOW CREATE TABLE t1; +DROP TABLE t1, t2; +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +eval CREATE TABLE t1 +( + myid INT(11) NOT NULL, + myval VARCHAR(10), + PRIMARY KEY (myid) +) ENGINE=INNODB PARTITION BY RANGE (myid) + ( + PARTITION p0001 VALUES LESS THAN (50) DATA DIRECTORY = '$data_dir_path' ENGINE = INNODB, + PARTITION p0002 VALUES LESS THAN (150) DATA DIRECTORY = '$data_dir_path' ENGINE = INNODB, + PARTITION p0003 VALUES LESS THAN (1050) DATA DIRECTORY = '$data_dir_path' ENGINE = INNODB, + PARTITION p0004 VALUES LESS THAN (10050) DATA DIRECTORY = '$data_dir_path' ENGINE = INNODB + ); + +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +eval CREATE TABLE t2 +( + myid INT(11) NOT NULL, + myval VARCHAR(10), + PRIMARY KEY (myid) +) ENGINE=INNODB DATA DIRECTORY = '$alt_data_dir_path'; + +insert into t1 values (1, 'one'); +insert into t2 values (2, 'two'), (3, 'threee'), (4, 'four'); + +select * from t1; +ALTER TABLE t1 EXCHANGE PARTITION p0001 WITH TABLE t2; + +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +SHOW CREATE TABLE t1; +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +SHOW CREATE TABLE t2; +select * from t1; +select * from t2; +DROP TABLE t1, t2; + +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +eval CREATE TABLE t1 +( + myid INT(11) NOT NULL, + myval VARCHAR(10), + PRIMARY KEY (myid) +) ENGINE=INNODB PARTITION BY RANGE (myid) + ( + PARTITION p0001 VALUES LESS THAN (50) DATA DIRECTORY = '$data_dir_path' ENGINE = INNODB, + PARTITION p0002 VALUES LESS THAN (150) DATA DIRECTORY = '$data_dir_path' ENGINE = INNODB, + PARTITION p0003 VALUES LESS THAN (1050) DATA DIRECTORY = '$data_dir_path' ENGINE = INNODB, + PARTITION p0004 VALUES LESS THAN (10050) DATA DIRECTORY = '$data_dir_path' ENGINE = INNODB + ); + +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +eval CREATE TABLE t2 +( + myid INT(11) NOT NULL, + myval VARCHAR(10), + PRIMARY KEY (myid) +) ENGINE=INNODB; + +insert into t1 values (1, 'one'); +insert into t2 values (2, 'two'), (3, 'threee'), (4, 'four'); + +select * from t1; +ALTER TABLE t1 EXCHANGE PARTITION p0001 WITH TABLE t2; + +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +SHOW CREATE TABLE t1; +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +SHOW CREATE TABLE t2; +select * from t1; +select * from t2; +DROP TABLE t1, t2; + +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +eval CREATE TABLE t1 +( + myid INT(11) NOT NULL, + myval VARCHAR(10), + PRIMARY KEY (myid) +) ENGINE=INNODB PARTITION BY RANGE (myid) + ( + PARTITION p0001 VALUES LESS THAN (50) ENGINE = INNODB, + PARTITION p0002 VALUES LESS THAN (150) ENGINE = INNODB, + PARTITION p0003 VALUES LESS THAN (1050) ENGINE = INNODB, + PARTITION p0004 VALUES LESS THAN (10050) ENGINE = INNODB + ); + +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +eval CREATE TABLE t2 +( + myid INT(11) NOT NULL, + myval VARCHAR(10), + PRIMARY KEY (myid) +) ENGINE=INNODB DATA DIRECTORY = '$alt_data_dir_path'; + +insert into t1 values (1, 'one'); +insert into t2 values (2, 'two'), (3, 'threee'), (4, 'four'); + +select * from t1; +ALTER TABLE t1 EXCHANGE PARTITION p0001 WITH TABLE t2; + +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +SHOW CREATE TABLE t1; +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +SHOW CREATE TABLE t2; +select * from t1; +select * from t2; +DROP TABLE t1, t2; --echo # --echo # Cleanup --echo # @@ -160,5 +301,3 @@ EVAL SET GLOBAL innodb_file_per_table=$innodb_file_per_table_orig; EVAL SET SESSION innodb_strict_mode=$innodb_strict_mode_orig; --enable_query_log - - diff --git a/storage/innobase/row/row0mysql.cc b/storage/innobase/row/row0mysql.cc index 36ca5c7767b..aa1dd98234b 100644 --- a/storage/innobase/row/row0mysql.cc +++ b/storage/innobase/row/row0mysql.cc @@ -5341,6 +5341,7 @@ end: trx_rollback_to_savepoint(trx, NULL); trx->error_state = DB_SUCCESS; } + table->data_dir_path= NULL; } funct_exit: diff --git a/storage/xtradb/row/row0mysql.cc b/storage/xtradb/row/row0mysql.cc index 549a19799b3..ce4fe7f53ea 100644 --- a/storage/xtradb/row/row0mysql.cc +++ b/storage/xtradb/row/row0mysql.cc @@ -5372,6 +5372,7 @@ end: trx_rollback_to_savepoint(trx, NULL); trx->error_state = DB_SUCCESS; } + table->data_dir_path= NULL; } funct_exit: From 7a106d19614cb052ecf245e3825b9510e8029ba0 Mon Sep 17 00:00:00 2001 From: Elena Stepanova Date: Mon, 12 Feb 2018 03:20:09 +0200 Subject: [PATCH 18/18] Updated list of unstable tests for 10.2.13 --- mysql-test/unstable-tests | 236 ++++++++++++++++++++++++-------------- 1 file changed, 149 insertions(+), 87 deletions(-) diff --git a/mysql-test/unstable-tests b/mysql-test/unstable-tests index 6e1bfd6b43c..0c564f54678 100644 --- a/mysql-test/unstable-tests +++ b/mysql-test/unstable-tests @@ -23,15 +23,16 @@ # ############################################################################## -# Based on 10.2 f5c479565d1d07662f23f0a688add6dffeee5f84 +# Based on 10.2 49bcc82686c9c305d376183ba4f7bafcbab96bc3 +main.alter_table : Modified in 10.2.13 main.analyze_stmt_slow_query_log : MDEV-12237 - Wrong result main.auth_named_pipe : MDEV-14724 - System error 2 main.connect2 : MDEV-13885 - Server crash +main.create : Modified in 10.2.13 main.create_or_replace : Modified in 10.2.12 -main.cte_grant : Modified in 10.2.11 -main.cte_nonrecursive : Modified in 10.2.12 -main.cte_recursive : Modified in 10.2.12 +main.cte_nonrecursive : Modified in 10.2.13 +main.cte_recursive : Modified in 10.2.13 main.ctype_latin1 : Modified in 10.2.12 main.ctype_like_range : Modified in 10.2.12 main.ctype_ucs2_uca : Modified in 10.2.12 @@ -41,65 +42,84 @@ main.ctype_utf8 : Modified in 10.2.12 main.ctype_utf8_uca : Modified in 10.2.12 main.ctype_utf8mb4 : Modified in 10.2.12 main.ctype_utf8mb4_uca : Modified in 10.2.12 -main.delimiter_command_case_sensitivity : Added in 10.2.11 -main.derived_cond_pushdown : Modified in 10.2.11 +main.derived : Modified in 10.2.13 +main.derived_cond_pushdown : Modified in 10.2.13 main.distinct : MDEV-14194 - Crash +main.dyncol : Modified in 10.2.13 main.events_2 : MDEV-13277 - Crash main.events_slowlog : MDEV-12821 - Wrong result +main.fulltext : Modified in 10.2.13 +main.func_concat : Modified in 10.2.13 +main.func_isnull : Modified in 10.2.13 main.func_json : Modified in 10.2.12 main.func_misc : Modified in 10.2.12 main.func_set : Modified in 10.2.12 main.func_str : Modified in 10.2.12 -main.gis-json : Modified in 10.2.11 +main.gis-rtree : Modified in 10.2.13 main.group_by : Modified in 10.2.12 main.having : Modified in 10.2.12 main.index_merge_innodb : MDEV-7142 - Plan mismatch main.innodb_mysql_lock : MDEV-7861 - Wrong result +main.join_cache : Modified in 10.2.13 main.join_outer : Modified in 10.2.12 main.kill-2 : MDEV-13257 - Wrong result +main.kill_processlist-6619 : MDEV-10793 - Wrong result main.log_slow : MDEV-13263 - Wrong result +main.mdev_14586 : Modified in 10.2.13 main.mdev-504 : MDEV-15171 - warning -main.mysql_client_test_nonblock : CONC-208 - Error on Power +main.merge : Modified in 10.2.13 +main.myisam_optimize : Modified in 10.2.13 +main.mysql_client_test_nonblock : CONC-208 - Error on Power; MDEV-15096 - exec failed main.mysql_upgrade_noengine : MDEV-14355 - Wrong result main.mysql_upgrade_ssl : MDEV-13492 - Unknown SSL error -main.mysqlbinlog : Modified in 10.2.11 main.mysqldump : MDEV-14800 - Stack smashing detected +main.mysqldump-nl : Modified in 10.2.13 main.mysqld_option_err : MDEV-12747 - Timeout main.mysqlhotcopy_myisam : MDEV-10995 - Hang on debug main.mysqltest : MDEV-13887 - Wrong result main.openssl_1 : MDEV-13492 - Unknown SSL error -main.order_by : Modified in 10.2.11 -main.order_by_innodb : Modified in 10.2.11 -main.ps : MDEV-11017 - Wrong result; modified in 10.2.12 +main.order_by : Modified in 10.2.13 +main.order_by_optimizer_innodb : MDEV-10683 - Wrong result +main.partition : Modified in 10.2.13 +main.partition_innodb : Modified in 10.2.13 +main.ps : MDEV-11017 - Wrong result; modified in 10.2.13 +main.query_cache_debug : MDEV-15281 - Query cache is disabled; modified in 10.2.13 +main.range_vs_index_merge_innodb : MDEV-15283 - Server has gone away +main.repair : Modified in 10.2.13 +main.set_statement : MDEV-13183 - Wrong result main.shm : MDEV-12727 - Mismatch, ERROR 2013 main.show_explain : MDEV-10674 - Wrong result code -main.sp : MDEV-7866 - Mismatch; modified in 10.2.11 +main.sp : MDEV-7866 - Mismatch; modified in 10.2.13 main.ssl_ca : MDEV-10895 - SSL connection error on Power main.ssl_cert_verify : MDEV-13735 - Server crash main.ssl_connect : MDEV-13492 - Unknown SSL error main.ssl_timeout : MDEV-11244 - Crash main.stat_tables_par : MDEV-13266 - Wrong result main.status : MDEV-13255 - Wrong result -main.subselect_exists2in : Modified in 10.2.11 +main.subselect : Modified in 10.2.13 main.subselect_innodb : MDEV-10614 - Wrong result +main.symlink-myisam-11902 : MDEV-15098 - Error 40 from storage engine main.tc_heuristic_recover : MDEV-14189 - Wrong result -main.trigger : Modified in 10.2.11 -main.type_bit : Modified in 10.2.11 -main.type_date : Modified in 10.2.11 -main.type_time : Modified in 10.2.11 +main.thread_id_overflow : Added in 10.2.13 +main.type_blob : MDEV-15195 - Wrong result +main.type_time_6065 : Modified in 10.2.13 +main.union : Modified in 10.2.13 +main.update_innodb : Modified in 10.2.13 main.userstat : MDEV-12904 - SSL errors main.view : Modified in 10.2.12 -main.win : Modified in 10.2.12 +main.win : Modified in 10.2.13 +main.xa : Modified in 10.2.13 +main.xml : Modified in 10.2.13 #---------------------------------------------------------------- +archive.archive_bitfield : MDEV-11771 - table is marked as crashed archive.mysqlhotcopy_archive : MDEV-10995 - Hang on debug #---------------------------------------------------------------- binlog.binlog_commit_wait : MDEV-10150 - Mismatch -binlog.binlog_flush_binlogs_delete_domain : MDEV-14431 - Wrong exit code; added in 10.2.11 -binlog.binlog_gtid_delete_domain_debug : Added in 10.2.11 +binlog.binlog_flush_binlogs_delete_domain : MDEV-14431 - Wrong exit code binlog.binlog_xa_recover : MDEV-8517 - Extra checkpoint #---------------------------------------------------------------- @@ -110,6 +130,7 @@ binlog_encryption.encrypted_master_switch_to_unencrypted : MDEV-14190 - Can't in binlog_encryption.encryption_combo : MDEV-14199 - Table is marked as crashed binlog_encryption.rpl_binlog_errors : MDEV-12742 - Crash binlog_encryption.rpl_parallel : MDEV-10653 - Timeout in include +binlog_encryption.rpl_relayrotate : MDEV-15194 - Timeout binlog_encryption.rpl_semi_sync : MDEV-11673 - Valgrind binlog_encryption.rpl_skip_replication : MDEV-13571 - Unexpected warning binlog_encryption.rpl_ssl : MDEV-14507 - Timeouts @@ -119,22 +140,20 @@ binlog_encryption.rpl_sync : MDEV-13830 - Assertion failure #---------------------------------------------------------------- connect.pivot : MDEV-14803 - Failed to discover table -connect.tbl : MDEV-10179 - Mismatch, MDEV-9844 - Valgrind, crash -connect.tbl_thread : MDEV-10179 - Mismatch, MDEV-9844 - Valgrind, crash, MDEV-14214 - Syntax error connect.vcol : MDEV-12374 - Fails on Windows #---------------------------------------------------------------- encryption.create_or_replace : MDEV-9359, MDEV-13516 - Assertion failure, MDEV-12694 - Timeout -encryption.debug_key_management : MDEV-13841 - Timeout -encryption.encrypt_and_grep : MDEV-13765 - Wrong result -encryption.encryption_force : Modified in 10.2.11 -encryption.filekeys_encfile : Modified in 10.2.11 -encryption.filekeys_encfile_file : Modified in 10.2.11 +encryption.debug_key_management : MDEV-13841 - Timeout; modified in 10.2.13 +encryption.encrypt_and_grep : MDEV-13765 - Wrong result; modified in 10.2.13 encryption.innochecksum : MDEV-13644 - Assertion failure +encryption.innodb-bad-key-change : Modified in 10.2.13 encryption.innodb-compressed-blob : MDEV-14728 - Unable to get certificate encryption.innodb-discard-import-change : MDEV-12632 - Valgrind -encryption.innodb-encryption-alter : MDEV-13566 - Lock wait timeout; modified in 10.2.11 +encryption.innodb_encrypt_log : MDEV-13725 - Wrong result +encryption.innodb_encryption : Modified in 10.2.13 +encryption.innodb-encryption-alter : MDEV-13566 - Lock wait timeout encryption.innodb_encryption_discard_import : MDEV-12903 - Wrong result, MDEV-14045 - Error 192 encryption.innodb_encryption_filekeys : MDEV-9962 - Timeout encryption.innodb_encryption-page-compression : MDEV-14814 - Timeout in wait condition @@ -143,7 +162,8 @@ encryption.innodb-first-page-read : MDEV-14356 - Timeout in wait encryption.innodb_lotoftables : MDEV-11531 - Operation on a dropped tablespace encryption.innodb-missing-key : MDEV-9359 - assertion failure encryption.innodb-redo-badkey : MDEV-13893 - Page cannot be decrypted -encryption.innodb-spatial-index : MDEV-13746 - Wrong result; modified in 10.2.11 +encryption.innodb-spatial-index : MDEV-13746 - Wrong result +encryption.tempfiles : Modified in 10.2.13 #---------------------------------------------------------------- @@ -167,65 +187,68 @@ galera_3nodes.* : Suite is not stable yet #---------------------------------------------------------------- -gcol.innodb_virtual_basic : Modified in 10.2.11 -gcol.innodb_virtual_debug : Modified in 10.2.11 -gcol.innodb_virtual_debug_purge : Modified in 10.2.12 +gcol.innodb_virtual_debug_purge : Modified in 10.2.13 gcol.innodb_virtual_index : Modified in 10.2.12 -gcol.innodb_virtual_rebuild : Added in 10.2.11 gcol.innodb_virtual_stats : Added in 10.2.12 #---------------------------------------------------------------- innodb.101_compatibility : MDEV-13891 - Wrong result -innodb.deadlock_detect : MDEV-13262 - Wrong error code +innodb.alter_copy : Added in 10.2.13 +innodb.autoinc_persist : MDEV-15282 - Assertion failure +innodb.deadlock_detect : Modified in 10.2.13 innodb.doublewrite : MDEV-12905 - Server crash +innodb.foreign_key : Modified in 10.2.13 innodb.group_commit_crash : MDEV-14191 - InnoDB registration failed innodb.group_commit_crash_no_optimize_thread : MDEV-13830 - Assertion failure -innodb.innodb : Modified in 10.2.12 -innodb.innodb-alter-tempfile : MDEV-14485 - Server deadlock on startup +innodb.innodb : Modified in 10.2.13 +innodb.innodb-alter-tempfile : MDEV-15285 - Table already exists innodb.innodb-autoinc : Modified in 10.2.12 -innodb.innodb_bug14147491 : MDEV-11808 - Index is corrupt +innodb.innodb_bug14147491 : MDEV-11808 - Index is corrupt; modified in 10.2.13 +innodb.innodb_bug30423 : MDEV-7311 - Wrong result +innodb.innodb_bug48024 : MDEV-14352 - Assertion failure innodb.innodb_bug59641 : MDEV-13830 - Assertion failure -innodb.innodb_bulk_create_index : Added in 10.2.11 -innodb.innodb_bulk_create_index_debug : Added in 10.2.11 -innodb.innodb_bulk_create_index_flush : Added in 10.2.11 -innodb.innodb_bulk_create_index_replication : Added in 10.2.11 -innodb.innodb_bulk_create_index_small : Added in 10.2.11 +innodb.innodb_buffer_pool_resize : Added in 10.2.13 +innodb.innodb_buffer_pool_resize_with_chunks : Added in 10.2.13 +innodb.innodb_bulk_create_index_replication : MDEV-15273 - Slave failed to start +innodb.innodb_corrupt_bit : Modified in 10.2.13 innodb.innodb_defrag_stats_many_tables : MDEV-14198 - Table is full innodb.innodb-get-fk : MDEV-13276 - Server crash innodb.innodb-index-debug : Modified in 10.2.12 -innodb.innodb-index-online : MDEV-14809 - Cannot save statistics +innodb.innodb-index-online : MDEV-14809 - Cannot save statistics; modified in 10.2.13 innodb.innodb_information_schema : MDEV-8851 - Wrong result +innodb.innodb-lru-force-no-free-page : Added in 10.2.13 innodb.innodb_max_recordsize_32k : MDEV-14801 - Operation failed; modified in 10.2.12 -innodb.innodb_max_recordsize_64k : Modified in 10.2.12 -innodb.innodb-on-duplicate-update : Added in 10.2.11 +innodb.innodb_max_recordsize_64k : MDEV-15203 - Wrong result; modified in 10.2.12 innodb.innodb-page_compression_default : MDEV-13644 - Assertion failure innodb.innodb-page_compression_lzma : MDEV-14353 - Wrong result -innodb.innodb-page_compression_tables : Modified in 10.2.11 -innodb.innodb-replace-debug : Added in 10.2.11 -innodb.innodb_stats_debug : Modified in 10.2.12 -innodb.innodb_stats_drop_locked : Modified in 10.2.12 +innodb.innodb-replace-debug : Modified in 10.2.13 +innodb.innodb_stats_drop_locked : Modified in 10.2.13 innodb.innodb_stats_persistent_debug : MDEV-14801 - Operation failed -innodb.innodb-table-online : MDEV-13894 - Wrong result; modified in 10.2.11 +innodb.innodb-table-online : MDEV-13894 - Wrong result innodb.innodb_sys_semaphore_waits : MDEV-10331 - Semaphore wait innodb.innodb-wl5522-debug : MDEV-14200 - Wrong errno innodb.innodb_zip_innochecksum2 : MDEV-13882 - Extra warnings innodb.innodb_zip_innochecksum3 : MDEV-14486 - Resource temporarily unavailable innodb.lock_deleted : Added in 10.2.12 -innodb.log_corruption : MDEV-13251 - Wrong result +innodb.log_corruption : MDEV-13251 - Wrong result; modified in 10.2.13 innodb.log_data_file_size : MDEV-14204 - Server failed to start innodb.log_file_name : MDEV-14193 - Exception +innodb.log_file_size : MDEV-15202 - Can't initiate database recovery; modified in 10.2.13 +innodb.mvcc : Added in 10.2.13 innodb.purge_secondary : Added in 10.2.12 innodb.purge_thread_shutdown : MDEV-13792 - Wrong result -innodb.read_only_recovery : MDEV-13886 - Server crash -innodb.recovery_shutdown : Added in 10.2.12 -innodb.row_format_redundant : MDEV-14485 - Server deadlock on startup -innodb.table_definition_cache_debug : MDEV-14206 - Extra warning; opt file modified in 10.2.12 +innodb.read_only_recovery : MDEV-13886 - Server crash; modified in 10.2.13 +innodb.recovery_shutdown : Modified in 10.2.13 +innodb.row_format_redundant : MDEV-15192 - Trying to access missing tablespace +innodb.table_definition_cache_debug : MDEV-14206 - Extra warning; opt file modified in 10.2.13 innodb.table_flags : MDEV-13572 - Wrong result innodb.temporary_table : MDEV-13265 - Wrong result +innodb.truncate_inject : Added in 10.2.13 innodb.truncate_restart : Modified in 10.2.12 +innodb.update-cascade : Added in 10.2.13 innodb.update_time : MDEV-14804 - Wrong result; modified in 10.2.12 -innodb.update_time_wl6658 : Added in 10.2.11 +innodb.xa_recovery : MDEV-15279 - mysqld got exception innodb_fts.fulltext2 : MDEV-14727 - Long semaphore wait innodb_fts.fulltext_misc : MDEV-12636 - Valgrind @@ -233,18 +256,28 @@ innodb_fts.innodb_fts_plugin : MDEV-13888 - Errors in server log innodb_fts.innodb_fts_stopword_charset : MDEV-13259 - Table crashed innodb_fts.sync : MDEV-14808 - Wrong result -innodb_gis.kill_server : MDEV-14218 - Assertion failure; modified in 10.2.12 -innodb_gis.rtree_compress : MDEV-14207 - Missing include -innodb_gis.rtree_compress2 : MDEV-14207 - Missing include; modified in 10.2.12 -innodb_gis.rtree_debug : MDEV-14209 - Huge error log -innodb_gis.rtree_purge : MDEV-14207 - Missing include -innodb_gis.rtree_recovery : Modified in 10.2.12 -innodb_gis.rtree_split : MDEV-14208 - Too many arguments; MDEV-14209 - Huge error log -innodb_gis.rtree_undo : MDEV-14456 - Timeout in include file -innodb_gis.types : Modified in 10.2.12 +innodb_gis.bug17057168 : Re-enabled in 10.2.13 +innodb_gis.geometry : Modified in 10.2.13 +innodb_gis.gis_split_inf : Modified in 10.2.13 +innodb_gis.innodb_gis_rtree : Added in 10.2.13 +innodb_gis.kill_server : Modified in 10.2.12 +innodb_gis.rtree_compress : Modified in 10.2.13 +innodb_gis.rtree_compress2 : Modified in 10.2.13 +innodb_gis.rtree_concurrent_srch : MDEV-15284 - Wrong result with embedded; modified in 10.2.13 +innodb_gis.rtree_debug : Modified in 10.2.13 +innodb_gis.rtree_estimate : Re-enabled in 10.2.13 +innodb_gis.rtree_multi_pk : Re-enabled in 10.2.13 +innodb_gis.rtree_purge : MDEV-15275 - Timeout; modified in 10.2.13 +innodb_gis.rtree_recovery : MDEV-15274 - Error on check; re-enabled in 10.2.13 +innodb_gis.rtree_search : Modified in 10.2.13 +innodb_gis.rtree_split : MDEV-14208 - Too many arguments; modified in 10.2.13 +innodb_gis.rtree_undo : MDEV-14456 - Timeout in include file; modified in 10.2.13 +innodb_gis.tree_search : Re-enabled in 10.2.13 +innodb_gis.types : Modified in 10.2.13 + innodb_zip.cmp_per_index : MDEV-14490 - Table is marked as crashed innodb_zip.innochecksum_3 : MDEV-13279 - Extra warnings -innodb_zip.prefix_index_liftedlimit : MDEV-14238 - Assertion failure +innodb_zip.prefix_index_liftedlimit : Added in 10.2.13 innodb_zip.wl6470_1 : MDEV-14240 - Assertion failure innodb_zip.wl6501_1 : MDEV-10891 - Can't create UNIX socket innodb_zip.wl5522_debug_zip : MDEV-11600 - Operating system error number 2 @@ -253,29 +286,32 @@ innodb_zip.wl6501_scale_1 : MDEV-13254 - Timeout, MDEV-14104 - Error #---------------------------------------------------------------- maria.insert_select : MDEV-12757 - Timeout -maria.maria : MDEV-14430 - Extra warning +maria.lock : Modified in 10.2.13 +maria.maria : MDEV-14430 - Extra warning; modified in 10.2.13 +maria.max_length : Modified in 10.2.13 +maria.repair : Added in 10.2.13 #---------------------------------------------------------------- -mariabackup.apply-log-only : MDEV-14192 - Assertion failure -mariabackup.apply-log-only-incr : MDEV-14192 - Assertion failure; modified in 10.2.12 -mariabackup.data_directory : Added in 10.2.11 +mariabackup.apply-log-only : MDEV-14192 - Assertion failure; modified in 10.2.13 +mariabackup.apply-log-only-incr : MDEV-14192 - Assertion failure; modified in 10.2.13 +mariabackup.data_directory : MDEV-15270 - Error on exec mariabackup.full_backup : MDEV-13889 - Timeout -mariabackup.incremental_backup : MDEV-14192 - Assertion failure; modified in 10.2.11 +mariabackup.huge_lsn : Modified in 10.2.13 +mariabackup.incremental_backup : MDEV-14192 - Assertion failure mariabackup.incremental_encrypted : MDEV-14188 - Wrong result mariabackup.log_checksum_mismatch : Added in 10.2.12 -mariabackup.mdev-14447 : Added in 10.2.11 -mariabackup.partition_datadir : MDEV-14802 - Timeout; added in 10.2.11 +mariabackup.mdev-14447 : MDEV-15201 - Timeout +mariabackup.missing_ibd : Added in 10.2.13 +mariabackup.partial_exclude : MDEV-15270 - Error on exec mariabackup.xbstream : MDEV-14192 - Crash +mariabackup.xb_aws_key_management : MDEV-15276 - Wrong result; modified in 10.2.13 mariabackup.xb_page_compress : MDEV-14810 - status: 1, errno: 11 mariabackup.xb_compressed_encrypted : MDEV-14812 - Segmentation fault +mariabackup.xb_file_key_management : MDEV-15277 - Assertion failure #---------------------------------------------------------------- -mroonga.* : Version-related changes in include files in 10.2.11 -mroonga/storage.* : Massive changes in 10.2.11 -mroonga/wrapper.* : Massive changes in 10.2.11 - mroonga/storage.index_multiple_column_unique_datetime_index_read : MDEV-8643 - Valgrind #---------------------------------------------------------------- @@ -291,7 +327,8 @@ parts.partition_alter_innodb : Added in 10.2.12 parts.partition_alter_maria : Modified in 10.2.12 parts.partition_alter_myisam : Added in 10.2.12 parts.partition_auto_increment_maria : MDEV-14430 - Extra warning -parts.partition_debug_innodb : MDEV-10891 - Can't create UNIX socket +parts.partition_basic_symlink_innodb : Modified in 10.2.13 +parts.partition_debug_innodb : MDEV-10891 - Can't create UNIX socket; MDEV-15095 - Table doesn't exist #---------------------------------------------------------------- @@ -302,6 +339,7 @@ percona.* : MDEV-10997 - Not maintained perfschema.bad_option_1 : MDEV-13892 - Timeout perfschema.bad_option_3 : MDEV-12728 - Timeout on Power perfschema.bad_option_5 : MDEV-14197 - Timeout +perfschema.dml_file_instances : MDEV-15179 - Wrong result perfschema.hostcache_ipv4_addrinfo_again_allow : MDEV-12759 - Crash perfschema.hostcache_ipv6_addrinfo_again_allow : MDEV-12752 - Crash perfschema.hostcache_ipv6_addrinfo_bad_allow : MDEV-13260 - Crash @@ -320,13 +358,12 @@ perfschema_stress.* : MDEV-10996 - Not maintained plugins.binlog-simple_plugin_check : Added in 10.2.12 plugins.feedback_plugin_send : MDEV-7932, MDEV-11118 - Connection problems and such -plugins.server_audit : Modified in 10.2.11 -plugins.thread_pool_server : Modified in 10.2.11 plugins.thread_pool_server_audit : MDEV-14295 - Wrong result #---------------------------------------------------------------- -rocksdb.* : MyRocks is alpha-quality and tests are unstable +rocksdb.* : MyRocks is beta-quality and tests are unstable +rocksdb_sys_vars.* : MyRocks is beta-quality and tests are unstable #---------------------------------------------------------------- @@ -342,28 +379,35 @@ rpl.rpl_domain_id_filter_io_crash : MDEV-12729 - Timeout in include file, MDE rpl.rpl_domain_id_filter_restart : MDEV-10684 - Wrong result rpl.rpl_extra_col_master_myisam : MDEV-14203 - Extra warning rpl.rpl_gtid_crash : MDEV-9501 - Failed registering on master, MDEV-13643 - Lost connection -rpl.rpl_gtid_delete_domain : MDEV-14463 - Timeout; added in 10.2.11 +rpl.rpl_gtid_delete_domain : MDEV-14463 - Timeout rpl.rpl_gtid_errorhandling : MDEV-13261 - Crash rpl.rpl_gtid_reconnect : MDEV-14497 - Crash rpl.rpl_gtid_stop_start : MDEV-11621 - Table marked as crashed -rpl.rpl_manual_change_index_file : MDEV-14309 - Requires Env package +rpl.rpl_insert_id : MDEV-15197 - Wrong result rpl.rpl_mariadb_slave_capability : MDEV-11018 - Extra lines in binlog +rpl.rpl_mdev6020 : MDEV-15272 - Server crash rpl.rpl_mixed_mixing_engines : MDEV-14489 - Sync slave with master failed rpl.rpl_non_direct_mixed_mixing_engines : MDEV-14489 - Sync slave with master failed rpl.rpl_non_direct_row_mixing_engines : MDEV-14491 - Long semaphore wait rpl.rpl_non_direct_stm_mixing_engines : MDEV-14489 - Failed sync_slave_with_master rpl.rpl_parallel : MDEV-12730 - Assertion failure +rpl.rpl_parallel_conflicts : MDEV-15272 - Server crash rpl.rpl_parallel_mdev6589 : MDEV-12979 - Assertion failure +rpl.rpl_parallel_optimistic : MDEV-15278 - Failed to sync with master rpl.rpl_parallel_optimistic_nobinlog : MDEV-12746 - Timeouts, mismatch rpl.rpl_parallel_retry : MDEV-11119 - Crash rpl.rpl_parallel_temptable : MDEV-10356 - Crash rpl.rpl_row_drop_create_temp_table : MDEV-14487 - Wrong result +rpl.rpl_row_img_eng_min : MDEV-13875 - diff_files failed +rpl.rpl_row_index_choice : MDEV-15196 - Slave crash rpl.rpl_row_log : Included test modified in 10.2.12 rpl.rpl_row_log_innodb : Included test modified in 10.2.12 rpl.rpl_row_mixing_engines : MDEV-14491 - Long semaphore wait rpl.rpl_semi_sync : MDEV-11220 - Wrong result rpl.rpl_semi_sync_after_sync : MDEV-14366 - Wrong result rpl.rpl_semi_sync_after_sync_row : MDEV-14366 - Wrong result +rpl.rpl_semi_sync_skip_repl : Added in 10.2.13 +rpl.rpl_semi_sync_uninstall_plugin : MDEV-7140 - Assorted failures rpl.rpl_set_statement_default_master : MDEV-13258 - Extra warning rpl.rpl_show_slave_hosts : MDEV-10681 - Crash rpl.rpl_skip_replication : MDEV-13258 - Extra warning @@ -375,10 +419,12 @@ rpl.rpl_start_stop_slave : MDEV-13567 - Sync slave timeout rpl.rpl_stm_log : Included test modified in 10.2.12 rpl.rpl_stm_mixing_engines : MDEV-14489 - Sync slave with master failed rpl.rpl_stm_multi_query : MDEV-9501 - Failed registering on master +rpl.rpl_stm_relay_ign_space : MDEV-14360 - Test assertion rpl.rpl_stm_stop_middle_group : MDEV-13791 - Server crash rpl.rpl_sync : MDEV-13830 - Assertion failure rpl.rpl_temporal_mysql56_to_mariadb53 : MDEV-9501 - Failed registering on master rpl.rpl_upgrade_master_info : MDEV-11620 - Table marked as crashed +rpl.sec_behind_master-5114 : MDEV-13878 - Wrong result rpl/extra/rpl_tests.* : MDEV-10994 - Not maintained @@ -404,9 +450,7 @@ storage_engine.* : Not always timely maintained #---------------------------------------------------------------- sys_vars.innodb_buffer_pool_dump_at_shutdown_basic : MDEV-14280 - Unexpected error -sys_vars.innodb_buffer_pool_dump_now_basic : Modified in 10.2.11 -sys_vars.innodb_buffer_pool_dump_pct_basic : Modified in 10.2.11 -sys_vars.innodb_buffer_pool_load_now_basic : Modified in 10.2.11 +sys_vars.innodb_print_lock_wait_timeout_info_basic : Added in 10.2.13 sys_vars.rpl_init_slave_func : MDEV-10149 - Test assertion sys_vars.slow_query_log_func : MDEV-14273 - Wrong result sys_vars.thread_cache_size_func : MDEV-11775 - Wrong result @@ -414,14 +458,27 @@ sys_vars.wsrep_on_basic : Opt file added in 10.2.12 #---------------------------------------------------------------- +tokudb.card_scale_percent : Modified in 10.2.13 tokudb.change_column_all_1000_10 : MDEV-12640 - Lost connection tokudb.change_column_bin : MDEV-12640 - Lost connection tokudb.change_column_char : MDEV-12822 - Lost connection tokudb.dir_per_db : MDEV-11537 - Wrong result +tokudb.hotindex-insert-2 : MDEV-15271 - Timeout tokudb.hotindex-insert-bigchar : MDEV-12640 - Crash +tokudb.hotindex-update-0 : MDEV-15198 - Timeout tokudb.hotindex-update-1 : MDEV-12640 - Crash +tokudb.locking-read-repeatable-read-1 : Added in 10.2.13 +tokudb.locking-read-repeatable-read-2 : Added in 10.2.13 +tokudb.nonflushing_analyze_debug : Added in 10.2.13 tokudb.rows-32m-rand-insert : MDEV-12640 - Crash tokudb.rows-32m-seq-insert : MDEV-12640 - Crash +tokudb.row_format : Modified in 10.2.13 +tokudb.savepoint-5 : MDEV-15280 - Wrong result +tokudb.type_datetime : MDEV-15193 - Wrong result + +tokudb_alter_table.hcad_all_add2 : MDEV-15269 - Timeout + +tokudb_bugs.xa : MDEV-11804 - Lock wait timeout tokudb_mariadb.mdev6657 : MDEV-12737 - Mismatch or valgrind @@ -432,10 +489,15 @@ tokudb_backup.* : MDEV-11001 - Missing include file tokudb_sys_vars.* : MDEV-11001 - Missing include file tokudb_rpl.* : MDEV-11001 - Missing include file +tokudb_parts.nonflushing_analyze_debug : Added in 10.2.13 tokudb_parts.partition_alter4_tokudb : MDEV-12640 - Lost connection +tokudb_perfschema.crash_tokudb : Added in 10.2.13 +tokudb_perfschema.start_server_tokudb : Added in 10.2.13 + #---------------------------------------------------------------- +unit.conc_basic-t : MDEV-15286 - not ok 7 - test_reconnect_maxpackage unit.conc_misc : MDEV-14811 - not ok 12 - test_conc49 unit.conc_ps_bugs : MDEV-13252 - not ok 44 test_bug4236 unit.lf : MDEV-12897 - Signal 11 thrown