https://github.com/MariaDB/server/pull/2006


---
 storage/perfschema/my_thread.h                                     |    2 +
 storage/rocksdb/rdb_io_watchdog.cc                                 |    4 +--
 storage/rocksdb/rdb_io_watchdog.h                                  |   12 +++++-----
 storage/rocksdb/rocksdb/db/compaction/compaction_iteration_stats.h |    1 
 storage/rocksdb/rocksdb/db/db_test_util.cc                         |    4 +--
 storage/rocksdb/rocksdb/env/env_posix.cc                           |    4 +--
 storage/rocksdb/rocksdb/env/env_test.cc                            |    4 +--
 storage/rocksdb/rocksdb/env/fs_posix.cc                            |   12 +++++-----
 storage/rocksdb/rocksdb/include/rocksdb/rocksdb_namespace.h        |    2 +
 storage/rocksdb/rocksdb/table/block_based/data_block_hash_index.h  |    1 
 storage/rocksdb/rocksdb/util/string_util.h                         |    1 
 11 files changed, 27 insertions(+), 20 deletions(-)

--- a/storage/perfschema/my_thread.h
+++ b/storage/perfschema/my_thread.h
@@ -14,6 +14,8 @@
 #include <pthread_np.h>
 #endif
 
+#include <cstdint>
+
 typedef pthread_key_t thread_local_key_t;
 typedef pthread_t my_thread_handle;
 typedef pthread_attr_t my_thread_attr_t;
--- a/storage/rocksdb/rocksdb/db/compaction/compaction_iteration_stats.h
+++ b/storage/rocksdb/rocksdb/db/compaction/compaction_iteration_stats.h
@@ -6,6 +6,7 @@
 #pragma once
 
 #include "rocksdb/rocksdb_namespace.h"
+#include <cstdint>
 
 struct CompactionIterationStats {
   // Compaction statistics
--- a/storage/rocksdb/rocksdb/table/block_based/data_block_hash_index.h
+++ b/storage/rocksdb/rocksdb/table/block_based/data_block_hash_index.h
@@ -7,6 +7,7 @@
 
 #include <string>
 #include <vector>
+#include <cstdint>
 
 #include "rocksdb/slice.h"
 
--- a/storage/rocksdb/rocksdb/include/rocksdb/rocksdb_namespace.h
+++ b/storage/rocksdb/rocksdb/include/rocksdb/rocksdb_namespace.h
@@ -5,6 +5,8 @@
 
 #pragma once
 
+#include <cstdint>
+
 #ifndef ROCKSDB_NAMESPACE
 #define ROCKSDB_NAMESPACE rocksdb
 #endif
--- a/storage/rocksdb/rocksdb/util/string_util.h
+++ b/storage/rocksdb/rocksdb/util/string_util.h
@@ -10,6 +10,7 @@
 #include <string>
 #include <unordered_map>
 #include <vector>
+#include <cstdint>
 
 #include "rocksdb/rocksdb_namespace.h"
 
--- a/storage/rocksdb/rocksdb/env/env_posix.cc
+++ b/storage/rocksdb/rocksdb/env/env_posix.cc
@@ -41,7 +41,7 @@
 #include <time.h>
 #include <algorithm>
 // Get nano time includes
-#if defined(OS_LINUX) || defined(OS_FREEBSD) || defined(OS_GNU_KFREEBSD)
+#if defined(OS_LINUX) || defined(OS_FREEBSD) || defined(OS_GNU_KFREEBSD) || defined(__GNU__)
 #elif defined(__MACH__)
 #include <Availability.h>
 #include <mach/clock.h>
@@ -288,7 +288,7 @@ class PosixEnv : public CompositeEnvWrap
 
   uint64_t NowNanos() override {
 #if defined(OS_LINUX) || defined(OS_FREEBSD) || defined(OS_GNU_KFREEBSD) || \
-    defined(OS_AIX)
+    defined(OS_AIX) || defined(__GNU__)
     struct timespec ts;
     clock_gettime(CLOCK_MONOTONIC, &ts);
     return static_cast<uint64_t>(ts.tv_sec) * 1000000000 + ts.tv_nsec;
--- a/storage/rocksdb/rocksdb/env/fs_posix.cc
+++ b/storage/rocksdb/rocksdb/env/fs_posix.cc
@@ -24,7 +24,7 @@
 #include <sys/ioctl.h>
 #include <sys/mman.h>
 #include <sys/stat.h>
-#if defined(OS_LINUX) || defined(OS_SOLARIS) || defined(OS_ANDROID)
+#if defined(OS_LINUX) || defined(OS_SOLARIS) || defined(OS_ANDROID) || defined(__GNU__)
 #include <sys/statfs.h>
 #include <sys/syscall.h>
 #include <sys/sysmacros.h>
@@ -35,7 +35,7 @@
 #include <time.h>
 #include <algorithm>
 // Get nano time includes
-#if defined(OS_LINUX) || defined(OS_FREEBSD)
+#if defined(OS_LINUX) || defined(OS_FREEBSD) || defined(__GNU__)
 #elif defined(__MACH__)
 #include <Availability.h>
 #include <mach/clock.h>
@@ -144,7 +144,7 @@ class PosixFileSystem : public FileSyste
       return IOStatus::IOError(fname,
                                "Direct I/O not supported in RocksDB lite");
 #endif  // !ROCKSDB_LITE
-#if !defined(OS_MACOSX) && !defined(OS_OPENBSD) && !defined(OS_SOLARIS)
+#if !defined(OS_MACOSX) && !defined(OS_OPENBSD) && !defined(OS_SOLARIS) && !defined(__GNU__)
       flags |= O_DIRECT;
 #endif
     }
@@ -196,7 +196,7 @@ class PosixFileSystem : public FileSyste
       return IOStatus::IOError(fname,
                                "Direct I/O not supported in RocksDB lite");
 #endif  // !ROCKSDB_LITE
-#if !defined(OS_MACOSX) && !defined(OS_OPENBSD) && !defined(OS_SOLARIS)
+#if !defined(OS_MACOSX) && !defined(OS_OPENBSD) && !defined(OS_SOLARIS) && !defined(__GNU__)
       flags |= O_DIRECT;
       TEST_SYNC_POINT_CALLBACK("NewRandomAccessFile:O_DIRECT", &flags);
 #endif
@@ -270,7 +270,7 @@ class PosixFileSystem : public FileSyste
                                "Direct I/O not supported in RocksDB lite");
 #endif  // ROCKSDB_LITE
       flags |= O_WRONLY;
