phoenix-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Thomas D'Silva (JIRA)" <j...@apache.org>
Subject [jira] [Created] (PHOENIX-4855) Continue to write base table column metadata when creating a view in order to support rollback
Date Fri, 17 Aug 2018 23:27:00 GMT
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)

Mime
View raw message