1. 28 Nov, 2006 1 commit
    • istruewing@chilla.local's avatar
      Bug#23139 - myisamchk and mysqld crash when trying to access table · 67157521
      istruewing@chilla.local authored
      A corrupted compressed table could crash the server and
      myisamchk.
      
      The data file of an uncompressed table contains just the records.
      There is no header in the data file.
      
      However the data file of a compressed table has a header.
      The header describes how the table was compressed. This
      information is necessary to extract the records from the
      compressed data file.
      
      Part of the compressed data file header are the [de]code tables.
      They are numeric representations of the Huffman trees used for
      coding and decoding. A Huffman tree is a binary tree. Every
      node has two childs. A child can be a leaf or a branch. Leaves
      contain the decoded value. Branches point to another tree node.
      
      Since the [de]code table is represented as an array of childs,
      the branches need to point at a child within the same array.
      The corruption of the compressed data file from the bug report
      was a couple of branches that pointed outside their array.
      This condition had not been correctly checked.
      
      I added some checks for the pointers in the decode tables.
      This type of corruption will no longer crash the server or
      myisamchk.
      
      No test case. A corrupted compressed table is required.
      67157521
  2. 09 Oct, 2006 2 commits
    • istruewing@chilla.local's avatar
      Merge chilla.local:/home/mydev/mysql-4.1-bug8283 · 1daa6a71
      istruewing@chilla.local authored
      into  chilla.local:/home/mydev/mysql-4.1-bug8283-one
      1daa6a71
    • istruewing@chilla.local's avatar
      Bug#8283 - OPTIMIZE TABLE causes data loss · 5f08a831
      istruewing@chilla.local authored
      OPTIMIZE TABLE with myisam_repair_threads > 1 performs a non-quick 
      parallel repair. This means that it does not only rebuild all 
      indexes, but also the data file.
      
      Non-quick parallel repair works so that there is one thread per 
      index. The first of the threads rebuilds also the new data file.
      
      The problem was that all threads shared the read io cache on the
      old data file. If there were holes (deleted records) in the table,
      the first thread skipped them, writing only contiguous, non-deleted
      records to the new data file. Then it built the new index so that
      its entries pointed to the correct record positions. But the other
      threads didn't know the new record positions, but put the positions
      from the old data file into the index.
      
      The new design is so that there is a shared io cache which is filled
      by the first thread (the data file writer) with the new contiguous
      records and read by the other threads. Now they know the new record
      positions.
      
      Another problem was that for the parallel repair of compressed
      tables a common bit_buff and rec_buff was used. I changed it so
      that thread specific buffers are used for parallel repair.
      
      A similar problem existed for checksum calculation. I made this
      multi-thread safe too.
      5f08a831
  3. 06 Oct, 2006 4 commits
  4. 05 Oct, 2006 2 commits
  5. 02 Oct, 2006 2 commits
  6. 29 Sep, 2006 3 commits
  7. 28 Sep, 2006 6 commits
  8. 27 Sep, 2006 6 commits
  9. 25 Sep, 2006 3 commits
  10. 24 Sep, 2006 1 commit
  11. 23 Sep, 2006 3 commits
  12. 22 Sep, 2006 3 commits
  13. 21 Sep, 2006 2 commits
  14. 20 Sep, 2006 2 commits