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

Xuan Gong commented on HADOOP-8981:
-----------------------------------

For this test failure, I do not think our code has any problems. So, basically, 
how the testInitFirst function works like this: it will register three sinks, 
named "Test","Sink1" and "Sink2", each of them has its own blockingQueue, 
initially the queue is empty, and if there are any items in the queue, they 
will consume them. In the testInitFirst function, what the function 
ms.onTimerEvent() did is to put items to all of the queues that let the sinks 
can consume the items. Followed by this function is stop function. Basically it 
stops all the threads. 
Why the test is fail is because the sink does not finish to consume the items, 
it is stopped by calling the function stop().  If we add Thread.sleep(sometime) 
before the stop function, the test will be successful.Original I think maybe we 
can add the checking condition to check if the queue is empty before we 
actually do the stop. But I think that the purpose of this stop() function is 
when I call this functions, all the sink threads should stop no matter they are 
idle or they are doing something. If we actually add the checking condition or 
other synchronized mechnism to make sure all the items in queue is consumed 
before we stop the thread, does this violate the purpose of calling stop 
function ?
And actually the test is fail, on the other side, it proved that our stop 
function is actually worked correctly. When we call the stop, everything is 
stopped no matter what they are doing right now. Based on that, I runned this 
test several times, I found that sometimes it will be successful, sometimes 
half rigth half wrong, sometimes all fails.
If we try to make the testcase pass, what we need to do is to change the test 
case to :
    verify(sink1, atMost(2)).putMetrics(r1.capture());
    List<MetricsRecord> mr1 = r1.getAllValues();
    verify(sink2, atMost(2)).putMetrics(r2.capture());
    List<MetricsRecord> mr2 = r2.getAllValues();
    if(mr1.size() != 0 && mr2.size() != 0){
        checkMetricsRecords(mr1);
        assertEquals("output", mr1, mr2);
    }else if(mr1.size() != 0){
        checkMetricsRecords(mr1);
    }else if(mr2.size() != 0){
        checkMetricsRecords(mr2);
    }
                
> TestMetricsSystemImpl fails on Windows
> --------------------------------------
>
>                 Key: HADOOP-8981
>                 URL: https://issues.apache.org/jira/browse/HADOOP-8981
>             Project: Hadoop Common
>          Issue Type: Bug
>          Components: metrics
>    Affects Versions: trunk-win
>            Reporter: Chris Nauroth
>            Assignee: Arpit Agarwal
>
> The test is failing on an expected mock interaction.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to