[
https://issues.apache.org/jira/browse/HAMA-972?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14728679#comment-14728679
]
JongYoon Lim commented on HAMA-972:
-----------------------------------
Thanks Edward. I was looking for something that I can contribute.
I think your suggestion is a really good subject for me. I'll focus on the
async rpc.
> 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)