-#if !defined(OS_MACOSX) && !defined(OS_OPENBSD) && !defined(OS_SOLARIS)
+#if !defined(OS_MACOSX) && !defined(OS_OPENBSD) && !defined(OS_SOLARIS) && !defined(__GNU__)
       flags |= O_DIRECT;
 #endif
       TEST_SYNC_POINT_CALLBACK("NewWritableFile:O_DIRECT", &flags);
@@ -363,7 +363,7 @@ class PosixFileSystem : public FileSyste
                                "Direct I/O not supported in RocksDB lite");
 #endif  // !ROCKSDB_LITE
       flags |= O_WRONLY;
-#if !defined(OS_MACOSX) && !defined(OS_OPENBSD) && !defined(OS_SOLARIS)
+#if !defined(OS_MACOSX) && !defined(OS_OPENBSD) && !defined(OS_SOLARIS) && !defined(__GNU__)
       flags |= O_DIRECT;
 #endif
       TEST_SYNC_POINT_CALLBACK("NewWritableFile:O_DIRECT", &flags);
--- a/storage/rocksdb/rdb_io_watchdog.h
+++ b/storage/rocksdb/rdb_io_watchdog.h
@@ -56,19 +56,19 @@ class Rdb_io_watchdog {
   int stop_timers() {
     int ret = 0;
 
-    if (m_io_check_watchdog_timer != reinterpret_cast<timer_t>(-1)) {
+    if (m_io_check_watchdog_timer != reinterpret_cast<timer_t>((timer_t)-1)) {
       ret = timer_delete(m_io_check_watchdog_timer);
 
       if (!ret) {
-        m_io_check_watchdog_timer = reinterpret_cast<timer_t>(-1);
+        m_io_check_watchdog_timer = reinterpret_cast<timer_t>((timer_t)-1);
       }
     }
 
-    if (m_io_check_timer != reinterpret_cast<timer_t>(-1) && !ret) {
+    if (m_io_check_timer != reinterpret_cast<timer_t>((timer_t)-1) && !ret) {
       ret = timer_delete(m_io_check_timer);
 
       if (!ret) {
-        m_io_check_timer = reinterpret_cast<timer_t>(-1);
+        m_io_check_timer = reinterpret_cast<timer_t>((timer_t)-1);
       }
     }
 
@@ -93,8 +93,8 @@ class Rdb_io_watchdog {
 
  public:
   explicit Rdb_io_watchdog(std::vector<std::string> &&directories)
-      : m_io_check_timer(reinterpret_cast<timer_t>(-1)),
-        m_io_check_watchdog_timer(reinterpret_cast<timer_t>(-1)),
+      : m_io_check_timer(reinterpret_cast<timer_t>((timer_t)-1)),
+        m_io_check_watchdog_timer(reinterpret_cast<timer_t>((timer_t)-1)),
         m_io_in_progress(false),
         m_dirs_to_check(std::move(directories)),
         m_buf(nullptr) {
--- a/storage/rocksdb/rdb_io_watchdog.cc
+++ b/storage/rocksdb/rdb_io_watchdog.cc
@@ -111,7 +111,7 @@ void Rdb_io_watchdog::io_check_callback(
     sql_print_warning("Deleting the watchdog I/O timer failed with %d.", errno);
   }
 
-  m_io_check_watchdog_timer = reinterpret_cast<timer_t>(-1);
+  m_io_check_watchdog_timer = reinterpret_cast<timer_t>((timer_t)-1);
 
   RDB_MUTEX_UNLOCK_CHECK(m_reset_mutex);
 }
@@ -124,7 +124,7 @@ int Rdb_io_watchdog::check_write_access(
 
   // O_DIRECT is a key flag here to make sure that we'll bypass the kernel's
   // buffer cache.
-  int fd = open(fname.c_str(), O_WRONLY | O_DIRECT | O_CREAT | O_SYNC,
+  int fd = open(fname.c_str(), O_WRONLY | O_CREAT | O_SYNC,
                 S_IRWXU | S_IWUSR);
 
   if (unlikely(fd == -1)) {
--- a/storage/rocksdb/rocksdb/db/db_test_util.cc
+++ b/storage/rocksdb/rocksdb/db/db_test_util.cc
@@ -339,7 +339,7 @@ Options DBTestBase::GetOptions(
   BlockBasedTableOptions table_options;
   bool set_block_based_table_factory = true;
 #if !defined(OS_MACOSX) && !defined(OS_WIN) && !defined(OS_SOLARIS) && \
-    !defined(OS_AIX)
+    !defined(OS_AIX) && !defined(__GNU__)
   ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->ClearCallBack(
       "NewRandomAccessFile:O_DIRECT");
   ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->ClearCallBack(
@@ -400,7 +400,7 @@ Options DBTestBase::GetOptions(
         options.use_direct_io_for_flush_and_compaction = true;
         options.compaction_readahead_size = 2 * 1024 * 1024;
   #if !defined(OS_MACOSX) && !defined(OS_WIN) && !defined(OS_SOLARIS) && \
-      !defined(OS_AIX) && !defined(OS_OPENBSD)
+      !defined(OS_AIX) && !defined(OS_OPENBSD) && !defined(__GNU__)
         ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
             "NewWritableFile:O_DIRECT", [&](void* arg) {
               int* val = static_cast<int*>(arg);
--- a/storage/rocksdb/rocksdb/env/env_test.cc
+++ b/storage/rocksdb/rocksdb/env/env_test.cc
@@ -1376,7 +1376,7 @@ TEST_P(EnvPosixTestWithParam, Preallocat
   std::unique_ptr<WritableFile> srcfile;
   EnvOptions soptions;
   soptions.use_direct_reads = soptions.use_direct_writes = direct_io_;
-#if !defined(OS_MACOSX) && !defined(OS_WIN) && !defined(OS_SOLARIS) && !defined(OS_AIX) && !defined(OS_OPENBSD) && !defined(OS_FREEBSD)
+#if !defined(OS_MACOSX) && !defined(OS_WIN) && !defined(OS_SOLARIS) && !defined(OS_AIX) && !defined(OS_OPENBSD) && !defined(OS_FREEBSD) && !defined(__GNU__)
     if (soptions.use_direct_writes) {
       ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
           "NewWritableFile:O_DIRECT", [&](void* arg) {
@@ -1437,7 +1437,7 @@ TEST_P(EnvPosixTestWithParam, Consistent
     const std::string path =
         test::TmpDir(env_) + "/" + "testfile_" + std::to_string(i);
     std::unique_ptr<WritableFile> file;
-#if !defined(OS_MACOSX) && !defined(OS_WIN) && !defined(OS_SOLARIS) && !defined(OS_AIX) && !defined(OS_OPENBSD) && !defined(OS_FREEBSD)
+#if !defined(OS_MACOSX) && !defined(OS_WIN) && !defined(OS_SOLARIS) && !defined(OS_AIX) && !defined(OS_OPENBSD) && !defined(OS_FREEBSD) && !defined(__GNU__)
       if (soptions.use_direct_writes) {
         ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
             "NewWritableFile:O_DIRECT", [&](void* arg) {
