phoenix-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF GitHub Bot (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (PHOENIX-3534) Support multi region SYSTEM.CATALOG table
Date Fri, 01 Jun 2018 06:09:00 GMT

    [ https://issues.apache.org/jira/browse/PHOENIX-3534?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16497627#comment-16497627
] 

ASF GitHub Bot commented on PHOENIX-3534:
-----------------------------------------

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

    https://github.com/apache/phoenix/pull/303#discussion_r192305114
  
    --- Diff: phoenix-core/src/it/java/org/apache/phoenix/end2end/ExplainPlanWithStatsEnabledIT.java
---
    @@ -1202,33 +1202,44 @@ private void testUseStatsForParallelizationOnSaltedTable(boolean
useStatsFlag, b
             assertEquals("B", rs.getString(1));
         }
     
    -	@Test
    -	public void testUseStatsForParallelizationProperyOnViewIndex() throws SQLException {
    -		String tableName = generateUniqueName();
    -		String viewName = generateUniqueName();
    -		String tenantViewName = generateUniqueName();
    -		String viewIndexName = generateUniqueName();
    -		boolean useStats = !DEFAULT_USE_STATS_FOR_PARALLELIZATION;
    -		try (Connection conn = DriverManager.getConnection(getUrl())) {
    -			conn.createStatement()
    -					.execute("create table " + tableName
    -							+ "(tenantId CHAR(15) NOT NULL, pk1 integer NOT NULL, v varchar CONSTRAINT PK
PRIMARY KEY "
    -							+ "(tenantId, pk1)) MULTI_TENANT=true");
    -			try (Connection tenantConn = getTenantConnection("tenant1")) {
    -				conn.createStatement().execute("CREATE VIEW " + viewName + " AS SELECT * FROM " +
tableName);
    -				conn.createStatement().execute("CREATE INDEX " + viewIndexName + " on " + viewName
+ " (v) ");
    -				tenantConn.createStatement().execute("CREATE VIEW " + tenantViewName + " AS SELECT
* FROM " + viewName);
    -				conn.createStatement()
    -						.execute("ALTER TABLE " + tableName + " set USE_STATS_FOR_PARALLELIZATION=" + useStats);
    -				// fetch the latest view ptable 
    -				PhoenixRuntime.getTableNoCache(tenantConn, viewName);
    -				PhoenixConnection phxConn = conn.unwrap(PhoenixConnection.class);
    -				PTable viewIndex = phxConn.getTable(new PTableKey(phxConn.getTenantId(), viewIndexName));
    -				assertEquals("USE_STATS_FOR_PARALLELIZATION property set incorrectly", useStats,
    -						PhoenixConfigurationUtil
    -								.getStatsForParallelizationProp(tenantConn.unwrap(PhoenixConnection.class), viewIndex));
    -			}
    -		}
    -	}
    +    @Test
    +    public void testUseStatsForParallelizationProperyOnViewIndex() throws SQLException
{
    +        String tableName = generateUniqueName();
    +        String viewName = generateUniqueName();
    +        String tenantViewName = generateUniqueName();
    +        String viewIndexName = generateUniqueName();
    +        boolean useStats = !DEFAULT_USE_STATS_FOR_PARALLELIZATION;
    +        try (Connection conn = DriverManager.getConnection(getUrl())) {
    +            conn.createStatement()
    +                    .execute("create table " + tableName
    +                            + "(tenantId CHAR(15) NOT NULL, pk1 integer NOT NULL, v varchar
CONSTRAINT PK PRIMARY KEY "
    +                            + "(tenantId, pk1)) MULTI_TENANT=true");
    +            try (Connection tenantConn = getTenantConnection("tenant1")) {
    +                conn.createStatement().execute("CREATE VIEW " + viewName + " AS SELECT
* FROM " + tableName);
    +                conn.createStatement().execute("CREATE INDEX " + viewIndexName + " on
" + viewName + " (v) ");
    +                tenantConn.createStatement().execute("CREATE VIEW " + tenantViewName
+ " AS SELECT * FROM " + viewName);
    +                conn.createStatement()
    +                        .execute("ALTER TABLE " + tableName + " set USE_STATS_FOR_PARALLELIZATION="
+ useStats);
    +                // changing a property on a base table does not change the property on
a view
    --- End diff --
    
    In PTable we don't have access to when a table property was updated. In combineColumns
when creating the PTable of the view if a table property is not mutable on a view , the value
is set to the same as the base physical table. 
    If the table property is mutable on a view we don't know if the value was modified in
the view or not so its we set the table property value to the one in the view. This is different
from current behavior where if we change  a table property on a base table and a child view
hasn't modified the property, the change is propagated to the child.  I filed PHOENIX-4763
to fix this as a follow-up task.


> Support multi region SYSTEM.CATALOG table
> -----------------------------------------
>
>                 Key: PHOENIX-3534
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-3534
>             Project: Phoenix
>          Issue Type: Bug
>            Reporter: James Taylor
>            Assignee: Thomas D'Silva
>            Priority: Major
>         Attachments: PHOENIX-3534-wip.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
(v7.6.3#76005)

Mime
View raw message