21 #include <initializer_list>
25 #include <type_traits>
27 #include <kvikio/compat_mode.hpp>
28 #include <kvikio/error.hpp>
29 #include <kvikio/http_status_codes.hpp>
30 #include <kvikio/shim/cufile.hpp>
31 #include <kvikio/threadpool_wrapper.hpp>
39 T getenv_or(std::string_view env_var_name, T default_val)
41 auto const* env_val = std::getenv(env_var_name.data());
42 if (env_val ==
nullptr) {
return default_val; }
44 std::stringstream sstream(env_val);
46 sstream >> converted_val;
48 if constexpr (!std::is_same_v<T, std::string>) {
50 "unknown config value " + std::string{env_var_name} +
"=" + std::string{env_val},
51 std::invalid_argument);
58 bool getenv_or(std::string_view env_var_name,
bool default_val);
64 std::vector<int> getenv_or(std::string_view env_var_name, std::vector<int> default_val);
88 std::tuple<std::string_view, T, bool> getenv_or(
89 std::initializer_list<std::string_view> env_var_names, T default_val)
92 "`env_var_names` must contain at least one environment variable name.",
93 std::invalid_argument);
94 std::string_view env_name_target;
95 std::string_view env_val_target;
97 for (
auto const& env_var_name : env_var_names) {
98 auto const* env_val = std::getenv(env_var_name.data());
99 if (env_val ==
nullptr) {
continue; }
101 if (!env_name_target.empty() && env_val_target != env_val) {
102 std::stringstream ss;
103 ss <<
"Environment variable " << env_var_name <<
" (" << env_val
104 <<
") has already been set by its alias " << env_name_target <<
" (" << env_val_target
105 <<
") with a different value.";
109 env_name_target = env_var_name;
110 env_val_target = env_val;
113 if (env_name_target.empty()) {
return {env_name_target, default_val,
false}; }
115 auto res = getenv_or<T>(env_name_target, default_val);
116 return {env_name_target, res,
true};
127 std::size_t _task_size;
128 std::size_t _gds_threshold;
129 std::size_t _bounce_buffer_size;
130 std::size_t _http_max_attempts;
132 std::vector<int> _http_status_codes;
134 static unsigned int get_num_threads_from_env();
138 KVIKIO_EXPORT
static defaults* instance();
Singleton class of default values used throughout KvikIO.
static CompatMode infer_compat_mode_if_auto(CompatMode compat_mode) noexcept
Infer the AUTO compatibility mode from the system runtime.
static std::size_t task_size()
Get the default task size used for parallel IO operations.
static std::vector< int > const & http_status_codes()
The list of HTTP status codes to retry.
static void set_task_size(std::size_t nbytes)
Set the default task size used for parallel IO operations.
static void set_num_threads(unsigned int nthreads)
Alias of set_thread_pool_nthreads
static bool is_compat_mode_preferred()
Whether the global compatibility mode from class defaults is expected to be ON.
static void set_http_status_codes(std::vector< int > status_codes)
Set the list of HTTP status codes to retry.
static void set_compat_mode(CompatMode compat_mode)
Set the value of kvikio::defaults::compat_mode().
static void set_gds_threshold(std::size_t nbytes)
Set the default GDS threshold, which is the minimum size to use GDS (in bytes).
static unsigned int num_threads()
Alias of thread_pool_nthreads
static void set_http_timeout(long timeout_seconds)
Reset the http timeout.
static bool is_compat_mode_preferred(CompatMode compat_mode) noexcept
Given a requested compatibility mode, whether it is expected to reduce to ON.
static void set_thread_pool_nthreads(unsigned int nthreads)
Set the number of threads in the default thread pool. Waits for all currently running tasks to be com...
static std::size_t http_max_attempts()
Get the maximum number of attempts per remote IO read.
static BS_thread_pool & thread_pool()
Get the default thread pool.
static long http_timeout()
The maximum time, in seconds, the transfer is allowed to complete.
static std::size_t gds_threshold()
Get the default GDS threshold, which is the minimum size to use GDS (in bytes).
static unsigned int thread_pool_nthreads()
Get the number of threads in the default thread pool.
static std::size_t bounce_buffer_size()
Get the size of the bounce buffer used to stage data in host memory.
static void set_http_max_attempts(std::size_t attempts)
Set the maximum number of attempts per remote IO read.
static void set_bounce_buffer_size(std::size_t nbytes)
Set the size of the bounce buffer used to stage data in host memory.
static CompatMode compat_mode()
Return whether the KvikIO library is running in compatibility mode or not.
#define KVIKIO_EXPECT(...)
Macro for checking pre-conditions or conditions that throws an exception when a condition is violated...
#define KVIKIO_FAIL(...)
Indicates that an erroneous code path has been taken.
CompatMode
I/O compatibility mode.