• Daniel Black's avatar
    MDEV-28250 aix test case failure innodb_zip.innochecksum_3,4k,crc32,innodb · 4ee00a29
    Daniel Black authored
    As discovered by tracing, but also presenting in AIX fseeko
    documentation, seeking beyond the EOF is acceptable, as you can write
    there.
    
    To display the same error in AIX to other implementations that return
    errors on seek, we take the EFBIG error code on reading and error the
    same way.
    
    An AIX truss of an aspect of the test:
    
    truss extra/innochecksum --page=18446744073709551615 $MYSQLD_DATADIR/test/tab1.ibd
    
      statx("./mysql-test/var/log/innodb_zip.innochecksum_3-4k,crc32,innodb/mysqld.1/data//test/tab1.ibd", 0x0FFFFFFFFFFFF610, 176, 010) = 0
      kopen("./mysql-test/var/log/innodb_zip.innochecksum_3-4k,crc32,innodb/mysqld.1/data//test/tab1.ibd", O_RDONLY|O_LARGEFILE) = 3
      kfcntl(3, 12, 0x00000001100006C8)               = 0
      kfcntl(3, F_GETFL, 0x00000001100A6CF8)          = 67108864
      kioctl(3, 22528, 0x0000000000000000, 0x0000000000000000) Err#25 ENOTTY
      klseek(3, 0, 1, 0x0FFFFFFFFFFFF3F0)             = 0
      kioctl(3, 22528, 0x0000000000000000, 0x0000000000000000) Err#25 ENOTTY
      kread(3, "DEADBEEF\0\0\0\0FFFFFFFF".., 4096)    = 4096
      klseek(3, 0, 1, 0x0FFFFFFFFFFFF450)             = 0
      klseek(3, 17592186040320, 0, 0x0FFFFFFFFFFFF450) = 0
      klseek(3, 0, 1, 0x0FFFFFFFFFFFF3F0)             = 0
      kread(3, "DEADBEEF\0\0\0\0FFFFFFFF".., 4096)    Err#27 EFBIG
    
    An equivalent Linux trace:
    
    ltrace extra/innochecksum --page=18446744073709551615 $MYSQLD_DATADIR/test/tab1.ibd
    
      stat64(0x7fff10ea2dc3, 0x7fff10ea0670, 88, 0x8026be41)         = 0
      open64("./mysql-test/var/log/innodb_zip."..., 0, 02072403160)  = 3
      fcntl64(3, 6, 0x139f180, 1)                                    = 0
      fgetpos64(0x615000000080, 0x7fff10ea0760, 1, 0)                = 0
      fseeko64(0x615000000080, 0xffffffff000, 0, 5 <unfinished ...>
      pthread_getspecific(0, 0x4d0eb8, 0x7fff10ea0490, 0)            = 0x7f7b2806d000
      <... fseeko64 resumed> )                                       = 0
      fgetpos64(0x615000000080, 0x7fff10ea0760, 1, 1)                = 0
      feof(0x615000000080)                                           = 0
      feof(0x615000000080)                                           = 1
      Error: Unable to seek to necessary offset
    4ee00a29
innochecksum.cc 53 KB