[NO ISSUE][OTH] Add component size to traces of IO operations

- user model changes: no
- storage format changes: no
- interface changes: yes
  The ITracer interface now support adding name and cat to
  Duration end events.
  ITracer.durationE(String name, String cat, long tid, String args)

Details:
- The duration end trace now adds size information of the resulted
  component.

Change-Id: Icd8ba8194a00019179c3547fac060fc68edb97f0
Reviewed-on: https://asterix-gerrit.ics.uci.edu/2088
Reviewed-by: Till Westmann <tillw@apache.org>
Tested-by: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Contrib: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Integration-Tests: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/TracedIOOperation.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/TracedIOOperation.java
index 9cc8022..a7ec8c3 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/TracedIOOperation.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/TracedIOOperation.java
@@ -87,7 +87,8 @@
         try {
             return ioOp.call();
         } finally {
-            tracer.durationE(tid, "{\"optional\":\"value\"}");
+            tracer.durationE(getTarget().getRelativePath(), cat, tid,
+                    "{\"size\":" + getTarget().getFile().length() + "}");
         }
     }
 
diff --git a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/trace/ITracer.java b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/trace/ITracer.java
index 01b78da..8342c5b 100644
--- a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/trace/ITracer.java
+++ b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/trace/ITracer.java
@@ -76,6 +76,11 @@
         public void instant(String name, String cat, Scope scope, String args) {
             // nothing to do here
         }
+
+        @Override
+        public void durationE(String name, String cat, long tid, String args) {
+            // nothing to do here
+        }
     };
 
     static ITracer check(ITracer tracer) {
@@ -93,6 +98,8 @@
 
     void durationE(long tid, String args);
 
+    void durationE(String name, String cat, long tid, String args);
+
     void instant(String name, String cat, Scope scope, String args);
 
     @Override
diff --git a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/trace/Tracer.java b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/trace/Tracer.java
index 00991e4..d540dda 100644
--- a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/trace/Tracer.java
+++ b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/trace/Tracer.java
@@ -89,6 +89,12 @@
     }
 
     @Override
+    public void durationE(String name, String cat, long tid, String args) {
+        Event e = Event.create(name, cat, Phase.E, pid, tid, null, args);
+        traceLog.log(TRACE_LOG_LEVEL, e.toJson());
+    }
+
+    @Override
     public void instant(String name, String cat, Scope scope, String args) {
         Event e = Event.create(name, cat, Phase.i, pid, Thread.currentThread().getId(), scope, args);
         traceLog.log(TRACE_LOG_LEVEL, e.toJson());