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

Thomas D'Silva commented on PHOENIX-1812:
-----------------------------------------

[~jamestaylor]

If we scale the txn read pointer down by 1 million, do we have to worry about 
multiple transactions occurring in one millisecond? If one of them changes the 
table metadata, will a later transaction be able to view the change (or will it 
only view the table metadata as of the start)? 

In MetaDataClient.updateCache() I used connection.getResolvedTime(result) as 
the resolved time while adding a table or while updating the resolved time 
stamp since this will set the timestamp to the mutation time for non txn and 
scn cases.

{code}
    public long getResolvedTime(MetaDataMutationResult result) {
        PTable table = result.getTable();
        Transaction transaction = mutationState.getTransaction();
        return (scn!=null && table!=null && scn > table.getTimeStamp()) ? scn : 
transaction == null ? result.getMutationTime() : transaction.getReadPointer();
    }
{code}

If we don't pass the resolved time to addIndexesFromPhysicalTable it will just 
call getResolvedTimestamp from updateCache and this would be exactly the same 
as passing the resolved time, right?


In getTableStats() should I just used the new getResolvedTimestamp()

{code}
if (isSharedIndex) {
            return 
connection.getQueryServices().getTableStats(table.getPhysicalName().getBytes(), 
getResolvedTimestamp());
        }
{code}

> Only sync table metadata when necessary
> ---------------------------------------
>
>                 Key: PHOENIX-1812
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-1812
>             Project: Phoenix
>          Issue Type: Sub-task
>            Reporter: James Taylor
>            Assignee: Thomas D'Silva
>         Attachments: PHOENIX-1812-v2.patch, PHOENIX-1812-v3.patch, 
> PHOENIX-1812-v4-WIP.patch, PHOENIX-1812-v5.patch, PHOENIX-1812.patch, 
> PHOENIX-1812.patch, PHOENIX-1812.patch
>
>
> With transactions, we hold the timestamp at the point when the transaction 
> was opened. We can prevent the MetaDataEndpoint getTable RPC in 
> MetaDataClient.updateCache() to check that the client has the latest table if 
> we've already checked at the current transaction ID timestamp. We can keep 
> track of which tables we've already updated in PhoenixConnection.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to