> Is the requirement for having AAE enabled now removed for strong consistency?
Yes. AAE is no longer required to use strong consistency as of RC1. The strong consistency subsystem now maintains it's own completely separate set of Merkle trees that are used very differently than how normal Riak AAE works. This new approach allows the consistency subsystem to detect and recover from a variety of byzantine faults. However, AAE is still necessary to detect and repair any corrupted cold data (eg. data that you never read/write). The consistency subsystem detects corruption on reads/writes and automatically repairs data, but there is no mechanism that scans over all data periodically to re-verify it. However, that's precisely what normal Riak AAE does on a weekly basis, and normal Riak AAE can repair both eventually consistent and strongly consistent keys. Thus, you have the same choice with consistent data as you do with eventually consistent data. Enable AAE and have Riak guarantee the integrity of all data against bit-rot / silient on-disk corruption, or disable AAE for improved performance but lose the ability for Riak to detect/repair corruption of cold data (hot data is always protected). -Joe On Tue, Jul 29, 2014 at 2:29 PM, Sargun Dhillon <sar...@sargun.me> wrote: > Is the requirement for having AAE enabled now removed for strong consistency? > > On Mon, Jul 28, 2014 at 4:55 PM, Joseph Blomstedt <j...@basho.com> wrote: >> This means the consistency sub-system is not enabled/active. You can >> verify this with the output of `riak-admin ensemble-status`. >> >> To enable strong consistency you must: >> >> 1) Set 'strong_consistency = on' in riak.conf. >> 2) Have at least a 3 node cluster. >> >> You can address #2 by setting up 3+ local developer nodes as detailed >> in the 5 minute tutorial: >> http://docs.basho.com/riak/2.0.0/quickstart >> >> Alternatively, you can override the need for 3 nodes and use 1 node. >> >> To do that, >> >> 1) Run 'riak attach' to attach to your Riak's node console >> 2) Enter (including the period): riak_ensemble_manager:enable(). >> 3) Enter (including the period): riak_core_ring_manager:force_update(). >> 3) Detach from the console using: Ctrl-C a >> >> After either approach, re-check `riak-admin ensemble-status`. It may >> take up to a minute for the consistency sub-system to be enabled. >> >> If you haven't already, please take a look at the temporary (until we >> finish updating docs.basho.com) strong consistency related >> documentation (linked from the 2.0 RC1 release notes) here: >> https://github.com/basho/riak_ensemble/blob/wip/riak-2.0-user-docs/riak_consistent_user_docs.md >> >> Regards, >> Joe >> >> On Mon, Jul 28, 2014 at 3:05 PM, Jason W <jason.w.p...@gmail.com> wrote: >>> Hi, >>> >>> I am trying out 2.0 w/ just one local node, created a strongly consistent >>> bucket type. But keep getting below exception. If I just use the default >>> bucket type, everything works fine. Here is the bucket type detail with >>> consistency bit on. >>> >>> young_vclock: 20 >>> w: quorum >>> small_vclock: 50 >>> rw: quorum >>> r: quorum >>> pw: 0 >>> precommit: [] >>> pr: 0 >>> postcommit: [] >>> old_vclock: 86400 >>> notfound_ok: true >>> n_val: 1 >>> linkfun: {modfun,riak_kv_wm_link_walker,mapreduce_linkfun} >>> last_write_wins: false >>> dw: quorum >>> dvv_enabled: true >>> chash_keyfun: {riak_core_util,chash_std_keyfun} >>> big_vclock: 50 >>> basic_quorum: false >>> allow_mult: true >>> consistent: true >>> active: true >>> claimant: 'riak@0.0.0.0' >>> >>> Here is the java code >>> >>> List<String> addresses = new LinkedList<String>(); >>> >>> addresses.add("172.16.0.254"); >>> >>> RiakClient riakClient = RiakClient.newClient(addresses); >>> >>> try { >>> >>> Location wildeGeniusQuote = new Location(new >>> Namespace("strongly_consistent2", "sample"), emp.getId()); >>> >>> BinaryValue text = >>> BinaryValue.create(objectMapper.writeValueAsBytes(sampleObj)); >>> >>> RiakObject obj = new RiakObject() >>> >>> .setContentType("text/plain") >>> >>> .setValue(text); >>> >>> StoreValue store = new >>> StoreValue.Builder(obj).withLocation(wildeGeniusQuote) >>> >>> .withOption(Option.ASIS, true) >>> >>> .withOption(Option.DW, new Quorum(1)) >>> >>> .withOption(Option.IF_NONE_MATCH, true) >>> >>> .withOption(Option.IF_NOT_MODIFIED, true) >>> >>> .withOption(Option.PW, new Quorum(1)) >>> >>> .withOption(Option.N_VAL, 1) >>> >>> .withOption(Option.RETURN_BODY, true) >>> >>> .withOption(Option.RETURN_HEAD, true) >>> >>> .withOption(Option.SLOPPY_QUORUM, true) >>> >>> .withOption(Option.TIMEOUT, 1000) >>> >>> .withOption(Option.W, new Quorum(1)) >>> >>> .build(); >>> >>> riakClient.execute(store); >>> >>> } catch (Exception e) { >>> >>> e.printStackTrace(); >>> >>> return null; >>> >>> } >>> >>> Am I still missing something? Thanks. >>> >>> >>> >>> Caused by: com.basho.riak.client.core.netty.RiakResponseException: >>> unavailable >>> >>> at >>> com.basho.riak.client.core.netty.RiakResponseHandler.channelRead(RiakResponseHandler.java:52) >>> >>> at >>> io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:340) >>> >>> at >>> io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:326) >>> >>> at >>> io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:155) >>> >>> at >>> io.netty.handler.codec.ByteToMessageCodec.channelRead(ByteToMessageCodec.java:108) >>> >>> at >>> io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:340) >>> >>> at >>> io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:326) >>> >>> at >>> io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:785) >>> >>> at >>> io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:116) >>> >>> at >>> io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:494) >>> >>> at >>> io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:461) >>> >>> at >>> io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:378) >>> >>> at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:350) >>> >>> at >>> io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:101) >>> >>> ... 1 more >>> >>> >>> _______________________________________________ >>> riak-users mailing list >>> riak-users@lists.basho.com >>> http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com >>> >> >> >> >> -- >> Joseph Blomstedt <j...@basho.com> >> Principal Engineer >> Basho Technologies, Inc. >> http://www.basho.com/ >> >> _______________________________________________ >> riak-users mailing list >> riak-users@lists.basho.com >> http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com > > _______________________________________________ > riak-users mailing list > riak-users@lists.basho.com > http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com -- Joseph Blomstedt <j...@basho.com> Principal Engineer Basho Technologies, Inc. http://www.basho.com/ _______________________________________________ riak-users mailing list riak-users@lists.basho.com http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com