You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by ra...@apache.org on 2015/03/18 05:50:39 UTC
phoenix git commit: PHOENIX-1691 Allow settting sampling rate while
enabling tracing.(Rajeshbabu)
Repository: phoenix
Updated Branches:
refs/heads/master 86ed11004 -> 319fdcb56
PHOENIX-1691 Allow settting sampling rate while enabling tracing.(Rajeshbabu)
Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/319fdcb5
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/319fdcb5
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/319fdcb5
Branch: refs/heads/master
Commit: 319fdcb569ce41273b627845c4860ecabf45417d
Parents: 86ed110
Author: Rajeshbabu Chintaguntla <ra...@apache.org>
Authored: Wed Mar 18 10:20:22 2015 +0530
Committer: Rajeshbabu Chintaguntla <ra...@apache.org>
Committed: Wed Mar 18 10:20:22 2015 +0530
----------------------------------------------------------------------
.../phoenix/trace/PhoenixTracingEndToEndIT.java | 39 +++++++++++++++++---
phoenix-core/src/main/antlr3/PhoenixSQL.g | 9 ++++-
.../apache/phoenix/compile/TraceQueryPlan.java | 33 ++++++++++++-----
.../apache/phoenix/jdbc/PhoenixStatement.java | 8 ++--
.../apache/phoenix/parse/ParseNodeFactory.java | 4 +-
.../apache/phoenix/parse/TraceStatement.java | 12 ++++--
6 files changed, 79 insertions(+), 26 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/phoenix/blob/319fdcb5/phoenix-core/src/it/java/org/apache/phoenix/trace/PhoenixTracingEndToEndIT.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/trace/PhoenixTracingEndToEndIT.java b/phoenix-core/src/it/java/org/apache/phoenix/trace/PhoenixTracingEndToEndIT.java
index 53d22c5..05d9e41 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/trace/PhoenixTracingEndToEndIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/trace/PhoenixTracingEndToEndIT.java
@@ -46,6 +46,7 @@ import org.cloudera.htrace.Span;
import org.cloudera.htrace.SpanReceiver;
import org.cloudera.htrace.Trace;
import org.cloudera.htrace.TraceScope;
+import org.cloudera.htrace.impl.ProbabilitySampler;
import org.junit.After;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -403,18 +404,44 @@ public class PhoenixTracingEndToEndIT extends BaseTracingTestIT {
Statement statement = conn1.createStatement();
ResultSet rs = statement.executeQuery("TRACE ON");
assertTrue(rs.next());
- long traceId = ((PhoenixConnection) conn1).getTraceScope().getSpan()
- .getTraceId();
- assertEquals(rs.getLong(1), traceId);
- assertEquals(rs.getLong("trace_id"), traceId);
+ PhoenixConnection pconn= (PhoenixConnection) conn1;
+ long traceId = pconn.getTraceScope().getSpan().getTraceId();
+ assertEquals(traceId, rs.getLong(1));
+ assertEquals(traceId, rs.getLong("trace_id"));
assertFalse(rs.next());
+ assertEquals(Sampler.ALWAYS, pconn.getSampler());
rs = statement.executeQuery("TRACE OFF");
assertTrue(rs.next());
- assertEquals(rs.getLong(1), traceId);
- assertEquals(rs.getLong("trace_id"), traceId);
+ assertEquals(traceId, rs.getLong(1));
+ assertEquals(traceId, rs.getLong("trace_id"));
+ assertFalse(rs.next());
+ assertEquals(Sampler.NEVER, pconn.getSampler());
+
+ rs = statement.executeQuery("TRACE OFF");
assertFalse(rs.next());
+ rs = statement.executeQuery("TRACE ON WITH SAMPLING 0.5");
+ rs.next();
+ assertTrue(((PhoenixConnection) conn1).getSampler() instanceof ProbabilitySampler);
+
+ rs = statement.executeQuery("TRACE ON WITH SAMPLING 1.0");
+ assertTrue(rs.next());
+ traceId = pconn.getTraceScope().getSpan()
+ .getTraceId();
+ assertEquals(traceId, rs.getLong(1));
+ assertEquals(traceId, rs.getLong("trace_id"));
+ assertFalse(rs.next());
+ assertEquals(Sampler.ALWAYS, pconn.getSampler());
+
+ rs = statement.executeQuery("TRACE ON WITH SAMPLING 0.5");
+ rs.next();
+ assertTrue(((PhoenixConnection) conn1).getSampler() instanceof ProbabilitySampler);
+
+ rs = statement.executeQuery("TRACE ON WITH SAMPLING 0.0");
+ rs.next();
+ assertEquals(Sampler.NEVER, pconn.getSampler());
+
rs = statement.executeQuery("TRACE OFF");
assertFalse(rs.next());
} finally {
http://git-wip-us.apache.org/repos/asf/phoenix/blob/319fdcb5/phoenix-core/src/main/antlr3/PhoenixSQL.g
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/antlr3/PhoenixSQL.g b/phoenix-core/src/main/antlr3/PhoenixSQL.g
index 9750ee7..6a2e3b9 100644
--- a/phoenix-core/src/main/antlr3/PhoenixSQL.g
+++ b/phoenix-core/src/main/antlr3/PhoenixSQL.g
@@ -111,6 +111,7 @@ tokens
COLUMNS='columns';
TRACE='trace';
ASYNC='async';
+ SAMPLING='sampling';
}
@@ -507,8 +508,8 @@ alter_index_node returns [AlterIndexStatement ret]
// Parse a trace statement.
trace_node returns [TraceStatement ret]
- : TRACE (flag = ON| flag = OFF)
- {ret = factory.trace(Tracing.isTraceOn(flag.getText()));}
+ : TRACE ((flag = ON ( WITH SAMPLING s = sampling_rate)?) | flag = OFF)
+ {ret = factory.trace(Tracing.isTraceOn(flag.getText()), s == null ? Tracing.isTraceOn(flag.getText()) ? 1.0 : 0.0 : (((BigDecimal)s.getValue())).doubleValue());}
;
// Parse an alter table statement.
@@ -626,6 +627,10 @@ limit returns [LimitNode ret]
| l=int_literal { $ret = factory.limit(l); }
;
+sampling_rate returns [LiteralParseNode ret]
+ : l=literal { $ret = l; }
+ ;
+
hintClause returns [HintNode ret]
: c=ML_HINT { $ret = factory.hint(c.getText()); }
;
http://git-wip-us.apache.org/repos/asf/phoenix/blob/319fdcb5/phoenix-core/src/main/java/org/apache/phoenix/compile/TraceQueryPlan.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/compile/TraceQueryPlan.java b/phoenix-core/src/main/java/org/apache/phoenix/compile/TraceQueryPlan.java
index 9eb5877..815ac1e 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/compile/TraceQueryPlan.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/compile/TraceQueryPlan.java
@@ -60,6 +60,7 @@ import org.apache.phoenix.util.ByteUtil;
import org.apache.phoenix.util.SizedUtil;
import org.cloudera.htrace.Sampler;
import org.cloudera.htrace.TraceScope;
+import org.cloudera.htrace.impl.ProbabilitySampler;
public class TraceQueryPlan implements QueryPlan {
@@ -122,22 +123,29 @@ public class TraceQueryPlan implements QueryPlan {
public Tuple next() throws SQLException {
if(!first) return null;
TraceScope traceScope = conn.getTraceScope();
- if(traceStatement.isTraceOn()) {
- if(!conn.getSampler().equals(Sampler.ALWAYS)) {
+ if (traceStatement.isTraceOn()) {
+ double samplingRate = traceStatement.getSamplingRate();
+ if (samplingRate >= 1.0) {
conn.setSampler(Sampler.ALWAYS);
+ } else if (samplingRate < 1.0 && samplingRate > 0.0) {
+ conn.setSampler(new ProbabilitySampler(samplingRate));
+ } else {
+ closeTraceScope(conn);
+ conn.setSampler(Sampler.NEVER);
}
- if (traceScope == null) {
+ if (traceScope == null && !conn.getSampler().equals(Sampler.NEVER)) {
traceScope = Tracing.startNewSpan(conn, "Enabling trace");
- conn.setTraceScope(traceScope);
+ if (traceScope.getSpan() != null) {
+ conn.setTraceScope(traceScope);
+ } else {
+ closeTraceScope(conn);
+ }
}
} else {
- if (traceScope != null) {
- conn.getTraceScope().close();
- conn.setTraceScope(null);
- }
+ closeTraceScope(conn);
conn.setSampler(Sampler.NEVER);
}
- if(traceScope == null) return null;
+ if (traceScope == null || traceScope.getSpan() == null) return null;
first = false;
ImmutableBytesWritable ptr = new ImmutableBytesWritable();
ParseNodeFactory factory = new ParseNodeFactory();
@@ -157,6 +165,13 @@ public class TraceQueryPlan implements QueryPlan {
return new ResultTuple(Result.create(cells));
}
+ private void closeTraceScope(final PhoenixConnection conn) {
+ if(conn.getTraceScope()!=null) {
+ conn.getTraceScope().close();
+ conn.setTraceScope(null);
+ }
+ }
+
@Override
public void explain(List<String> planSteps) {
}
http://git-wip-us.apache.org/repos/asf/phoenix/blob/319fdcb5/phoenix-core/src/main/java/org/apache/phoenix/jdbc/PhoenixStatement.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/jdbc/PhoenixStatement.java b/phoenix-core/src/main/java/org/apache/phoenix/jdbc/PhoenixStatement.java
index 4e61391..996d243 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/jdbc/PhoenixStatement.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/jdbc/PhoenixStatement.java
@@ -704,8 +704,8 @@ public class PhoenixStatement implements Statement, SQLCloseable, org.apache.pho
private static class ExecutableTraceStatement extends TraceStatement implements CompilableStatement {
- public ExecutableTraceStatement(boolean isTraceOn) {
- super(isTraceOn);
+ public ExecutableTraceStatement(boolean isTraceOn, double samplingRate) {
+ super(isTraceOn, samplingRate);
}
@SuppressWarnings("unchecked")
@@ -909,8 +909,8 @@ public class PhoenixStatement implements Statement, SQLCloseable, org.apache.pho
}
@Override
- public TraceStatement trace(boolean isTraceOn) {
- return new ExecutableTraceStatement(isTraceOn);
+ public TraceStatement trace(boolean isTraceOn, double samplingRate) {
+ return new ExecutableTraceStatement(isTraceOn, samplingRate);
}
@Override
http://git-wip-us.apache.org/repos/asf/phoenix/blob/319fdcb5/phoenix-core/src/main/java/org/apache/phoenix/parse/ParseNodeFactory.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/parse/ParseNodeFactory.java b/phoenix-core/src/main/java/org/apache/phoenix/parse/ParseNodeFactory.java
index 2a4168d..82ae821 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/parse/ParseNodeFactory.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/parse/ParseNodeFactory.java
@@ -325,8 +325,8 @@ public class ParseNodeFactory {
return new AlterIndexStatement(indexTableNode, dataTableName, ifExists, state);
}
- public TraceStatement trace(boolean isTraceOn) {
- return new TraceStatement(isTraceOn);
+ public TraceStatement trace(boolean isTraceOn, double samplingRate) {
+ return new TraceStatement(isTraceOn, samplingRate);
}
public TableName table(String schemaName, String tableName) {
http://git-wip-us.apache.org/repos/asf/phoenix/blob/319fdcb5/phoenix-core/src/main/java/org/apache/phoenix/parse/TraceStatement.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/parse/TraceStatement.java b/phoenix-core/src/main/java/org/apache/phoenix/parse/TraceStatement.java
index 7460a85..301fa56 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/parse/TraceStatement.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/parse/TraceStatement.java
@@ -21,10 +21,12 @@ import org.apache.phoenix.jdbc.PhoenixStatement.Operation;
public class TraceStatement implements BindableStatement {
- private boolean traceOn = false;
+ private final boolean traceOn;
+ private final double samplingRate;
- public TraceStatement(boolean isOn) {
+ public TraceStatement(boolean isOn, double samplingRate) {
this.traceOn = isOn;
+ this.samplingRate = samplingRate;
}
@Override
@@ -38,6 +40,10 @@ public class TraceStatement implements BindableStatement {
}
public boolean isTraceOn() {
- return traceOn == true;
+ return traceOn;
+ }
+
+ public double getSamplingRate() {
+ return samplingRate;
}
}