Skip to content

Commit df99873

Browse files
committed
Remove hashCode() and equals() from TraceImpl
1 parent 50b3db6 commit df99873

File tree

5 files changed

+174
-68
lines changed

5 files changed

+174
-68
lines changed

src/com/linkedin/parseq/trace/TraceImpl.java

Lines changed: 6 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -89,26 +89,6 @@ public Map<String, String> getAttributes()
8989
return _shallowTrace.getAttributes();
9090
}
9191

92-
@Override
93-
public boolean equals(final Object o)
94-
{
95-
if (this == o) return true;
96-
if (o == null || getClass() != o.getClass()) return false;
97-
98-
final TraceImpl trace = (TraceImpl) o;
99-
100-
return _shallowTrace.equals(trace._shallowTrace) &&
101-
_related.equals(trace._related);
102-
}
103-
104-
@Override
105-
public int hashCode()
106-
{
107-
int result = _shallowTrace.hashCode();
108-
result = 31 * result + _related.hashCode();
109-
return result;
110-
}
111-
11292
@Override
11393
public String toString()
11494
{
@@ -117,4 +97,10 @@ public String toString()
11797
", _related=" + _related +
11898
'}';
11999
}
100+
101+
/* for testing purpose only */
102+
protected ShallowTrace getShallowTrace()
103+
{
104+
return _shallowTrace;
105+
}
120106
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package com.linkedin.parseq.trace;
2+
3+
import java.util.Set;
4+
5+
/**
6+
* @author Ang Xu ([email protected])
7+
*/
8+
public class ComparableTrace extends TraceImpl
9+
{
10+
public ComparableTrace(ShallowTrace trace, Set<Related<Trace>> related)
11+
{
12+
super(trace, related);
13+
}
14+
15+
@Override
16+
public boolean equals(Object o)
17+
{
18+
if (this == o) return true;
19+
if (o == null || getClass() != o.getClass()) return false;
20+
21+
ComparableTrace that = (ComparableTrace) o;
22+
23+
if (!this.getShallowTrace().equals(that.getShallowTrace())) return false;
24+
if (!this.getRelated().equals(that.getRelated())) return false;
25+
26+
return true;
27+
}
28+
29+
@Override
30+
public int hashCode()
31+
{
32+
int result = getShallowTrace().hashCode();
33+
result = 31 * result + getRelated().hashCode();
34+
return result;
35+
}
36+
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package com.linkedin.parseq.trace;
2+
3+
import java.util.HashSet;
4+
import java.util.Map;
5+
import java.util.Set;
6+
7+
/**
8+
* @author Ang Xu ([email protected])
9+
*/
10+
public class ComparableTraceBuilder
11+
{
12+
private final ShallowTrace _shallowTrace;
13+
private final Set<Related<Trace>> _related;
14+
15+
public ComparableTraceBuilder(Trace t)
16+
{
17+
_shallowTrace = buildShallowTrace(t);
18+
_related = buildRelated(t);
19+
}
20+
21+
public ComparableTrace build()
22+
{
23+
return new ComparableTrace(_shallowTrace, _related);
24+
}
25+
26+
private static ShallowTrace buildShallowTrace(Trace t)
27+
{
28+
ShallowTraceBuilder builder = new ShallowTraceBuilder(t.getResultType())
29+
.setName(t.getName())
30+
.setValue(t.getValue())
31+
.setStartNanos(t.getStartNanos())
32+
.setPendingNanos(t.getPendingNanos())
33+
.setEndNanos(t.getEndNanos())
34+
.setHidden(t.getHidden())
35+
.setSystemHidden(t.getSystemHidden());
36+
37+
for (Map.Entry<String, String> attr : t.getAttributes().entrySet())
38+
{
39+
builder.addAttribute(attr.getKey(), attr.getValue());
40+
}
41+
42+
return builder.build();
43+
}
44+
45+
private static Set<Related<Trace>> buildRelated(Trace t)
46+
{
47+
final Set<Related<Trace>> newRelated = new HashSet<Related<Trace>>();
48+
for (Related<Trace> r : t.getRelated())
49+
{
50+
ComparableTrace ct;
51+
if (r.getRelated() instanceof ComparableTrace)
52+
{
53+
ct = (ComparableTrace) r.getRelated();
54+
}
55+
else
56+
{
57+
ct = new ComparableTraceBuilder(r.getRelated()).build();
58+
}
59+
newRelated.add(new Related<Trace>(r.getRelationship(), ct));
60+
}
61+
return newRelated;
62+
}
63+
}

test/com/linkedin/parseq/trace/TestTaskToTrace.java

Lines changed: 66 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -253,16 +253,16 @@ public void testTraceWithPredecessorTrace() throws InterruptedException
253253
getEngine().run(seq);
254254
assertTrue(seq.await(5, TimeUnit.SECONDS));
255255

256-
final Trace sucTrace = successor.getTrace();
256+
final ComparableTrace sucTrace = new ComparableTraceBuilder(successor.getTrace()).build();
257257
assertShallowTraceMatches(successor, sucTrace);
258258

259-
final Trace predTrace = predecessor.getTrace();
259+
final ComparableTrace predTrace = new ComparableTraceBuilder(predecessor.getTrace()).build();
260260
assertShallowTraceMatches(predecessor, predTrace);
261261

262262
final Set<Related<Trace>> related = sucTrace.getRelated();
263263
assertEquals(1,related.size());
264264
assertEquals(new Related<Trace>(Relationship.SUCCESSOR_OF, predTrace),
265-
sucTrace.getRelated().iterator().next());
265+
sucTrace.getRelated().iterator().next());
266266
}
267267

