• Jan Lindström's avatar
    MDEV-8250: InnoDB: Page compressed tables are not compressed and... · f7002c05
    Jan Lindström authored
    MDEV-8250: InnoDB: Page compressed tables are not compressed and compressed+encrypted tables cause crash
    
    Analysis: Problem is that both encrypted tables and compressed tables use
    FIL header offset FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION to store
    required metadata. Furhermore, for only compressed tables currently
    code skips compression.
    
    Fixes:
    - Only encrypted pages store key_version to FIL header offset FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION,
      no need to fix
    - Only compressed pages store compression algorithm to FIL header offset FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION,
      no need to fix as they have different page type FIL_PAGE_PAGE_COMPRESSED
    - Compressed and encrypted pages now use a new page type FIL_PAGE_PAGE_COMPRESSED_ENCRYPTED and
      key_version is stored on FIL header offset FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION and compression
      method is stored after FIL header similar way as compressed size, so that first
      FIL_PAGE_COMPRESSED_SIZE is stored followed by FIL_PAGE_COMPRESSION_METHOD
    - Fix buf_page_encrypt_before_write function to really compress pages if compression is enabled
    - Fix buf_page_decrypt_after_read function to really decompress pages if compression is used
    - Small style fixes
    f7002c05
buf0buf.cc 162 KB