Module riak_core_metadata_manager

Behaviours: gen_server, riak_core_broadcast_handler.

Data Types

metadata_broadcast()

metadata_broadcast() = #metadata_broadcast{pkey = metadata_pkey(), obj = metadata_object()}

metadata_context()

metadata_context() = dvvset:vector()

metadata_iterator()

abstract datatype: metadata_iterator()

metadata_key()

metadata_key() = any()

metadata_modifier()

metadata_modifier() = fun(([metadata_value() | metadata_tombstone()] | undefined) -> metadata_value())

metadata_object()

metadata_object() = {metadata, dvvset:clock()}

metadata_pkey()

metadata_pkey() = {metadata_prefix(), metadata_key()}

metadata_prefix()

metadata_prefix() = {binary() | atom(), binary() | atom()}

metadata_tombstone()

metadata_tombstone() = '$deleted'

metadata_value()

metadata_value() = any()

mm_nodename_opt()

mm_nodename_opt() = {nodename, term()}

mm_opt()

mm_opt() = mm_path_opt() | mm_nodename_opt()

mm_opts()

mm_opts() = [mm_opt()]

mm_path_opt()

mm_path_opt() = {data_dir, file:name_all()}

remote_iterator()

remote_iterator() = #remote_iterator{node = node(), ref = reference(), prefix = metadata_prefix() | atom() | binary()}

Function Index

broadcast_data/1Deconstructs are broadcast that is sent using riak_core_metadata_manager as the handling module returning the message id and payload.
exchange/1Trigger an exchange.
get/1Reads the value for a prefixed key.
get/2Same as get/1 but reads the value from Node
graft/1returns the object associated with the given key and context (message id) if the currently stored version has an equal context.
is_stale/1Returns false if the update (or a causally newer update) has already been received (stored locally).
iterate/1advance the iterator by one key, full-prefix or sub-prefix.
iterator/0Returns a full-prefix iterator: an iterator for all full-prefixes that have keys stored under them When done with the iterator, iterator_close/1 must be called.
iterator/1Returns a sub-prefix iterator for a given prefix.
iterator/2Return an iterator for keys stored under a prefix.
iterator_close/1Closes the iterator.
iterator_done/1returns true if there are no more keys or prefixes to iterate over.
iterator_prefix/1return the full-prefix or prefix being iterated by this iterator.
iterator_value/1return the key and object or the prefix pointed to by the iterator.
merge/2Merges a remote copy of a metadata record sent via broadcast w/ the local view for the key contained in the message id.
merge/3same as merge/2 but merges the object on Node
put/3Sets the value of a prefixed key.
remote_iterator/1Create an iterator on Node.
remote_iterator/2Create an iterator on Node.
start_link/0Same as start_link([]).
start_link/1Start riak_core_metadadata_manager and link to calling process.

Function Details

broadcast_data/1

broadcast_data(Metadata_broadcast::metadata_broadcast()) -> {{metadata_pkey(), metadata_context()}, metadata_object()}

Deconstructs are broadcast that is sent using riak_core_metadata_manager as the handling module returning the message id and payload.

exchange/1

exchange(Peer::node()) -> {ok, pid()} | {error, term()}

Trigger an exchange

get/1

get(PKey::metadata_pkey()) -> metadata_object() | undefined

Reads the value for a prefixed key. If the value does not exist undefined is returned. otherwise a Dotted Version Vector Set is returned. When reading the value for a subsequent call to put/3 the context can be obtained using riak_core_metadata_object:context/1. Values can obtained w/ riak_core_metadata_object:values/1.

get/2

get(Node::node(), PKey::metadata_pkey()) -> metadata_object() | undefined

Same as get/1 but reads the value from Node

graft/1

graft(X1::{metadata_pkey(), metadata_context()}) -> stale | {ok, metadata_object()} | {error, term()}

returns the object associated with the given key and context (message id) if the currently stored version has an equal context. otherwise stale is returned. because it assumed that a grafted context can only be causally older than the local view a stale response means there is another message that subsumes the grafted one

is_stale/1

is_stale(X1::{metadata_pkey(), metadata_context()}) -> boolean()

Returns false if the update (or a causally newer update) has already been received (stored locally).

