Every serializer should know how many bytes to consume. The key serializer
should not need to look for 42 to know where to terminate.

Otherwise this would be a problem case:
key[42, 42] - 42 - namespace [42, 42, 42]
key[42, 42, 42] - 42 - namespace [42, 42]



On Fri, Jul 15, 2016 at 5:38 PM, Aljoscha Krettek <aljos...@apache.org>
wrote:

> I left that in on purpose to protect against cases where the combination
> of key and namespace can be ambiguous. For example, these two combinations
> of key and namespace have the same written representation:
> key [0 1 2] namespace [3 4 5] (values in brackets are byte arrays)
> key [0 1] namespace [2 3 4 5]
>
> having the "magic number" in there protects against such cases.
>
> On Fri, 15 Jul 2016 at 16:31 Stephan Ewen <se...@apache.org> wrote:
>
>> My assumption is that this was a sanity check that actually just stuck in
>> the code.
>>
>> It can probably be removed.
>>
>> PS: Moving this to the dev@flink.apache.org list...
>>
>>
>>
>> On Fri, Jul 15, 2016 at 11:05 AM, 刘彪 <mmyy1...@gmail.com> wrote:
>>
>> > In AbstractRocksDBState.writeKeyAndNamespace():
>> >
>> > protected void writeKeyAndNamespace(DataOutputView out) throws
>> IOException
>> > {
>> > backend.keySerializer().serialize(backend.currentKey(), out);
>> > out.writeByte(42);
>> > namespaceSerializer.serialize(currentNamespace, out);
>> > }
>> >
>> > Why write a byte 42 between key and namespace? The keySerializer and
>> > namespaceSerializer know their lengths. It seems we don't need this
>> byte.
>> >
>> > Could anybody tell me what it is for?  Is there any situation that we
>> must
>> > have this separator?
>> >
>>
>

Reply via email to