[
https://issues.apache.org/jira/browse/GIRAPH-556?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Alessandro Presta updated GIRAPH-556:
-------------------------------------
Attachment: GIRAPH-556.patch
Good point. Since local mutation requests are short-circuited (i.e. never
serialized), we may end up adding a vertex with non-initialized edges.
Replaced with a call to createAndInitializeVertexEdges().
Calling createVertexEdges() still makes sense before calling readFields() (same
story as with Vertex).
This update also removes an unused method from WorkerClientRequestProcessor.
Committing soon unless there are further comments.
> Race condition in EdgeStore
> ---------------------------
>
> Key: GIRAPH-556
> URL: https://issues.apache.org/jira/browse/GIRAPH-556
> Project: Giraph
> Issue Type: Bug
> Reporter: Alessandro Presta
> Assignee: Alessandro Presta
> Priority: Critical
> Attachments: GIRAPH-556.patch, GIRAPH-556.patch
>
>
> In EdgeStore#addPartitionEdges(), when there is no VertexEdges data structure
> for a vertex, we try to insert a newly-created one. If the insertion is
> successful, we initialize it and later insert an edge in the synchronized
> block.
> It can happen that, between creation and initialization, another thread
> acquires the lock and tries to add an edge, leading to a NullPointerException
> for many implementations of VertexEdges.
> The fix is to create and initialize the structure before we try to insert it.
--
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