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

LiXin Ge commented on HDDS-347:
-------------------------------

[~xyao] Thanks for reviewing this, I'm sorry that I didn't make it clear. 
Please take a look at the comments I added in the code below.
{code:java|title=KeyValueContainer.java|borderStyle=solid}
  public void close() throws StorageContainerException {
    try {
      writeLock();
      containerData.closeContainer();    <--- container state will changes to 
CLOSED from CLOSING
      File containerFile = getContainerFile();
      // update the new container data to .container File
      updateContainerFile(containerFile);    <--- may take hundreds of 
milliseconds to process containerFile.
    } catch (StorageContainerException ex) {
    } finally {
   ...                                     <--- out of this close() funtion, 
will printf the 'LOG' which the test expected
   ...                                 
{code}
The 'LOG' may delay several hundred milliseconds to appear after the condition 
_containerData.isClosed_ been satisfied. So, IMO, the sleep is still necessary 
to wait for the appearance of the 'LOG'.

> Fix : testCloseContainerViaStandaAlone fails sometimes
> ------------------------------------------------------
>
>                 Key: HDDS-347
>                 URL: https://issues.apache.org/jira/browse/HDDS-347
>             Project: Hadoop Distributed Data Store
>          Issue Type: Bug
>            Reporter: LiXin Ge
>            Assignee: LiXin Ge
>            Priority: Major
>             Fix For: 0.2.1
>
>         Attachments: HDDS-347.000.patch
>
>
> This issue was finded in the automatic JenKins unit test of HDDS-265.
>  The container life cycle state is : Open -> Closing -> closed, this test 
> submit the container close command and wait for container state change to 
> *not equal to open*, actually even when the state condition(not equal to 
> open) is satisfied, the container may still in process of closing, so the LOG 
> which will printf after the container closed can't be find sometimes and the 
> test fails.
> {code:java|title=KeyValueContainer.java|borderStyle=solid}
>     try {
>       writeLock();
>       containerData.closeContainer();
>       File containerFile = getContainerFile();
>       // update the new container data to .container File
>       updateContainerFile(containerFile);
>     } catch (StorageContainerException ex) {
> {code}
> Looking at the code above, the container state changes from CLOSING to CLOSED 
> in the first step, the remaining *updateContainerFile* may take hundreds of 
> milliseconds, so even we modify the test logic to wait for the *CLOSED* state 
> will not guarantee the test success, too.
>  These are two way to fix this:
>  1, Remove one of the double check which depends on the LOG.
>  2, If we have to preserve the double check, we should wait for the *CLOSED* 
> state and sleep for a while to wait for the LOG appears.
>  patch 000 is based on the second way.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
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