Details
-
Bug
-
Status: Closed (View Workflow)
-
Critical
-
Resolution: Fixed
-
11.0(EOL), 11.1(EOL), 11.2(EOL), 11.3(EOL), 11.4
-
Solaris 11.4/amd64
Description
To provide patches for the Solaris build issues I've reported before against MariaDB 10.11.6, I've tried a build on 11.4 instead. Unfortunately, there's a new build failure there:
```
/vol/src/mariadb/mariadb-server/storage/innobase/os/os0file.cc: In function ‘pfs_os_file_t os_file_create_func(const char*, ulint, ulint, ulint, bool, bool*)’:
/vol/src/mariadb/mariadb-server/storage/innobase/os/os0file.cc:1233:49: error: ‘mode_str’ was not declared in this scope; did you mean ‘mode_t’?
1233 | os_file_set_nocache(file, name, mode_str);
^~~~~~~~ |
mode_t ``` While all other uses of `mode_str` are wrapped in `#ifdef O_DIRECT`, this one is not, which breaks the Solaris build which lacks `O_DIRECT`. |
Fixed by wrapping that case in `#ifdef O_DIRECT`, too.
Attachments
Issue Links
- is blocked by
-
MDEV-33095 innodb_flush_method=O_DIRECT creates excessive errors on Solaris
-
- Closed
-
- is caused by
-
MDEV-30136 Map innodb_flush_method to new settable Booleans innodb_{log,data}_file_{buffering,write_through}
-
- Closed
-
rorth, thank you. What you say makes complete sense. (By the way, Jira uses its own proprietary markup language, not Markdown.)
I do not have much experience with copy-on-write file systems, or in fact anything else than journal based ones (Linux ext4 and Microsoft NTFS). I understood that ZFS is also compressing data on the fly. That kind of stuff can actually only work if the data is being copied between user and kernel address space, that is, there is no innodb_flush_method=O_DIRECT or innodb_log_file_buffering=OFF or innodb_data_file_buffering=OFF.
Are you suggesting that we should simply remove the directio() code on Solaris and (among others) treat innodb_flush_method=O_DIRECT as if innodb_flush_method=fsync had been specified? If I remember correctly, the directio() change was added by one colleague and not double-checked by anyone else. It looks like the documentation was misunderstood already back then.