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)