[ https://issues.apache.org/jira/browse/PHOENIX-78?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13913896#comment-13913896 ]
James Taylor commented on PHOENIX-78: ------------------------------------- I'd change this: {code} public abstract ImmutableBytesPtr getValueAsPtr(KeyValue kv); {code} to this {code} public abstract void getValueAsPtr(KeyValue kv, ImmutableBytesWritable ptr); {code} folks can pass in ImmutableBytesWritable or ImmutableBytesPtr then and a new one isn't allocated with each call. Often the size of the value byte array will be less that the size of the ImmutableBytesWritable. Then change MetaDataUtil.getMutationKeyValue to this, returning true if the KV was found and false otherwise. {code} public static boolean getMutationKeyValue(Mutation headerRow, byte[] key, KeyValueBuilder builder, ImmutableBytesWritable ptr) { {code} Usually the client has an ImmutableBytesWritable already, so no need to allocate a new one. > MetaDataUtil must respect ClientKeyValue usage > ---------------------------------------------- > > Key: PHOENIX-78 > URL: https://issues.apache.org/jira/browse/PHOENIX-78 > Project: Phoenix > Issue Type: Bug > Affects Versions: 3.0.0 > Reporter: Jesse Yates > Assignee: Jesse Yates > Fix For: 3.0.0 > > Attachments: phoenix-78-v0.patch > > > We can get into cases where the ClientKeyValue is being generated for > metadata operations, but being operated on as a regular KeyValue, for > instance: > {quote} > java.lang.UnsupportedOperationException: ClientKeyValue does not support a > single backing buffer. > at > org.apache.phoenix.client.ClientKeyValue.getBuffer(ClientKeyValue.java:500) > at > org.apache.phoenix.util.MetaDataUtil.getMutationKeyValue(MetaDataUtil.java:202) > > at > org.apache.phoenix.util.MetaDataUtil.getMutationKVByteValue(MetaDataUtil.java:193) > > at org.apache.phoenix.util.MetaDataUtil.isMultiTenant(MetaDataUtil.java:245) > at > org.apache.phoenix.query.ConnectionQueryServicesImpl.createTable(ConnectionQueryServicesImpl.java:887) > > at > org.apache.phoenix.schema.MetaDataClient.createTableInternal(MetaDataClient.java:1107) > > at > org.apache.phoenix.schema.MetaDataClient.createTable(MetaDataClient.java:409) > at > org.apache.phoenix.compile.CreateTableCompiler$2.execute(CreateTableCompiler.java:174) > > at > org.apache.phoenix.jdbc.PhoenixStatement.executeMutation(PhoenixStatement.java:224) > > at > org.apache.phoenix.jdbc.PhoenixStatement.execute(PhoenixStatement.java:185) > at > org.apache.phoenix.jdbc.PhoenixPreparedStatement.execute(PhoenixPreparedStatement.java:137) > > at > org.apache.phoenix.jdbc.PhoenixPreparedStatement.execute(PhoenixPreparedStatement.java:142) > > {quote} -- This message was sent by Atlassian JIRA (v6.1.5#6160)