Files
ternfs-XTXMarkets/cpp/core/Common.hpp
Francesco Mazzoli 53049d5779 Shard batch writes, use batch UDP syscalls
The idea is to drain the socket and do a single RocksDB WAL
write/fsync for all the write requests we have found.

The read requests are immediately executed. The reasoning here is
that currently write requests are _a lot_ slower than the read
requests because fsyncing takes ~500us on fsf1. In the future this
might change.

Since we're at it, we also use batch UDP syscalls in the CDC.

Fixes #119.
2023-12-07 14:29:07 +00:00

65 lines
2.1 KiB
C++

#pragma once
#include <iostream>
///////////////////////////////////
// Static init for globals
///////////////////////////////////
////////////////////////////////////////////
// Compiler hints
////////////////////////////////////////////
// BUG NOTICE: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47466
// --> this kicks in for statements such as unlikely( a && b );
// --> see assembler generated for t_compiler.cpp
// --> the unlikely case is favoured by the compiler
#define likely(x) __builtin_expect(!!(x), 1)
#define unlikely(x) __builtin_expect(!!(x), 0)
#define PACKED __attribute__((packed))
#define ALIGNED(n) __attribute__((aligned(n)))
#define ALWAYS_INLINE __attribute__((always_inline))
#define NO_INLINE __attribute__((noinline))
#define FORMAT(n) __attribute__((format(printf,n+1,n+2)))
#define NORETURN __attribute__((noreturn))
#define CONST __attribute__((const))
#define PURE __attribute__((pure))
#define HOT __attribute__((hot))
#define COLD __attribute__((cold))
#define UNUSED __attribute__((unused))
#define DEPRECATED __attribute__((deprecated))
#define CHECK_RETURN __attribute__((warn_unused_result))
///////////////////////////////////
// Debugging features
///////////////////////////////////
#define SHORT_FILE (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__)
std::ostream& operator<<(std::ostream& out, const struct sockaddr_in& addr);
std::ostream& operator<<(std::ostream& out, const struct in_addr& addr);
std::ostream& goLangBytesFmt(std::ostream& out, const char* str, size_t len);
struct GoLangBytesFmt {
const char* str;
size_t len;
GoLangBytesFmt(const char* str_, size_t len_) : str(str_), len(len_) {}
};
std::ostream& operator<<(std::ostream& out, const GoLangBytesFmt& bytes);
std::ostream& goLangQuotedStringFmt(std::ostream& out, const char* str, size_t len);
struct GoLangQuotedStringFmt {
const char* str;
size_t len;
GoLangQuotedStringFmt(const char* str_, size_t len_) : str(str_), len(len_) {}
};
std::ostream& operator<<(std::ostream& out, const GoLangQuotedStringFmt& bytes);