Skip to content

Commit 54426ce

Browse files
[RTI-17070] Add a little introspection function (#125)
1 parent 5a6429a commit 54426ce

File tree

2 files changed

+33
-4
lines changed

2 files changed

+33
-4
lines changed

src/mero.erl

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
gets/2, gets/3, delete/3, mdelete/3, mget/2, mget/3, mgets/2, mgets/3, set/5, mset/3,
3636
cas/6, mcas/3, add/5, madd/3, flush_all/1, shard_phash2/2, shard_crc32/2,
3737
clustering_key/1, storage_key/1]).
38-
-export([state/0, state/1, deep_state/0, deep_state/1]).
38+
-export([state/0, state/1, deep_state/0, deep_state/1, is_cluster_available/1]).
3939

4040
-include_lib("mero/include/mero.hrl").
4141

@@ -354,3 +354,25 @@ deep_state(ClusterName) ->
354354
%% @doc: Returns the state of the sockets for all clusters
355355
deep_state() ->
356356
[{Cluster, deep_state(Cluster)} || Cluster <- mero_cluster:clusters()].
357+
358+
%% @doc: Returns current availability of a cluster
359+
-spec is_cluster_available(atom()) -> true | {false, atom()}.
360+
is_cluster_available(ClusterName) ->
361+
try
362+
Clusters = mero_cluster:clusters(),
363+
case lists:member(ClusterName, Clusters) of
364+
false ->
365+
{false, cluster_not_found};
366+
true ->
367+
true
368+
end
369+
catch
370+
error:undef ->
371+
{false, cluster_util_not_loaded};
372+
error:function_clause ->
373+
{false, invalid_sharding_algorithm};
374+
error:badarg ->
375+
{false, invalid_sharding_algorithm};
376+
_:_ ->
377+
{false, cluster_config_error}
378+
end.

test/mero_SUITE.erl

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
increase_counter_clustered_key/1, increment/1, mdelete/1, multiget_defineds/1,
3939
multiget_defineds_clustered_keys/1, multiget_undefineds/1, set/1, undefined_counter/1,
4040
mincrease_counter/1, cas/1, madd/1, mset/1, mcas/1, state_ok/1, state_error/1,
41-
state_timeout/1, get_clustered_key/1]).
41+
state_timeout/1, get_clustered_key/1, cluster_availability/1]).
4242

4343
%%%=============================================================================
4444
%%% common_test callbacks
@@ -66,7 +66,8 @@ groups() ->
6666
cas,
6767
state_ok,
6868
state_error,
69-
state_timeout]},
69+
state_timeout,
70+
cluster_availability]},
7071
{binary_protocol,
7172
[shuffle, {repeat_until_any_fail, 1}],
7273
[add,
@@ -89,7 +90,8 @@ groups() ->
8990
mcas,
9091
state_ok,
9192
state_error,
92-
state_timeout]}].
93+
state_timeout,
94+
cluster_availability]}].
9395

9496
init_per_group(text_protocol, Config) ->
9597
ClusterConfig =
@@ -525,6 +527,11 @@ state_timeout(_) ->
525527
lists:sort(
526528
proplists:get_value(cluster, State))).
527529

530+
cluster_availability(_) ->
531+
?assertEqual(true, mero:is_cluster_available(cluster)),
532+
?assertEqual(true, mero:is_cluster_available(cluster2)),
533+
?assertEqual({false, cluster_not_found}, mero:is_cluster_available(non_existing_cluster)).
534+
528535
%%%=============================================================================
529536
%%% Internal functions
530537
%%%=============================================================================

0 commit comments

Comments
 (0)