Created
April 8, 2015 09:29
-
-
Save rhumbertgz/4b42251f54557f1525e9 to your computer and use it in GitHub Desktop.
Riak 2.0 Pre/Post commit error
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[ | |
%% Riak KV config | |
{riak_kv, [ | |
{add_paths, ["/tmp/beams/"]} | |
]} | |
]. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Hello everyone, | |
I have been trying to follow the examples of hooks http://docs.basho.com/riak/2.0.0/dev/using/commit-hooks/, but allways obtained an error (see below). | |
I am using Riak 2.0.0 | |
These are the commands that I am using. | |
curl -XPUT -H "Content-Type: application/json" -d '{"props":{"precommit":[{"mod": "validate_demo", "fun": "validate"}]}}' http://127.0.0.1:8090/buckets/demo/props | |
curl http://localhost:8090/buckets/demo/props | |
curl -XPUT -H "Content-Type: application/json" -d '{scorew": 5}' http://127.0.0.1:8090/buckets/demo/keys/1 | |
I checked list of precommit of the bucket and it is there, nevertheless obtained an error. I also checked the configuration (chkconfig) of my node (I'm using a single node) and is OK. | |
I'm using Mac OS X 10.10 (14A389a) | |
Thanks in advance, | |
Humberto | |
This is the structure directory | |
riak-2.0.0 | |
-> bin | |
-> data | |
-> erts-5.10.3 | |
-> etc | |
-> riak.conf | |
-> advanced.config | |
-> solr-log4j.properties | |
-> lib | |
-> log | |
-> releases | |
-> tmp | |
-> beams | |
->validate_demo.beam | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<html><head><title>500 Internal Server Error</title></head><body><h1>Internal Server Error</h1>The server encountered an error while processing this request:<br><pre>{error, | |
{error,badarg, | |
[{erlang,iolist_to_binary, | |
[{hook_crashed,{validate_demo,validate,error,undef}}], | |
[]}, | |
{wrq,append_to_response_body,2,[{file,"src/wrq.erl"},{line,215}]}, | |
{riak_kv_wm_object,handle_common_error,3, | |
[{file,"src/riak_kv_wm_object.erl"},{line,1144}]}, | |
{webmachine_resource,resource_call,3, | |
[{file,"src/webmachine_resource.erl"},{line,186}]}, | |
{webmachine_resource,do,3, | |
[{file,"src/webmachine_resource.erl"},{line,142}]}, | |
{webmachine_decision_core,resource_call,1, | |
[{file,"src/webmachine_decision_core.erl"},{line,48}]}, | |
{webmachine_decision_core,accept_helper,1, | |
[{file,"src/webmachine_decision_core.erl"},{line,612}]}, | |
{webmachine_decision_core,decision,1, | |
[{file,"src/webmachine_decision_core.erl"},{line,580}]}]}}</pre><P><HR><ADDRESS>mochiweb+webmachine web server</ADDRESS></body></html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
## Where to emit the default log messages (typically at 'info' | |
## severity): | |
## off: disabled | |
## file: the file specified by log.console.file | |
## console: to standard output (seen when using `riak attach-direct`) | |
## both: log.console.file and standard out. | |
## | |
## Default: file | |
## | |
## Acceptable values: | |
## - one of: off, file, console, both | |
log.console = file | |
## The severity level of the console log, default is 'info'. | |
## | |
## Default: info | |
## | |
## Acceptable values: | |
## - one of: debug, info, notice, warning, error, critical, alert, emergency, none | |
log.console.level = info | |
## When 'log.console' is set to 'file' or 'both', the file where | |
## console messages will be logged. | |
## | |
## Default: $(platform_log_dir)/console.log | |
## | |
## Acceptable values: | |
## - the path to a file | |
log.console.file = $(platform_log_dir)/console.log | |
## The file where error messages will be logged. | |
## | |
## Default: $(platform_log_dir)/error.log | |
## | |
## Acceptable values: | |
## - the path to a file | |
log.error.file = $(platform_log_dir)/error.log | |
## When set to 'on', enables log output to syslog. | |
## | |
## Default: off | |
## | |
## Acceptable values: | |
## - on or off | |
log.syslog = off | |
## Whether to enable the crash log. | |
## | |
## Default: on | |
## | |
## Acceptable values: | |
## - on or off | |
log.crash = on | |
## If the crash log is enabled, the file where its messages will | |
## be written. | |
## | |
## Default: $(platform_log_dir)/crash.log | |
## | |
## Acceptable values: | |
## - the path to a file | |
log.crash.file = $(platform_log_dir)/crash.log | |
## Maximum size in bytes of individual messages in the crash log | |
## | |
## Default: 64KB | |
## | |
## Acceptable values: | |
## - a byte size with units, e.g. 10GB | |
log.crash.maximum_message_size = 64KB | |
## Maximum size of the crash log in bytes, before it is rotated | |
## | |
## Default: 10MB | |
## | |
## Acceptable values: | |
## - a byte size with units, e.g. 10GB | |
log.crash.size = 10MB | |
## The schedule on which to rotate the crash log. For more | |
## information see: | |
## https://github.com/basho/lager/blob/master/README.md#internal-log-rotation | |
## | |
## Default: $D0 | |
## | |
## Acceptable values: | |
## - text | |
log.crash.rotation = $D0 | |
## The number of rotated crash logs to keep. When set to | |
## 'current', only the current open log file is kept. | |
## | |
## Default: 5 | |
## | |
## Acceptable values: | |
## - an integer | |
## - the text "current" | |
log.crash.rotation.keep = 5 | |
## Name of the Erlang node | |
## | |
## Default: [email protected] | |
## | |
## Acceptable values: | |
## - text | |
nodename = [email protected] | |
## Cookie for distributed node communication. All nodes in the | |
## same cluster should use the same cookie or they will not be able to | |
## communicate. | |
## | |
## Default: riak | |
## | |
## Acceptable values: | |
## - text | |
distributed_cookie = riak | |
## Sets the number of threads in async thread pool, valid range | |
## is 0-1024. If thread support is available, the default is 64. | |
## More information at: http://erlang.org/doc/man/erl.html | |
## | |
## Default: 64 | |
## | |
## Acceptable values: | |
## - an integer | |
erlang.async_threads = 64 | |
## The number of concurrent ports/sockets | |
## Valid range is 1024-134217727 | |
## | |
## Default: 65536 | |
## | |
## Acceptable values: | |
## - an integer | |
erlang.max_ports = 65536 | |
## Set scheduler forced wakeup interval. All run queues will be | |
## scanned each Interval milliseconds. While there are sleeping | |
## schedulers in the system, one scheduler will be woken for each | |
## non-empty run queue found. An Interval of zero disables this | |
## feature, which also is the default. | |
## This feature is a workaround for lengthy executing native code, and | |
## native code that do not bump reductions properly. | |
## More information: http://www.erlang.org/doc/man/erl.html#+sfwi | |
## | |
## Acceptable values: | |
## - an integer | |
## erlang.schedulers.force_wakeup_interval = 500 | |
## Enable or disable scheduler compaction of load. By default | |
## scheduler compaction of load is enabled. When enabled, load | |
## balancing will strive for a load distribution which causes as many | |
## scheduler threads as possible to be fully loaded (i.e., not run out | |
## of work). This is accomplished by migrating load (e.g. runnable | |
## processes) into a smaller set of schedulers when schedulers | |
## frequently run out of work. When disabled, the frequency with which | |
## schedulers run out of work will not be taken into account by the | |
## load balancing logic. | |
## More information: http://www.erlang.org/doc/man/erl.html#+scl | |
## | |
## Acceptable values: | |
## - one of: true, false | |
## erlang.schedulers.compaction_of_load = false | |
## Enable or disable scheduler utilization balancing of load. By | |
## default scheduler utilization balancing is disabled and instead | |
## scheduler compaction of load is enabled which will strive for a | |
## load distribution which causes as many scheduler threads as | |
## possible to be fully loaded (i.e., not run out of work). When | |
## scheduler utilization balancing is enabled the system will instead | |
## try to balance scheduler utilization between schedulers. That is, | |
## strive for equal scheduler utilization on all schedulers. | |
## More information: http://www.erlang.org/doc/man/erl.html#+sub | |
## | |
## Acceptable values: | |
## - one of: true, false | |
## erlang.schedulers.utilization_balancing = true | |
## Number of partitions in the cluster (only valid when first | |
## creating the cluster). Must be a power of 2, minimum 8 and maximum | |
## 1024. | |
## | |
## Default: 64 | |
## | |
## Acceptable values: | |
## - an integer | |
## ring_size = 64 | |
## Number of concurrent node-to-node transfers allowed. | |
## | |
## Default: 2 | |
## | |
## Acceptable values: | |
## - an integer | |
## transfer_limit = 2 | |
## Default cert location for https can be overridden | |
## with the ssl config variable, for example: | |
## | |
## Acceptable values: | |
## - the path to a file | |
## ssl.certfile = $(platform_etc_dir)/cert.pem | |
## Default key location for https can be overridden with the ssl | |
## config variable, for example: | |
## | |
## Acceptable values: | |
## - the path to a file | |
## ssl.keyfile = $(platform_etc_dir)/key.pem | |
## Default signing authority location for https can be overridden | |
## with the ssl config variable, for example: | |
## | |
## Acceptable values: | |
## - the path to a file | |
## ssl.cacertfile = $(platform_etc_dir)/cacertfile.pem | |
## DTrace support Do not enable 'dtrace' unless your Erlang/OTP | |
## runtime is compiled to support DTrace. DTrace is available in | |
## R15B01 (supported by the Erlang/OTP official source package) and in | |
## R14B04 via a custom source repository & branch. | |
## | |
## Default: off | |
## | |
## Acceptable values: | |
## - on or off | |
dtrace = off | |
## Platform-specific installation paths (substituted by rebar) | |
## | |
## Default: ./bin | |
## | |
## Acceptable values: | |
## - the path to a directory | |
platform_bin_dir = ./bin | |
## | |
## Default: ./data | |
## | |
## Acceptable values: | |
## - the path to a directory | |
platform_data_dir = ./data | |
## | |
## Default: ./etc | |
## | |
## Acceptable values: | |
## - the path to a directory | |
platform_etc_dir = ./etc | |
## | |
## Default: ./lib | |
## | |
## Acceptable values: | |
## - the path to a directory | |
platform_lib_dir = ./lib | |
## | |
## Default: ./log | |
## | |
## Acceptable values: | |
## - the path to a directory | |
platform_log_dir = ./log | |
## Enable consensus subsystem. Set to 'on' to enable the | |
## consensus subsystem used for strongly consistent Riak operations. | |
## | |
## Default: off | |
## | |
## Acceptable values: | |
## - on or off | |
## strong_consistency = on | |
## listener.http.<name> is an IP address and TCP port that the Riak | |
## HTTP interface will bind. | |
## | |
## Default: 127.0.0.1:8098 | |
## | |
## Acceptable values: | |
## - an IP/port pair, e.g. 127.0.0.1:10011 | |
listener.http.internal = 127.0.0.1:8090 | |
## listener.protobuf.<name> is an IP address and TCP port that the Riak | |
## Protocol Buffers interface will bind. | |
## | |
## Default: 127.0.0.1:8087 | |
## | |
## Acceptable values: | |
## - an IP/port pair, e.g. 127.0.0.1:10011 | |
listener.protobuf.internal = 127.0.0.1:8084 | |
## The maximum length to which the queue of pending connections | |
## may grow. If set, it must be an integer > 0. If you anticipate a | |
## huge number of connections being initialized *simultaneously*, set | |
## this number higher. | |
## | |
## Default: 128 | |
## | |
## Acceptable values: | |
## - an integer | |
## protobuf.backlog = 128 | |
## listener.https.<name> is an IP address and TCP port that the Riak | |
## HTTPS interface will bind. | |
## | |
## Acceptable values: | |
## - an IP/port pair, e.g. 127.0.0.1:10011 | |
## listener.https.internal = 127.0.0.1:8098 | |
## How Riak will repair out-of-sync keys. Some features require | |
## this to be set to 'active', including search. | |
## * active: out-of-sync keys will be repaired in the background | |
## * passive: out-of-sync keys are only repaired on read | |
## * active-debug: like active, but outputs verbose debugging | |
## information | |
## | |
## Default: active | |
## | |
## Acceptable values: | |
## - one of: active, passive, active-debug | |
anti_entropy = active | |
## Specifies the storage engine used for Riak's key-value data | |
## and secondary indexes (if supported). | |
## | |
## Default: bitcask | |
## | |
## Acceptable values: | |
## - one of: bitcask, leveldb, memory, multi | |
storage_backend = bitcask | |
## Controls which binary representation of a riak value is stored | |
## on disk. | |
## * 0: Original erlang:term_to_binary format. Higher space overhead. | |
## * 1: New format for more compact storage of small values. | |
## | |
## Default: 1 | |
## | |
## Acceptable values: | |
## - the integer 1 | |
## - the integer 0 | |
object.format = 1 | |
## Reading or writing objects bigger than this size will write a | |
## warning in the logs. | |
## | |
## Default: 5MB | |
## | |
## Acceptable values: | |
## - a byte size with units, e.g. 10GB | |
object.size.warning_threshold = 5MB | |
## Writing an object bigger than this will send a failure to the | |
## client. | |
## | |
## Default: 50MB | |
## | |
## Acceptable values: | |
## - a byte size with units, e.g. 10GB | |
object.size.maximum = 50MB | |
## Writing an object with more than this number of siblings will | |
## generate a warning in the logs. | |
## | |
## Default: 25 | |
## | |
## Acceptable values: | |
## - an integer | |
object.siblings.warning_threshold = 25 | |
## Writing an object with more than this number of siblings will | |
## send a failure to the client. | |
## | |
## Default: 100 | |
## | |
## Acceptable values: | |
## - an integer | |
object.siblings.maximum = 100 | |
## A path under which bitcask data files will be stored. | |
## | |
## Default: $(platform_data_dir)/bitcask | |
## | |
## Acceptable values: | |
## - the path to a directory | |
bitcask.data_root = $(platform_data_dir)/bitcask | |
## Configure how Bitcask writes data to disk. | |
## erlang: Erlang's built-in file API | |
## nif: Direct calls to the POSIX C API | |
## The NIF mode provides higher throughput for certain | |
## workloads, but has the potential to negatively impact | |
## the Erlang VM, leading to higher worst-case latencies | |
## and possible throughput collapse. | |
## | |
## Default: erlang | |
## | |
## Acceptable values: | |
## - one of: erlang, nif | |
bitcask.io_mode = erlang | |
## Set to 'off' to disable the admin panel. | |
## | |
## Default: off | |
## | |
## Acceptable values: | |
## - on or off | |
riak_control = off | |
## Authentication mode used for access to the admin panel. | |
## | |
## Default: off | |
## | |
## Acceptable values: | |
## - one of: off, userlist | |
riak_control.auth.mode = off | |
## If riak control's authentication mode (riak_control.auth.mode) | |
## is set to 'userlist' then this is the list of usernames and | |
## passwords for access to the admin panel. | |
## To create users with given names, add entries of the format: | |
## riak_control.auth.user.USERNAME.password = PASSWORD | |
## replacing USERNAME with the desired username and PASSWORD with the | |
## desired password for that user. | |
## | |
## Acceptable values: | |
## - text | |
## riak_control.auth.user.admin.password = pass | |
## This parameter defines the percentage of total server memory | |
## to assign to LevelDB. LevelDB will dynamically adjust its internal | |
## cache sizes to stay within this size. The memory size can | |
## alternately be assigned as a byte count via leveldb.maximum_memory | |
## instead. | |
## | |
## Default: 70 | |
## | |
## Acceptable values: | |
## - an integer | |
leveldb.maximum_memory.percent = 70 | |
## To enable Search set this 'on'. | |
## | |
## Default: off | |
## | |
## Acceptable values: | |
## - on or off | |
search = off | |
## How long Riak will wait for Solr to start. The start sequence | |
## will be tried twice. If both attempts timeout, then the Riak node | |
## will be shutdown. This may need to be increased as more data is | |
## indexed and Solr takes longer to start. Values lower than 1s will | |
## be rounded up to the minimum 1s. | |
## | |
## Default: 30s | |
## | |
## Acceptable values: | |
## - a time duration with units, e.g. '10s' for 10 seconds | |
search.solr.start_timeout = 30s | |
## The port number which Solr binds to. | |
## NOTE: Binds on every interface. | |
## | |
## Default: 8093 | |
## | |
## Acceptable values: | |
## - an integer | |
search.solr.port = 8093 | |
## The port number which Solr JMX binds to. | |
## NOTE: Binds on every interface. | |
## | |
## Default: 8985 | |
## | |
## Acceptable values: | |
## - an integer | |
search.solr.jmx_port = 8985 | |
## The options to pass to the Solr JVM. Non-standard options, | |
## i.e. -XX, may not be portable across JVM implementations. | |
## E.g. -XX:+UseCompressedStrings | |
## | |
## Default: -d64 -Xms1g -Xmx1g -XX:+UseStringCache -XX:+UseCompressedOops | |
## | |
## Acceptable values: | |
## - text | |
search.solr.jvm_options = -d64 -Xms1g -Xmx1g -XX:+UseStringCache -XX:+UseCompressedOops | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-module(validate_demo). | |
-export([validate/1]). | |
validate(Object) -> | |
try | |
mochijson2:decode(riak_object:get_value(Object)), | |
Object | |
catch | |
throw:invalid_utf8 -> | |
{fail, "Invalid JSON: Illegal UTF-8 character"}; | |
error:Error -> | |
{fail, lists:flatten(io_lib:format("Invalid JSON: ~p",[Error]))} | |
end. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment