hama-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Edward J. Yoon (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (HAMA-972) Synchronization on local variable
Date Wed, 02 Sep 2015 11:01:46 GMT

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

Edward J. Yoon commented on HAMA-972:
-------------------------------------

And, https://wiki.apache.org/hadoop/HadoopRpc - this will be very helpful for you to understand
how RPC works.

> Synchronization on local variable 
> ----------------------------------
>
>                 Key: HAMA-972
>                 URL: https://issues.apache.org/jira/browse/HAMA-972
>             Project: Hama
>          Issue Type: Bug
>          Components: bsp core
>            Reporter: JongYoon Lim
>            Priority: Minor
>
> I'm not sure that the synchronization of the following code is proper. 
> In the code, it uses the *call variable* as a lock. But it's a local variable. So whenever
this function is called, the lock is changed. I think this is a bug... What do you think..?
Is there anything that I'm missing..? 
> {code}
> // Client.java 
> public Writable call(Writable param, ConnectionId remoteId)
>       throws InterruptedException, IOException {
>     Call call = new Call(param);
>     Connection connection = getConnection(remoteId, call);
>     connection.sendParam(call); // send the parameter
>     boolean interrupted = false;
>     synchronized (call) {
>       int callFailCount = 0;
>       while (!call.done) {
>         try {
>           call.wait(1000); // wait for the result
>           // prevent client hang from response error
>           if (callFailCount++ == IPC_CLIENT_CONNECT_MAX_RETRIES_DEFAULT)
>             break;
>         } catch (InterruptedException ie) {
>           interrupted = true;
>         }
>       }
>       if (interrupted) {
>         // set the interrupt flag now that we are done waiting
>         Thread.currentThread().interrupt();
>       }
>       if (call.error != null) {
>         if (call.error instanceof RemoteException) {
>           call.error.fillInStackTrace();
>           throw call.error;
>         } else { // local exception
>           // use the connection because it will reflect an ip change,
>           // unlike
>           // the remoteId
>           throw wrapException(connection.getRemoteAddress(), call.error);
>         }
>       } else {
>         return call.value;
>       }
>     }
>   }
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message