Uploaded image for project: 'Phoenix'
  1. Phoenix
  2. PHOENIX-3534 Support multi region SYSTEM.CATALOG table
  3. PHOENIX-4855

Continue to write base table column metadata when creating a view in order to support rollback

    XMLWordPrintableJSON

Details

    • Sub-task
    • Status: Closed
    • Major
    • Resolution: Fixed
    • None
    • 4.15.0, 5.1.0
    • None
    • None

    Description

      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

      // 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);
                                      }
                                  }
                              }
                          }
                      }
                  }
      

      Attachments

        1. PHOENIX-4855-4.x-HBase-1.3-v2.patch
          98 kB
          Thomas D'Silva
        2. PHOENIX-4855-4.x-HBase-1.3.patch
          96 kB
          Thomas D'Silva

        Issue Links

          Activity

            People

              tdsilva Thomas D'Silva
              tdsilva Thomas D'Silva
              Votes:
              0 Vote for this issue
              Watchers:
              6 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: