[ 
https://issues.apache.org/jira/browse/HDFS-11583?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15953984#comment-15953984
 ] 

Samarth Jain commented on HDFS-11583:
-------------------------------------

[~iwasakims]

What are your thoughts on what should be the trace id here:

{code}
if (parents.length > 0) {
                scope = Trace.startSpan("dataStreamer", new TraceInfo(0, 
parents[0]));
                // TODO: use setParents API once it's available from HTrace 3.2
//                scope = Trace.startSpan("dataStreamer", Sampler.ALWAYS);
//                scope.getSpan().setParents(parents);
              }

{code}

Generally, traceId establishes the correlation between all related spans. If 
there is already an existing span in place, shouldn't we be using it's traceId 
instead? Probably calls for a different JIRA I think.

> Parent spans not initialized to NullScope for every DFSPacket
> -------------------------------------------------------------
>
>                 Key: HDFS-11583
>                 URL: https://issues.apache.org/jira/browse/HDFS-11583
>             Project: Hadoop HDFS
>          Issue Type: Bug
>          Components: tracing
>    Affects Versions: 2.7.1
>            Reporter: Karan Mehta
>            Assignee: Masatake Iwasaki
>         Attachments: HDFS-11583-branch-2.7.001.patch, 
> HDFS-11583-branch-2.7.002.patch, HDFS-11583-branch-2.7.003.patch
>
>
> The issue was found while working with PHOENIX-3752.
> Each packet received by the {{run()}} method of {{DataStreamer}} class, uses 
> the {{parents}} field of the {{DFSPacket}} to create a new {{dataStreamer}} 
> span, which in turn creates a {{writeTo}} span as its child span. The parents 
> field is initialized when the packet is added to the {{dataQueue}} and the 
> value is initialized from the {{ThreadLocal}}. This is how HTrace handles 
> spans. 
> A {{TraceScope}} is created and initialized to {{NullScope}} before the loop 
> which runs till the point when the stream is closed. 
> Consider the following scenario, when the {{dataQueue}} contains multiple 
> packets, only the first of which has a tracing enabled. The scope is 
> initialized to the {{dataStreamer}} scope and a {{writeTo}} span is created 
> as its child, which gets closed once the packet is sent out to a remote 
> datanode. Before {{writeTo}} span is started, the {{dataStreamer}} scope is 
> detached. So calling the close method on it doesn't do anything at the end of 
> loop. 
> The second iteration will be using the stale value of the {{scope}} variable 
> with a DFSPacket on which tracing is not enabled. This results in generation 
> of an orphan {{writeTo}} spans which are being delivered to the 
> {{SpanReceiver}} as registered in the TraceFramework. This may result in 
> unlimited number of spans being generated and sent out to receiver. 



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

---------------------------------------------------------------------
To unsubscribe, e-mail: hdfs-issues-unsubscr...@hadoop.apache.org
For additional commands, e-mail: hdfs-issues-h...@hadoop.apache.org

Reply via email to