99 lines
3.2 KiB
Erlang
99 lines
3.2 KiB
Erlang
%%----------------------------------------------------------------
|
|
%% Copyright (c) 2013-2016 Klarna AB
|
|
%%
|
|
%% This file is provided to you under the Apache License,
|
|
%% Version 2.0 (the "License"); you may not use this file
|
|
%% except in compliance with the License. You may obtain
|
|
%% a copy of the License at
|
|
%%
|
|
%% http://www.apache.org/licenses/LICENSE-2.0
|
|
%%
|
|
%% Unless required by applicable law or agreed to in writing,
|
|
%% software distributed under the License is distributed on an
|
|
%% "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
%% KIND, either express or implied. See the License for the
|
|
%% specific language governing permissions and limitations
|
|
%% under the License.
|
|
%%----------------------------------------------------------------
|
|
|
|
-module(mnesia_rocksdb_fallback).
|
|
|
|
-export([run/0]).
|
|
|
|
-define(m(A,B), fun() -> L = ?LINE,
|
|
case {A,B} of
|
|
{__X, __X} ->
|
|
B;
|
|
Other ->
|
|
error({badmatch, [Other,
|
|
{line, L}]})
|
|
end
|
|
end()).
|
|
|
|
run() ->
|
|
cleanup(),
|
|
mnesia_rocksdb_tlib:start_mnesia(reset),
|
|
mnesia_rocksdb_tlib:create_table(rdb),
|
|
ok = mnesia:backup("bup0.BUP"),
|
|
[mnesia:dirty_write({t,K,V}) || {K,V} <- [{a,1},
|
|
{b,2},
|
|
{c,3}]],
|
|
ok = mnesia:backup("bup1.BUP"),
|
|
[mnesia:dirty_write({t,K,V}) || {K,V} <- [{d,4},
|
|
{e,5},
|
|
{f,6}]],
|
|
ok = mnesia:backup("bup2.BUP"),
|
|
io:fwrite("*****************************************~n", []),
|
|
load_backup("bup0.BUP"),
|
|
?m([], mnesia:dirty_match_object(t, {t,'_','_'})),
|
|
?m([], mnesia:dirty_index_read(t,2,v)),
|
|
io:fwrite("*****************************************~n", []),
|
|
load_backup("bup1.BUP"),
|
|
?m([{t,a,1},{t,b,2},{t,c,3}], mnesia:dirty_match_object(t, {t,'_','_'})),
|
|
?m([{t,b,2}], mnesia:dirty_index_read(t,2,v)),
|
|
io:fwrite("*****************************************~n", []),
|
|
load_backup("bup2.BUP"),
|
|
?m([{t,a,1},{t,b,2},{t,c,3},
|
|
{t,d,4},{t,e,5},{t,f,6}], mnesia:dirty_match_object(t, {t,'_','_'})),
|
|
?m([{t,b,2}], mnesia:dirty_index_read(t,2,v)),
|
|
?m([{t,e,5}], mnesia:dirty_index_read(t,5,v)),
|
|
ok.
|
|
|
|
load_backup(BUP) ->
|
|
mnesia_rocksdb_tlib:trace(
|
|
fun() ->
|
|
io:fwrite("loading backup ~s~n", [BUP]),
|
|
ok = mnesia:install_fallback(BUP),
|
|
io:fwrite("stopping~n", []),
|
|
mnesia:stop(),
|
|
timer:sleep(3000),
|
|
io:fwrite("starting~n", []),
|
|
mnesia:start(),
|
|
WaitRes = mnesia:wait_for_tables([t], 5000),
|
|
io:fwrite("WaitRes = ~p~n", [WaitRes])
|
|
end,
|
|
mods(0)
|
|
).
|
|
|
|
cleanup() ->
|
|
os:cmd("rm *.BUP").
|
|
|
|
mods(0) ->
|
|
[];
|
|
mods(1) ->
|
|
[
|
|
{l, mnesia_rocksdb},
|
|
{g, rocksdb}
|
|
];
|
|
mods(2) ->
|
|
[
|
|
%% {l, mnesia_monitor},
|
|
{g, mnesia_rocksdb},
|
|
{l, mnesia_bup},
|
|
{g, mnesia_lib},
|
|
{g, mnesia_schema},
|
|
%% {g, mnesia_loader},
|
|
{g, mnesia_index},
|
|
{l, mnesia_tm}
|
|
].
|