James Taylor created PHOENIX-113:
------------------------------------

             Summary: Enable usage of ClientKeyValue on client-side
                 Key: PHOENIX-113
                 URL: https://issues.apache.org/jira/browse/PHOENIX-113
             Project: Phoenix
          Issue Type: Bug
    Affects Versions: 3.0.0
            Reporter: James Taylor
             Fix For: 3.0.0


Modify code to go through KeyValueBuilder where necessary. Adding abstraction 
for having different KVComparator on each KeyValueBuilder impl.

Still doesn't work on the server-side due to memstore needing a backing buffer 
for the KeyValue.

According to [~jesse_yates], the options are:

1. Update the ClientKeyValues on the way out via a new hook in the codec, e.g. 
"preWriteToIndexTable(List<Mutation>, byte[] indexTable)",
Wrap all the clientkvs in something like an ImmutableClientKeyValue that does 
the right thing for getBuffer, getOffset, etc, but without doing all the 
copying. This may be easier to just do as modifications to ClientKeyValue, but 
seems easier to start as a new class first
2. Automatically check all the mutations being written in the 
ParallelIndexWriter for being clientKeyvalues
A bit more painful than the above, since you could short circuit there, but 
easier in terms of code complexity
3. Check to see if the write is going to a local region and then transform the 
ClientKeyValues when necessary
Most difficult as it reaches down into the guts of the coprocessor logic for 
determining region location. Unfortunately, it is already being done by the 
CoprocessorHConnection, but we would need to recreate it for us before it hits 
the HTable. 
You could do it by creating a CoprocessorHConnection and then wrapping that in 
a ClientKeyValueCheckingHConnection and then passing that into the constructor 
for HTable creation.
This is even more onerous as that constructor is only available on an HTable 
directly, not via the CoprocessorEnvironment, meaning we have to manually close 
tables. We have pretty good exception wrapping, so its not terrible to 
implement, but still a pain to do.




--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to