Github user JamesRTaylor commented on a diff in the pull request:

    https://github.com/apache/phoenix/pull/317#discussion_r206326382
  
    --- Diff: 
phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java
 ---
    @@ -1431,11 +1438,42 @@ private PTable getTable(RegionScanner scanner, long 
clientTimeStamp, long tableT
             // server while holding this lock is a bad idea and likely to 
cause contention.
             return PTableImpl.makePTable(tenantId, schemaName, tableName, 
tableType, indexState, timeStamp, tableSeqNum,
                     pkName, saltBucketNum, columns, parentSchemaName, 
parentTableName, indexes, isImmutableRows, physicalTables, defaultFamilyName,
    -                viewStatement, disableWAL, multiTenant, storeNulls, 
viewType, viewIndexId, indexType,
    +                viewStatement, disableWAL, multiTenant, storeNulls, 
viewType, viewIndexType, viewIndexId, indexType,
                     rowKeyOrderOptimizable, transactionProvider, 
updateCacheFrequency, baseColumnCount,
                     indexDisableTimestamp, isNamespaceMapped, 
autoPartitionSeq, isAppendOnlySchema, storageScheme, encodingScheme, cqCounter, 
useStatsForParallelization);
         }
    +    private Long getViewIndexId(Cell[] tableKeyValues, PDataType 
viewIndexType) {
    +        Cell viewIndexIdKv = tableKeyValues[VIEW_INDEX_ID_INDEX];
    +        return viewIndexIdKv == null ? null :
    +                decodeViewIndexId(viewIndexIdKv, viewIndexType);
    +    }
     
    +    /**
    +     * check the value for {@value USE_LONG_VIEW_INDEX} and if its present 
consider viewIndexId as long otherwise
    +     * read as short and convert it to long
    +     *
    +     * @param tableKeyValues
    +     * @param viewIndexType
    +     * @return
    +     */
    +    private Long decodeViewIndexId(Cell viewIndexIdKv,  PDataType 
viewIndexType) {
    +        boolean useLongViewIndex = 
MetaDataUtil.getViewIndexIdDataType().equals(viewIndexType);
    +           return new Long(
    +                           useLongViewIndex
    +                                           ? 
viewIndexType.getCodec().decodeLong(viewIndexIdKv.getValueArray(),
    +                                           viewIndexIdKv.getValueOffset(), 
SortOrder.getDefault())
    +                                           : 
MetaDataUtil.getLegacyViewIndexIdDataType().getCodec().decodeShort(viewIndexIdKv.getValueArray(),
    +                                           viewIndexIdKv.getValueOffset(), 
SortOrder.getDefault())
    +           );
    +    }
    +
    +    private PDataType getViewIndexType(Cell[] tableKeyValues) {
    +        Cell useLongViewIndexKv = tableKeyValues[USE_LONG_VIEW_INDEX];
    --- End diff --
    
    I think we need to keep the single VIEW_INDEX_ID column and make sure it's 
type is defined (through a property) at create time (and not allow it to be 
changed). The issue isn't with the metadata, but with the row key of the rows 
of the table. In old tables, it'll be a short while for new tables it'll be a 
long. We don't want to have to rewrite the data.


---

Reply via email to