)]}'
{
  "commit": "78b33afff724d2a2537a9237dbd2df08cddde6ab",
  "tree": "7863a25ade9b08ed78fd4e76aacded61d427b971",
  "parents": [
    "b93e8e7aa7f03c32cddfd718807c825beac13107"
  ],
  "author": {
    "name": "Andrey Loskutov",
    "email": "loskutov@gmx.de",
    "time": "Fri Jul 16 10:44:31 2021 +0200"
  },
  "committer": {
    "name": "Andrey Loskutov",
    "email": "loskutov@gmx.de",
    "time": "Sat Jul 17 18:04:05 2021 -0400"
  },
  "message": "Bug 574897 - Switch JobManager to nanoTime() and monotonic time\n\nUsage of System.currentTimeMillis() in Jobs framework is problematic,\nbecause System.currentTimeMillis() API depends on external time sources\nand may go backwards and forwards at any time, contrary to our \"human\"\nunderstanding of the \"monotonic\" time that can never go back. However,\ncode responsible for scheduling and joining on jobs depends on time\nvalues delivered by that API and I assume may be confused if time goes\nbackwards.\n\nSince Java 5, System.nanoTime() was added to allow better precision and\nless system dependent time measurements. While still not strictly\nmonotonic, it is  less problematic as System.currentTimeMillis(),\nbecause it is not depending on system time changes that could be made by\nuser or by synchronization of local time with NTP server.\n\nThis change switches JobManager and related code to use\nSystem.nanoTime() and introduces JobManager.now() as a source for\nmonotonic non-negative time values independent on local time and\nconsistent between multiple threads.\n\nChange-Id: I6e90b4c962318705062148c1929838885404ad26\nSigned-off-by: Andrey Loskutov \u003closkutov@gmx.de\u003e\nReviewed-on: https://git.eclipse.org/r/c/platform/eclipse.platform.runtime/+/183139\nTested-by: Platform Bot \u003cplatform-bot@eclipse.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "f495334461d843b48eec27dc727f270a5a594095",
      "old_mode": 33188,
      "old_path": "bundles/org.eclipse.core.jobs/src/org/eclipse/core/internal/jobs/JobManager.java",
      "new_id": "90dc5de66a769380b3645ef76a02de826e0dc7bd",
      "new_mode": 33188,
      "new_path": "bundles/org.eclipse.core.jobs/src/org/eclipse/core/internal/jobs/JobManager.java"
    },
    {
      "type": "modify",
      "old_id": "cc1c4800a1c9fe773c2dd7325f8f03c7a6dfcc25",
      "old_mode": 33188,
      "old_path": "bundles/org.eclipse.core.jobs/src/org/eclipse/core/internal/jobs/Semaphore.java",
      "new_id": "5382f7f8a843abdce41fdd8a0b3c9ac6a907ee10",
      "new_mode": 33188,
      "new_path": "bundles/org.eclipse.core.jobs/src/org/eclipse/core/internal/jobs/Semaphore.java"
    },
    {
      "type": "modify",
      "old_id": "b54a23e92c572510992868db0067a9a2c7a17a39",
      "old_mode": 33188,
      "old_path": "bundles/org.eclipse.core.jobs/src/org/eclipse/core/internal/jobs/WorkerPool.java",
      "new_id": "fa57e33bac27660dd8b47897685e561a6f3b5983",
      "new_mode": 33188,
      "new_path": "bundles/org.eclipse.core.jobs/src/org/eclipse/core/internal/jobs/WorkerPool.java"
    },
    {
      "type": "modify",
      "old_id": "e930c2f9f8f60c7793cda182ebbe333f982b7e80",
      "old_mode": 33188,
      "old_path": "tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/jobs/AbstractJobTest.java",
      "new_id": "1e8c4e378cbd05e53d4279cbb58045d2e517b053",
      "new_mode": 33188,
      "new_path": "tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/jobs/AbstractJobTest.java"
    },
    {
      "type": "modify",
      "old_id": "6f3d210110a7aa473399d1318040bc220cc1f0ac",
      "old_mode": 33188,
      "old_path": "tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/jobs/AllTests.java",
      "new_id": "50766a7490c84d12fbb476f316d7f6f82f57d7dc",
      "new_mode": 33188,
      "new_path": "tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/jobs/AllTests.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "72e193893880a8d8af063023993ebd90042426bc",
      "new_mode": 33188,
      "new_path": "tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/jobs/Bug_574883.java"
    },
    {
      "type": "modify",
      "old_id": "5a55ae631c9042d5ac8b87044563ddd05a96747c",
      "old_mode": 33188,
      "old_path": "tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/jobs/DeadlockDetectionTest.java",
      "new_id": "1b44d097b27d00d3cc52764c39e87c6a39cad4c9",
      "new_mode": 33188,
      "new_path": "tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/jobs/DeadlockDetectionTest.java"
    },
    {
      "type": "modify",
      "old_id": "2cea24c59af8c0cc8f23d6876927db301aaba4c9",
      "old_mode": 33188,
      "old_path": "tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/jobs/IJobManagerTest.java",
      "new_id": "d0ad86dbcb25f8ec8f42b532c6e420b6857d9146",
      "new_mode": 33188,
      "new_path": "tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/jobs/IJobManagerTest.java"
    },
    {
      "type": "modify",
      "old_id": "09b365a7b45a690291a9c8e28e7c86da04351b9f",
      "old_mode": 33188,
      "old_path": "tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/jobs/JobGroupTest.java",
      "new_id": "b000dc411c9d2d68a4689aeecd73ca5ed9cd487f",
      "new_mode": 33188,
      "new_path": "tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/jobs/JobGroupTest.java"
    },
    {
      "type": "modify",
      "old_id": "9b0c87ba67f1fc78c0fccd5b88f6bb0dc7482059",
      "old_mode": 33188,
      "old_path": "tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/jobs/JobTest.java",
      "new_id": "86822407192833e64368a264c8ae7e8133a6db76",
      "new_mode": 33188,
      "new_path": "tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/jobs/JobTest.java"
    }
  ]
}
