[
https://issues.apache.org/jira/browse/GIRAPH-556?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13599102#comment-13599102
]
Alessandro Presta commented on GIRAPH-556:
------------------------------------------
EdgeStore and Vertex are provided by Giraph, so this was just a bug in our
infrastructure code.
There is no reason a user would create a Vertex or VertexEdges without
initializing them, only the infrastructure needs to when deserializing.
However, I think we could do better in terms of input format API: we could have
each format (or reader?) get a configuration by default, and expose the
appropriate methods for creating vertices and edges, wrapping the configuration
and EdgeFactory, thus hiding these more complex interfaces from the user.
I've had this in mind for a while.
Does this address your concern?
Sent from my iPhone
> 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