iterate/1

iterate(It::metadata_iterator() | remote_iterator()) -> metadata_iterator() | remote_iterator()

advance the iterator by one key, full-prefix or sub-prefix

iterator/0

iterator() -> metadata_iterator()

Returns a full-prefix iterator: an iterator for all full-prefixes that have keys stored under them When done with the iterator, iterator_close/1 must be called

iterator/1

iterator(Prefix::binary() | atom()) -> metadata_iterator()

Returns a sub-prefix iterator for a given prefix. When done with the iterator, iterator_close/1 must be called

iterator/2

iterator(FullPrefix::metadata_prefix(), KeyMatch::term()) -> metadata_iterator()

Return an iterator for keys stored under a prefix. If KeyMatch is undefined then all keys will may be visted by the iterator. Otherwise only keys matching KeyMatch will be visited.

KeyMatch can be either: * an erlang term - which will be matched exactly against a key * '_' - which is equivalent to undefined * an erlang tuple containing terms and '_' - if tuples are used as keys * this can be used to iterate over some subset of keys

When done with the iterator, iterator_close/1 must be called

iterator_close/1

iterator_close(Remote_iterator::metadata_iterator() | remote_iterator()) -> ok

Closes the iterator. This function must be called on all open iterators

iterator_done/1

iterator_done(Remote_iterator::metadata_iterator() | remote_iterator()) -> boolean()

returns true if there are no more keys or prefixes to iterate over

iterator_prefix/1

iterator_prefix(Remote_iterator::metadata_iterator() | remote_iterator()) -> metadata_prefix() | undefined | binary() | atom()

return the full-prefix or prefix being iterated by this iterator. If the iterator is a full-prefix iterator undefined is returned.

iterator_value/1

iterator_value(Remote_iterator::metadata_iterator() | remote_iterator()) -> {metadata_key(), metadata_object()} | metadata_prefix() | binary() | atom()

return the key and object or the prefix pointed to by the iterator

merge/2

merge(X1::{metadata_pkey(), undefined | metadata_context()}, Obj::undefined | metadata_object()) -> boolean()

Merges a remote copy of a metadata record sent via broadcast w/ the local view for the key contained in the message id. If the remote copy is causally older than the current data stored then false is returned and no updates are merged. Otherwise, the remote copy is merged (possibly generating siblings) and true is returned.

merge/3

merge(Node::node(), X2::{metadata_pkey(), undefined | metadata_context()}, Obj::metadata_object()) -> boolean()

same as merge/2 but merges the object on Node

put/3

put(PKey::metadata_pkey(), Context::metadata_context() | undefined, ValueOrFun::metadata_value() | metadata_modifier()) -> metadata_object()

Sets the value of a prefixed key. The most recently read context (see get/1) should be passed as the second argument to prevent unneccessary siblings.

remote_iterator/1

remote_iterator(Node::node()) -> remote_iterator()

Create an iterator on Node. This allows for remote iteration by having the metadata manager keep track of the actual iterator (since ets continuations cannot cross node boundaries). The iterator created iterates all full-prefixes. Once created the rest of the iterator API may be used as usual. When done with the iterator, iterator_close/1 must be called

remote_iterator/2

remote_iterator(Node::node(), Prefix::metadata_prefix() | binary() | atom() | undefined) -> remote_iterator()

Create an iterator on Node. This allows for remote iteration by having the metadata manager keep track of the actual iterator (since ets continuations cannot cross node boundaries). When Perfix is not a full prefix, the iterator created iterates all sub-prefixes under Prefix. Otherse, the iterator iterates all keys under a prefix. Once created the rest of the iterator API may be used as usual. When done with the iterator, iterator_close/1 must be called

start_link/0

start_link() -> {ok, pid()} | ignore | {error, term()}

Same as start_link([]).

start_link/1

start_link(Opts::mm_opts()) -> {ok, pid()} | ignore | {error, term()}

Start riak_core_metadadata_manager and link to calling process.

The following options can be provided: * data_dir: the root directory to place cluster metadata files. if not provided this defaults to the cluster_meta directory in riak_core's platform_data_dir. * nodename: the node identifier (for use in logical clocks). defaults to node()


Generated by EDoc