phoenix-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "chenglei (Jira)" <j...@apache.org>
Subject [jira] [Updated] (PHOENIX-5556) Avoid repeatedly load IndexMetaData For IndexRegionObserver
Date Thu, 31 Oct 2019 03:23:00 GMT

     [ https://issues.apache.org/jira/browse/PHOENIX-5556?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

chenglei updated PHOENIX-5556:
------------------------------
    Description: 
Load IndexMetaData is a somewhat expensive operation because it may deserialize from scan
attribute. In following 
{code:java}
610 public void preBatchMutateWithExceptions(ObserverContext<RegionCoprocessorEnvironment>
c,
611          MiniBatchOperationInProgress<Mutation> miniBatchOp) throws Throwable {
612          ignoreAtomicOperations(miniBatchOp);
613         BatchMutateContext context = new BatchMutateContext(this.builder.getIndexMetaData(miniBatchOp).getClientVersion());
      setBatchMutateContext(c, context);
      Mutation firstMutation = miniBatchOp.getOperation(0);
      ReplayWrite replayWrite = this.builder.getReplayWrite(firstMutation);
      /*
       * Exclusively lock all rows so we get a consistent read
       * while determining the index updates
       */
      if (replayWrite == null) {
          populateRowsToLock(miniBatchOp, context);
          lockRows(context);
      }
      long now = EnvironmentEdgeManager.currentTimeMillis();
      // Add the table rows in the mini batch to the collection of pending rows. This will
be used to detect
      // concurrent updates
      if (replayWrite == null) {
          populatePendingRows(context, now);
      }
      // First group all the updates for a single row into a single update to be processed
      Collection<? extends Mutation> mutations = groupMutations(miniBatchOp, now, replayWrite);
      // early exit if it turns out we don't have any edits
      if (mutations == null) {
          return;
      }

      long start = EnvironmentEdgeManager.currentTimeMillis();
      prepareIndexMutations(c, miniBatchOp, context, mutations, now);
      metricSource.updateIndexPrepareTime(EnvironmentEdgeManager.currentTimeMillis() - start);
{code}

> Avoid repeatedly load IndexMetaData For IndexRegionObserver
> -----------------------------------------------------------
>
>                 Key: PHOENIX-5556
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-5556
>             Project: Phoenix
>          Issue Type: Bug
>    Affects Versions: 4.15.0, 5.1.0
>            Reporter: Chenglei
>            Assignee: chenglei
>            Priority: Major
>
> Load IndexMetaData is a somewhat expensive operation because it may deserialize from
scan attribute. In following 
> {code:java}
> 610 public void preBatchMutateWithExceptions(ObserverContext<RegionCoprocessorEnvironment>
c,
> 611          MiniBatchOperationInProgress<Mutation> miniBatchOp) throws Throwable
{
> 612          ignoreAtomicOperations(miniBatchOp);
> 613         BatchMutateContext context = new BatchMutateContext(this.builder.getIndexMetaData(miniBatchOp).getClientVersion());
>       setBatchMutateContext(c, context);
>       Mutation firstMutation = miniBatchOp.getOperation(0);
>       ReplayWrite replayWrite = this.builder.getReplayWrite(firstMutation);
>       /*
>        * Exclusively lock all rows so we get a consistent read
>        * while determining the index updates
>        */
>       if (replayWrite == null) {
>           populateRowsToLock(miniBatchOp, context);
>           lockRows(context);
>       }
>       long now = EnvironmentEdgeManager.currentTimeMillis();
>       // Add the table rows in the mini batch to the collection of pending rows. This
will be used to detect
>       // concurrent updates
>       if (replayWrite == null) {
>           populatePendingRows(context, now);
>       }
>       // First group all the updates for a single row into a single update to be processed
>       Collection<? extends Mutation> mutations = groupMutations(miniBatchOp, now,
replayWrite);
>       // early exit if it turns out we don't have any edits
>       if (mutations == null) {
>           return;
>       }
>       long start = EnvironmentEdgeManager.currentTimeMillis();
>       prepareIndexMutations(c, miniBatchOp, context, mutations, now);
>       metricSource.updateIndexPrepareTime(EnvironmentEdgeManager.currentTimeMillis()
- start);
> {code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Mime
View raw message