text: --echo #
  --echo # Testing robustness against random compression failures
  --echo #
  
  --source include/not_embedded.inc
  --source include/have_innodb.inc
  
  --let $simulate_comp_failures_save = `SELECT @@innodb_simulate_comp_failures`
  
  --disable_query_log
  call mtr.add_suppression("InnoDB: Simulating a compression failure for table `test`\\.`t1`");
  --enable_query_log
  
  # create the table with compressed pages of size 8K.
  CREATE TABLE t1(id INT AUTO_INCREMENT PRIMARY KEY, msg VARCHAR(255), KEY msg_i(msg)) ENGINE=INNODB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8;
  
  SHOW CREATE TABLE t1;
  
  # percentage of compressions that will be forced to fail
  SET GLOBAL innodb_simulate_comp_failures = 25;
  
  --disable_query_log
  --disable_result_log
  
  let $num_inserts_ind = $num_inserts;
  let $commit_iterations=50;
  
  while ($num_inserts_ind)
  {
    let $repeat = `select floor(rand() * 10)`;
    eval INSERT INTO t1(id, msg)
         VALUES ($num_inserts_ind, REPEAT('abcdefghijklmnopqrstuvwxyz', $repeat));
    dec $num_inserts_ind;
  }
  
  --enable_query_log
  --enable_result_log
  
  COMMIT;
  SELECT COUNT(id) FROM t1;
  
  --disable_query_log
  --disable_result_log
  
  # do random ops, making sure that some pages will get fragmented and reorganized.
  let $num_ops_ind = $num_ops;
  let $commit_count= $commit_iterations;
  
  BEGIN;
  
  while($num_ops_ind)
  {
    let $idx = `select floor(rand()*$num_inserts)`;
  	let $insert_or_update = `select floor(rand()*3)`;
  
    let $repeat = `select floor(rand() * 9) + 1`;
  
    let $msg = query_get_value(`select repeat('abcdefghijklmnopqrstuvwxyz', $repeat) as x`, x, 1);
  
    let $single_or_multi = `select floor(rand()*10)`;
  
    if ($insert_or_update)
    {
      let $cnt = query_get_value(SELECT COUNT(*) cnt FROM t1 WHERE id=$idx, cnt, 1);
  
      if ($cnt)
      {
        let $update = `select floor(rand()*2)`;
  
        if ($update)
        {
          if ($single_or_multi)
          {
            eval UPDATE t1 SET msg=\"$msg\" WHERE id=$idx;
          }
  
          if (!$single_or_multi)
          {
            eval UPDATE t1 SET msg=\"$msg\" WHERE id >= $idx - 100 AND id <= $idx + 100;
          }
  
        }
  
        if (!$update)
        {
          if ($single_or_multi)
          {
            eval INSERT INTO t1(msg, id) VALUES (\"$msg\", $idx) ON DUPLICATE KEY UPDATE msg=VALUES(msg), id = VALUES(id);
          }
  
          if (!$single_or_multi)
          {
            let $diff = 200;
  
            while ($diff)
            {
              eval INSERT INTO t1(msg, id) VALUES (\"$msg\", $idx + 100 - $diff) ON DUPLICATE KEY UPDATE msg=VALUES(msg), id=VALUES(id);
  
              dec $diff;
            }
          }
        }
      }
  
      if (!$cnt)
      {
        let $null_msg = `select floor(rand()*2)`;
  
        if ($null_msg)
        {
          eval INSERT INTO t1(id,msg) VALUES ($idx, NULL);
        }
  
        if (!$null_msg)
        {
          eval INSERT INTO t1(id, msg) VALUES ($idx, \"$msg\");
        }
      }
    }
  
    if (!$insert_or_update)
    {
      if ($single_or_multi)
      {
        eval DELETE from t1 WHERE id=$idx;
      }
  
      if (!$single_or_multi)
      {
        eval DELETE from t1 WHERE id >= $idx - 100 AND id <= $idx + 100;
      }
    }
  
    dec $commit_count;
    if (!$commit_count)
    {
      let $commit_count= $commit_iterations;
      COMMIT;
      BEGIN;
    }
  
    dec $num_ops_ind;
  }
  
  COMMIT;
  
  # final cleanup
  DROP TABLE t1;
  
  eval SET GLOBAL innodb_simulate_comp_failures = $simulate_comp_failures_save;
  
  --enable_query_log
  