Installing Custom Code
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 (
add_paths
) also applies to installing JavaScript files.
Compiling
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 |
/usr/lib64/riak/erts-5.9.1/bin/erlc |
Debian & Ubuntu Linux |
/usr/lib/riak/erts-5.9.1/bin/erlc |
FreeBSD |
/usr/local/lib/riak/erts-5.9.1/bin/erlc |
SmartOS |
/opt/local/lib/riak/erts-5.9.1/bin/erlc |
Solaris 10 |
/opt/riak/lib/erts-5.9.1/bin/erlc |
Table 1: Erlang compiler executable location for packaged Riak installations on supported platforms
Compiling the module is a straightforward process.
erlc validate_json.erl
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 /tmp/beams
,
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 riak
user.
Successful compilation will result in a new .beam
file,
validate_json.beam
.
Configure
Take the validate_json.beam
and copy this file to the /tmp/beams
directory.
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, /tmp/beams
).
Edit app.config
and insert an add_paths
setting into the riak_kv
section as shown:
{riak_kv, [
%% ...
{add_paths, ["/tmp/beams/"]},
%% ...
After updating 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.