Graphs and version control

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?

8
задан awdz9nld 30 October 2010 в 21:00
поделиться