YugabyteDB (2.13.1.0-b60, 21121d69985fbf76aa6958d8f04a9bfa936293b5)

Coverage Report

Created: 2022-03-22 16:43

/Users/deen/code/yugabyte-db/src/yb/rocksdb/port/port_posix.h
Line
Count
Source (jump to first uncovered line)
1
//  Copyright (c) 2011-present, Facebook, Inc.  All rights reserved.
2
//  This source code is licensed under the BSD-style license found in the
3
//  LICENSE file in the root directory of this source tree. An additional grant
4
//  of patent rights can be found in the PATENTS file in the same directory.
5
//
6
// The following only applies to changes made to this file as part of YugaByte development.
7
//
8
// Portions Copyright (c) YugaByte, Inc.
9
//
10
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
11
// in compliance with the License.  You may obtain a copy of the License at
12
//
13
// http://www.apache.org/licenses/LICENSE-2.0
14
//
15
// Unless required by applicable law or agreed to in writing, software distributed under the License
16
// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
17
// or implied.  See the License for the specific language governing permissions and limitations
18
// under the License.
19
//
20
// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
21
// Use of this source code is governed by a BSD-style license that can be
22
// found in the LICENSE file. See the AUTHORS file for names of contributors.
23
//
24
// See port_example.h for documentation for the following types/functions.
25
26
#pragma once
27
28
// size_t printf formatting named in the manner of C99 standard formatting
29
// strings such as PRIu64
30
// in fact, we could use that one
31
111k
#define ROCKSDB_PRIszt "zu"
32
33
#define __declspec(S)
34
35
#define ROCKSDB_NOEXCEPT noexcept
36
37
#undef PLATFORM_IS_LITTLE_ENDIAN
38
#if defined(OS_MACOSX)
39
  #include <machine/endian.h>
40
  #if defined(__DARWIN_LITTLE_ENDIAN) && defined(__DARWIN_BYTE_ORDER)
41
    #define PLATFORM_IS_LITTLE_ENDIAN \
42
        (__DARWIN_BYTE_ORDER == __DARWIN_LITTLE_ENDIAN)
43
  #endif
44
#elif defined(OS_SOLARIS)
45
  #include <sys/isa_defs.h>
46
  #ifdef _LITTLE_ENDIAN
47
    #define PLATFORM_IS_LITTLE_ENDIAN true
48
  #else
49
    #define PLATFORM_IS_LITTLE_ENDIAN false
50
  #endif
51
#elif defined(OS_FREEBSD) || defined(OS_OPENBSD) || defined(OS_NETBSD) || \
52
    defined(OS_DRAGONFLYBSD) || defined(OS_ANDROID)
53
  #include <sys/endian.h>
54
  #include <sys/types.h>
55
  #define PLATFORM_IS_LITTLE_ENDIAN (_BYTE_ORDER == _LITTLE_ENDIAN)
56
#else
57
  #include <endian.h>
58
#endif
59
#include <pthread.h>
60
61
#include <stdint.h>
62
#include <string.h>
63
#include <limits>
64
#include <string>
65
66
#ifndef PLATFORM_IS_LITTLE_ENDIAN
67
#define PLATFORM_IS_LITTLE_ENDIAN (__BYTE_ORDER == __LITTLE_ENDIAN)
68
#endif
69
70
#if defined(OS_MACOSX) || defined(OS_SOLARIS) || defined(OS_FREEBSD) ||\
71
    defined(OS_NETBSD) || defined(OS_OPENBSD) || defined(OS_DRAGONFLYBSD) ||\
72
    defined(OS_ANDROID) || defined(CYGWIN)
73
// Use fread/fwrite/fflush on platforms without _unlocked variants
74
#define fread_unlocked fread
75
#define fwrite_unlocked fwrite
76
#define fflush_unlocked fflush
77
#endif
78
79
#if defined(OS_MACOSX) || defined(OS_FREEBSD) ||\
80
    defined(OS_OPENBSD) || defined(OS_DRAGONFLYBSD)
