)]}'
{
  "commit": "577d7cf664cc584cd808e6e4a621287b6b81feaa",
  "tree": "44e0657f09ee320aceb0b4ca7b37f55e524627fa",
  "parents": [
    "add796c082676b49e2557eba4c327c783debac44"
  ],
  "author": {
    "name": "Dave Borowitz",
    "email": "dborowitz@google.com",
    "time": "Thu Oct 27 21:41:42 2016 -0400"
  },
  "committer": {
    "name": "Dave Borowitz",
    "email": "dborowitz@google.com",
    "time": "Fri Oct 28 08:26:00 2016 -0400"
  },
  "message": "EventSorter: Don\u0027t eagerly process events after satisfying deps\n\nThe previous EventSorter incorrectly handled a much later event having\na dependency on a much earlier event. For example, with a set of events\nin the following natural order:\n\n E1, E2, ..., E50\n\nSay E50 depends on E1. The old sort algorithm would emit E1, see that\nE50 now has no outstanding dependencies, and immediately emit E50,\nbefore emitting E2. This is topologically correct but really screws\nwith the natural order.\n\nThis interacts very poorly with the later code that ensures commits in\nthe NoteDb graph have monotonic timestamps. One realistic scenario,\nusing the example above, is if E1 and E2 are PatchSetEvents and E50 is a\nChangeMessageEvent on PS1. The sorted result was [E1, E50, E2, ...],\nand E2\u0027s timestamp would be squashed to be after E50\u0027s, which is way\noff from the original timestamp of the ReviewDb PatchSet.\n\nFix this by not eagerly processing dependant events (E50) eagerly.\nInstead, just insert them back in the queue for later processing.\nAdditionally, use a PriorityQueue to preserve the original order as\nmuch as possible.\n\nIn addition to more comprehensive small tests in EventSorterTest, add a\nreal test in ChangeRebuilderIT with a scenario like the one described\nabove with data very much like we\u0027ve observed in the wild.\n\nChange-Id: Ia57fa7a72c3f48c1c87b43d0de45bc73f11f8fba\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "dcdce9286f0e29ebf1711814db20f7039045069a",
      "old_mode": 33188,
      "old_path": "gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/server/notedb/ChangeRebuilderIT.java",
      "new_id": "29375fef378340847b945ea2fd73af70632aa067",
      "new_mode": 33188,
      "new_path": "gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/server/notedb/ChangeRebuilderIT.java"
    },
    {
      "type": "modify",
      "old_id": "4dcdec67eed2be78001250681573e58c7f73a0b0",
      "old_mode": 33188,
      "old_path": "gerrit-server/src/main/java/com/google/gerrit/server/notedb/rebuild/Event.java",
      "new_id": "147a4671c779387f3799948f78e8f59c771a14a8",
      "new_mode": 33188,
      "new_path": "gerrit-server/src/main/java/com/google/gerrit/server/notedb/rebuild/Event.java"
    },
    {
      "type": "modify",
      "old_id": "2ab4c00fbbd2ae246f01c6554a162dfe70577c61",
      "old_mode": 33188,
      "old_path": "gerrit-server/src/main/java/com/google/gerrit/server/notedb/rebuild/EventSorter.java",
      "new_id": "69587f4705e8fbe0159a5455d7b2e628a27e6a41",
      "new_mode": 33188,
      "new_path": "gerrit-server/src/main/java/com/google/gerrit/server/notedb/rebuild/EventSorter.java"
    },
    {
      "type": "modify",
      "old_id": "f5fdf13e862da5814846e3e62b905ff99df18f72",
      "old_mode": 33188,
      "old_path": "gerrit-server/src/test/java/com/google/gerrit/server/notedb/rebuild/EventSorterTest.java",
      "new_id": "1db59c58d668f0c3064fda1f50d9706a302d238e",
      "new_mode": 33188,
      "new_path": "gerrit-server/src/test/java/com/google/gerrit/server/notedb/rebuild/EventSorterTest.java"
    }
  ]
}
