BSPMaster - job ID counter is not read and updated atomically
-------------------------------------------------------------

                 Key: HAMA-307
                 URL: https://issues.apache.org/jira/browse/HAMA-307
             Project: Hama
          Issue Type: Bug
            Reporter: Filipe Manana
         Attachments: hama-307.patch

The nextJobId (int attribute) in BSPMaster is not read and updated atomically, 
therefore it's possible that concurrent requests get the same job ID and/or 
cause the job ID to not get incremented by the proper quantity.

The following simple patch fixes it.

Notice:

I changed the type from int to Integer.
This is to avoid doing the following in getNewJobId():

int id;
synchronized (this) {
  id = nextJobId++;
}

the instance (referenced by this) is synchronized in many places in BSPMaster, 
so by making nextJobId an Integer (object), we can synchronize on it, reducing 
contention times:

private Integer nextJobId = Integer.valueOf(1);

public BSPJobID getNewJobId() throws IOException {
    int id;
    synchronized (nextJobId) {
      id = nextJobId;
      nextJobId = Integer.valueOf(id + 1);
    }
    return new BSPJobID(this.masterIdentifier, id);
  }

cheers

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to