You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@phoenix.apache.org by "Thomas D'Silva (JIRA)" <ji...@apache.org> on 2018/08/17 23:27:00 UTC
[jira] [Created] (PHOENIX-4855) Continue to write base table column
metadata when creating a view in order to support rollback
Thomas D'Silva created PHOENIX-4855:
---------------------------------------
Summary: Continue to write base table column metadata when creating a view in order to support rollback
Key: PHOENIX-4855
URL: https://issues.apache.org/jira/browse/PHOENIX-4855
Project: Phoenix
Issue Type: Sub-task
Reporter: Thomas D'Silva
Assignee: Thomas D'Silva
Currently we filter out the parent table columns while creating a view. If we have to support rollback we still need to write the parent table column metadata.
Instead of this we should filter out the duplicate columns in {{MetaDataEndpointImpl.combineColumns}}
{code}
// Here we are passed the parent's columns to add to a view, PHOENIX-3534 allows for a splittable
// System.Catalog thus we only store the columns that are new to the view, not the parents columns,
// thus here we remove everything that is ORDINAL.POSITION <= baseColumnCount and update the
// ORDINAL.POSITIONS to be shifted accordingly.
// TODO PHOENIX-4767 remove the following code that removes the base table column metadata in the next release
if (PTableType.VIEW.equals(tableType) && !ViewType.MAPPED.equals(viewType)) {
boolean isSalted = MetaDataUtil.getSaltBuckets(tableMetadata, GenericKeyValueBuilder.INSTANCE, new ImmutableBytesWritable()) > 0;
int baseColumnCount = MetaDataUtil.getBaseColumnCount(tableMetadata) - (isSalted ? 1 : 0);
if (baseColumnCount > 0) {
Iterator<Mutation> mutationIterator = tableMetadata.iterator();
while (mutationIterator.hasNext()) {
Mutation mutation = mutationIterator.next();
// if not null and ordinal position < base column count remove this mutation
ImmutableBytesWritable ptr = new ImmutableBytesWritable();
MetaDataUtil.getMutationValue(mutation, PhoenixDatabaseMetaData.ORDINAL_POSITION_BYTES,
GenericKeyValueBuilder.INSTANCE, ptr);
if (MetaDataUtil.getMutationValue(mutation, PhoenixDatabaseMetaData.ORDINAL_POSITION_BYTES,
GenericKeyValueBuilder.INSTANCE, ptr)) {
int ordinalValue = PInteger.INSTANCE.getCodec().decodeInt(ptr, SortOrder.ASC);
if (ordinalValue <= baseColumnCount) {
mutationIterator.remove();
} else {
if (mutation instanceof Put) {
byte[] ordinalPositionBytes = new byte[PInteger.INSTANCE.getByteSize()];
int newOrdinalValue = ordinalValue - baseColumnCount;
PInteger.INSTANCE.getCodec()
.encodeInt(newOrdinalValue, ordinalPositionBytes, 0);
byte[] family = Iterables.getOnlyElement(mutation.getFamilyCellMap().keySet());
MetaDataUtil.mutatePutValue((Put) mutation, family, PhoenixDatabaseMetaData.ORDINAL_POSITION_BYTES, ordinalPositionBytes);
}
}
}
}
}
}
{code}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)