)]}'
{
  "log": [
    {
      "commit": "50b885b96c903e420a1eac54dd27626244704a06",
      "tree": "35038a32cbb963c784685e8b73d6ecd1a7cde3c9",
      "parents": [
        "34b43a56b9b103a7a820032177131532d9dbdbe8"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Dec 01 14:12:07 2009 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Dec 03 14:59:44 2009 -0800"
      },
      "message": "ceph: whitespace cleanup\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "fb690390e305ea51e1883b105c7d3c52d7100ba5",
      "tree": "c099a71133225b1d22bba976e93dc6ab92a08986",
      "parents": [
        "1654dd0cf5ee1827322aca156af7d96d757201c7"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Sat Nov 07 20:18:22 2009 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Sat Nov 07 20:18:22 2009 -0800"
      },
      "message": "ceph: make CRUSH hash function a bucket property\n\nMake the integer hash function a property of the bucket it is used on.  This\nallows us to gracefully add support for new hash functions without starting\nfrom scatch.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "c6cf726316abd613cfb7c325d950f3629f964ec6",
      "tree": "446a686988656a355ee7ff94a43912c94f36ac63",
      "parents": [
        "1bdb70e59026838a79f77c440f8fe480a66e65e8"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Nov 06 16:39:26 2009 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Nov 06 16:39:26 2009 -0800"
      },
      "message": "ceph: make CRUSH hash functions non-inline\n\nThese are way to big to be inline.  I missed crush/* when doing the inline\naudit for akpm\u0027s review.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "33aa96e7430d215e2ee779f65cdad0f6d4571fe1",
      "tree": "00309ddde7506b0c2a86a20f5b579a60623005ab",
      "parents": [
        "63ff78b25c4b204075b5b98afcac6ad3639d43fe"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Sun Nov 01 17:53:24 2009 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Sun Nov 01 17:53:24 2009 -0800"
      },
      "message": "crush: always return a value from crush_bucket_choose\n\nEven when we encounter a corrupt bucket.  We still BUG().  This fixes\nthe warning\n\nfs/ceph/crush/mapper.c: In function \u0027crush_choose\u0027:\nfs/ceph/crush/mapper.c:352: warning: control may reach end of non-void function\n\u0027crush_bucket_choose\u0027 being inlined\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "b28813a61d6ffe05ad353a86965607bb7a7fd60f",
      "tree": "f416befcd63c5b93b227df4280afb18e00335c27",
      "parents": [
        "b195befd9acb514dd2afb722e63fdd880ed63217"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Oct 07 10:59:34 2009 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Oct 07 10:59:34 2009 -0700"
      },
      "message": "ceph: gracefully avoid empty crush buckets\n\nThis avoids a divide by zero when the input and/or map are\nmalformed.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "5ecc0a0f8128b1876e8614638deaed49cc8b174c",
      "tree": "6b1511b0e3ec2a349a24faebc375548b14ee137a",
      "parents": [
        "f24e9980eb860d8600cbe5ef3d2fd9295320d229"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Oct 06 11:31:11 2009 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Oct 06 11:31:11 2009 -0700"
      },
      "message": "ceph: CRUSH mapping algorithm\n\nCRUSH is a pseudorandom data distribution function designed to map\ninputs onto a dynamic hierarchy of devices, while minimizing the\nextent to which inputs are remapped when the devices are added or\nremoved.  It includes some features that are specifically useful for\nstorage, most notably the ability to map each input onto a set of N\ndevices that are separated across administrator-defined failure\ndomains.  CRUSH is used to distribute data across the cluster of Ceph\nstorage nodes.\n\nMore information about CRUSH can be found in this paper:\n\n    http://www.ssrc.ucsc.edu/Papers/weil-sc06.pdf\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    }
  ]
}
