| summaryrefslogtreecommitdiff | 
diff options
| author | nsensfel <SpamShield0@noot-noot.org> | 2018-06-05 14:33:27 +0200 | 
|---|---|---|
| committer | nsensfel <SpamShield0@noot-noot.org> | 2018-06-05 14:33:27 +0200 | 
| commit | 983ed9d0e8da15cb8c304fea62c25d3b053e712b (patch) | |
| tree | 71a2aa7618692abe46a7fb07c590995f97b56d97 /src/db | |
| parent | 25b3f31c8a451044459d104a3a36f919557b8d20 (diff) | |
Has the DB run as a separate node.
I am still figuring out how Erlang handles node connections... It would
seem that spawn(NODE, ...) automatically initiates the connection to
NODE (i.e. no need to use net_kernel:connect_node before).
Diffstat (limited to 'src/db')
| -rw-r--r-- | src/db/Makefile | 8 | ||||
| -rw-r--r-- | src/db/src/db_node.erl | 31 | ||||
| -rw-r--r-- | src/db/src/struct/db_model.erl | 71 | 
3 files changed, 110 insertions, 0 deletions
| diff --git a/src/db/Makefile b/src/db/Makefile index d7b6eed..206a332 100644 --- a/src/db/Makefile +++ b/src/db/Makefile @@ -17,6 +17,13 @@ INCLUDE_DIR ?= ${CURDIR}/include  ## Binaries  ERLC ?= erlc  ERLC_OPTS ?= +ERL ?= erl +ERL_OPTS ?= \ +	-connect_all false \ +	-name db_node \ +	-pa $(BIN_DIR) \ +	-run db_node start +  DIALYZER ?= dialyzer  ################################################################################ @@ -52,6 +59,7 @@ debug: debug_run  build: $(REQUIRED_HEADERS) $(PREPROCESSOR_RESULT) $(ERLANG_RESULT)  run: +	$(ERL) $(ERL_OPTS)  clean:  	rm -rf $(PREPROCESSOR_RESULT) $(ERLANG_RESULT) diff --git a/src/db/src/db_node.erl b/src/db/src/db_node.erl new file mode 100644 index 0000000..be295c6 --- /dev/null +++ b/src/db/src/db_node.erl @@ -0,0 +1,31 @@ +-module(db_node). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-export([start/0]). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-spec wait_for_stop () -> 'ok'. +wait_for_stop () -> +   receive +      stop -> ok; +      {ping, Pid} -> Pid ! pong; +      _ -> wait_for_stop() +   end. + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-spec start () -> 'ok'. +start () -> +   DB = db_model:new(battle_db, "/tmp/battle_db.mnesia", []), +   db_model:start(DB), +   wait_for_stop(), +   ok. diff --git a/src/db/src/struct/db_model.erl b/src/db/src/struct/db_model.erl new file mode 100644 index 0000000..0f8c872 --- /dev/null +++ b/src/db/src/struct/db_model.erl @@ -0,0 +1,71 @@ +-module(db_model). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-include("../../include/db_item.hrl"). + +-record +( +   db_model, +   { +      name :: atom(), +      store_file :: string(), +      neighbors :: list(node()) +   } +). + +-type type() :: #db_model{}. + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-export_type([type/0]). + +-export +( +   [ +      new/3, +      start/1 +   ] +). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-spec new (atom(), string(), list(node())) -> type(). +new (DBName, StorageFile, Neighbors) -> +   #db_model +   { +      name = DBName, +      store_file = StorageFile, +      neighbors = Neighbors +   }. + +start (Model) -> +   DBName = Model#db_model.name, +   StorageFile = Model#db_model.store_file, +   Neighbors = Model#db_model.neighbors, + +   ok = application:set_env(mnesia, dir, StorageFile), +   case mnesia:create_schema([node()|Neighbors]) of +      {error, {Name, {already_exists, Name}}} -> ok; +      ok -> ok +   end, +   ok = mnesia:start(), +   mnesia:create_table +   ( +      DBName, +      [ +         {attributes, record_info(fields, db_item)}, +         {disc_copies, [node()|Neighbors]}, +         {disc_only_copies, []}, +         {ram_copies, []}, +         {type, ordered_set}, +         {local_content, false} +      ] +   ). | 