81
// Use fsync() on platforms without fdatasync()
82
608k
#define fdatasync fsync
83
#endif
84
85
#if defined(OS_ANDROID) && __ANDROID_API__ < 9
86
// fdatasync() was only introduced in API level 9 on Android. Use fsync()
87
// when targeting older platforms.
88
#define fdatasync fsync
89
#endif
90
91
namespace rocksdb {
92
namespace port {
93
94
// For use at db/file_indexer.h kLevelMaxIndex
95
const int kMaxInt32 = std::numeric_limits<int32_t>::max();
96
const uint64_t kMaxUint64 = std::numeric_limits<uint64_t>::max();
97
const size_t kMaxSizet = std::numeric_limits<size_t>::max();
98
99
static const bool kLittleEndian = PLATFORM_IS_LITTLE_ENDIAN;
100
#undef PLATFORM_IS_LITTLE_ENDIAN
101
102
class CondVar;
103
104
class Mutex {
105
 public:
106
  /* implicit */ Mutex(bool adaptive = false);
107
  ~Mutex();
108
109
  void Lock();
110
  void Unlock();
111
  // this will assert if the mutex is not locked
112
  // it does NOT verify that mutex is held by a calling thread
113
  void AssertHeld();
114
115
 private:
116
  friend class CondVar;
117
  pthread_mutex_t mu_;
118
#ifndef NDEBUG
119
  bool locked_;
120
#endif
121
122
  // No copying
123
  Mutex(const Mutex&);
124
  void operator=(const Mutex&);
125
};
126
127
class RWMutex {
128
 public:
129
  RWMutex();
130
  ~RWMutex();
131
132
  void ReadLock();
133
  void WriteLock();
134
  void ReadUnlock();
135
  void WriteUnlock();
136
0
  void AssertHeld() { }
137
138
 private:
139
  pthread_rwlock_t mu_; // the underlying platform mutex
140
141
  // No copying allowed
142
  RWMutex(const RWMutex&);
143
  void operator=(const RWMutex&);
144
};
145
146
class CondVar {
147
 public:
148
  explicit CondVar(Mutex* mu);
149
  ~CondVar();
150
  void Wait();
151
  // Timed condition wait.  Returns true if timeout occurred.
152
  bool TimedWait(uint64_t abs_time_us);
153
  void Signal();
154
  void SignalAll();
155
 private:
156
  pthread_cond_t cv_;
157
  Mutex* mu_;
158
};
159
160
211M
static inline void AsmVolatilePause() {
161
#if defined(__i386__) || defined(__x86_64__)
162
  asm volatile("pause");
163
#elif defined(__aarch64__)
164
211M
  asm volatile("wfe");
165
#elif defined(__powerpc64__)
166
  asm volatile("or 27,27,27");
167
#endif
168
  // it's okay for other platforms to be no-ops
169
211M
}
Unexecuted instantiation: yb-bulk_load.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: data-patcher.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: db_stress.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: sst_dump.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: db_bench_tool.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: db_repl_stress.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: bulk_load_docdb_util.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: backup_service.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: tablet.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: tablet_peer.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: history_cutoff_operation.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: tablet_retention_policy.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: catalog_manager.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: ldb_cmd.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: ldb_tool.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: sst_dump_tool.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: docdb_test_util.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: docdb_test_base.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: in_mem_docdb.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: mock_table.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: mock_env.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: testutil.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: db_test_util.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: mini_cluster.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: auto_roll_logger.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: builder.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: column_family.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: compacted_db_impl.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: compaction.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: compaction_iterator.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: compaction_job.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: compaction_picker.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: convenience.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: db_filesnapshot.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: dbformat.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: db_impl.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: db_impl_debug.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: db_impl_readonly.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: db_impl_experimental.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: db_iter.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: experimental.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: event_helpers.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: file_indexer.cc:rocksdb::port::AsmVolatilePause()
file_numbers.cc:rocksdb::port::AsmVolatilePause()
Line
Count
Source
160
2.76k
static inline void AsmVolatilePause() {
161
#if defined(__i386__) || defined(__x86_64__)
162
  asm volatile("pause");
163
#elif defined(__aarch64__)
164
2.76k
  asm volatile("wfe");
165
#elif defined(__powerpc64__)
166
  asm volatile("or 27,27,27");
167
#endif
168
  // it's okay for other platforms to be no-ops
169
2.76k
}
Unexecuted instantiation: filename.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: flush_job.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: flush_scheduler.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: forward_iterator.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: internal_stats.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: log_reader.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: log_writer.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: managed_iterator.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: memtable.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: memtable_list.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: merge_helper.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: repair.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: table_cache.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: table_properties_collector.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: transaction_log_impl.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: version_builder.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: version_edit.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: version_set.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: wal_manager.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: write_batch.cc:rocksdb::port::AsmVolatilePause()
write_thread.cc:rocksdb::port::AsmVolatilePause()
Line
Count
Source
160
211M
static inline void AsmVolatilePause() {
161
#if defined(__i386__) || defined(__x86_64__)
162
  asm volatile("pause");
163
#elif defined(__aarch64__)
164
211M
  asm volatile("wfe");
165
#elif defined(__powerpc64__)
166
  asm volatile("or 27,27,27");
167
#endif
168
  // it's okay for other platforms to be no-ops
169
211M
}
Unexecuted instantiation: hash_linklist_rep.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: hash_skiplist_rep.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: skiplistrep.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: vectorrep.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: port_posix.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: block_based_filter_block.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: block_based_table_builder.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: block_based_table_factory.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: block_based_table_reader.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: block_builder.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: block.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: block_hash_index.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: block_prefix_index.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: bloom_block.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: format.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: get_context.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: index_builder.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: index_reader.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: iterator.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: merger.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: meta_blocks.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: sst_file_writer.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: plain_table_builder.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: plain_table_factory.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: plain_table_index.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: plain_table_key_coding.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: plain_table_reader.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: table_properties.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: two_level_iterator.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: db_dump_tool.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: arena.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: bloom.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: cache.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: coding.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: concurrent_arena.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: crc32c.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: delete_scheduler.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: dynamic_bloom.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: env_posix.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: io_posix.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: sst_file_manager_impl.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: file_util.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: file_reader_writer.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: hash.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: instrumented_mutex.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: checkpoint.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: remove_emptyvalue_compactionfilter.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: document_db.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: json_document.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: geodb_impl.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: uint64add.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: redis_lists.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: optimistic_transaction_impl.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: transaction_base.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: transaction_db_impl.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: transaction_lock_mgr.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: transaction_impl.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: transaction_util.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: db_ttl_impl.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: write_batch_with_index.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: write_batch_with_index_internal.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: event_logger.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: log_buffer.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: memenv.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: mutable_cf_options.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: options.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: options_helper.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: random.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: rate_limiter.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: sync_point.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: thread_local.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: cdcsdk_producer.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: doc_boundary_values_extractor.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: docdb_util.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: docdb_compaction_filter.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: docdb_compaction_filter_intents.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: docdb_rocksdb_util.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: doc_pgsql_scanspec.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: doc_ql_scanspec.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: doc_rowwise_iterator.cc:rocksdb::port::AsmVolatilePause()
Unexecuted instantiation: compaction_file_filter.cc:rocksdb::port::AsmVolatilePause()
170
171
// Returns -1 if not available on this platform
172
extern int PhysicalCoreID();
173
174
typedef pthread_once_t OnceType;
175
#define LEVELDB_ONCE_INIT PTHREAD_ONCE_INIT
176
extern void InitOnce(OnceType* once, void (*initializer)());
177
178
292M
#define CACHE_LINE_SIZE 64U
179
180
0
#define PREFETCH(addr, rw, locality) __builtin_prefetch(addr, rw, locality)
181
182
extern void Crash(const std::string& srcfile, int srcline);
183
184
extern int GetMaxOpenFiles();
185
186
} // namespace port
187
} // namespace rocksdb