268268
@Test
@@ -275,16 +275,16 @@ public void testTraceWithSuccessChild() throws InterruptedException
275275
getEngine().run(seq);
276276
assertTrue(seq.await(5, TimeUnit.SECONDS));
277277

278-
final Trace taskTrace = task.getTrace();
278+
final ComparableTrace taskTrace = new ComparableTraceBuilder(task.getTrace()).build();
279279
assertShallowTraceMatches(task, taskTrace);
280280

281-
final Trace seqTrace = seq.getTrace();
281+
final ComparableTrace seqTrace = new ComparableTraceBuilder(seq.getTrace()).build();
282282
assertShallowTraceMatches(seq, seqTrace);
283283

284284
final Set<Related<Trace>> related = seqTrace.getRelated();
285285
assertEquals(1, related.size());
286286
assertEquals(new Related<Trace>(Relationship.PARENT_OF, taskTrace),
287-
related.iterator().next());
287+
related.iterator().next());
288288
}
289289

290290
@Test
@@ -307,13 +307,16 @@ protected Promise<? extends String> run(final Context context) throws Exception
307307
getEngine().run(task);
308308
assertTrue(task.await(5, TimeUnit.SECONDS));
309309

310-
assertTrue(task.getTrace().getRelated().iterator().hasNext());
311-
Related<Trace> traceRelated = task.getTrace().getRelated().iterator().next();
312-
assertShallowTraceMatches(task, task.getTrace());
313-
assertShallowTraceMatches(innerTask, innerTask.getTrace());
314-
assertEquals(innerTask.getTrace(), traceRelated.getRelated());
310+
final ComparableTrace taskTrace = new ComparableTraceBuilder(task.getTrace()).build();
311+
final ComparableTrace innerTaskTrace = new ComparableTraceBuilder(innerTask.getTrace()).build();
312+
313+
assertTrue(taskTrace.getRelated().iterator().hasNext());
314+
Related<Trace> traceRelated = taskTrace.getRelated().iterator().next();
315+
assertShallowTraceMatches(task, taskTrace);
316+
assertShallowTraceMatches(innerTask, innerTaskTrace);
317+
assertEquals(innerTaskTrace,traceRelated.getRelated());
315318
assertEquals(Relationship.PARENT_OF.name(), traceRelated.getRelationship());
316-
assertEquals(ResultType.EARLY_FINISH, innerTask.getTrace().getResultType());
319+
assertEquals(ResultType.EARLY_FINISH, innerTaskTrace.getResultType());
317320
}
318321

319322
@Test
@@ -370,19 +373,24 @@ protected Promise<? extends String> run(final Context context) throws Exception
370373
getEngine().run(par);
371374
assertTrue(par.await(5, TimeUnit.SECONDS));
372375

