phoenix-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF GitHub Bot (JIRA)" <>
Subject [jira] [Commented] (PHOENIX-3534) Support multi region SYSTEM.CATALOG table
Date Wed, 04 Jul 2018 23:20:03 GMT


ASF GitHub Bot commented on PHOENIX-3534:

Github user JamesRTaylor commented on a diff in the pull request:
    --- Diff: phoenix-core/src/main/java/org/apache/phoenix/coprocessor/
    @@ -3642,30 +3596,62 @@ private void dropIndexes(PTable table, Region region, List<ImmutableBytesPtr>
                 boolean isCoveredColumn = indexMaintainer.getCoveredColumns().contains(colDropRef);
                 // If index requires this column for its pk, then drop it
                 if (isColumnIndexed) {
    -                // Since we're dropping the index, lock it to ensure
    -                // that a change in index state doesn't
    -                // occur while we're dropping it.
    -                acquireLock(region, indexKey, locks);
                     // Drop the index table. The doDropTable will expand
                     // this to all of the table rows and invalidate the
                     // index table
    -                additionalTableMetaData.add(new Delete(indexKey, clientTimeStamp));
    +                Delete delete = new Delete(indexKey, clientTimeStamp);
                     byte[] linkKey =
                             MetaDataUtil.getParentLinkKey(tenantId, schemaName, tableName,
    -                // Drop the link between the data table and the
    +                // Drop the link between the parent table and the
                     // index table
    -                additionalTableMetaData.add(new Delete(linkKey, clientTimeStamp));
    -                doDropTable(indexKey, tenantId, index.getSchemaName().getBytes(), index
    -                        .getTableName().getBytes(), tableName, index.getType(),
    -                    additionalTableMetaData, invalidateList, locks, tableNamesToDelete,
sharedTablesToDelete, false, clientVersion);
    -                invalidateList.add(new ImmutableBytesPtr(indexKey));
    +                Delete linkDelete = new Delete(linkKey, clientTimeStamp);
    +                List<Mutation> tableMetaData = Lists.newArrayListWithExpectedSize(2);
    +                Delete tableDelete = delete;
    +                tableMetaData.add(tableDelete);
    +                tableMetaData.add(linkDelete);
    +                // if the index is not present on the current region make an rpc to drop
    --- End diff --
    Is this ever the case since the index should be in the same schema as it's table? Or is
there a corner case with indexes on views?

> Support multi region SYSTEM.CATALOG table
> -----------------------------------------
>                 Key: PHOENIX-3534
>                 URL:
>             Project: Phoenix
>          Issue Type: Bug
>            Reporter: James Taylor
>            Assignee: Thomas D'Silva
>            Priority: Major
>             Fix For: 5.0.0, 4.15.0
>         Attachments: PHOENIX-3534.patch
> Currently Phoenix requires that the SYSTEM.CATALOG table is single region based on the
server-side row locks being held for operations that impact a table and all of it's views.
For example, adding/removing a column from a base table pushes this change to all views.
> As an alternative to making the SYSTEM.CATALOG transactional (PHOENIX-2431), when a new
table is created we can do a lazy cleanup  of any rows that may be left over from a failed
DDL call (kudos to [~lhofhansl] for coming up with this idea). To implement this efficiently,
we'd need to also do PHOENIX-2051 so that we can efficiently find derived views.
> The implementation would rely on an optimistic concurrency model based on checking our
sequence numbers for each table/view before/after updating. Each table/view row would be individually
locked for their change (metadata for a view or table cannot span regions due to our split
policy), with the sequence number being incremented under lock and then returned to the client.

This message was sent by Atlassian JIRA

View raw message