Current section

Files

Jump to
partisan include partisan.hrl
Raw

include/partisan.hrl

-define(APP, partisan).
-define(LOCALHOST, {127, 0, 0, 1}).
-define(PEER_PORT, 9090).
-define(DEFAULT_TIMEOUT, 5000). % Same as OTP
%% Idea from erpc.erl
-define(MAX_INT_TIMEOUT, 4294967295).
-define(TIMEOUT_TYPE, 0..?MAX_INT_TIMEOUT | 'infinity').
-define(IS_VALID_TMO_INT(TI_), (is_integer(TI_)
andalso (0 =< TI_)
andalso (TI_ =< ?MAX_INT_TIMEOUT))).
-define(IS_VALID_TMO(T_), ((T_ == infinity) orelse ?IS_VALID_TMO_INT(T_))).
-define(IS_VALID_TIME(T), (is_integer(T) andalso T >= 0)).
-define(IS_VALID_MFA(M, F, A),
(is_atom(M) andalso is_atom(F) andalso is_list(A))
).
-define(IS_INET_POSIX(X),
(
X == eaddrinuse orelse
X == eaddrnotavail orelse
X == eafnosupport orelse
X == ealready orelse
X == econnaborted orelse
X == econnrefused orelse
X == econnreset orelse
X == edestaddrreq orelse
X == ehostdown orelse
X == ehostunreach orelse
X == einprogress orelse
X == eisconn orelse
X == emsgsize orelse
X == enetdown orelse
X == enetunreach orelse
X == enopkg orelse
X == enoprotoopt orelse
X == enotconn orelse
X == enotty orelse
X == enotsock orelse
X == eproto orelse
X == eprotonosupport orelse
X == eprototype orelse
X == esocktnosupport orelse
X == etimedout orelse
X == ewouldblock orelse
X == exbadport orelse
?IS_FILE_POSIX(X)
)
).
-define(IS_FILE_POSIX(X),
(
X == eacces orelse
X == eagain orelse
X == ebadf orelse
X == ebadmsg orelse
X == ebusy orelse
X == edeadlk orelse
X == edeadlock orelse
X == edquot orelse
X == eexist orelse
X == efault orelse
X == efbig orelse
X == eftype orelse
X == eintr orelse
X == einval orelse
X == eio orelse
X == eisdir orelse
X == eloop orelse
X == emfile orelse
X == emlink orelse
X == emultihop orelse
X == enametoolong orelse
X == enfile orelse
X == enobufs orelse
X == enodev orelse
X == enolck orelse
X == enolink orelse
X == enoent orelse
X == enomem orelse
X == enospc orelse
X == enosr orelse
X == enostr orelse
X == enosys orelse
X == enotblk orelse
X == enotdir orelse
X == enotsup orelse
X == enxio orelse
X == eopnotsupp orelse
X == eoverflow orelse
X == eperm orelse
X == epipe orelse
X == erange orelse
X == erofs orelse
X == espipe orelse
X == esrch orelse
X == estale orelse
X == etxtbsy orelse
X == exdev
)
).
%% =============================================================================
%% PLUMTREE
%% =============================================================================
-define(PLUMTREE_OUTSTANDING, partisan_plumtree_broadcast).
-define(BROADCAST_MODS, [partisan_plumtree_backend]).
%% =============================================================================
%% CHANNELS
%% =============================================================================
-define(DEFAULT_CHANNEL, undefined).
-define(MEMBERSHIP_CHANNEL, partisan_membership).
-define(RPC_CHANNEL, rpc).
-define(PARALLELISM, 1).
-define(DEFAULT_PARTITION_KEY, undefined).
-define(CAUSAL_LABELS, []).
%% Gossip.
-define(GOSSIP_FANOUT, 5). % TODO: FIX ME. % not used?
-define(GOSSIP_GC_MIN_SIZE, 10). % not used?
-define(FANOUT, 5). % not used?
%% PEER SERVICE
-define(DEFAULT_PEER_SERVICE_MANAGER, partisan_pluggable_peer_service_manager).
-define(DEFAULT_MEMBERSHIP_STRATEGY, partisan_full_membership_strategy).
-define(DEFAULT_ORCHESTRATION_STRATEGY, undefined).
-define(CONNECTION_JITTER, 1000).
-define(RELAY_TTL, 5).
-define(PERIODIC_INTERVAL, 10000).
-define(PEER_SERVICE_MANAGER,
(partisan_config:get(peer_service_manager, ?DEFAULT_PEER_SERVICE_MANAGER))
).
-define(MEMBERSHIP_STRATEGY,
partisan_config:get(
membership_strategy,
?DEFAULT_MEMBERSHIP_STRATEGY
)
).
%% Pluggable manager options.
-define(DISTANCE_ENABLED, true).
-define(PERIODIC_ENABLED, true).
%% COMMON TYPES
-type options() :: [{atom(), term()}] | #{atom() => term()}.
-type ttl() :: non_neg_integer().
-type optional(T) :: T | undefined.
%% =============================================================================
%% ORCHESTRATION
%% =============================================================================
%% TODO: add type annotations
-record(orchestration_strategy_state, {
orchestration_strategy,
is_connected,
was_connected,
attempted_nodes,
peer_service,
graph,
tree,
eredis,
servers,
nodes
}).
%% =============================================================================
%% PROTOCOLS: HYPARVIEW
%% =============================================================================
-define(XBOT_MIN_INTERVAL, 5000).
-define(XBOT_RANGE_INTERVAL, 60000).
% parameter used for xbot optimization
% - latency (uses ping to check better nodes)
% - true (always returns true when checking better)
-define(HYPARVIEW_XBOT_ORACLE, latency).
-define(HYPARVIEW_XBOT_INTERVAL,
rand:uniform(?XBOT_RANGE_INTERVAL) + ?XBOT_MIN_INTERVAL
).
-define(HYPARVIEW_DEFAULTS, #{
active_max_size => 6,
active_min_size => 3,
active_rwl => 6,
passive_max_size => 30,
passive_rwl => 6,
random_promotion => true,
random_promotion_interval => 5000,
shuffle_interval => 10000,
shuffle_k_active => 3,
shuffle_k_passive => 4,
xbot_enabled => false,
xbot_interval => ?HYPARVIEW_XBOT_INTERVAL
}).
-type config() :: #{
active_max_size := non_neg_integer(),
active_min_size := non_neg_integer(),
active_rwl := non_neg_integer(),
passive_max_size := non_neg_integer(),
passive_rwl := non_neg_integer(),
random_promotion := boolean(),
random_promotion_interval := non_neg_integer(),
shuffle_interval := non_neg_integer(),
shuffle_k_active := non_neg_integer(),
shuffle_k_passive := non_neg_integer(),
xbot_enabled := boolean(),
xbot_interval := non_neg_integer()
}.
%% =============================================================================
%% PROTOCOLS: SCAMP
%% =============================================================================
%% Scamp protocol.
-define(SCAMP_C_VALUE, 5). %% TODO: FIX ME.
-define(SCAMP_MESSAGE_WINDOW, 10).
%% =============================================================================
%% USED IN TESTING
%% =============================================================================
-if(?OTP_RELEASE >= 25).
%% already defined by OTP
-define(CT_NODE, peer).
-else.
-define(CT_NODE, ct_slave).
-endif.
-compile([nowarn_export_all, export_all]).
-define(CHANNELS, ?CHANNELS(?PARALLELISM)).
-define(CHANNELS(Parallelism), #{
undefined => #{
name => ?DEFAULT_CHANNEL,
parallelism => Parallelism,
monotonic => false
}
}).
-define(MEMBERSHIP_STRATEGY_TRACING, false).
-record(property_state,
{joined_nodes :: [node()],
nodes :: [node()],
node_state :: {dict:dict(), dict:dict()},
fault_model_state :: term(),
counter :: non_neg_integer()}).
-define(SUPPORT, partisan_support).
-define(OVERRIDE_PERIODIC_INTERVAL, 10000).
-define(DEFAULT_LAZY_TICK_PERIOD, 1000).
-define(DEFAULT_EXCHANGE_TICK_PERIOD, 10000).
-if(?OTP_RELEASE >= 25).
-define(PARALLEL_SIGNAL_OPTIMISATION(L),
lists:keystore(
message_queue_data, 1, L, {message_queue_data, off_heap}
)
).
-else.
-define(PARALLEL_SIGNAL_OPTIMISATION(L), L).
-endif.