376+
final ComparableTrace parTrace = new ComparableTraceBuilder(par.getTrace()).build();
377+
final ComparableTrace innerTaskTrace = new ComparableTraceBuilder(innerTask.getTrace()).build();
378+
final ComparableTrace task1Trace = new ComparableTraceBuilder(task1.getTrace()).build();
379+
final ComparableTrace task2Trace = new ComparableTraceBuilder(task2.getTrace()).build();
380+
373381
Set<Trace> tracesWithParent = new HashSet<Trace>();
374382
Map<Trace, Integer> traceWithPotentialParent = new HashMap<Trace, Integer>();
375-
assertAndFindParent(par.getTrace(), tracesWithParent, traceWithPotentialParent);
383+
assertAndFindParent(parTrace, tracesWithParent, traceWithPotentialParent);
376384
assertEquals(3, tracesWithParent.size());
377-
assertEquals((Integer)1, traceWithPotentialParent.get(innerTask.getTrace()));
385+
assertEquals((Integer)1, traceWithPotentialParent.get(innerTaskTrace));
378386
assertEquals(1, traceWithPotentialParent.size());
379-
assertTrue(tracesWithParent.contains(task1.getTrace()));
380-
assertTrue(tracesWithParent.contains(task2.getTrace()));
381-
assertTrue(tracesWithParent.contains(innerTask.getTrace()));
382-
assertShallowTraceMatches(task1, task1.getTrace());
383-
assertShallowTraceMatches(task2, task2.getTrace());
384-
assertShallowTraceMatches(innerTask, innerTask.getTrace());
385-
assertEquals(ResultType.EARLY_FINISH, innerTask.getTrace().getResultType());
387+
assertTrue(tracesWithParent.contains(task1Trace));
388+
assertTrue(tracesWithParent.contains(task2Trace));
389+
assertTrue(tracesWithParent.contains(innerTaskTrace));
390+
assertShallowTraceMatches(task1, task1Trace);
391+
assertShallowTraceMatches(task2, task2Trace);
392+
assertShallowTraceMatches(innerTask, innerTaskTrace);
393+
assertEquals(ResultType.EARLY_FINISH, innerTaskTrace.getResultType());
386394
}
387395

388396
@Test
@@ -435,20 +443,26 @@ protected Promise<? extends String> run(Context context) throws Exception
435443
getEngine().run(seq);
436444
assertTrue(seq.await(5, TimeUnit.SECONDS));
437445

446+
final ComparableTrace seqTrace = new ComparableTraceBuilder(seq.getTrace()).build();
447+
final ComparableTrace innerTaskTrace = new ComparableTraceBuilder(innerTask.getTrace()).build();
448+
final ComparableTrace task1Trace = new ComparableTraceBuilder(task1.getTrace()).build();
449+
final ComparableTrace task2Trace = new ComparableTraceBuilder(task2.getTrace()).build();
450+
final ComparableTrace task3Trace = new ComparableTraceBuilder(task3.getTrace()).build();
451+
438452
Set<Trace> tracesWithParent = new HashSet<Trace>();
439453
Map<Trace, Integer> traceWithPotentialParent = new HashMap<Trace, Integer>();
440-
assertAndFindParent(seq.getTrace(), tracesWithParent, traceWithPotentialParent);
454+
assertAndFindParent(seqTrace, tracesWithParent, traceWithPotentialParent);
441455
assertEquals(4, tracesWithParent.size());
442456
assertEquals(1, traceWithPotentialParent.size());
443-
assertEquals((Integer) 2, traceWithPotentialParent.get(innerTask.getTrace()));
444-
assertTrue(tracesWithParent.contains(task1.getTrace()));
445-
assertTrue(tracesWithParent.contains(task2.getTrace()));
446-
assertTrue(tracesWithParent.contains(task3.getTrace()));
447-
assertTrue(tracesWithParent.contains(innerTask.getTrace()));
448-
assertShallowTraceMatches(task1, task1.getTrace());
449-
assertShallowTraceMatches(task2, task2.getTrace());
450-
assertShallowTraceMatches(task3, task3.getTrace());
451-
assertShallowTraceMatches(innerTask, innerTask.getTrace());
457+
assertEquals((Integer) 2, traceWithPotentialParent.get(innerTaskTrace));
458+
assertTrue(tracesWithParent.contains(task1Trace));
459+
assertTrue(tracesWithParent.contains(task2Trace));
460+
assertTrue(tracesWithParent.contains(task3Trace));
461+
assertTrue(tracesWithParent.contains(innerTaskTrace));
462+
assertShallowTraceMatches(task1, task1Trace);
463+
assertShallowTraceMatches(task2, task2Trace);
464+
assertShallowTraceMatches(task3, task3Trace);
465+
assertShallowTraceMatches(innerTask, innerTaskTrace);
452466
}
453467

454468
@Test
@@ -475,21 +489,27 @@ protected Promise<? extends String> run(final Context context) throws Exception
475489
getEngine().run(parent);
476490
assertTrue(parent.await(5, TimeUnit.SECONDS));
477491

