)]}'
{
  "commit": "893f7ebafe4e8afc0ce4dbd9e64b3752f3036bbb",
  "tree": "c104f2308285a690ff3d9953a5e1b9946d2a5616",
  "parents": [
    "a66a2a368383e627b929bf42d1b972822491404b"
  ],
  "author": {
    "name": "Paolo Bonzini",
    "email": "pbonzini@redhat.com",
    "time": "Thu Oct 18 16:49:23 2012 +0200"
  },
  "committer": {
    "name": "Kevin Wolf",
    "email": "kwolf@redhat.com",
    "time": "Wed Oct 24 10:26:19 2012 +0200"
  },
  "message": "mirror: introduce mirror job\n\nThis patch adds the implementation of a new job that mirrors a disk to\na new image while letting the guest continue using the old image.\nThe target is treated as a \"black box\" and data is copied from the\nsource to the target in the background.  This can be used for several\npurposes, including storage migration, continuous replication, and\nobservation of the guest I/O in an external program.  It is also a\nfirst step in replacing the inefficient block migration code that is\npart of QEMU.\n\nThe job is possibly never-ending, but it is logically structured into\ntwo phases: 1) copy all data as fast as possible until the target\nfirst gets in sync with the source; 2) keep target in sync and\nensure that reopening to the target gets a correct (full) copy\nof the source data.\n\nThe second phase is indicated by the progress in \"info block-jobs\"\nreporting the current offset to be equal to the length of the file.\nWhen the job is cancelled in the second phase, QEMU will run the\njob until the source is clean and quiescent, then it will report\nsuccessful completion of the job.\n\nIn other words, the BLOCK_JOB_CANCELLED event means that the target\nmay _not_ be consistent with a past state of the source; the\nBLOCK_JOB_COMPLETED event means that the target is consistent with\na past state of the source.  (Note that it could already happen\nthat management lost the race against QEMU and got a completion\nevent instead of cancellation).\n\nIt is not yet possible to complete the job and switch over to the target\ndisk.  The next patches will fix this and add many refinements to the\nbasic idea introduced here.  These include improved error management,\nsome tunable knobs and performance optimizations.\n\nSigned-off-by: Paolo Bonzini \u003cpbonzini@redhat.com\u003e\nSigned-off-by: Kevin Wolf \u003ckwolf@redhat.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "554f429d0534684601492ce0b8e6a525685b5701",
      "old_mode": 33188,
      "old_path": "block/Makefile.objs",
      "new_id": "806e526eb451a190e0028ffe185f3cca252543fe",
      "new_mode": 33188,
      "new_path": "block/Makefile.objs"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "b353798e8f7a326425f39d9fda21dbff4af338a9",
      "new_mode": 33188,
      "new_path": "block/mirror.c"
    },
    {
      "type": "modify",
      "old_id": "f4bae044017773a6adc931450ea636c9b180659a",
      "old_mode": 33188,
      "old_path": "block_int.h",
      "new_id": "aaa46a83b015242e5a744f6d1a1a5a5eb848ea10",
      "new_mode": 33188,
      "new_path": "block_int.h"
    },
    {
      "type": "modify",
      "old_id": "37bbecab60486834e38214f84b6a4dd8241658a7",
      "old_mode": 33188,
      "old_path": "qapi-schema.json",
      "new_id": "8c4b7c808b50a605fbd8d4e679661f20034f74c7",
      "new_mode": 33188,
      "new_path": "qapi-schema.json"
    },
    {
      "type": "modify",
      "old_id": "9ab8e2781a6a3e692c1b51b080c19327fe1eed9a",
      "old_mode": 33188,
      "old_path": "trace-events",
      "new_id": "09b5d558c6073808cbd9e8dd78bc56c4ab927d26",
      "new_mode": 33188,
      "new_path": "trace-events"
    }
  ]
}
