You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kudu.apache.org by jd...@apache.org on 2016/11/04 22:58:16 UTC
[1/2] kudu git commit: Fix broken GFlags documentation link
Repository: kudu
Updated Branches:
refs/heads/master c53d9694f -> d4b1ea9d5
Fix broken GFlags documentation link
Change-Id: Ib67847245608bfe2b8bd827c34aa27ae051d97a3
Reviewed-on: http://gerrit.cloudera.org:8080/4955
Reviewed-by: Todd Lipcon <to...@apache.org>
Tested-by: Kudu Jenkins
Project: http://git-wip-us.apache.org/repos/asf/kudu/repo
Commit: http://git-wip-us.apache.org/repos/asf/kudu/commit/19d6731a
Tree: http://git-wip-us.apache.org/repos/asf/kudu/tree/19d6731a
Diff: http://git-wip-us.apache.org/repos/asf/kudu/diff/19d6731a
Branch: refs/heads/master
Commit: 19d6731ac62a4301c04d043f6adda7771b173d7b
Parents: c53d969
Author: Sailesh Mukil <sa...@apache.org>
Authored: Fri Nov 4 13:50:16 2016 -0700
Committer: Todd Lipcon <to...@apache.org>
Committed: Fri Nov 4 22:43:39 2016 +0000
----------------------------------------------------------------------
docs/configuration.adoc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/kudu/blob/19d6731a/docs/configuration.adoc
----------------------------------------------------------------------
diff --git a/docs/configuration.adoc b/docs/configuration.adoc
index 897c9aa..22b591f 100644
--- a/docs/configuration.adoc
+++ b/docs/configuration.adoc
@@ -40,7 +40,7 @@ To configure the behavior of each Kudu process, you can pass command-line flags
you start it, or read those options from configuration files by passing them using
one or more `--flagfile=<file>` options. You can even include the
`--flagfile` option within your configuration file to include other files. Learn more about gflags
-by reading link:http://google-gflags.googlecode.com/svn/trunk/doc/gflags.html[its documentation].
+by reading link:https://gflags.github.io/gflags/[its documentation].
You can place options for masters and tablet servers into the same configuration
file, and each will ignore options that do not apply.
[2/2] kudu git commit: [java client] Implement RPC tracing, part 2
Posted by jd...@apache.org.
[java client] Implement RPC tracing, part 2
This patch adds pretty printing for the traces, and makes them always part
of KuduRPC.toString. We thus rely on the exceptions' messages to include
the RPC's string representation in order to propagate the traces back to
the user.
In the future we could entertain having the traces in some queryable fashion in
KuduException, either by embedding the KuduRpc or just the list of traces.
Here's a trace snippet where a tserver that had a leader tablet was killed and we're
spinning on finding the new leader:
[0ms] sending RPC to server 5df1a37bd7e14380b5a8fceeba6b0d07
[70ms] received from server 5df1a37bd7e14380b5a8fceeba6b0d07 response Network error: [Peer 5df1a37bd7e14380b5a8fceeba6b0d07] Connection reset
[70ms] delaying RPC due to Network error: [Peer 5df1a37bd7e14380b5a8fceeba6b0d07] Connection reset
[101ms] querying master
[101ms] Sub rpc: GetTableLocations sending RPC to server e6e499debd804a8183b85d20a33ad560
[104ms] Sub rpc: GetTableLocations sending RPC to server e6e499debd804a8183b85d20a33ad560
[104ms] Sub rpc: GetTableLocations received from server e6e499debd804a8183b85d20a33ad560 response OK
[109ms] sending RPC to server 5df1a37bd7e14380b5a8fceeba6b0d07
[110ms] received from server 5df1a37bd7e14380b5a8fceeba6b0d07 response Network error: [Peer 5df1a37bd7e14380b5a8fceeba6b0d07] Connection reset
Change-Id: I2c37143a587971f0e8985c59f4ab1d0c164c3723
Reviewed-on: http://gerrit.cloudera.org:8080/4950
Reviewed-by: Adar Dembo <ad...@cloudera.com>
Tested-by: Kudu Jenkins
Project: http://git-wip-us.apache.org/repos/asf/kudu/repo
Commit: http://git-wip-us.apache.org/repos/asf/kudu/commit/d4b1ea9d
Tree: http://git-wip-us.apache.org/repos/asf/kudu/tree/d4b1ea9d
Diff: http://git-wip-us.apache.org/repos/asf/kudu/diff/d4b1ea9d
Branch: refs/heads/master
Commit: d4b1ea9d556953b20336f1060c51afaaaaf9b588
Parents: 19d6731
Author: Jean-Daniel Cryans <jd...@apache.org>
Authored: Fri Nov 4 14:03:08 2016 -0700
Committer: Jean-Daniel Cryans <jd...@apache.org>
Committed: Fri Nov 4 22:56:48 2016 +0000
----------------------------------------------------------------------
.../java/org/apache/kudu/client/KuduRpc.java | 2 +-
.../org/apache/kudu/client/RpcTraceFrame.java | 72 ++++++++++++++++++--
2 files changed, 68 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/kudu/blob/d4b1ea9d/java/kudu-client/src/main/java/org/apache/kudu/client/KuduRpc.java
----------------------------------------------------------------------
diff --git a/java/kudu-client/src/main/java/org/apache/kudu/client/KuduRpc.java b/java/kudu-client/src/main/java/org/apache/kudu/client/KuduRpc.java
index 03fcce1..979dbcc 100644
--- a/java/kudu-client/src/main/java/org/apache/kudu/client/KuduRpc.java
+++ b/java/kudu-client/src/main/java/org/apache/kudu/client/KuduRpc.java
@@ -341,11 +341,11 @@ public abstract class KuduRpc<R> {
}
buf.append(", attempt=").append(attempt);
buf.append(", ").append(deadlineTracker);
+ buf.append(", ").append(RpcTraceFrame.getHumanReadableStringForTraces(traces));
// Cheating a bit, we're not actually logging but we'll augment the information provided by
// this method if DEBUG is enabled.
if (LOG.isDebugEnabled()) {
buf.append(", ").append(deferred);
- buf.append(", ").append(traces);
}
buf.append(')');
return buf.toString();
http://git-wip-us.apache.org/repos/asf/kudu/blob/d4b1ea9d/java/kudu-client/src/main/java/org/apache/kudu/client/RpcTraceFrame.java
----------------------------------------------------------------------
diff --git a/java/kudu-client/src/main/java/org/apache/kudu/client/RpcTraceFrame.java b/java/kudu-client/src/main/java/org/apache/kudu/client/RpcTraceFrame.java
index cae2b02..a327f23 100644
--- a/java/kudu-client/src/main/java/org/apache/kudu/client/RpcTraceFrame.java
+++ b/java/kudu-client/src/main/java/org/apache/kudu/client/RpcTraceFrame.java
@@ -19,6 +19,8 @@ package org.apache.kudu.client;
import com.google.common.base.MoreObjects;
import org.apache.kudu.annotations.InterfaceAudience;
+import java.util.List;
+
/**
* Container class for traces. Most of its properties can be null, when they aren't set via the
* builder. The timestamp is set automatically.
@@ -27,16 +29,43 @@ import org.apache.kudu.annotations.InterfaceAudience;
class RpcTraceFrame {
enum Action {
// Just before putting the RPC on the wire.
- SEND_TO_SERVER,
+ SEND_TO_SERVER {
+ void appendToStringBuilder(RpcTraceFrame trace, StringBuilder sb) {
+ sb.append("sending RPC to server ");
+ sb.append(trace.getServer().getUuid());
+ }
+ },
// Just after parsing the response from the server.
- RECEIVE_FROM_SERVER,
+ RECEIVE_FROM_SERVER {
+ void appendToStringBuilder(RpcTraceFrame trace, StringBuilder sb) {
+ sb.append("received from server ");
+ sb.append(trace.getServer().getUuid());
+ sb.append(" response ");
+ sb.append(trace.getStatus());
+ }
+ },
// Just before sleeping and then retrying.
- SLEEP_THEN_RETRY,
+ SLEEP_THEN_RETRY {
+ void appendToStringBuilder(RpcTraceFrame trace, StringBuilder sb) {
+ sb.append("delaying RPC due to ");
+ sb.append(trace.getStatus());
+ }
+ },
// After having figured out that we don't know where the RPC is going,
// before querying the master.
- QUERY_MASTER,
+ QUERY_MASTER {
+ void appendToStringBuilder(RpcTraceFrame trace, StringBuilder sb) {
+ sb.append("querying master");
+ }
+ },
// Once the trace becomes too large, will be the last trace object in the list.
- TRACE_TRUNCATED
+ TRACE_TRUNCATED {
+ void appendToStringBuilder(RpcTraceFrame trace, StringBuilder sb) {
+ sb.append("trace too long, truncated");
+ }
+ };
+
+ abstract void appendToStringBuilder(RpcTraceFrame trace, StringBuilder sb);
}
private final String rpcMethod;
@@ -74,6 +103,39 @@ class RpcTraceFrame {
return callStatus;
}
+ public static String getHumanReadableStringForTraces(List<RpcTraceFrame> traces) {
+ String rootMethod;
+ long baseTimestamp;
+ if (traces.isEmpty()) {
+ return "No traces";
+ } else {
+ RpcTraceFrame firstTrace = traces.get(0);
+ rootMethod = firstTrace.getRpcMethod();
+ baseTimestamp = firstTrace.getTimestampMs();
+ }
+
+ StringBuilder sb = new StringBuilder("Traces: ");
+ for (int i = 0; i < traces.size(); i++) {
+ RpcTraceFrame trace = traces.get(i);
+ sb.append('[');
+ sb.append(trace.getTimestampMs() - baseTimestamp);
+ sb.append("ms] ");
+
+ if (!rootMethod.equals(trace.getRpcMethod())) {
+ sb.append("Sub rpc: ");
+ sb.append(trace.getRpcMethod());
+ sb.append(" ");
+ }
+
+ trace.getAction().appendToStringBuilder(trace, sb);
+
+ if (i < traces.size() - 1) {
+ sb.append(", ");
+ }
+ }
+ return sb.toString();
+ }
+
@Override
public String toString() {
return MoreObjects.toStringHelper(this)