478-
assertShallowTraceMatches(parent, parent.getTrace());
479-
assertShallowTraceMatches(a, a.getTrace());
480-
assertShallowTraceMatches(b, b.getTrace());
481-
assertShallowTraceMatches(c, c.getTrace());
482-
assertShallowTraceMatches(d, d.getTrace());
483-
484-
assertTrue(parent.getTrace().getRelated().contains(new Related<Trace>(Relationship.PARENT_OF, a.getTrace())));
485-
assertTrue(parent.getTrace().getRelated().contains(new Related<Trace>(Relationship.PARENT_OF, b.getTrace())));
486-
assertTrue(parent.getTrace().getRelated().contains(new Related<Trace>(Relationship.PARENT_OF, c.getTrace())));
487-
assertTrue(parent.getTrace().getRelated().contains(new Related<Trace>(Relationship.PARENT_OF, d.getTrace())));
488-
489-
assertTrue(d.getTrace().getRelated().contains(new Related<Trace>(Relationship.SUCCESSOR_OF, b.getTrace())));
490-
assertTrue(d.getTrace().getRelated().contains(new Related<Trace>(Relationship.SUCCESSOR_OF, c.getTrace())));
491-
assertTrue(b.getTrace().getRelated().contains(new Related<Trace>(Relationship.SUCCESSOR_OF, a.getTrace())));
492-
assertTrue(c.getTrace().getRelated().contains(new Related<Trace>(Relationship.SUCCESSOR_OF, a.getTrace())));
492+
final ComparableTrace parentTrace = new ComparableTraceBuilder(parent.getTrace()).build();
493+
final ComparableTrace traceA = new ComparableTraceBuilder(a.getTrace()).build();
494+
final ComparableTrace traceB = new ComparableTraceBuilder(b.getTrace()).build();
495+
final ComparableTrace traceC = new ComparableTraceBuilder(c.getTrace()).build();
496+
final ComparableTrace traceD = new ComparableTraceBuilder(d.getTrace()).build();
497+
498+
assertShallowTraceMatches(parent, parentTrace);
499+
assertShallowTraceMatches(a, traceA);
500+
assertShallowTraceMatches(b, traceB);
501+
assertShallowTraceMatches(c, traceC);
502+
assertShallowTraceMatches(d, traceD);
503+
504+
assertTrue(parentTrace.getRelated().contains(new Related<Trace>(Relationship.PARENT_OF, traceA)));
505+
assertTrue(parentTrace.getRelated().contains(new Related<Trace>(Relationship.PARENT_OF, traceB)));
506+
assertTrue(parentTrace.getRelated().contains(new Related<Trace>(Relationship.PARENT_OF, traceC)));
507+
assertTrue(parentTrace.getRelated().contains(new Related<Trace>(Relationship.PARENT_OF, traceD)));
508+
509+
assertTrue(traceD.getRelated().contains(new Related<Trace>(Relationship.SUCCESSOR_OF, traceB)));
510+
assertTrue(traceD.getRelated().contains(new Related<Trace>(Relationship.SUCCESSOR_OF, traceC)));
511+
assertTrue(traceB.getRelated().contains(new Related<Trace>(Relationship.SUCCESSOR_OF, traceA)));
512+
assertTrue(traceC.getRelated().contains(new Related<Trace>(Relationship.SUCCESSOR_OF, traceA)));
493513
}
494514

495515
private void assertAndFindParent(Trace trace, Set<Trace> tracesWithParent, Map<Trace, Integer> traceWithPotentialParent)

test/com/linkedin/parseq/trace/codec/json/TestJsonTraceCodec.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package com.linkedin.parseq.trace.codec.json;
1818

19+
import com.linkedin.parseq.trace.ComparableTraceBuilder;
1920
import com.linkedin.parseq.trace.Related;
2021
import com.linkedin.parseq.trace.Relationship;
2122
import com.linkedin.parseq.trace.ResultType;
@@ -529,7 +530,7 @@ private void assertReversibleStream(final Trace trace) throws IOException
529530
return;
530531
}
531532

532-
assertEquals(trace, deserialized);
533+
assertEquals(new ComparableTraceBuilder(trace).build(), new ComparableTraceBuilder(deserialized).build());
533534
}
534535

535536
private void assertReversibleString(final Trace trace) throws IOException
@@ -548,6 +549,6 @@ private void assertReversibleString(final Trace trace) throws IOException
548549
return;
549550
}
550551

551-
assertEquals(trace, deserialized);
552+
assertEquals(new ComparableTraceBuilder(trace).build(), new ComparableTraceBuilder(deserialized).build());
552553
}
553554
}

0 commit comments

Comments
 (0)