I have a directed graph data structure, where I am trying to implement individual version control for each vertex. This creates some interesting scenarios, and I would much appreciate any ideas that you guys have. Specifically, I am looking to resolve the default behavior of the system when encountering the stated scenarios.
See the following image: Graph versions
Scenario 1: "The Null Pointer Paradox"
Vertex A is rolled back to version 1.0. Since this rollback will cascade down its subgraph, C will no longer be pointing to D. This could create a hazard. Should the behavior be to:
- 1.1: Delete the edge C -> D, creating a broken graph
- 1.2: Delete D, leaving E orphaned
- 1.3: Delete D and E
- 1.4: Refuse to perform the rollback before all edges pointing to D (which would be E -> D in this case) are deleted
- 1.X: Alternative solutions?
Scenario 2: "Indirect Effects"
Vertex D is updated, so that the following holds:
- D is now version 1.2
- E is now version 1.1
- C is now version 1.3
- A is now version 1.3
Vertex A is now rolled back to version 1.2, so that the following holds:
- A is now version 1.2
- C is now version 1.2
- D is now version 1.1
Should the default behavior be to:
- 2.1: Roll back E to 1.0
- 2.2: Refuse to roll back due to version hazard, in effect impairing functionality
- 2.X: Alternative solutions?