Kaspar -

Unfortunately it's worse than that. The reason it's doing that is because 
that's how the underlying, original Protobuf client is handling things - it 
uses ByteString.copyFromUtf8() on Strings that are passed to store(), fetch(), 
etc as the key.

Basically, above com.basho.riak.pbc.RiakClient there's simply not a way to use 
a non-UTF8 encoded String currently.

The problem with what you propose is that it requires modifying the higher 
level interfaces which will of course break code built on top of them (we have 
users who have built things on top of these interfaces). This is not something 
we want to do in a minor point release. 

That being said, there's a few things we'd like to change in the client but 
haven't for this same reason. Along with the Riak 1.2 release we'll be cutting 
the 1.0.6 release of the Java client. After that, I'd be willing to look into 
what it would take to sanely allow for arbitrary byte arrays to be used as keys 
for a 1.1 client release that would include other interface breaking changes.

Thanks,
Brian Roach


On Jul 17, 2012, at 4:32 AM, Kaspar Thommen wrote:

> Brian,
> 
> I just identified a potential issue. In my application code all keys are 
> byte[] arrays (or corresponding 64 bit integers), and in order to make sure I 
> can generate a valid Riak key String from that byte array I convert using 
> ISO-8859-1. However, when looking at PBClientAdapter.store() I see that it 
> calls ConversionUtil.convert(), which in turn calls 
> ConversionUtil.nullSafeToByteString() which uses UTF-8 encoding. Hence, my 
> original byte array will likely be different in Riak.
> 
> This could could lead to tricky problems like the application code logging a 
> byte array key that cannot be found in Riak. Do you think it would make sense 
> to allow the user to specify a custom String/byte[] converter?
> 
> Thanks,
> Kaspar
> Am 16.07.2012 15:51 schrieb "Brian Roach" <ro...@basho.com>:
> Kaspar -
> 
> Russell and I got together and discussed this a little more this morning.
> 
> The reason it's not exposed at the IRiakClient and RawClient interfaces is 
> because the underlying original HTTP client API doesn't support a byte array 
> as a key; it only uses String. Because of this,  our IRiakObject default 
> implementation only takes a String for a key, and our annotation processing 
> only works with a String as well. It was all designed around being protocol 
> neutral to sit on top of both of the old clients.
> 
> That being said, what does work perfectly fine is creating a new String from 
> the byte array. Java does the right thing and this works regardless of 
> whether you are using the PB or HTTP client:
> 
> IRiakClient client = RiakFactory.pbcClient(); // or .httpClient()
> Bucket b = client.fetchBucket("this").execute();
> 
>  byte[] foo = { 0, 5, 120, 1 };
>  String key = new String(foo);
> 
>  b.store(key, "this is my value").execute();
>  IRiakObject o = b.fetch(key).execute();
>  System.out.println(o.getValueAsString());
> 
>  client.shutdown();
> 
> Thanks!
> Brian Roach
> 
> On Jul 16, 2012, at 1:01 AM, Russell Brown wrote:
> 
> > Hi Kaspar,
> >
> > Sorry for the slow reply.
> >
> > On 16 Jul 2012, at 07:49, Kaspar Thommen wrote:
> >
> >> Anyone please?
> >>
> >> On Jun 26, 2012 8:57 PM, "Kaspar Thommen" <kaspar.thom...@gmail.com> wrote:
> >> Hi,
> >>
> >> The high-level API in the Java client library (IRiakClient) does not allow 
> >> one to use byte[] arrays as keys, only Strings, whereas the underlying PBC 
> >> and http APIs (e.g. com.basho.riak.pbc.RiakClient) do, via the 
> >> fetch(ByteString, ...) methods. Any reason for this?
> >
> > Oversight or oversimplifying by me.
> >
> >
> >> Is it planned to add byte array keys to IRiakClient as well at some point?
> >
> > We should. Please will you raise an issue for it on the RJC github repo[1] 
> > to ensure we get to it?
> >
> > Cheers
> >
> > Russell
> >
> > [1] Java client issues - 
> > https://github.com/basho/riak-java-client/issues?direction=desc&sort=created&state=open
> >
> >>
> >> Thanks,
> >> Kaspar
> >>
> >>
> >> _______________________________________________
> >> 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
> 


_______________________________________________
riak-users mailing list
riak-users@lists.basho.com
http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com

Reply via email to