Hi Amareshwari,

https://reviews.apache.org/r/64946

This is the review request raised quite long back and reviewed by Rajat. I
have updated on the jira just today.

Regards
Rajitha

On Tue, Jul 10, 2018 at 1:18 PM amareshwarisr <amareshw...@gmail.com> wrote:

> Rajitha,
>
> Seeing review request and commit at the same time. Was this by mistake?
>
> Thanks
>
> On Tue, Jul 10, 2018 at 12:55 PM, <rajit...@apache.org> wrote:
>
>> Repository: lens
>> Updated Branches:
>>   refs/heads/master 278a02473 -> 4a24fb94f
>>
>>
>> LENS-1371 : Add a substring based retry policy for failures
>>
>>
>> Project: http://git-wip-us.apache.org/repos/asf/lens/repo
>> Commit: http://git-wip-us.apache.org/repos/asf/lens/commit/4a24fb94
>> Tree: http://git-wip-us.apache.org/repos/asf/lens/tree/4a24fb94
>> Diff: http://git-wip-us.apache.org/repos/asf/lens/diff/4a24fb94
>>
>> Branch: refs/heads/master
>> Commit: 4a24fb94f81554f6de2eec5f0cc86fe4e80c1ac9
>> Parents: 278a024
>> Author: Rajitha R <rajit...@apache.org>
>> Authored: Tue Jul 10 12:55:20 2018 +0530
>> Committer: Rajitha.R <rajit...@im0318-l0.corp.inmobi.com>
>> Committed: Tue Jul 10 12:55:20 2018 +0530
>>
>> ----------------------------------------------------------------------
>>  .../apache/lens/cube/parse/TestVirtualFactQueries.java  |  8 ++++----
>>  .../src/main/resources/hivedriver-default.xml           | 12 ++++++++++++
>>  .../java/org/apache/lens/driver/jdbc/JDBCDriver.java    |  9 +++++++--
>>  .../src/main/resources/jdbcdriver-default.xml           | 12 ++++++++++++
>>  .../org/apache/lens/driver/jdbc/TestJdbcDriver.java     |  8 --------
>>  .../org/apache/lens/server/api/LensConfConstants.java   |  5 +++++
>>  .../lens/server/api/retry/BackOffRetryHandler.java      |  5 ++++-
>>  .../retry/FibonacciExponentialBackOffRetryHandler.java  |  4 ++++
>>  .../lens/server/api/retry/ImmediateRetryHandler.java    |  6 +++++-
>>  .../apache/lens/server/api/retry/NoRetryHandler.java    |  5 +++++
>>  .../lens/server/query/QueryExecutionServiceImpl.java    | 11 +++++++++--
>>  src/site/apt/admin/hivedriver-config.apt                |  4 ++++
>>  src/site/apt/admin/jdbcdriver-config.apt                |  4 ++++
>>  13 files changed, 75 insertions(+), 18 deletions(-)
>> ----------------------------------------------------------------------
>>
>>
>>
>> http://git-wip-us.apache.org/repos/asf/lens/blob/4a24fb94/lens-cube/src/test/java/org/apache/lens/cube/parse/TestVirtualFactQueries.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestVirtualFactQueries.java
>> b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestVirtualFactQueries.java
>> index e2f1074..81a8972 100644
>> ---
>> a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestVirtualFactQueries.java
>> +++
>> b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestVirtualFactQueries.java
>> @@ -71,10 +71,10 @@ public class TestVirtualFactQueries extends
>> TestQueryRewrite {
>>    @Test
>>    public void testVirtualFactColStartTimeQuery() {
>>      try {
>> -        rewriteCtx("select dim1,SUM(msr1) from virtualcube where " +
>> TWO_DAYS_RANGE, getConfWithStorages("C1"));
>> -        Assert.fail("Should not come here..Column Start time feature is
>> failing..");
>> +      rewriteCtx("select dim1,SUM(msr1) from virtualcube where " +
>> TWO_DAYS_RANGE, getConfWithStorages("C1"));
>> +      Assert.fail("Should not come here..Column Start time feature is
>> failing..");
>>      }catch (LensException e) {
>> -      if(e.getErrorCode() == 3024) {
>> +      if (e.getErrorCode() == 3024) {
>>          System.out.println("Expected flow :" + e.getMessage());
>>        }else {
>>          Assert.fail("Exception not as expected");
>> @@ -88,7 +88,7 @@ public class TestVirtualFactQueries extends
>> TestQueryRewrite {
>>        rewriteCtx("select dim2,SUM(msr1) from virtualcube where " +
>> TWO_DAYS_RANGE, getConfWithStorages("C1"));
>>        Assert.fail("Should not come here..Column End time feature is
>> failing..");
>>      }catch (LensException e) {
>> -      if(e.getErrorCode() == 3024) {
>> +      if (e.getErrorCode() == 3024) {
>>          System.out.println("Expected flow :" + e.getMessage());
>>        }else {
>>          Assert.fail("Exception not as expected");
>>
>>
>> http://git-wip-us.apache.org/repos/asf/lens/blob/4a24fb94/lens-driver-hive/src/main/resources/hivedriver-default.xml
>> ----------------------------------------------------------------------
>> diff --git a/lens-driver-hive/src/main/resources/hivedriver-default.xml
>> b/lens-driver-hive/src/main/resources/hivedriver-default.xml
>> index d41e36a..2776123 100644
>> --- a/lens-driver-hive/src/main/resources/hivedriver-default.xml
>> +++ b/lens-driver-hive/src/main/resources/hivedriver-default.xml
>> @@ -185,4 +185,16 @@
>>      <description>Cost based Query type mapping</description>
>>    </property>
>>
>> +  <property>
>> +    <name>retry.messages.contains.map</name>
>> +    <value>Session handle not
>> found=org.apache.lens.server.api.retry.ImmediateRetryHandler(2)</value>
>> +    <description>Comma separated error messages and retry
>> policy</description>
>> +  </property>
>> +
>> +  <property>
>> +    <name>query.retry.policy.classes</name>
>> +
>> <value>org.apache.lens.server.api.retry.SubstringMessagePolicyDecider</value>
>> +    <description>List of policy decider classes</description>
>> +  </property>
>> +
>>  </configuration>
>>
>>
>> http://git-wip-us.apache.org/repos/asf/lens/blob/4a24fb94/lens-driver-jdbc/src/main/java/org/apache/lens/driver/jdbc/JDBCDriver.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/lens-driver-jdbc/src/main/java/org/apache/lens/driver/jdbc/JDBCDriver.java
>> b/lens-driver-jdbc/src/main/java/org/apache/lens/driver/jdbc/JDBCDriver.java
>> index e810e7c..8dd299a 100644
>> ---
>> a/lens-driver-jdbc/src/main/java/org/apache/lens/driver/jdbc/JDBCDriver.java
>> +++
>> b/lens-driver-jdbc/src/main/java/org/apache/lens/driver/jdbc/JDBCDriver.java
>> @@ -278,6 +278,7 @@ public class JDBCDriver extends AbstractLensDriver {
>>            try {
>>              stmt = createStatement(conn);
>>              result.stmt = stmt;
>> +
>>              Boolean isResultAvailable =
>> stmt.execute(queryContext.getRewrittenQuery());
>>              if
>> (queryContext.getLensContext().getDriverStatus().isCanceled()) {
>>                return result;
>> @@ -992,8 +993,12 @@ public class JDBCDriver extends AbstractLensDriver {
>>      checkConfigured();
>>      try {
>>        JdbcQueryContext ctx = getQueryContext(handle);
>> -      ctx.getResultFuture().cancel(true);
>> -      ctx.closeResult();
>> +      if (ctx != null) {
>> +        ctx.getResultFuture().cancel(true);
>> +        ctx.closeResult();
>> +      }
>> +    } catch (LensException exc) {
>> +      log.error("{} Failed to close query {}", getFullyQualifiedName(),
>> handle.getHandleId());
>>      } finally {
>>        queryContextMap.remove(handle);
>>      }
>>
>>
>> http://git-wip-us.apache.org/repos/asf/lens/blob/4a24fb94/lens-driver-jdbc/src/main/resources/jdbcdriver-default.xml
>> ----------------------------------------------------------------------
>> diff --git a/lens-driver-jdbc/src/main/resources/jdbcdriver-default.xml
>> b/lens-driver-jdbc/src/main/resources/jdbcdriver-default.xml
>> index 511fe71..2c69eef 100644
>> --- a/lens-driver-jdbc/src/main/resources/jdbcdriver-default.xml
>> +++ b/lens-driver-jdbc/src/main/resources/jdbcdriver-default.xml
>> @@ -294,4 +294,16 @@
>>      <description>Cost based Query type mapping</description>
>>    </property>
>>
>> +  <property>
>> +    <name>retry.messages.contains.map</name>
>> +    <value>Query not
>> found=org.apache.lens.server.api.retry.ImmediateRetryHandler(2)</value>
>> +    <description>Comma separated error messages and retry
>> policy</description>
>> +  </property>
>> +
>> +  <property>
>> +    <name>query.retry.policy.classes</name>
>> +
>> <value>org.apache.lens.server.api.retry.SubstringMessagePolicyDecider</value>
>> +    <description>List of classes to decide policies</description>
>> +  </property>
>> +
>>  </configuration>
>>
>>
>> http://git-wip-us.apache.org/repos/asf/lens/blob/4a24fb94/lens-driver-jdbc/src/test/java/org/apache/lens/driver/jdbc/TestJdbcDriver.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/lens-driver-jdbc/src/test/java/org/apache/lens/driver/jdbc/TestJdbcDriver.java
>> b/lens-driver-jdbc/src/test/java/org/apache/lens/driver/jdbc/TestJdbcDriver.java
>> index 506935b..c08b04a 100644
>> ---
>> a/lens-driver-jdbc/src/test/java/org/apache/lens/driver/jdbc/TestJdbcDriver.java
>> +++
>> b/lens-driver-jdbc/src/test/java/org/apache/lens/driver/jdbc/TestJdbcDriver.java
>> @@ -768,14 +768,6 @@ public class TestJdbcDriver {
>>        }
>>
>>        driver.closeQuery(handle);
>> -      // Close again, should get not found
>> -      try {
>> -        driver.closeQuery(handle);
>> -        fail("Close again should have thrown exception");
>> -      } catch (LensException ex) {
>> -        assertTrue(ex.getMessage().contains("not found") &&
>> ex.getMessage().contains(handle.getHandleId().toString()));
>> -        System.out.println("Matched exception");
>> -      }
>>      } else {
>>        fail("Only in memory result set is supported as of now");
>>      }
>>
>>
>> http://git-wip-us.apache.org/repos/asf/lens/blob/4a24fb94/lens-server-api/src/main/java/org/apache/lens/server/api/LensConfConstants.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/lens-server-api/src/main/java/org/apache/lens/server/api/LensConfConstants.java
>> b/lens-server-api/src/main/java/org/apache/lens/server/api/LensConfConstants.java
>> index 2147f08..58a235a 100644
>> ---
>> a/lens-server-api/src/main/java/org/apache/lens/server/api/LensConfConstants.java
>> +++
>> b/lens-server-api/src/main/java/org/apache/lens/server/api/LensConfConstants.java
>> @@ -1341,4 +1341,9 @@ public final class LensConfConstants {
>>
>>    public static final String SSL_KEYSTORE_PASSWORD = SERVER_PFX +
>> "ssl.password";
>>
>> +  /**
>> +   * Message map for configured policy
>> +   */
>> +  public static final String RETRY_MESSAGE_MAP =
>> "retry.messages.contains.map";
>> +
>>  }
>>
>>
>> http://git-wip-us.apache.org/repos/asf/lens/blob/4a24fb94/lens-server-api/src/main/java/org/apache/lens/server/api/retry/BackOffRetryHandler.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/lens-server-api/src/main/java/org/apache/lens/server/api/retry/BackOffRetryHandler.java
>> b/lens-server-api/src/main/java/org/apache/lens/server/api/retry/BackOffRetryHandler.java
>> index 5ea5710..2d8b8e4 100644
>> ---
>> a/lens-server-api/src/main/java/org/apache/lens/server/api/retry/BackOffRetryHandler.java
>> +++
>> b/lens-server-api/src/main/java/org/apache/lens/server/api/retry/BackOffRetryHandler.java
>> @@ -41,7 +41,10 @@ import java.io.Serializable;
>>   *    }
>>   *  }
>>   *
>> - *  Note that this is only one of the possible use cases, other complex
>> use cases are in retry framework.
>> + *   *  Note
>> + *  1. This is only one of the possible use cases, other complex use
>> cases are in retry framework.
>> + *  2. Every implementation needs an all String arguments constructor
>> which can be used in
>> + *  {@link SubstringMessagePolicyDecider}
>>   */
>>  public interface BackOffRetryHandler<FC extends FailureContext> extends
>> Serializable {
>>
>>
>>
>> http://git-wip-us.apache.org/repos/asf/lens/blob/4a24fb94/lens-server-api/src/main/java/org/apache/lens/server/api/retry/FibonacciExponentialBackOffRetryHandler.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/lens-server-api/src/main/java/org/apache/lens/server/api/retry/FibonacciExponentialBackOffRetryHandler.java
>> b/lens-server-api/src/main/java/org/apache/lens/server/api/retry/FibonacciExponentialBackOffRetryHandler.java
>> index 01da25d..be3fc52 100644
>> ---
>> a/lens-server-api/src/main/java/org/apache/lens/server/api/retry/FibonacciExponentialBackOffRetryHandler.java
>> +++
>> b/lens-server-api/src/main/java/org/apache/lens/server/api/retry/FibonacciExponentialBackOffRetryHandler.java
>> @@ -33,6 +33,10 @@ public class
>> FibonacciExponentialBackOffRetryHandler<FC extends FailureContext>
>>    final long maxDelay;
>>    final long waitMillis;
>>
>> +  public FibonacciExponentialBackOffRetryHandler(String numRetries,
>> String maxDelay, String waitMillis) {
>> +    this(Integer.parseInt(numRetries), Long.parseLong(maxDelay),
>> Long.parseLong(waitMillis));
>> +  }
>> +
>>    public FibonacciExponentialBackOffRetryHandler(int numRetries, long
>> maxDelay, long waitMillis) {
>>      checkArgument(numRetries > 2);
>>      fibonacci = new int[numRetries];
>>
>>
>> http://git-wip-us.apache.org/repos/asf/lens/blob/4a24fb94/lens-server-api/src/main/java/org/apache/lens/server/api/retry/ImmediateRetryHandler.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/lens-server-api/src/main/java/org/apache/lens/server/api/retry/ImmediateRetryHandler.java
>> b/lens-server-api/src/main/java/org/apache/lens/server/api/retry/ImmediateRetryHandler.java
>> index c1c0126..cea9df3 100644
>> ---
>> a/lens-server-api/src/main/java/org/apache/lens/server/api/retry/ImmediateRetryHandler.java
>> +++
>> b/lens-server-api/src/main/java/org/apache/lens/server/api/retry/ImmediateRetryHandler.java
>> @@ -29,6 +29,10 @@ public class ImmediateRetryHandler<FC extends
>> FailureContext> implements BackOff
>>      this(1);
>>    }
>>
>> +  public ImmediateRetryHandler(String retries) {
>> +    this(Integer.parseInt(retries));
>> +  }
>> +
>>    @Override
>>    public boolean canTryOpNow(FC failContext) {
>>      return true;
>> @@ -41,6 +45,6 @@ public class ImmediateRetryHandler<FC extends
>> FailureContext> implements BackOff
>>
>>    @Override
>>    public boolean hasExhaustedRetries(FC failContext) {
>> -    return ++retriesDone > retries;
>> +    return failContext.getFailCount() > retries;
>>    }
>>  }
>>
>>
>> http://git-wip-us.apache.org/repos/asf/lens/blob/4a24fb94/lens-server-api/src/main/java/org/apache/lens/server/api/retry/NoRetryHandler.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/lens-server-api/src/main/java/org/apache/lens/server/api/retry/NoRetryHandler.java
>> b/lens-server-api/src/main/java/org/apache/lens/server/api/retry/NoRetryHandler.java
>> index df68a48..0a2dac1 100644
>> ---
>> a/lens-server-api/src/main/java/org/apache/lens/server/api/retry/NoRetryHandler.java
>> +++
>> b/lens-server-api/src/main/java/org/apache/lens/server/api/retry/NoRetryHandler.java
>> @@ -32,4 +32,9 @@ public class NoRetryHandler<FC extends FailureContext>
>> extends ImmediateRetryHan
>>    public long getOperationNextTime(FC failContext) {
>>      return Long.MAX_VALUE;
>>    }
>> +
>> +  @Override
>> +  public boolean hasExhaustedRetries(FC failContext) {
>> +    return true;
>> +  }
>>  }
>>
>>
>> http://git-wip-us.apache.org/repos/asf/lens/blob/4a24fb94/lens-server/src/main/java/org/apache/lens/server/query/QueryExecutionServiceImpl.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/lens-server/src/main/java/org/apache/lens/server/query/QueryExecutionServiceImpl.java
>> b/lens-server/src/main/java/org/apache/lens/server/query/QueryExecutionServiceImpl.java
>> index 3f1731e..4023a24 100644
>> ---
>> a/lens-server/src/main/java/org/apache/lens/server/query/QueryExecutionServiceImpl.java
>> +++
>> b/lens-server/src/main/java/org/apache/lens/server/query/QueryExecutionServiceImpl.java
>> @@ -47,6 +47,7 @@ import org.apache.lens.api.query.*;
>>  import org.apache.lens.api.query.QueryStatus.Status;
>>  import org.apache.lens.cube.metadata.DateUtil;
>>  import org.apache.lens.driver.hive.HiveDriver;
>> +import org.apache.lens.driver.jdbc.JDBCDriver;
>>  import org.apache.lens.server.BaseLensService;
>>  import org.apache.lens.server.LensServerConf;
>>  import org.apache.lens.server.LensServices;
>> @@ -913,7 +914,11 @@ public class QueryExecutionServiceImpl extends
>> BaseLensService implements QueryE
>>        if (removeFromLaunchedQueries(ctx)) {
>>          processWaitingQueriesAsync(ctx);
>>        }
>> -      if (ctx.getDriverStatus().failed() &&
>> !getDriverRetryPolicy(ctx).hasExhaustedRetries(ctx)) {
>> +
>> +      /*Upon server restarts, the driver status isn't reliable in case
>> of jdbc due to query not found error,
>> +      hence we fall back to the context status and retry */
>> +      if ((ctx.getDriverStatus().failed() || (ctx.getStatus().failing()
>> +        && ctx.getSelectedDriver() instanceof JDBCDriver)) &&
>> !getDriverRetryPolicy(ctx).hasExhaustedRetries(ctx)) {
>>          log.info("query {} will be retried on the same driver {}",
>>            ctx.getQueryHandle(),
>> ctx.getSelectedDriver().getFullyQualifiedName());
>>          ctx.extractFailedAttempt();
>> @@ -975,8 +980,10 @@ public class QueryExecutionServiceImpl extends
>> BaseLensService implements QueryE
>>
>>    private BackOffRetryHandler<QueryContext>
>> getDriverRetryPolicy(QueryContext ctx) {
>>      if (ctx.getDriverRetryPolicy() == null) {
>> +      String errorMessage = ctx.getDriverStatus().getErrorMessage() !=
>> null ? ctx.getDriverStatus().getErrorMessage()
>> +        : ctx.getStatus().getErrorMessage();
>>
>>  ctx.setDriverRetryPolicy(ctx.getSelectedDriver().getRetryPolicyDecider()
>> -        .decidePolicy(ctx.getDriverStatus().getErrorMessage()));
>> +        .decidePolicy(errorMessage));
>>      }
>>      return ctx.getDriverRetryPolicy();
>>    }
>>
>>
>> http://git-wip-us.apache.org/repos/asf/lens/blob/4a24fb94/src/site/apt/admin/hivedriver-config.apt
>> ----------------------------------------------------------------------
>> diff --git a/src/site/apt/admin/hivedriver-config.apt
>> b/src/site/apt/admin/hivedriver-config.apt
>> index 71208bb..5d99892 100644
>> --- a/src/site/apt/admin/hivedriver-config.apt
>> +++ b/src/site/apt/admin/hivedriver-config.apt
>> @@ -78,4 +78,8 @@ Hive driver configuration
>>  *--+--+---+--+
>>  |20|lens.driver.hive.waiting.queries.selection.policy.factories|
>> |Factories used to instantiate driver specific waiting queries selection
>> policies. Every factory should be an implementation of
>> org.apache.lens.server.api.common.ConfigBasedObjectCreationFactory and
>> create an implementation of
>> org.apache.lens.server.api.query.collect.WaitingQueriesSelectionPolicy.|
>>  *--+--+---+--+
>> +|21|query.retry.policy.classes|org.apache.lens.server.api.retry.SubstringMessagePolicyDecider|List
>> of policy decider classes|
>> +*--+--+---+--+
>> +|22|retry.messages.contains.map|Session handle not
>> found=org.apache.lens.server.api.retry.ImmediateRetryHandler(2)|Comma
>> separated error messages and retry policy|
>> +*--+--+---+--+
>>  The configuration parameters and their default values
>>
>>
>> http://git-wip-us.apache.org/repos/asf/lens/blob/4a24fb94/src/site/apt/admin/jdbcdriver-config.apt
>> ----------------------------------------------------------------------
>> diff --git a/src/site/apt/admin/jdbcdriver-config.apt
>> b/src/site/apt/admin/jdbcdriver-config.apt
>> index c50872b..792278e 100644
>> --- a/src/site/apt/admin/jdbcdriver-config.apt
>> +++ b/src/site/apt/admin/jdbcdriver-config.apt
>> @@ -101,4 +101,8 @@ Jdbc driver configuration
>>  *--+--+---+--+
>>  |38|lens.query.timeout.millis|3600000|The runtime(millis) of the query
>> after which query will be timedout and cancelled. Default is 1 hour for
>> jdbc queries.|
>>  *--+--+---+--+
>> +|39|query.retry.policy.classes|org.apache.lens.server.api.retry.SubstringMessagePolicyDecider|List
>> of classes to decide policies|
>> +*--+--+---+--+
>> +|40|retry.messages.contains.map|Query not
>> found=org.apache.lens.server.api.retry.ImmediateRetryHandler(2)|Comma
>> separated error messages and retry policy|
>> +*--+--+---+--+
>>  The configuration parameters and their default values
>>
>>
>

-- 
Regards,

Rajitha.R

Reply via email to