HTRACE-117. graph.go: sort children array to get deterministic output (cmccabe)
diff --git a/htrace-core/src/go/src/org/apache/htrace/htrace/graph.go b/htrace-core/src/go/src/org/apache/htrace/htrace/graph.go
index fd55592..36951de 100644
--- a/htrace-core/src/go/src/org/apache/htrace/htrace/graph.go
+++ b/htrace-core/src/go/src/org/apache/htrace/htrace/graph.go
@@ -71,7 +71,7 @@
idMap[span.Id] = span
}
}
- childMap := make(map[common.SpanId][]*common.Span)
+ childMap := make(map[common.SpanId]common.SpanSlice)
for i := range spans {
child := spans[i]
for j := range child.Parents {
@@ -82,7 +82,7 @@
} else {
children := childMap[parent.Id]
if children == nil {
- children = make([]*common.Span, 0)
+ children = make(common.SpanSlice, 0)
}
children = append(children, child)
childMap[parent.Id] = children
@@ -99,6 +99,7 @@
// Write out the edges between nodes... the parent/children relationships
for i := range spans {
children := childMap[spans[i].Id]
+ sort.Sort(children)
if children != nil {
for c := range children {
w.Printf(fmt.Sprintf(` "%s" -> "%s";`+"\n",
diff --git a/htrace-core/src/go/src/org/apache/htrace/htrace/graph_test.go b/htrace-core/src/go/src/org/apache/htrace/htrace/graph_test.go
index 6cf0c3a..3003b3f 100644
--- a/htrace-core/src/go/src/org/apache/htrace/htrace/graph_test.go
+++ b/htrace-core/src/go/src/org/apache/htrace/htrace/graph_test.go
@@ -71,9 +71,9 @@
t.Fatalf("spansToDot failed: error %s\n", err.Error())
}
EXPECTED_STR := `digraph spans {
- "e2c7273efb280a8c" [label="ClientNamenodeProtocol#getBlockLocations"];
"6af3cc058e5d829d" [label="newDFSInputStream"];
"75d16cc5b2c07d8a" [label="getBlockLocations"];
+ "e2c7273efb280a8c" [label="ClientNamenodeProtocol#getBlockLocations"];
"6af3cc058e5d829d" -> "75d16cc5b2c07d8a";
"75d16cc5b2c07d8a" -> "e2c7273efb280a8c";
}`