Riak supports the use of Erlang named functions in compiled modules for pre/post-commit hooks, and MapReduce operations. This doc contains installation steps with simple examples for each use case.
Your developers can compile custom erlang code, which
they can send to you as a beam file. You should note that in Erlang, a file
name must have the same name the module. So if you are given a file named
validate_json.beam, do not rename it.
Note: The Configure step (
If you have been given Erlang code and are expected to compile it for your developers, keep the following notes in mind.
You must use the Erlang compiler (
erlc) associated with the Riak
installation or the version of Erlang used when compiling Riak from source.
For packaged Riak installations, you can consult Table 1 below for the default
location of Riak’s
erlc for each supported platform. If you compiled from
source, use the
erlc from the Erlang version you used to compile Riak.
|CentOS & RHEL Linux
|Debian & Ubuntu Linux
Table 1: Erlang compiler executable location for packaged Riak installations on supported platforms
Compiling the module is a straightforward process.
Next, you’ll need to define a path from which compiled modules can be stored
and loaded. For our example, we’ll use a temporary directory
but you should choose a directory for production functions based on your
own requirements such that they will be available where and when needed.
Ensure that the directory chosen above can be read by the
Successful compilation will result in a new
validate_json.beam and copy this file to the
cp validate_json.beam /tmp/beams/
After copying the compiled module into
/tmp/beams/, you must update
app.config and configure Riak to allow loading of compiled modules from
the directory where they’re stored (again in our example case,
app.config and insert an
add_paths setting into the
section as shown:
app.config, Riak must be restarted. In production cases, you
should ensure that if you are adding configuration changes to multiple nodes,
that you do so in a rolling fashion, taking time to ensure that the Riak key
value store has fully initialized and become available for use.
This is done with the
riak-admin wait-for-service command as detailed
in the Commands documentation.
It is important that you ensure riak_kv is active before restarting the next node.