Skip to content

Commit 718dead

Browse files
hsun324facebook-github-bot
authored andcommitted
Remove generic error types
Summary: Remove `wa_raft:error/0`, `wa_raft_log:error/0`, and `wa_raft_storage:error/0` generic error types Reviewed By: jaher Differential Revision: D76531247 fbshipit-source-id: 6110c5f24c143e8a41d032483b32a02f98e61cba
1 parent 3a67bee commit 718dead

File tree

9 files changed

+101
-109
lines changed

9 files changed

+101
-109
lines changed

src/wa_raft.erl

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,12 @@
1414
-export_type([
1515
table/0,
1616
partition/0,
17-
error/0,
1817
args/0,
1918
identity/0
2019
]).
2120

2221
-type table() :: atom().
2322
-type partition() :: pos_integer().
24-
-type error() :: {error, term()}.
2523

2624
%% Specification for starting a RAFT partition.
2725
-type args() ::

src/wa_raft_durable_state.erl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
sync/1
1818
]).
1919

20-
-spec load(StateIn :: #raft_state{}) -> {ok, StateOut :: #raft_state{}} | no_state | wa_raft:error().
20+
-spec load(StateIn :: #raft_state{}) -> {ok, StateOut :: #raft_state{}} | no_state | {error, Reason :: term()}.
2121
load(#raft_state{name = Name, partition_path = PartitionPath} = State) ->
2222
StateItems = [
2323
{current_term, fun is_integer/1, fun (V, S) -> S#raft_state{current_term = V} end, required},
@@ -69,7 +69,7 @@ load(#raft_state{name = Name, partition_path = PartitionPath} = State) ->
6969
{error, Reason}
7070
end.
7171

72-
-spec store(#raft_state{}) -> ok | wa_raft:error().
72+
-spec store(#raft_state{}) -> ok | {error, Reason :: term()}.
7373
store(#raft_state{name = Name, partition_path = PartitionPath, current_term = CurrentTerm, voted_for = VotedFor, disable_reason = DisableReason}) ->
7474
StateList = [
7575
{current_term, CurrentTerm},

src/wa_raft_log.erl

Lines changed: 43 additions & 50 deletions
Large diffs are not rendered by default.

src/wa_raft_log_ets.erl

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,8 +141,7 @@ config(#raft_log{name = Name}) ->
141141
%% RAFT log provider interface for writing new log data
142142
%%-------------------------------------------------------------------
143143

144-
-spec append(View :: wa_raft_log:view(), Entries :: [wa_raft_log:log_entry() | binary()], Mode :: strict | relaxed) ->
145-
ok | skipped | wa_raft_log:error().
144+
-spec append(View :: wa_raft_log:view(), Entries :: [wa_raft_log:log_entry() | binary()], Mode :: strict | relaxed) -> ok.
146145
append(View, Entries, _Mode) ->
147146
Name = wa_raft_log:log_name(View),
148147
Last = wa_raft_log:last_index(View),

src/wa_raft_queue.erl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -383,7 +383,7 @@ child_spec(Options) ->
383383
modules => [?MODULE]
384384
}.
385385

386-
-spec start_link(Options :: #raft_options{}) -> {ok, Pid :: pid()} | ignore | wa_raft:error().
386+
-spec start_link(Options :: #raft_options{}) -> gen_server:start_ret().
387387
start_link(#raft_options{queue_name = Name} = Options) ->
388388
gen_server:start_link({local, Name}, ?MODULE, Options, []).
389389

src/wa_raft_server.erl

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,7 @@ child_spec(Options) ->
293293
modules => [?MODULE]
294294
}.
295295

296-
-spec start_link(Options :: #raft_options{}) -> {ok, Pid :: pid()} | ignore | wa_raft:error().
296+
-spec start_link(Options :: #raft_options{}) -> gen_statem:start_ret().
297297
start_link(#raft_options{server_name = Name} = Options) ->
298298
gen_statem:start_link({local, Name}, ?MODULE, Options, []).
299299

@@ -481,22 +481,22 @@ parse_rpc(#raft_identity{name = Name} = Self, ?LEGACY_RAFT_RPC(Procedure, Term,
481481
-spec commit(
482482
Server :: gen_statem:server_ref(),
483483
Op :: wa_raft_acceptor:op()
484-
) -> ok | wa_raft:error().
484+
) -> ok.
485485
commit(Server, Op) ->
486486
gen_statem:cast(Server, ?COMMIT_COMMAND(Op)).
487487

488488
-spec read(
489489
Server :: gen_statem:server_ref(),
490490
Op :: wa_raft_acceptor:read_op()
491-
) -> ok | wa_raft:error().
491+
) -> ok.
492492
read(Server, Op) ->
493493
gen_statem:cast(Server, ?READ_COMMAND(Op)).
494494

495495
-spec snapshot_available(
496496
Server :: gen_statem:server_ref(),
497497
Root :: file:filename(),
498498
Position :: wa_raft_log:log_pos()
499-
) -> ok | wa_raft:error().
499+
) -> ok | {error, Reason :: term()}.
500500
snapshot_available(Server, Root, Position) ->
501501
% Use the storage call timeout because this command requires the RAFT
502502
% server to make a potentially expensive call against the RAFT storage
@@ -507,7 +507,7 @@ snapshot_available(Server, Root, Position) ->
507507
Server :: gen_statem:server_ref(),
508508
Action :: add | remove | add_witness | remove_witness,
509509
Peer :: peer()
510-
) -> {ok, Position :: wa_raft_log:log_pos()} | wa_raft:error().
510+
) -> {ok, Position :: wa_raft_log:log_pos()} | {error, Reason :: term()}.
511511
adjust_membership(Server, Action, Peer) ->
512512
adjust_membership(Server, Action, Peer, undefined).
513513

@@ -516,30 +516,30 @@ adjust_membership(Server, Action, Peer) ->
516516
Action :: add | remove | add_witness | remove_witness,
517517
Peer :: peer(),
518518
ConfigIndex :: wa_raft_log:log_index() | undefined
519-
) -> {ok, Position :: wa_raft_log:log_pos()} | wa_raft:error().
519+
) -> {ok, Position :: wa_raft_log:log_pos()} | {error, Reason :: term()}.
520520
adjust_membership(Server, Action, Peer, ConfigIndex) ->
521521
gen_statem:call(Server, ?ADJUST_MEMBERSHIP_COMMAND(Action, Peer, ConfigIndex), ?RAFT_RPC_CALL_TIMEOUT()).
522522

523523
%% Request the specified RAFT server to start an election in the next term.
524-
-spec trigger_election(Server :: gen_statem:server_ref()) -> ok | wa_raft:error().
524+
-spec trigger_election(Server :: gen_statem:server_ref()) -> ok | {error, Reason :: term()}.
525525
trigger_election(Server) ->
526526
trigger_election(Server, current).
527527

528528
%% Request the specified RAFT server to trigger a new election in the term *after* the specified term.
529-
-spec trigger_election(Server :: gen_statem:server_ref(), Term :: term_or_offset()) -> ok | wa_raft:error().
529+
-spec trigger_election(Server :: gen_statem:server_ref(), Term :: term_or_offset()) -> ok | {error, Reason :: term()}.
530530
trigger_election(Server, Term) ->
531531
gen_statem:call(Server, ?TRIGGER_ELECTION_COMMAND(Term), ?RAFT_RPC_CALL_TIMEOUT()).
532532

533533
%% Request the specified RAFT server to promote itself to leader of the specified term.
534-
-spec promote(Server :: gen_statem:server_ref(), Term :: term_or_offset()) -> ok | wa_raft:error().
534+
-spec promote(Server :: gen_statem:server_ref(), Term :: term_or_offset()) -> ok | {error, Reason :: term()}.
535535
promote(Server, Term) ->
536536
promote(Server, Term, false).
537537

538-
-spec promote(Server :: gen_statem:server_ref(), Term :: term_or_offset(), Force :: boolean()) -> ok | wa_raft:error().
538+
-spec promote(Server :: gen_statem:server_ref(), Term :: term_or_offset(), Force :: boolean()) -> ok | {error, Reason :: term()}.
539539
promote(Server, Term, Force) ->
540540
gen_statem:call(Server, ?PROMOTE_COMMAND(Term, Force), ?RAFT_RPC_CALL_TIMEOUT()).
541541

542-
-spec resign(Server :: gen_statem:server_ref()) -> ok | wa_raft:error().
542+
-spec resign(Server :: gen_statem:server_ref()) -> ok | {error, Reason :: term()}.
543543
resign(Server) ->
544544
gen_statem:call(Server, ?RESIGN_COMMAND, ?RAFT_RPC_CALL_TIMEOUT()).
545545

@@ -551,11 +551,11 @@ handover(Server) ->
551551
%% Instruct a RAFT leader to attempt a handover to the specified peer node.
552552
%% If an `undefined` peer node is specified, then handover to a random handover candidate.
553553
%% Returns which peer node the handover was sent to or otherwise an error.
554-
-spec handover(Server :: gen_statem:server_ref(), Peer :: node() | undefined) -> {ok, Peer :: node()} | wa_raft:error().
554+
-spec handover(Server :: gen_statem:server_ref(), Peer :: node() | undefined) -> {ok, Peer :: node()} | {error, Reason :: term()}.
555555
handover(Server, Peer) ->
556556
gen_statem:call(Server, ?HANDOVER_COMMAND(Peer), ?RAFT_RPC_CALL_TIMEOUT()).
557557

558-
-spec handover_candidates(Server :: gen_statem:server_ref()) -> {ok, Candidates :: [node()]} | wa_raft:error().
558+
-spec handover_candidates(Server :: gen_statem:server_ref()) -> {ok, Candidates :: [node()]} | {error, Reason :: term()}.
559559
handover_candidates(Server) ->
560560
gen_statem:call(Server, ?HANDOVER_CANDIDATES_COMMAND, ?RAFT_RPC_CALL_TIMEOUT()).
561561

@@ -572,7 +572,7 @@ enable(Server) ->
572572
Position :: wa_raft_log:log_pos(),
573573
Config :: config(),
574574
Data :: dynamic()
575-
) -> ok | wa_raft:error().
575+
) -> ok | {error, Reason :: term()}.
576576
bootstrap(Server, Position, Config, Data) ->
577577
gen_statem:call(Server, ?BOOTSTRAP_COMMAND(Position, Config, Data), ?RAFT_STORAGE_CALL_TIMEOUT()).
578578

@@ -2984,13 +2984,17 @@ append_entries(
29842984
% of the log.
29852985
{ok, View1} = wa_raft_log:append(View0, NewEntries),
29862986
{ok, true, PrevLogIndex + EntryCount, Data#raft_state{log_view = View1}};
2987-
{conflict, ConflictIndex, [{ConflictTerm, _} | _]} when ConflictIndex =< CommitIndex ->
2987+
{conflict, ConflictIndex, [ConflictEntry | _]} when ConflictIndex =< CommitIndex ->
29882988
% A conflict is detected that would result in the truncation of a
29892989
% log entry that the local replica has committed. We cannot validly
29902990
% delete log entries that are already committed because doing so
29912991
% may potenially cause the log entry to be no longer present on a
29922992
% majority of replicas.
29932993
{ok, LocalTerm} = wa_raft_log:term(View0, ConflictIndex),
2994+
{ConflictTerm, _} = if
2995+
is_binary(ConflictEntry) -> binary_to_term(ConflictEntry);
2996+
true -> ConflictEntry
2997+
end,
29942998
?RAFT_COUNT({raft, State, 'heartbeat.error.corruption.excessive_truncation'}),
29952999
?RAFT_LOG_WARNING(State, Data, "refuses heartbeat at ~0p to ~0p that requires truncation past ~0p (term ~0p vs ~0p) when log entries up to ~0p are already committed.",
29963000
[PrevLogIndex, PrevLogIndex + EntryCount, ConflictIndex, ConflictTerm, LocalTerm, CommitIndex]),
@@ -3021,7 +3025,7 @@ append_entries(
30213025
[ConflictIndex, PrevLogIndex, PrevLogIndex + EntryCount, Reason, 30]),
30223026
{ok, false, wa_raft_log:last_index(View0), Data}
30233027
end;
3024-
{error, out_of_range} ->
3028+
{invalid, out_of_range} ->
30253029
% If the heartbeat is out of range (generally past the end of the
30263030
% log) then ignore and notify the leader of what log entry is
30273031
% required by this replica.
@@ -3097,7 +3101,7 @@ request_vote_impl(State, Candidate, _, _, #raft_state{voted_for = VotedFor} = D
30973101
%%------------------------------------------------------------------------------
30983102

30993103
%% Generic reply function for non-RPC requests that operates based on event type.
3100-
-spec reply(Type :: enter | gen_statem:event_type(), Message :: term()) -> ok | wa_raft:error().
3104+
-spec reply(Type :: enter | gen_statem:event_type(), Message :: term()) -> ok | {error, Reason :: term()}.
31013105
reply(cast, _) ->
31023106
ok;
31033107
reply({call, From}, Message) ->

src/wa_raft_storage.erl

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,6 @@
6262
-export_type([
6363
storage_handle/0,
6464
metadata/0,
65-
error/0,
6665
status/0
6766
]).
6867

@@ -126,7 +125,7 @@
126125
%% Issue a read command to get the label associated with the most
127126
%% recent command that was applied with a label. See the optional
128127
%% callback `storage_apply/4` for details.
129-
-callback storage_label(Handle :: storage_handle()) -> {ok, Label :: wa_raft_label:label()} | error().
128+
-callback storage_label(Handle :: storage_handle()) -> {ok, Label :: wa_raft_label:label()} | {error, Reason :: term()}.
130129
-optional_callbacks([storage_label/1]).
131130

132131

@@ -190,7 +189,7 @@
190189
%% If the command could not be applied in a manner so as to preserve the
191190
%% desired consistency guarantee then implementations can raise an error to be
192191
%% aborted safely.
193-
-callback storage_apply_config(Config :: wa_raft_server:config(), Position :: wa_raft_log:log_pos(), Handle :: storage_handle()) -> {Result :: ok | error(), NewHandle :: storage_handle()}.
192+
-callback storage_apply_config(Config :: wa_raft_server:config(), Position :: wa_raft_log:log_pos(), Handle :: storage_handle()) -> {Result :: ok | {error, Reason :: term()}, NewHandle :: storage_handle()}.
194193

195194
%%-----------------------------------------------------------------------------
196195
%% RAFT Storage Provider - Read Commands
@@ -233,14 +232,14 @@
233232
%% producing a directory tree rooted at the provided path that represents the
234233
%% current storage state. The produced snapshot should retain the current
235234
%% position when loaded.
236-
-callback storage_create_snapshot(Path :: file:filename(), Handle :: storage_handle()) -> ok | error().
235+
-callback storage_create_snapshot(Path :: file:filename(), Handle :: storage_handle()) -> ok | {error, Reason :: term()}.
237236

238237
%% Create a new witness snapshot at the provided path which must contain the current
239238
%% position in storage and configuration.
240239
%% The snapshot will be empty (without actual storage data) but will retain all
241240
%% necessary metadata. When loaded, this witness snapshot will reflect the exact
242241
%% position state of the original storage without the storage contents.
243-
-callback storage_create_witness_snapshot(Path :: file:filename(), Handle :: storage_handle()) -> ok | error().
242+
-callback storage_create_witness_snapshot(Path :: file:filename(), Handle :: storage_handle()) -> ok | {error, Reason :: term()}.
244243
-optional_callback([storage_create_witness_snapshot/2]).
245244

246245
%% Load a snapshot previously created by the same storage provider, possibly
@@ -249,7 +248,7 @@
249248
%% If a recoverable error occured, the storage state should remain unchanged.
250249
%% If the storage state is no longer suitable for use, an error should be
251250
%% raised.
252-
-callback storage_open_snapshot(Path :: file:filename(), ExpectedPosition :: wa_raft_log:log_pos(), Handle :: storage_handle()) -> {ok, NewHandle :: storage_handle()} | error().
251+
-callback storage_open_snapshot(Path :: file:filename(), ExpectedPosition :: wa_raft_log:log_pos(), Handle :: storage_handle()) -> {ok, NewHandle :: storage_handle()} | {error, Reason :: term()}.
253252

254253
%%-----------------------------------------------------------------------------
255254
%% RAFT Storage Provider - Bootstrapping
@@ -262,7 +261,7 @@
262261
%% version and the config as the value. Extra data may be used by implementors
263262
%% to provide extra state via arguments to external APIs that use this
264263
%% endpoint, such as the partition bootstrapping API.
265-
-callback storage_make_empty_snapshot(Options :: #raft_options{}, Path :: file:filename(), Position :: wa_raft_log:log_pos(), Config :: wa_raft_server:config(), Data :: dynamic()) -> ok | error().
264+
-callback storage_make_empty_snapshot(Options :: #raft_options{}, Path :: file:filename(), Position :: wa_raft_log:log_pos(), Config :: wa_raft_server:config(), Data :: dynamic()) -> ok | {error, Reason :: term()}.
266265
-optional_callback([storage_make_empty_snapshot/5]).
267266

268267
%%-----------------------------------------------------------------------------
@@ -271,7 +270,6 @@
271270

272271
-type metadata() :: config | atom().
273272
-type storage_handle() :: dynamic().
274-
-type error() :: {error, term()}.
275273

276274
-type status() :: [status_element()].
277275
-type status_element() ::
@@ -381,11 +379,11 @@ status(Storage) ->
381379
position(Storage) ->
382380
gen_server:call(Storage, ?POSITION_REQUEST, ?RAFT_STORAGE_CALL_TIMEOUT()).
383381

384-
-spec label(Storage :: gen_server:server_ref()) -> {ok, Label :: wa_raft_label:label()} | wa_raft_storage:error().
382+
-spec label(Storage :: gen_server:server_ref()) -> {ok, Label :: wa_raft_label:label()} | {error, Reason :: term()}.
385383
label(Storage) ->
386384
gen_server:call(Storage, ?LABEL_REQUEST, ?RAFT_STORAGE_CALL_TIMEOUT()).
387385

388-
-spec config(Storage :: gen_server:server_ref()) -> {ok, wa_raft_log:log_pos(), wa_raft_server:config()} | undefined | wa_raft_storage:error().
386+
-spec config(Storage :: gen_server:server_ref()) -> {ok, wa_raft_log:log_pos(), wa_raft_server:config()} | undefined | {error, Reason :: term()}.
389387
config(Storage) ->
390388
gen_server:call(Storage, ?CONFIG_REQUEST, ?RAFT_STORAGE_CALL_TIMEOUT()).
391389

@@ -418,39 +416,39 @@ apply(Storage, Record, Size, EffectiveTerm) ->
418416
apply_read(Storage, From, Command) ->
419417
gen_server:cast(Storage, ?APPLY_READ_REQUEST(From, Command)).
420418

421-
-spec open_snapshot(Storage :: gen_server:server_ref(), Path :: file:filename(), Position :: wa_raft_log:log_pos()) -> ok | error().
419+
-spec open_snapshot(Storage :: gen_server:server_ref(), Path :: file:filename(), Position :: wa_raft_log:log_pos()) -> ok | {error, Reason :: term()}.
422420
open_snapshot(Storage, Path, Position) ->
423421
gen_server:call(Storage, ?OPEN_SNAPSHOT_REQUEST(Path, Position), ?RAFT_STORAGE_CALL_TIMEOUT()).
424422

425-
-spec create_snapshot(Storage :: gen_server:server_ref()) -> {ok, Pos :: wa_raft_log:log_pos()} | error().
423+
-spec create_snapshot(Storage :: gen_server:server_ref()) -> {ok, Pos :: wa_raft_log:log_pos()} | {error, Reason :: term()}.
426424
create_snapshot(Storage) ->
427425
gen_server:call(Storage, ?CREATE_SNAPSHOT_REQUEST(), ?RAFT_STORAGE_CALL_TIMEOUT()).
428426

429427
%% Be careful when using the same name for two snapshots as the RAFT storage
430428
%% server will not recreate an existing snapshot even if the storage state has
431429
%% advanced since the snapshot was created; however, this method will always
432430
%% return the current position upon success.
433-
-spec create_snapshot(Storage :: gen_server:server_ref(), Name :: string()) -> {ok, Pos :: wa_raft_log:log_pos()} | error().
431+
-spec create_snapshot(Storage :: gen_server:server_ref(), Name :: string()) -> {ok, Pos :: wa_raft_log:log_pos()} | {error, Reason :: term()}.
434432
create_snapshot(Storage, Name) ->
435433
gen_server:call(Storage, ?CREATE_SNAPSHOT_REQUEST(Name), ?RAFT_STORAGE_CALL_TIMEOUT()).
436434

437-
-spec create_witness_snapshot(Storage :: gen_server:server_ref()) -> {ok, Pos :: wa_raft_log:log_pos()} | error().
435+
-spec create_witness_snapshot(Storage :: gen_server:server_ref()) -> {ok, Pos :: wa_raft_log:log_pos()} | {error, Reason :: term()}.
438436
create_witness_snapshot(Storage) ->
439437
gen_server:call(Storage, ?CREATE_WITNESS_SNAPSHOT_REQUEST(), ?RAFT_STORAGE_CALL_TIMEOUT()).
440438

441439
%% Be careful when using the same name for two snapshots as the RAFT storage
442440
%% server will not recreate an existing snapshot even if the storage state has
443441
%% advanced since the snapshot was created; however, this method will always
444442
%% return the current position upon success.
445-
-spec create_witness_snapshot(Storage :: gen_server:server_ref(), Name :: string()) -> {ok, Pos :: wa_raft_log:log_pos()} | error().
443+
-spec create_witness_snapshot(Storage :: gen_server:server_ref(), Name :: string()) -> {ok, Pos :: wa_raft_log:log_pos()} | {error, Reason :: term()}.
446444
create_witness_snapshot(Storage, Name) ->
447445
gen_server:call(Storage, ?CREATE_WITNESS_SNAPSHOT_REQUEST(Name), ?RAFT_STORAGE_CALL_TIMEOUT()).
448446

449447
-spec delete_snapshot(Storage :: gen_server:server_ref(), Name :: string()) -> ok.
450448
delete_snapshot(Storage, Name) ->
451449
gen_server:cast(Storage, ?DELETE_SNAPSHOT_REQUEST(Name)).
452450

453-
-spec make_empty_snapshot(Storage :: gen_server:server_ref(), Path :: file:filename(), Position :: wa_raft_log:log_pos(), Config :: wa_raft_server:config(), Data :: term()) -> ok | error().
451+
-spec make_empty_snapshot(Storage :: gen_server:server_ref(), Path :: file:filename(), Position :: wa_raft_log:log_pos(), Config :: wa_raft_server:config(), Data :: term()) -> ok | {error, Reason :: term()}.
454452
make_empty_snapshot(Storage, Path, Position, Config, Data) ->
455453
gen_server:call(Storage, ?MAKE_EMPTY_SNAPSHOT_REQUEST(Path, Position, Config, Data), ?RAFT_STORAGE_CALL_TIMEOUT()).
456454

@@ -730,7 +728,7 @@ handle_delayed_reads(#state{queues = Queues, module = Module, handle = Handle, p
730728
],
731729
ok.
732730

733-
-spec handle_create_snapshot(SnapshotName :: string(), Storage :: #state{}) -> {ok, wa_raft_log:log_pos()} | error().
731+
-spec handle_create_snapshot(SnapshotName :: string(), Storage :: #state{}) -> {ok, wa_raft_log:log_pos()} | {error, Reason :: term()}.
734732
handle_create_snapshot(SnapshotName, #state{name = Name, path = Path, module = Module, handle = Handle, position = Position} = State) ->
735733
SnapshotPath = filename:join(Path, SnapshotName),
736734
case filelib:is_dir(SnapshotPath) of
@@ -748,7 +746,7 @@ handle_create_snapshot(SnapshotName, #state{name = Name, path = Path, module = M
748746
end
749747
end.
750748

751-
-spec handle_create_witness_snapshot(SnapshotName :: string(), Storage :: #state{}) -> {ok, wa_raft_log:log_pos()} | error().
749+
-spec handle_create_witness_snapshot(SnapshotName :: string(), Storage :: #state{}) -> {ok, wa_raft_log:log_pos()} | {error, Reason :: term()}.
752750
handle_create_witness_snapshot(SnapshotName, #state{name = Name, path = Path, module = Module, handle = Handle, position = Position} = State) ->
753751
SnapshotPath = filename:join(Path, SnapshotName),
754752
case filelib:is_dir(SnapshotPath) of

0 commit comments

Comments
 (0)