basho / cuttlefish

never lose your childlike sense of wonder baby cuttlefish, promise me?
Apache License 2.0
205 stars 124 forks source link

Order of datatype list shouldn't matter in mixed datatypes [JIRA: RIAK-1667] #188

Closed kuenishi closed 7 years ago

kuenishi commented 9 years ago

The datatypes wiki page has an example like {datatype, [integer, {atom, infinite}]} that works. However, https://github.com/basho/riak_cs/commit/69ef213c67b7f52a07d7f1f8074f1744a6ebb8af does not work as expected, which means failure in generate. The message was:

==> rel (generate)
Schema: ["/home/kuenishi/cs-2.0/riak_cs/rel/riak-cs/lib/10-riak_cs.schema",
         "/home/kuenishi/cs-2.0/riak_cs/rel/riak-cs/lib/11-erlang_vm.schema"]
ERROR: generate failed while processing /home/kuenishi/cs-2.0/riak_cs/rel: {'EXIT',
    {badarg,
        [{io_lib,format,
             ["Default: ~s",[{error,{type,{100,atom}}}]],
             [{file,"io_lib.erl"},{line,155}]},
         {cuttlefish_conf,generate_comments,1,
             [{file,"src/cuttlefish_conf.erl"},{line,149}]},
         {cuttlefish_conf,generate_element,1,
             [{file,"src/cuttlefish_conf.erl"},{line,132}]},
         {cuttlefish_conf,'-generate/1-fun-0-',2,
        [{file,"src/cuttlefish_conf.erl"},{line,88}]},
         {lists,foldl,3,[{file,"lists.erl"},{line,1248}]},
         {cuttlefish_conf,generate_file,2,
             [{file,"src/cuttlefish_conf.erl"},{line,93}]},
         {cuttlefish_rebar_plugin,make_default_file,3,
             [{file,"src/cuttlefish_rebar_plugin.erl"},{line,83}]},
         {cuttlefish_rebar_plugin,generate,2,
             [{file,"src/cuttlefish_rebar_plugin.erl"},{line,58}]}]}}
Makefile:124: recipe for target 'rel' failed
make: *** [rel] Error 1

The schema was:

 {mapping, "max_buckets_per_user", "riak_cs.max_buckets_per_user", [
  {default, 100},
  {datatype, integer}
  {datatype, [{atom, unlimited}, integer]}
 ]}.

While this worked:

 {mapping, "max_buckets_per_user", "riak_cs.max_buckets_per_user", [
  {default, 100},
  {datatype, integer}
  {datatype, [integer, {atom, unlimited}]}
 ]}.

So CS is okay with this workaround.

kuenishi commented 9 years ago

This is at Cuttlefish 2.0.1.

angrycub commented 7 years ago

Addressed in the Cuttlefish documentation for extended datatypes

NOTE when providing a default, it must be satisfied by the head of the datatypes list.