anchor.diff:      Fun = maps:get(Key, ConfigItemTypeMap),
       maps:put(Key, Fun(Val), Acc).
   
  +%% Process which return config values to other process
   config_manager(Map) ->
       receive
           {From, Key} ->
  
positive.code:         Pat -> io:format("failed the pattern, ~p ~n", [Pat])
          end.
  
  handle_io(Parent, RequestCounter, Op, Key, Val) ->
      DBHandle = open_store(),
      BinaryKey = to_binary(Key),
      BinaryVal = to_binary(Val),
      if 
          Op =:= "GET" ->
              case bitcask:get(DBHandle, BinaryKey) of
                  {ok, Value} ->
                      Parent ! {RequestCounter, Op, Key, Value};
                  not_found ->
                      Parent ! {RequestCounter, Op, Key, undefined}
              end;
          Op =:= "PUT" ->
              case bitcask:put(DBHandle, BinaryKey, BinaryVal) of
                  ok ->
                      Parent ! {RequestCounter, Op, Key, Val};
                  {error, _} ->
                      Parent ! {RequestCounter, Op, Key, error}
              end;
          true -> Parent ! {RequestCounter, Op, Key, Val}
      end,
      bitcask:close(DBHandle).
  
negative.code:     spawn_link(fun() -> start_procs() end),
      % Arbiter which handles local io
      Arbiter = spawn_link(fun() -> local_io(0) end),
      register(arbiter, Arbiter),
      % listen to internode communication
      spawn_link(fun() -> listen_to_nodes() end),
      % proc to keep track of nodes
      NodeIPs = get_config(?NODE_IPS),
      io:format("Node IPs: ~p~n", [NodeIPs]),
  