)]}'
{
  "log": [
    {
      "commit": "c3c5429180de14a2b139f7741c934143ef73988c",
      "tree": "567dec1b0f2135b1b8ae662f9aba3a343496bce7",
      "parents": [
        "252467cb4a27637090b5f9006483f5b7ab551699",
        "c4da61c8eb98cedd3cf7a28c293cb1f6d3ec8571"
      ],
      "author": {
        "name": "Eric Avdey",
        "email": "eiri@eiri.ca",
        "time": "Thu Nov 24 14:00:17 2016 -0400"
      },
      "committer": {
        "name": "Eric Avdey",
        "email": "eiri@eiri.ca",
        "time": "Thu Nov 24 14:00:17 2016 -0400"
      },
      "message": "Merge remote branch \u0027cloudant:79066-port-chunkified-replicate_batch\u0027\n\nThis closes #26\n\nSigned-off-by: Eric Avdey \u003ceiri@eiri.ca\u003e\n"
    },
    {
      "commit": "c4da61c8eb98cedd3cf7a28c293cb1f6d3ec8571",
      "tree": "567dec1b0f2135b1b8ae662f9aba3a343496bce7",
      "parents": [
        "252467cb4a27637090b5f9006483f5b7ab551699"
      ],
      "author": {
        "name": "Benjamin Anderson",
        "email": "b@banjiewen.net",
        "time": "Wed Oct 29 12:52:30 2014 -0700"
      },
      "committer": {
        "name": "Eric Avdey",
        "email": "eiri@eiri.ca",
        "time": "Thu Nov 24 13:55:18 2016 -0400"
      },
      "message": "Chunk missing revisions before attempting to save on target\n\nIn cases with pathological documents revision patterns (e.g., 10000 open\nconflicts and tree depth of 300000 on a single document), attempting to\nreplicate the full revision tree in one batch causes the system to crash by\nattempting to send an oversized message. We\u0027ve observed messages of \u003e 4GB in the\nwild.\n\nThis patch divides the set of revisions-to-replicate for a single document into\nchunks of a configurable size, thereby allowing operators to keep the system\nstable when attempting to replicate these troublesome documents.\n\nBugzID: 37676\n"
    },
    {
      "commit": "252467cb4a27637090b5f9006483f5b7ab551699",
      "tree": "78dca8ded96e14701d7371ed41dfd0f380e99ec9",
      "parents": [
        "15615b295ec970ca9b12b7b54107a80b95149511",
        "432264ae1f66ea7ad960352583899cb4940e2723"
      ],
      "author": {
        "name": "ILYA Khlopotov",
        "email": "iilyak@ca.ibm.com",
        "time": "Tue Aug 23 14:59:49 2016 -0700"
      },
      "committer": {
        "name": "ILYA Khlopotov",
        "email": "iilyak@ca.ibm.com",
        "time": "Tue Aug 23 14:59:49 2016 -0700"
      },
      "message": "Merge remote branch \u0027cloudant:3102-fix-config_subscription\u0027\n\nThis closes #25\n\nSigned-off-by: ILYA Khlopotov \u003ciilyak@ca.ibm.com\u003e\n"
    },
    {
      "commit": "432264ae1f66ea7ad960352583899cb4940e2723",
      "tree": "78dca8ded96e14701d7371ed41dfd0f380e99ec9",
      "parents": [
        "15615b295ec970ca9b12b7b54107a80b95149511"
      ],
      "author": {
        "name": "ILYA Khlopotov",
        "email": "iilyak@ca.ibm.com",
        "time": "Wed Aug 17 11:57:54 2016 -0700"
      },
      "committer": {
        "name": "ILYA Khlopotov",
        "email": "iilyak@ca.ibm.com",
        "time": "Tue Aug 23 12:28:03 2016 -0700"
      },
      "message": "Update handle_config_terminate API\n\nCOUCHDB-3102\n"
    },
    {
      "commit": "15615b295ec970ca9b12b7b54107a80b95149511",
      "tree": "00e60dc75d6acad4e6eef2d05b985381c50a1567",
      "parents": [
        "cea3db5788a44034d87db3f99225bcaa9e45e69b",
        "1a176b010907b576da60209caa7faa5d10c2536a"
      ],
      "author": {
        "name": "ILYA Khlopotov",
        "email": "iilyak@ca.ibm.com",
        "time": "Tue May 24 19:16:56 2016 -0700"
      },
      "committer": {
        "name": "ILYA Khlopotov",
        "email": "iilyak@ca.ibm.com",
        "time": "Tue May 24 19:16:56 2016 -0700"
      },
      "message": "Merge remote branch \u0027cloudant:fix-type-spec\u0027\n\nThis closes #24\n\nSigned-off-by: ILYA Khlopotov \u003ciilyak@ca.ibm.com\u003e\n"
    },
    {
      "commit": "1a176b010907b576da60209caa7faa5d10c2536a",
      "tree": "00e60dc75d6acad4e6eef2d05b985381c50a1567",
      "parents": [
        "cea3db5788a44034d87db3f99225bcaa9e45e69b"
      ],
      "author": {
        "name": "ILYA Khlopotov",
        "email": "iilyak@ca.ibm.com",
        "time": "Tue May 24 19:10:50 2016 -0700"
      },
      "committer": {
        "name": "ILYA Khlopotov",
        "email": "iilyak@ca.ibm.com",
        "time": "Tue May 24 19:10:50 2016 -0700"
      },
      "message": "Fix type-spec of mem3_sync:next_replication/3\n"
    },
    {
      "commit": "cea3db5788a44034d87db3f99225bcaa9e45e69b",
      "tree": "5d089df9ebb552993ab4eb7a3457f5585c648e7f",
      "parents": [
        "386545186e5a31a42fc68c82d0e36f8407bf4739",
        "3a60de689ac25b8e3e5b060faf9a1fb48edc2762"
      ],
      "author": {
        "name": "ILYA Khlopotov",
        "email": "iilyak@ca.ibm.com",
        "time": "Thu May 19 05:02:09 2016 -0700"
      },
      "committer": {
        "name": "ILYA Khlopotov",
        "email": "iilyak@ca.ibm.com",
        "time": "Thu May 19 05:02:09 2016 -0700"
      },
      "message": "Merge remote branch \u0027cloudant:fix-type-spec-for-range-field\u0027\n\nThis closes #23\n\nSigned-off-by: ILYA Khlopotov \u003ciilyak@ca.ibm.com\u003e\n"
    },
    {
      "commit": "3a60de689ac25b8e3e5b060faf9a1fb48edc2762",
      "tree": "5d089df9ebb552993ab4eb7a3457f5585c648e7f",
      "parents": [
        "386545186e5a31a42fc68c82d0e36f8407bf4739"
      ],
      "author": {
        "name": "ILYA Khlopotov",
        "email": "iilyak@ca.ibm.com",
        "time": "Wed May 18 16:49:35 2016 -0700"
      },
      "committer": {
        "name": "ILYA Khlopotov",
        "email": "iilyak@ca.ibm.com",
        "time": "Wed May 18 16:49:35 2016 -0700"
      },
      "message": "Fix type spec for range field in #shard{}\n\nAdd \u0027_\u0027 as a valid value for range field to be able to remove complains\nwhen we create ets match spec in mem3_shards:for_shard_name.\n"
    },
    {
      "commit": "386545186e5a31a42fc68c82d0e36f8407bf4739",
      "tree": "805597a5f2fbe05f241e6c180635fa3c6175c31d",
      "parents": [
        "861427999a45f34040f13525bd7b2db75c863b26",
        "94ebe26b12374552bcd6b4b7b493bf66c8053d22"
      ],
      "author": {
        "name": "ILYA Khlopotov",
        "email": "iilyak@ca.ibm.com",
        "time": "Wed May 18 07:51:51 2016 -0700"
      },
      "committer": {
        "name": "ILYA Khlopotov",
        "email": "iilyak@ca.ibm.com",
        "time": "Wed May 18 07:51:51 2016 -0700"
      },
      "message": "Merge remote branch \u0027cloudant:43260-create-target-shard-if-missing\u0027\n\nThis closes #21\n\nSigned-off-by: ILYA Khlopotov \u003ciilyak@ca.ibm.com\u003e\n"
    },
    {
      "commit": "94ebe26b12374552bcd6b4b7b493bf66c8053d22",
      "tree": "805597a5f2fbe05f241e6c180635fa3c6175c31d",
      "parents": [
        "861427999a45f34040f13525bd7b2db75c863b26"
      ],
      "author": {
        "name": "Paul J. Davis",
        "email": "paul.joseph.davis@gmail.com",
        "time": "Thu Jan 08 13:08:03 2015 -0600"
      },
      "committer": {
        "name": "ILYA Khlopotov",
        "email": "iilyak@ca.ibm.com",
        "time": "Wed May 18 07:50:46 2016 -0700"
      },
      "message": "Make sure mem3_rep autocreates target shards\n\nThe change to our fancier history entries introduced a regression that\ninternal replication wouldn\u0027t automatically create the target shards.\nThis fixes the issue by adding a get_or_create_db/2 in mem3_rep and\nswitches the use of couch_db:open_int/2 to that function.\n"
    },
    {
      "commit": "861427999a45f34040f13525bd7b2db75c863b26",
      "tree": "57e134f3fe973e3a8f6515fa857044f9acc26347",
      "parents": [
        "0b70afb7cc11f39e894a37211349e4444711facb"
      ],
      "author": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Tue May 10 21:02:53 2016 +0100"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Tue May 10 21:20:19 2016 +0100"
      },
      "message": "Pass ADMIN_CTX when opening dbs\n\nCOUCHDB-3016\n"
    },
    {
      "commit": "0b70afb7cc11f39e894a37211349e4444711facb",
      "tree": "50229299d50d708ffc68ec78e9086734ca8f7571",
      "parents": [
        "130efcd6b0b6f9fa6403e131586dfbf003643074"
      ],
      "author": {
        "name": "Benjamin Anderson",
        "email": "b@banjiewen.net",
        "time": "Sat Apr 09 23:21:58 2016 -0700"
      },
      "committer": {
        "name": "Benjamin Anderson",
        "email": "b@banjiewen.net",
        "time": "Mon May 09 14:20:56 2016 -0700"
      },
      "message": "Add read_concurrency option to mem3_shards table\n\nThis table sees a great deal of activity from various subsystems -\nturning on read_concurrency should be a win.\n\nCOUCHDB-2984\n"
    },
    {
      "commit": "130efcd6b0b6f9fa6403e131586dfbf003643074",
      "tree": "5382283ccd295f9b6ad9db82a193dd542a6dc16c",
      "parents": [
        "d5e0a4a19de99b2c6a91c9de8a1bc120664e36d5"
      ],
      "author": {
        "name": "Benjamin Anderson",
        "email": "b@banjiewen.net",
        "time": "Sat Apr 09 23:08:39 2016 -0700"
      },
      "committer": {
        "name": "Benjamin Anderson",
        "email": "b@banjiewen.net",
        "time": "Mon May 09 14:20:56 2016 -0700"
      },
      "message": "Use ets:select/2 to retrieve shards by name\n\nThe result of mem3_shards:for_db/1 on databases with high q values can\nbe very large, resulting in suboptimal performance for high-volume\ncallers.\n\nmem3_sync_event_listener is only interested in a small subset of the\nresult of mem3_shards:for_db/1; moving this filter in to an ets:select/2\ncall improves performance significantly.\n\nCOUCHDB-2984\n"
    },
    {
      "commit": "d5e0a4a19de99b2c6a91c9de8a1bc120664e36d5",
      "tree": "e4c8537f682e7f5acd253ad9a61ea623a9a7e091",
      "parents": [
        "d3ce2273c0c1eba5b4107e7bb0a83aaa1736cc6a"
      ],
      "author": {
        "name": "Benjamin Anderson",
        "email": "b@banjiewen.net",
        "time": "Sat Apr 09 22:44:58 2016 -0700"
      },
      "committer": {
        "name": "Benjamin Anderson",
        "email": "b@banjiewen.net",
        "time": "Mon May 09 14:20:56 2016 -0700"
      },
      "message": "Reduce frequency of mem3_sync:push/2 calls\n\nIn high-throughput scenarios on databases with large q values the\nmem3_sync event listener becomes overloaded with messages due to the\npoor performance of the shard selection logic.\n\nIt\u0027s not strictly necessary to sync on every update, but we do need to\nbe careful not to lose updates by keeping history too naively. This\npatch adds a configurable delay and push frequencyto reduce pressure on\nthe mem3_sync event listener.\n\nCOUCHDB-2984\n"
    },
    {
      "commit": "d3ce2273c0c1eba5b4107e7bb0a83aaa1736cc6a",
      "tree": "0701b08ba88543dde4057d5fd75cd186b1bfb12e",
      "parents": [
        "699308f510d335d05bfd0416ad5e893b68a7ec1d"
      ],
      "author": {
        "name": "Benjamin Anderson",
        "email": "b@banjiewen.net",
        "time": "Sat Apr 09 20:55:58 2016 -0700"
      },
      "committer": {
        "name": "Benjamin Anderson",
        "email": "b@banjiewen.net",
        "time": "Sat Apr 09 21:56:55 2016 -0700"
      },
      "message": "Refactor mem3_sync events to dedicated module\n\nCOUCHDB-2984\n"
    },
    {
      "commit": "699308f510d335d05bfd0416ad5e893b68a7ec1d",
      "tree": "3e094fb5df01fe1249817a06efb713d6f69f8db9",
      "parents": [
        "deed2f0eb15d634a643312e71e343c1e19e1b07e"
      ],
      "author": {
        "name": "Tony Sun",
        "email": "tony.sun@cloudant.com",
        "time": "Fri Feb 26 09:04:42 2016 -0800"
      },
      "committer": {
        "name": "Tony Sun",
        "email": "tony.sun@cloudant.com",
        "time": "Fri Feb 26 09:04:42 2016 -0800"
      },
      "message": "Revert \"Remove maintenace modes from ushards\"\n\nThis reverts commit deed2f0eb15d634a643312e71e343c1e19e1b07e.\n\nCOUCHDB-2953\n"
    },
    {
      "commit": "deed2f0eb15d634a643312e71e343c1e19e1b07e",
      "tree": "c13dcae9c0656739397d44884d338113d1274985",
      "parents": [
        "f20843714eee54c687739c94c6ac870e7a1e6a00"
      ],
      "author": {
        "name": "Tony Sun",
        "email": "tony.sun@cloudant.com",
        "time": "Wed Feb 24 12:38:25 2016 -0800"
      },
      "committer": {
        "name": "Tony Sun",
        "email": "tony.sun@cloudant.com",
        "time": "Thu Feb 25 11:26:56 2016 -0800"
      },
      "message": "Remove maintenace modes from ushards\n\nMaintenance mode nodes were being served for ushards and this lead to\nnodedown errors. We now only serve non-maintenance mode nodes.\n\nCOUCHDB-2953\n"
    },
    {
      "commit": "f20843714eee54c687739c94c6ac870e7a1e6a00",
      "tree": "3e094fb5df01fe1249817a06efb713d6f69f8db9",
      "parents": [
        "80fd81b3350dc96918b460b3bfb646fddade80f2"
      ],
      "author": {
        "name": "Alexander Shorin",
        "email": "kxepal@apache.org",
        "time": "Tue Dec 01 17:25:05 2015 +0300"
      },
      "committer": {
        "name": "Alexander Shorin",
        "email": "kxepal@apache.org",
        "time": "Tue Dec 01 17:25:05 2015 +0300"
      },
      "message": "Don\u0027t start couch_log app if we don\u0027t use it\n\nThis makes no sense since we mock it, but causes unwanted troubles\nwith config startup dependency.\n"
    },
    {
      "commit": "80fd81b3350dc96918b460b3bfb646fddade80f2",
      "tree": "196159deea9bf5a72df3903106f17fd07c2c0e54",
      "parents": [
        "de5f32815d3a3136e43924e4723d7e3e0eb02c6e"
      ],
      "author": {
        "name": "Alexander Shorin",
        "email": "kxepal@apache.org",
        "time": "Mon Oct 12 20:31:00 2015 +0300"
      },
      "committer": {
        "name": "Alexander Shorin",
        "email": "kxepal@apache.org",
        "time": "Tue Oct 13 01:38:08 2015 +0300"
      },
      "message": "Return HTTP 405 for unsupported request method\n"
    },
    {
      "commit": "de5f32815d3a3136e43924e4723d7e3e0eb02c6e",
      "tree": "2734528026118b48594459ca51d16e41db04ef4f",
      "parents": [
        "62ac9b2655cc50a9260f37d25829ab7f3c86f251",
        "2b71bc9224d99eb6269386ea8426239a03dd53ba"
      ],
      "author": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Tue Oct 06 17:57:03 2015 +0100"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Tue Oct 06 17:57:03 2015 +0100"
      },
      "message": "Merge remote-tracking branch \u0027cloudant/fix-eunit-couch-log\u0027\n"
    },
    {
      "commit": "2b71bc9224d99eb6269386ea8426239a03dd53ba",
      "tree": "b5380c3052aaad1d732cc2b2f2c2edb76031463c",
      "parents": [
        "fb5f56c21a9d855c1eff2e1fdadadd940213bffe"
      ],
      "author": {
        "name": "Nick Vatamaniuc",
        "email": "vatamane@gmail.com",
        "time": "Tue Oct 06 10:55:19 2015 -0400"
      },
      "committer": {
        "name": "Nick Vatamaniuc",
        "email": "vatamane@gmail.com",
        "time": "Tue Oct 06 10:55:19 2015 -0400"
      },
      "message": "Fix EUnit tests.\n\n Need couch_log. In one case mock it becuase no other apps are started.\n\n In another use application:ensure_all_started() -- R16B02+ feature.\n"
    },
    {
      "commit": "62ac9b2655cc50a9260f37d25829ab7f3c86f251",
      "tree": "51b97523bfee29263b84d01f2ab4f6a1b9d52643",
      "parents": [
        "8b27392c176981a5000d216d5f1e3358c36b60b7"
      ],
      "author": {
        "name": "ILYA Khlopotov",
        "email": "iilyak@ca.ibm.com",
        "time": "Tue Sep 29 13:04:43 2015 -0700"
      },
      "committer": {
        "name": "ILYA Khlopotov",
        "email": "iilyak@ca.ibm.com",
        "time": "Tue Sep 29 13:04:43 2015 -0700"
      },
      "message": "Pass supervisor\u0027s children to couch_epi\n"
    },
    {
      "commit": "8b27392c176981a5000d216d5f1e3358c36b60b7",
      "tree": "e7e5c451a61b182f32098ffe2ef8302aa0dcf157",
      "parents": [
        "7f8ec0fe69543d370d3a3ad4a34ddb91ca2ea610"
      ],
      "author": {
        "name": "ILYA Khlopotov",
        "email": "iilyak@ca.ibm.com",
        "time": "Tue Sep 29 09:09:25 2015 -0700"
      },
      "committer": {
        "name": "ILYA Khlopotov",
        "email": "iilyak@ca.ibm.com",
        "time": "Tue Sep 29 09:09:25 2015 -0700"
      },
      "message": "Fix code formating\n"
    },
    {
      "commit": "7f8ec0fe69543d370d3a3ad4a34ddb91ca2ea610",
      "tree": "be3b11e4a9a12642febb3baf59335775cc505c1a",
      "parents": [
        "ae6fe1522c5b0bfd9d7a3fd61713976b1b8a6a8b"
      ],
      "author": {
        "name": "ILYA Khlopotov",
        "email": "iilyak@ca.ibm.com",
        "time": "Mon Sep 28 13:23:38 2015 -0700"
      },
      "committer": {
        "name": "ILYA Khlopotov",
        "email": "iilyak@ca.ibm.com",
        "time": "Mon Sep 28 13:23:38 2015 -0700"
      },
      "message": "Fix typo in behaviour name\n"
    },
    {
      "commit": "ae6fe1522c5b0bfd9d7a3fd61713976b1b8a6a8b",
      "tree": "a5d54c652bc331752b3cfed3462a6e379f5079b7",
      "parents": [
        "07c865611c5ff20dcbc17da126662471d0d6be57"
      ],
      "author": {
        "name": "ILYA Khlopotov",
        "email": "iilyak@ca.ibm.com",
        "time": "Mon Sep 28 10:28:45 2015 -0700"
      },
      "committer": {
        "name": "ILYA Khlopotov",
        "email": "iilyak@ca.ibm.com",
        "time": "Mon Sep 28 10:28:45 2015 -0700"
      },
      "message": "Update to new couch_epi API\n"
    },
    {
      "commit": "07c865611c5ff20dcbc17da126662471d0d6be57",
      "tree": "9682772a8952fa593fd353b8cb6928f3730f35fa",
      "parents": [
        "a8cf4dff133ecf4421eb585141f6fe347dbf9be2"
      ],
      "author": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Sep 23 19:24:12 2015 +0100"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Sep 23 19:24:12 2015 +0100"
      },
      "message": "Fix crypto deprecations\n\nCOUCHDB-2825\n"
    },
    {
      "commit": "a8cf4dff133ecf4421eb585141f6fe347dbf9be2",
      "tree": "0f17721c3f507488b09bd7d83de67d3bcc59bc78",
      "parents": [
        "fb5f56c21a9d855c1eff2e1fdadadd940213bffe"
      ],
      "author": {
        "name": "ILYA Khlopotov",
        "email": "iilyak@ca.ibm.com",
        "time": "Wed Jul 15 08:37:47 2015 -0700"
      },
      "committer": {
        "name": "ILYA Khlopotov",
        "email": "iilyak@ca.ibm.com",
        "time": "Fri Jul 17 10:23:34 2015 -0700"
      },
      "message": "Use dynamic http handlers\n\nWe use dynamic http handlers for:\n\n  - `_membership`\n  - `_shards`\n"
    },
    {
      "commit": "fb5f56c21a9d855c1eff2e1fdadadd940213bffe",
      "tree": "d4e5383bd521ddbabc5b5aaa6fb5e79606ee8122",
      "parents": [
        "f62d43836972b2317784c397e69082a0850d74f4"
      ],
      "author": {
        "name": "Robert Kowalski",
        "email": "rok@kowalski.gd",
        "time": "Mon Mar 16 23:26:09 2015 +0100"
      },
      "committer": {
        "name": "Robert Kowalski",
        "email": "rok@kowalski.gd",
        "time": "Mon Mar 16 23:26:09 2015 +0100"
      },
      "message": "reformat to 80 chars/line\n"
    },
    {
      "commit": "f62d43836972b2317784c397e69082a0850d74f4",
      "tree": "19ceae1e5afd4c96e0102ae0374db119651ed136",
      "parents": [
        "a9608cfdf52dff322c99670f3256168d01d22d56"
      ],
      "author": {
        "name": "Robert Kowalski",
        "email": "rok@kowalski.gd",
        "time": "Sun Mar 15 23:27:26 2015 +0100"
      },
      "committer": {
        "name": "Robert Kowalski",
        "email": "rok@kowalski.gd",
        "time": "Mon Mar 16 23:24:50 2015 +0100"
      },
      "message": "change readme for the couchdb project\n"
    },
    {
      "commit": "a9608cfdf52dff322c99670f3256168d01d22d56",
      "tree": "792360de64c8b8d26a7ad79edfa0f5736ba29ffa",
      "parents": [
        "ee36909f0e3064e02301637c5273c1cbd1eea786"
      ],
      "author": {
        "name": "Robert Kowalski",
        "email": "rok@kowalski.gd",
        "time": "Sun Mar 15 23:22:44 2015 +0100"
      },
      "committer": {
        "name": "Robert Kowalski",
        "email": "rok@kowalski.gd",
        "time": "Sun Mar 15 23:22:44 2015 +0100"
      },
      "message": "add license file\n"
    },
    {
      "commit": "ee36909f0e3064e02301637c5273c1cbd1eea786",
      "tree": "691307d09192d0bc115b422a47f3e6ef8cc7e437",
      "parents": [
        "7f59504f073e0e2b300acf6ec2f525f1a98bc3ae",
        "6e3254e83c30aeebb941136fe88a9264d455d62c"
      ],
      "author": {
        "name": "Alexander Shorin",
        "email": "kxepal@apache.org",
        "time": "Thu Feb 26 23:27:20 2015 +0300"
      },
      "committer": {
        "name": "Alexander Shorin",
        "email": "kxepal@apache.org",
        "time": "Thu Feb 26 23:27:20 2015 +0300"
      },
      "message": "Merge remote-tracking branch \u0027kxepal/rename-system-databases\u0027\n\nThis closes #6\n"
    },
    {
      "commit": "6e3254e83c30aeebb941136fe88a9264d455d62c",
      "tree": "691307d09192d0bc115b422a47f3e6ef8cc7e437",
      "parents": [
        "c685590243164e6812559ad1bf9d4517f46ab2cd"
      ],
      "author": {
        "name": "Alexander Shorin",
        "email": "kxepal@apache.org",
        "time": "Thu Feb 26 21:46:56 2015 +0300"
      },
      "committer": {
        "name": "Alexander Shorin",
        "email": "kxepal@apache.org",
        "time": "Thu Feb 26 21:56:51 2015 +0300"
      },
      "message": "Add underscore prefix for nodes and dbs database names\n\nThat\u0027s how we name system databases and there should be no exceptions.\n\nCOUCHDB-2619\n"
    },
    {
      "commit": "c685590243164e6812559ad1bf9d4517f46ab2cd",
      "tree": "b48ee515a328194ced84a2bc57e7bd2ed4084ea3",
      "parents": [
        "7f59504f073e0e2b300acf6ec2f525f1a98bc3ae"
      ],
      "author": {
        "name": "Alexander Shorin",
        "email": "kxepal@apache.org",
        "time": "Thu Feb 26 21:18:30 2015 +0300"
      },
      "committer": {
        "name": "Alexander Shorin",
        "email": "kxepal@apache.org",
        "time": "Thu Feb 26 21:56:45 2015 +0300"
      },
      "message": "Rename \"shard_db\" option to \"shards_db\" and \"node_db\" one to \"nodes_db\"\n\nCOUCHDB-2628\n"
    },
    {
      "commit": "7f59504f073e0e2b300acf6ec2f525f1a98bc3ae",
      "tree": "cfbb08e1ab97877dbe9af79f42b6c7a3f7795b5f",
      "parents": [
        "3f229b2789587babc8d14db9cf79ad534dac257d",
        "97d9581f47b0869d4a0f023e56bcfee9615e6761"
      ],
      "author": {
        "name": "Alexander Shorin",
        "email": "kxepal@apache.org",
        "time": "Wed Feb 04 18:43:18 2015 +0300"
      },
      "committer": {
        "name": "Alexander Shorin",
        "email": "kxepal@apache.org",
        "time": "Wed Feb 04 18:43:18 2015 +0300"
      },
      "message": "Merge remote-tracking branch \u0027iilyak/2561-make-config-API-consistent\u0027\n\nThis closes #5\n\nCOUCHDB-2561\n"
    },
    {
      "commit": "97d9581f47b0869d4a0f023e56bcfee9615e6761",
      "tree": "cfbb08e1ab97877dbe9af79f42b6c7a3f7795b5f",
      "parents": [
        "7a66ec197ccf3a4f2e1d071e662d35bf3a65d58f"
      ],
      "author": {
        "name": "ILYA Khlopotov",
        "email": "iilyak@ca.ibm.com",
        "time": "Fri Jan 30 11:21:35 2015 -0800"
      },
      "committer": {
        "name": "ILYA Khlopotov",
        "email": "iilyak@ca.ibm.com",
        "time": "Wed Feb 04 06:12:41 2015 -0800"
      },
      "message": "Don\u0027t restart event handler on termination\n\nCOUCHDB-2561\n"
    },
    {
      "commit": "7a66ec197ccf3a4f2e1d071e662d35bf3a65d58f",
      "tree": "3d2a3efa7d37b2892fe1ee6902735338e71fb432",
      "parents": [
        "3f229b2789587babc8d14db9cf79ad534dac257d"
      ],
      "author": {
        "name": "ILYA Khlopotov",
        "email": "iilyak@ca.ibm.com",
        "time": "Thu Jan 29 13:55:48 2015 -0800"
      },
      "committer": {
        "name": "ILYA Khlopotov",
        "email": "iilyak@ca.ibm.com",
        "time": "Wed Feb 04 06:12:41 2015 -0800"
      },
      "message": "Update config_listener behaviuor\n\nCOUCHDB-2561\n"
    },
    {
      "commit": "3f229b2789587babc8d14db9cf79ad534dac257d",
      "tree": "b94d694498cd1f9aeb48e9adc8ac9121f3588bd7",
      "parents": [
        "04345bd03686e437bbe6d5840e8669518e1762ca"
      ],
      "author": {
        "name": "Alexander Shorin",
        "email": "kxepal@apache.org",
        "time": "Mon Jan 26 07:29:37 2015 +0300"
      },
      "committer": {
        "name": "Alexander Shorin",
        "email": "kxepal@apache.org",
        "time": "Mon Jan 26 07:29:37 2015 +0300"
      },
      "message": "Use ADMIN_CTX macro from couch_db.hrl\n"
    },
    {
      "commit": "04345bd03686e437bbe6d5840e8669518e1762ca",
      "tree": "b1ce26808046a7520b34df506f03acd023b87560",
      "parents": [
        "37a57d3492c4147ab67db2ea6047c4f98fcc902e"
      ],
      "author": {
        "name": "Benjamin Bastian",
        "email": "benjamin.bastian@gmail.com",
        "time": "Fri Aug 22 18:39:43 2014 +0700"
      },
      "committer": {
        "name": "Benjamin Bastian",
        "email": "benjamin.bastian@gmail.com",
        "time": "Tue Oct 14 16:13:01 2014 -0700"
      },
      "message": "Update mem3 for new changes API\n"
    },
    {
      "commit": "37a57d3492c4147ab67db2ea6047c4f98fcc902e",
      "tree": "38b0629756d2707657bd1f9b662d09d85fa016b1",
      "parents": [
        "d92e4c46351a9b3eb8fc649615e21dfd8e121b14"
      ],
      "author": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Sep 24 21:12:36 2014 +0100"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Sep 24 21:12:36 2014 +0100"
      },
      "message": "Delete mem3_rebalance for now, currently useless\n"
    },
    {
      "commit": "d92e4c46351a9b3eb8fc649615e21dfd8e121b14",
      "tree": "5fcce94285c7c838003e95c88cfe4eef14f6cf69",
      "parents": [
        "be490465c1232bffe291d725d280bff003b584dc"
      ],
      "author": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Tue Sep 16 00:19:52 2014 +0100"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Tue Sep 16 00:19:52 2014 +0100"
      },
      "message": "Add and export n/2\n"
    },
    {
      "commit": "be490465c1232bffe291d725d280bff003b584dc",
      "tree": "8fcc681b3089ae467a3172f8cdb0d35491aa7944",
      "parents": [
        "148093f3cf4962e80f56c1b5d1e1859c7dd768a8"
      ],
      "author": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Fri Aug 29 19:12:54 2014 +0100"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Fri Aug 29 19:13:37 2014 +0100"
      },
      "message": "fix stats paths\n"
    },
    {
      "commit": "148093f3cf4962e80f56c1b5d1e1859c7dd768a8",
      "tree": "28595f3447184e47e77f203d7823d940e2482f7a",
      "parents": [
        "64c0c7475ccf2ea9b4f87b6d287850d7b230c089"
      ],
      "author": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Fri Aug 29 17:23:07 2014 +0100"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Fri Aug 29 17:23:07 2014 +0100"
      },
      "message": "open dbs, nodes as sys dbs\n"
    },
    {
      "commit": "64c0c7475ccf2ea9b4f87b6d287850d7b230c089",
      "tree": "97be62dca4bc55b75b1346438da5f435dede64c1",
      "parents": [
        "5668712fab6f55ad3edac7a86b30b90d8393433e"
      ],
      "author": {
        "name": "Paul J. Davis",
        "email": "paul.joseph.davis@gmail.com",
        "time": "Thu Aug 21 01:29:28 2014 -0500"
      },
      "committer": {
        "name": "Paul J. Davis",
        "email": "paul.joseph.davis@gmail.com",
        "time": "Thu Aug 21 01:29:28 2014 -0500"
      },
      "message": "Update to use couch_stats\n"
    },
    {
      "commit": "5668712fab6f55ad3edac7a86b30b90d8393433e",
      "tree": "0cfeb8346a99fceb081d7dd5736c154ecccd0142",
      "parents": [
        "b3ddfca9ddf12061cf9202026da3ede33d78ce07"
      ],
      "author": {
        "name": "Paul J. Davis",
        "email": "paul.joseph.davis@gmail.com",
        "time": "Sun Aug 17 16:18:30 2014 -0500"
      },
      "committer": {
        "name": "Paul J. Davis",
        "email": "paul.joseph.davis@gmail.com",
        "time": "Sun Aug 17 16:18:30 2014 -0500"
      },
      "message": "Replace twig with couch_log\n"
    },
    {
      "commit": "b3ddfca9ddf12061cf9202026da3ede33d78ce07",
      "tree": "cc23bdf4eb38c026c0c60a6d9a5d3b77bba17c39",
      "parents": [
        "ff02b9a1f29da9ab7dc1e3185d73ea16d59d744e"
      ],
      "author": {
        "name": "Paul J. Davis",
        "email": "paul.joseph.davis@gmail.com",
        "time": "Sun Aug 17 13:54:51 2014 -0500"
      },
      "committer": {
        "name": "Paul J. Davis",
        "email": "paul.joseph.davis@gmail.com",
        "time": "Sun Aug 17 13:54:51 2014 -0500"
      },
      "message": "Update mem3_rebalance to work with couch_mrview\n"
    },
    {
      "commit": "ff02b9a1f29da9ab7dc1e3185d73ea16d59d744e",
      "tree": "5de368051822068c6f4d418607c466f7d586fa2b",
      "parents": [
        "282e5057afe90e53ec36f5a789a7e26cbd76863b"
      ],
      "author": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Mon Jun 16 13:04:36 2014 +0100"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Jul 23 18:52:09 2014 +0100"
      },
      "message": "Remove mem3_util:owner\n"
    },
    {
      "commit": "282e5057afe90e53ec36f5a789a7e26cbd76863b",
      "tree": "45c479cf0f50ab40df547aed36a9b913e123448e",
      "parents": [
        "7044f6c543ac6bbdbe0f4bb3f9b7a5d2ec0f206a"
      ],
      "author": {
        "name": "Russell Branca",
        "email": "chewbranca@gmail.com",
        "time": "Tue Apr 29 16:36:06 2014 -0700"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Jul 23 18:52:00 2014 +0100"
      },
      "message": "Get the shard suffix for a given database\n\nThis grabs the shards for the given database name, and then pulls out\nthe first shard and extracts out the suffix. mem3:shards is ets\nbacked, so in the general case this should be fast.\n\nBugzId: 29571\n"
    },
    {
      "commit": "7044f6c543ac6bbdbe0f4bb3f9b7a5d2ec0f206a",
      "tree": "eb40a83db2b65994c428ebe7c3621b90ae3cd9c0",
      "parents": [
        "866520183220a90f29c74319c7bc548fc9f39d48"
      ],
      "author": {
        "name": "Russell Branca",
        "email": "chewbranca@gmail.com",
        "time": "Tue Apr 29 15:56:59 2014 -0700"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Jul 23 18:51:52 2014 +0100"
      },
      "message": "Allow mem3_shards:local to take a list or binary\n\nBugzId: 29571\n"
    },
    {
      "commit": "866520183220a90f29c74319c7bc548fc9f39d48",
      "tree": "c5e20da6b03d90882f957023f01bdb83fce1c587",
      "parents": [
        "fd3c7b59f2f79519b8a1f04b6931adde47aaa659"
      ],
      "author": {
        "name": "Adam Kocoloski",
        "email": "adam@cloudant.com",
        "time": "Tue Feb 04 15:44:14 2014 -0500"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Jul 23 18:51:40 2014 +0100"
      },
      "message": "Fast forward internal repl. between file copies\n\nIn the case where two files have the same UUID we can analyze epoch\ninformation to determine the safe start sequence.\n\nBugzID: 27753\n"
    },
    {
      "commit": "fd3c7b59f2f79519b8a1f04b6931adde47aaa659",
      "tree": "14d95177fee410460649e592d0d7358f57f806d8",
      "parents": [
        "e64dd0281f1d9b9b22511b3625c1fb1f97a42042"
      ],
      "author": {
        "name": "Mike Wallace",
        "email": "mikewallace1979@googlemail.com",
        "time": "Fri Dec 20 14:15:43 2013 +0000"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Jul 23 18:51:29 2014 +0100"
      },
      "message": "Avoid decom:true nodes when fixing zoning\n\nThis patch prevents mem3_rebalance:fix_zoning from suggesting moves\nonto nodes that are flagged with \"decom\":true.\n\nBugzID: 26362\n"
    },
    {
      "commit": "e64dd0281f1d9b9b22511b3625c1fb1f97a42042",
      "tree": "1f9f5732f0e6b5047967302532eaccf23174ec18",
      "parents": [
        "e147621ce9b4703228fc548280503a64eb65750b"
      ],
      "author": {
        "name": "Paul J. Davis",
        "email": "paul.joseph.davis@gmail.com",
        "time": "Mon Dec 09 14:04:39 2013 -0600"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Jul 23 18:51:10 2014 +0100"
      },
      "message": "Refactor mem3_rpc:add_checkpoint/2\n\nThis is based on Adam Kocoloski\u0027s original add_checkpoint/2 but uses a\nbody recursive function to avoid the final reverse/filter steps.\n\nBugzId: 21973\n"
    },
    {
      "commit": "e147621ce9b4703228fc548280503a64eb65750b",
      "tree": "22843d8d33f0f413676e629c1f3b9f7651c2bd85",
      "parents": [
        "c63fc057078544290825172790b3c5c871f75037"
      ],
      "author": {
        "name": "Adam Kocoloski",
        "email": "adam@cloudant.com",
        "time": "Thu Oct 31 12:23:49 2013 -0400"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Jul 23 18:51:01 2014 +0100"
      },
      "message": "Write plan to /tmp/rebalance_plan.txt\n\nWas a request by @mattwhite to help with automation.  I was fairly\nsloppy in the implementation here, could leave this off and do a better\njob next time.\n"
    },
    {
      "commit": "c63fc057078544290825172790b3c5c871f75037",
      "tree": "df1556eb787b1ffb53eed9ce1141f7d42d82c678",
      "parents": [
        "bf07a7c2987fe3dea2088f25be373f05135e3f8a"
      ],
      "author": {
        "name": "Paul J. Davis",
        "email": "paul.joseph.davis@gmail.com",
        "time": "Fri Dec 06 13:52:28 2013 -0600"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Jul 23 18:50:53 2014 +0100"
      },
      "message": "Allow target_uuid prefixes in find_source_seq\n\nSince sequence values only contain UUID prefixes so we need to account\nfor that when locating the replication checkpoints.\n\nBugId: 21973\n"
    },
    {
      "commit": "bf07a7c2987fe3dea2088f25be373f05135e3f8a",
      "tree": "a00b2a1a9f37979d1250afacadeccbbd5db0c3a1",
      "parents": [
        "36a1e63ad120dc1c3d1382119395aee42b555100"
      ],
      "author": {
        "name": "Paul J. Davis",
        "email": "paul.joseph.davis@gmail.com",
        "time": "Fri Dec 06 12:08:07 2013 -0600"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Jul 23 18:50:19 2014 +0100"
      },
      "message": "Include replication history on checkpoint docs\n\nThis changes how and what we store on internal replication checkpoint\ndocuments. The two major changes are that we are now identifying\ncheckpoint documents by the database UUIDs (instead of the node that\nhosted them) and we\u0027re storing a history of checkpoint information to\nallow us to be able to replace dead shards.\n\nThe history is a list of checkpoint entries stored with exponentially\ndecreasing granularity. This allows us to store ~30 checkpoints covering\nranges into the billions of update sequences which means we won\u0027t need\nto worry about truncations or other issues for the time being.\n\nThere\u0027s also a new mem3_rep:find_source_seq/4 helper function that will\nfind a local update_seq replacement provided information for a remote\nshard copy. This logic is a bit subtle and should be reused rather than\nreimplemented.\n\nBugzId: 21973\n"
    },
    {
      "commit": "36a1e63ad120dc1c3d1382119395aee42b555100",
      "tree": "a9849ced2be34cc985180d3fe8a890548ac55748",
      "parents": [
        "fcbc821b4f9cd3fa66124860ebce921a8fe428f0"
      ],
      "author": {
        "name": "Paul J. Davis",
        "email": "paul.joseph.davis@gmail.com",
        "time": "Fri Dec 06 11:59:45 2013 -0600"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Jul 23 18:46:27 2014 +0100"
      },
      "message": "Inline open_doc_revs into open_docs\n\nThis function was trivial and never reused. It was more confusing to\nhave it as a separate function rather than just inlining into where it\u0027s\nused.\n"
    },
    {
      "commit": "fcbc821b4f9cd3fa66124860ebce921a8fe428f0",
      "tree": "40f5f6842d37f329f67c6f7bd9a375c6e30ca073",
      "parents": [
        "ade6ab16709146f3196505e24067e5151d142148"
      ],
      "author": {
        "name": "Paul J. Davis",
        "email": "paul.joseph.davis@gmail.com",
        "time": "Fri Dec 06 11:55:47 2013 -0600"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Jul 23 18:46:27 2014 +0100"
      },
      "message": "Add a new mem3_rpc module for replication RPCs\n\nThis is intended to make the local/remote code execution contexts a lot\nmore clear.\n"
    },
    {
      "commit": "ade6ab16709146f3196505e24067e5151d142148",
      "tree": "5139c8d13f9cfa3411afbb1e5c74dee047bde1d6",
      "parents": [
        "27e315be18d1dc0584a08a5baac06370cfeca912"
      ],
      "author": {
        "name": "Paul J. Davis",
        "email": "paul.joseph.davis@gmail.com",
        "time": "Fri Dec 06 11:42:49 2013 -0600"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Jul 23 18:46:27 2014 +0100"
      },
      "message": "Reorder functions into a logical progression\n\nThis just moves functions around in the mem3_rep module to give a better\nlogical progression. Purely stylistic but it should make things easier\nto read and find.\n"
    },
    {
      "commit": "27e315be18d1dc0584a08a5baac06370cfeca912",
      "tree": "3c2ac3460130e177fbd7ce0eebecfd49b1402f64",
      "parents": [
        "88a6491bba5c7a12f271e3feed6ff8f14b3a840f"
      ],
      "author": {
        "name": "Paul J. Davis",
        "email": "paul.joseph.davis@gmail.com",
        "time": "Fri Dec 06 11:36:47 2013 -0600"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Jul 23 18:46:27 2014 +0100"
      },
      "message": "Update whitespace and exports formatting\n"
    },
    {
      "commit": "88a6491bba5c7a12f271e3feed6ff8f14b3a840f",
      "tree": "7a0a87af0f4e2daacc2d72b8d99beb14411df1ed",
      "parents": [
        "781dc89ac7c67264d4985418e394b5b668228f60"
      ],
      "author": {
        "name": "Robert Newson",
        "email": "robert.newson@cloudant.com",
        "time": "Fri Nov 22 16:50:15 2013 +0000"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Jul 23 18:46:27 2014 +0100"
      },
      "message": "Remove old code_change, set module version to 1\n"
    },
    {
      "commit": "781dc89ac7c67264d4985418e394b5b668228f60",
      "tree": "a17fd81df2c9d84921ec7ec702667b69df5a264d",
      "parents": [
        "f9c06d629525873f2130caac81992a0cb42ab01f"
      ],
      "author": {
        "name": "Adam Kocoloski",
        "email": "adam@cloudant.com",
        "time": "Wed Oct 30 17:43:40 2013 -0400"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Jul 23 18:46:27 2014 +0100"
      },
      "message": "Allow for rebalancing \"special\" DBs\n\nFor example, _replicator or _users.\n\nBugzID: 24612\n"
    },
    {
      "commit": "f9c06d629525873f2130caac81992a0cb42ab01f",
      "tree": "c6654fc7943df1e7e523c0ca1e79621beb94eb31",
      "parents": [
        "a6ca5c6fa36f8b49bf7785a932b30aef8693b286"
      ],
      "author": {
        "name": "Adam Kocoloski",
        "email": "adam@cloudant.com",
        "time": "Wed Oct 30 17:40:20 2013 -0400"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Jul 23 18:46:27 2014 +0100"
      },
      "message": "Suggest moves from all donor nodes in parallel\n\nPreviously the generator would suggest all moves from the first node\nbefore moving onto the second one.  In the case where the quantum of\njobs is much smaller than the number of moves per node this results in\nthe other donors being neglected for long periods.\n\nBugzID: 24612\n"
    },
    {
      "commit": "a6ca5c6fa36f8b49bf7785a932b30aef8693b286",
      "tree": "6868cdeb94276fae221f741a58dc794a802dbd91",
      "parents": [
        "5c3c9c93ec19dfa50530f79dc6bb743bcb26ce81"
      ],
      "author": {
        "name": "Adam Kocoloski",
        "email": "adam@cloudant.com",
        "time": "Wed Oct 30 14:17:03 2013 -0400"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Jul 23 18:46:27 2014 +0100"
      },
      "message": "Allow targets to exceed floor, add another check\n\nSometimes we want to transfer a shard to a target even though it\u0027s\nalready at the floor.  We add another check to make sure we\u0027re not\nwasitng effort -- the difference in shard counts between the source and\nthe target must be 2 or greater.\n\nWe also refactor the global shard count code to avoid future atom /\nbinary problems.\n\nBugzID: 24466\n"
    },
    {
      "commit": "5c3c9c93ec19dfa50530f79dc6bb743bcb26ce81",
      "tree": "366da8d710f9c54fb457b9f275d9699cddb7a1e9",
      "parents": [
        "5ec7d0440ea9b4c63e7b35e365380109a108b0c8"
      ],
      "author": {
        "name": "Adam Kocoloski",
        "email": "adam@cloudant.com",
        "time": "Wed Oct 30 13:10:42 2013 -0400"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Jul 23 18:46:27 2014 +0100"
      },
      "message": "Refactor global candidate selection\n\nThe old approach was getting unwieldy, hopefully this makes the tests\nmore explicit.\n\nBugzID: 24466\n"
    },
    {
      "commit": "5ec7d0440ea9b4c63e7b35e365380109a108b0c8",
      "tree": "e6bd71edcdf32da70365f64dc0f6f435a2616eee",
      "parents": [
        "51838ca25bd44ca287676e98d2c907205300eb58"
      ],
      "author": {
        "name": "Adam Kocoloski",
        "email": "adam@cloudant.com",
        "time": "Wed Oct 30 11:53:22 2013 -0400"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Jul 23 18:46:27 2014 +0100"
      },
      "message": "Stop donating once the target level is achieved\n\nAlso switched to a record accumulator for clarity.\n\nBugzID: 24466\n"
    },
    {
      "commit": "51838ca25bd44ca287676e98d2c907205300eb58",
      "tree": "48833db0dddfa5df388a9b4f9640fd546ba167a8",
      "parents": [
        "0b0a7e7935d3e43f378908157a05ac2c74c7a5f5"
      ],
      "author": {
        "name": "Adam Kocoloski",
        "email": "adam@cloudant.com",
        "time": "Wed Oct 30 11:05:41 2013 -0400"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Jul 23 18:46:26 2014 +0100"
      },
      "message": "Fix two bugs in the global balancing phase\n\n* Nodes with 0 shards were being ignored because wrong datatype.\n* The limit was being ignored because max not min.\n\nBugzID: 24680\n"
    },
    {
      "commit": "0b0a7e7935d3e43f378908157a05ac2c74c7a5f5",
      "tree": "83e51cde691da12a63eb0af8ce3e3b887d525b49",
      "parents": [
        "45b040b4c6bb554a4ee496735ec6701c6b5f7c42"
      ],
      "author": {
        "name": "Adam Kocoloski",
        "email": "adam@cloudant.com",
        "time": "Wed Oct 30 10:00:08 2013 -0400"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Jul 23 18:46:26 2014 +0100"
      },
      "message": "Allow skip straight to global phase\n\nWhen rebalancing a DB-per-user cluster with small Q values its typical\nthat\n\na) the local phase takes a loooong time, and\nb) the local phase doesn\u0027t suggest any moves\n\nWhile the local phase should still run at least once, we\u0027ll expose a\nflag to skip straight to the global phase since we\u0027ll need to run the\nplan generator many many times and we can\u0027t afford to wait.\n\nBugzID: 24680\n"
    },
    {
      "commit": "45b040b4c6bb554a4ee496735ec6701c6b5f7c42",
      "tree": "8bc9737f982840da1094672771a468af3f3b9cf2",
      "parents": [
        "d7a4f26d4e8aa56a2a38ebfbdd46f13efde27a22"
      ],
      "author": {
        "name": "Adam Kocoloski",
        "email": "adam@cloudant.com",
        "time": "Wed Oct 23 10:08:51 2013 -0400"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Jul 23 18:46:26 2014 +0100"
      },
      "message": "Refuse to place shards on decom:true nodes\n\nBugzID: 24420\n"
    },
    {
      "commit": "d7a4f26d4e8aa56a2a38ebfbdd46f13efde27a22",
      "tree": "d437179b2bcb66fd321ccb7e7f9de61f6b93f63f",
      "parents": [
        "19c3ee2cd9ea4941505db7f54fbf257e740586ae"
      ],
      "author": {
        "name": "Adam Kocoloski",
        "email": "adam@cloudant.com",
        "time": "Wed Oct 23 10:02:33 2013 -0400"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Jul 23 18:46:26 2014 +0100"
      },
      "message": "Rely on decom:true attribute to filter decom nodes\n\nBugzID: 24420\n"
    },
    {
      "commit": "19c3ee2cd9ea4941505db7f54fbf257e740586ae",
      "tree": "703f6ec20035288fb267cac40bf6843ac651ef47",
      "parents": [
        "aef58662a13dae7f9c8a6aec99beb32de3dd1f50"
      ],
      "author": {
        "name": "Adam Kocoloski",
        "email": "adam@cloudant.com",
        "time": "Tue Oct 22 15:29:00 2013 -0400"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Jul 23 18:46:26 2014 +0100"
      },
      "message": "Ensure that the owner of a doc is also a host\n\nBugzID: 24395\n"
    },
    {
      "commit": "aef58662a13dae7f9c8a6aec99beb32de3dd1f50",
      "tree": "7def85dc17c27a197043a6e657eaeb00d5675460",
      "parents": [
        "2f62e2e5586978bd39d59bad060d5168659e6dc5"
      ],
      "author": {
        "name": "Adam Kocoloski",
        "email": "adam@cloudant.com",
        "time": "Wed Sep 25 14:25:44 2013 -0400"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Jul 23 18:46:26 2014 +0100"
      },
      "message": "Rewrite rebalancing plan generator\n\nThis patch splits the functionality of the module out into three\nclasses or work:\n\n* Fixing zoning and replica level violations\n* Contracting a cluster\n* Rebalancing shards across a cluster\n\nThe implementations of the first two features are pretty similar - find\nthe shards that need to be moved, then choose an optimal home for each\nof them.  By default the contraction code will remove shards from nodes\nin the \"decom\" zone, and the rebalancing code will ignore that zone\nentirrely. An optimal home is a node that\n\na) is in the correct zone, and\nb) has the fewest # of shards for the DB among nodes in the zone, and\nc) has the fewest total # of shards among nodes satisfying a) and b)\n\nThe implementation of rebalancing is a bit more complicated.  The\nrebalancing algorithm looks roughly like this\n\nFor DB in all_dbs:\n    Ensure all nodes have at least (N*Q) div length(Nodes) shards\n    Ensure no node has more than (N*Q) div length(Nodes) + 1 shards\nFor node in nodes:\n    If node has more than TotalShards div length(Nodes) + 1 shards:\n        Donate shard to another node\n\nThe net result is that each database is balanced across the cluster and\nthe cluster as a whole is globally balanced.\n\nThe current version of the module prints out shard move and copy\noperations in a clou-friendly format via io:format.  It also returns a\nlist of {Op, #shard{}, node()} tuples representing the operations.\n\nThe rebalancer will stop after generating 1000 operations by default.\nThe limit can be customized by using the 1-arity versions of expand,\ncontract and fix_zoning, but note that the performance of the rebalancer\ndegrades as the number of pending operations increases.\n\nBugzID: 23690\nBugzID: 20770\n"
    },
    {
      "commit": "2f62e2e5586978bd39d59bad060d5168659e6dc5",
      "tree": "cc53c0b12982f0b563736ddd6020aab8d7382d85",
      "parents": [
        "a29e6b7556862f82ce416f93ac5cf847f36a276e"
      ],
      "author": {
        "name": "Paul J. Davis",
        "email": "paul.joseph.davis@gmail.com",
        "time": "Thu Sep 05 14:08:48 2013 -0500"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Jul 23 18:46:26 2014 +0100"
      },
      "message": "Fix latent single-shard range hack\n\nWe had an off-by-one error when we fake #shard{} records for node local\ndatabases. This fixes the issue. The bug was noticeable when attempting\nto pass these shards to `fabric_view:is_progress_possible/1`.\n\nBugzId: 22809\n"
    },
    {
      "commit": "a29e6b7556862f82ce416f93ac5cf847f36a276e",
      "tree": "fa20ec829e8af6fada0ce60dca2b8abe99500a3a",
      "parents": [
        "94fc76333f924a0f41aca9063521836cca68b24f"
      ],
      "author": {
        "name": "Adam Kocoloski",
        "email": "adam@cloudant.com",
        "time": "Mon Aug 19 09:43:08 2013 -0400"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Jul 23 18:46:26 2014 +0100"
      },
      "message": "Use a consistent commenting syntax\n"
    },
    {
      "commit": "94fc76333f924a0f41aca9063521836cca68b24f",
      "tree": "db144ca121ded85abfd366c681b8c546f05355fd",
      "parents": [
        "6d9983fce97f9395049061a9e051eaac4a95ffe0"
      ],
      "author": {
        "name": "Adam Kocoloski",
        "email": "adam@cloudant.com",
        "time": "Mon Aug 19 09:40:38 2013 -0400"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Jul 23 18:46:26 2014 +0100"
      },
      "message": "Address comments from PR\n"
    },
    {
      "commit": "6d9983fce97f9395049061a9e051eaac4a95ffe0",
      "tree": "8c4f00ae03962edb118dc0eb70f6fe01b646a9cb",
      "parents": [
        "720049ba273388e084fc1f2b7ab18e836595c063"
      ],
      "author": {
        "name": "Adam Kocoloski",
        "email": "adam@cloudant.com",
        "time": "Fri Aug 16 13:40:50 2013 -0400"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Jul 23 18:46:26 2014 +0100"
      },
      "message": "Ensure all shards are moved off non-target nodes\n\nBugzID: 20742\n"
    },
    {
      "commit": "720049ba273388e084fc1f2b7ab18e836595c063",
      "tree": "ced3db1b444ea68ce0ec9855179c34947e5398c6",
      "parents": [
        "4b6f001df3a5724d3d679dd1d8cc4af502a4108a"
      ],
      "author": {
        "name": "Robert Newson",
        "email": "robert.newson@cloudant.com",
        "time": "Wed Jul 31 11:14:30 2013 +0100"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Jul 23 18:46:26 2014 +0100"
      },
      "message": "Stabilize mem3_util:owner/2\n\nBugzID: 21413\n"
    },
    {
      "commit": "4b6f001df3a5724d3d679dd1d8cc4af502a4108a",
      "tree": "87766db4a70611dbc7e2cce386ee169fc76340f5",
      "parents": [
        "e30659b6fd5a788b17297f4312740d46ef63e204"
      ],
      "author": {
        "name": "Robert Newson",
        "email": "robert.newson@cloudant.com",
        "time": "Wed Jul 31 11:14:15 2013 +0100"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Jul 23 18:46:26 2014 +0100"
      },
      "message": "Move rotate_list to mem3_util\n"
    },
    {
      "commit": "e30659b6fd5a788b17297f4312740d46ef63e204",
      "tree": "f40bbaceb8de12dc4d5bdecaf98ee66f9b1e42f3",
      "parents": [
        "c9292bb3a204bd14ada2f28d5f7b3d7d96c88152"
      ],
      "author": {
        "name": "Adam Kocoloski",
        "email": "adam@cloudant.com",
        "time": "Tue Jul 02 14:30:09 2013 -0400"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Jul 23 18:46:25 2014 +0100"
      },
      "message": "Support balancing across a subset of nodes\n\nmem3_balance implicitly assumed the set of nodes over which the DB is\nhosted is expanding.  We need to make a couple of small changes in the\ncase of cluster contraction.\n\nBugzID: 20742\n"
    },
    {
      "commit": "c9292bb3a204bd14ada2f28d5f7b3d7d96c88152",
      "tree": "96268bc9401eae8f3916b71cf0f7f5968f0f32ed",
      "parents": [
        "1d50774d269f749aa893518eb40b787241a0fa8c"
      ],
      "author": {
        "name": "Robert Newson",
        "email": "robert.newson@cloudant.com",
        "time": "Thu Jun 27 19:19:24 2013 +0100"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Jul 23 18:46:25 2014 +0100"
      },
      "message": "Fix load_shards_from_disk/2\n\nload_shards_from_disk/2 did not expect #ordered_shards to be returned\nfrom load_shards_from_disk/1. Since it uses a list comprehension the\nmistake is silently squashed, resulting in an empty list.\n\nIn production this manifests are the occasional failure, where \u0027n\u0027 is\ncalculated as 0, causing quorum reads to fail. The very next call\nsucceeds as it reads the cached versions and correctly downcasts.\n\nBugzID: 20629\n"
    },
    {
      "commit": "1d50774d269f749aa893518eb40b787241a0fa8c",
      "tree": "b1c6a453e08d43fa393fd685251a6a4ad298e689",
      "parents": [
        "0efb85e2d0f96004758a637b5ba764e1fc0e07a5"
      ],
      "author": {
        "name": "Robert Newson",
        "email": "robert.newson@cloudant.com",
        "time": "Tue Jun 25 12:37:33 2013 +0100"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Jul 23 18:46:25 2014 +0100"
      },
      "message": "Preserve key and incorporate range into rotation key\n"
    },
    {
      "commit": "0efb85e2d0f96004758a637b5ba764e1fc0e07a5",
      "tree": "a5f41d7fefff3504e7ce7c379b5987790a2e9bbd",
      "parents": [
        "f2edc4181127c44f1aa06cbdfdb775a3bc19bd38"
      ],
      "author": {
        "name": "Robert Newson",
        "email": "robert.newson@cloudant.com",
        "time": "Tue Jun 25 12:36:59 2013 +0100"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Jul 23 18:46:25 2014 +0100"
      },
      "message": "we\u0027re not rotating by DbName any more\n"
    },
    {
      "commit": "f2edc4181127c44f1aa06cbdfdb775a3bc19bd38",
      "tree": "6b4b9bd85ed3610498367318f820e4b0145b80fe",
      "parents": [
        "5aa38c6f15eb08b98b53c00e398b2f486a825cd6"
      ],
      "author": {
        "name": "Robert Newson",
        "email": "robert.newson@cloudant.com",
        "time": "Tue Jun 25 12:20:59 2013 +0100"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Jul 23 18:46:25 2014 +0100"
      },
      "message": "refactor choose_ushards\n"
    },
    {
      "commit": "5aa38c6f15eb08b98b53c00e398b2f486a825cd6",
      "tree": "3854821de59b8eb337b24d90291081f8e64dcad3",
      "parents": [
        "d2171e9b4d7cfe78858a6139cdf74d79607fe3e6"
      ],
      "author": {
        "name": "Adam Kocoloski",
        "email": "adam@cloudant.com",
        "time": "Fri Jun 21 00:14:42 2013 -0400"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Jul 23 18:46:25 2014 +0100"
      },
      "message": "Zero out shard caches on upgrade\n\nThe mix of #shard and #ordered_shard records breaks ushards.  Different\nnodes can start returning different results.\n"
    },
    {
      "commit": "d2171e9b4d7cfe78858a6139cdf74d79607fe3e6",
      "tree": "731ead5897f25a02ec40331d13c08612be7c02b9",
      "parents": [
        "43cd763dcbda4889d65f0e0b0e2fea234e6be92c"
      ],
      "author": {
        "name": "Robert Newson",
        "email": "robert.newson@cloudant.com",
        "time": "Wed Apr 03 20:13:35 2013 +0100"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Jul 23 18:46:25 2014 +0100"
      },
      "message": "Add function to assist with rebalancing\n\nThis function takes either a database name or a list of shards and a\nlist of target nodes to balance the shards across. Every node with\nless than a fair share of shards will steal shards from the node with\nthe most shards as long as both shards are in the same zone.\n\nBugzID: 18638\n"
    },
    {
      "commit": "43cd763dcbda4889d65f0e0b0e2fea234e6be92c",
      "tree": "456b90ee7111ffbad0ebfc799cf14359ec63935d",
      "parents": [
        "7706134ec6618d272c6d0eb15104007173cd506a"
      ],
      "author": {
        "name": "Adam Kocoloski",
        "email": "adam@cloudant.com",
        "time": "Fri May 24 15:03:54 2013 -0400"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Jul 23 18:46:25 2014 +0100"
      },
      "message": "Use a private record for event listener state\n"
    },
    {
      "commit": "7706134ec6618d272c6d0eb15104007173cd506a",
      "tree": "944934b004e356d06ba2f73a58e2a8dfcddc850e",
      "parents": [
        "68ca9cdfb3c1e9631d2469b5038cec9356e56659"
      ],
      "author": {
        "name": "Adam Kocoloski",
        "email": "adam@cloudant.com",
        "time": "Fri May 24 15:00:32 2013 -0400"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Jul 23 18:46:25 2014 +0100"
      },
      "message": "Fix trivial typo\n"
    },
    {
      "commit": "68ca9cdfb3c1e9631d2469b5038cec9356e56659",
      "tree": "bed7838e6e1684d7c78e222b01efc3651d0b23a9",
      "parents": [
        "8f9f58f87678f589be884f42c7ec92762534583e"
      ],
      "author": {
        "name": "Adam Kocoloski",
        "email": "adam@cloudant.com",
        "time": "Thu May 23 10:32:58 2013 -0400"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Jul 23 18:46:25 2014 +0100"
      },
      "message": "Balance replication ownership across nodes\n\nThe previous algorithm was biased towards low-numbered nodes, and in the\ncase of a 3 node cluster would declare db1 to be the owner of all\nreplications.  We can do better just by leveraging the existing\nushards code.\n\nThere\u0027s a possibility to refactor this as a new ushards/2 function if\nthat\u0027s perceived as useful.\n\nBugzID: 19870\n"
    },
    {
      "commit": "8f9f58f87678f589be884f42c7ec92762534583e",
      "tree": "12c78c247b541260fe00a85d65bff7e65280ea5f",
      "parents": [
        "f9c22769ea089812e401554f06626f7d0d1dac4b"
      ],
      "author": {
        "name": "Paul J. Davis",
        "email": "paul.joseph.davis@gmail.com",
        "time": "Tue Apr 23 17:26:30 2013 -0500"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Jul 23 18:46:25 2014 +0100"
      },
      "message": "Update to use the new couch_event application\n"
    },
    {
      "commit": "f9c22769ea089812e401554f06626f7d0d1dac4b",
      "tree": "486a0e5cd95411dbaa3f4e81042a6cbe1e6bb573",
      "parents": [
        "a0d743062007113c5aa81526f4f1285c083b8daa"
      ],
      "author": {
        "name": "Robert Newson",
        "email": "robert.newson@cloudant.com",
        "time": "Tue Apr 23 22:54:48 2013 +0100"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Jul 23 18:46:19 2014 +0100"
      },
      "message": "Choose ushards according to persistent record\n\nThe order of nodes in the by_range section of \"dbs\" documents is now\npromoted to the principal order for ushards. Ushards still accounts\nfor Liveness, selecting the first live replica and still supports\nSpread by rotating this list using the CRC32 of the database name\n(since many databases will have the same layout).\n\nIf by_range and by_node are not symmetrical then by_node is used and\norder is undefined to match existing behavior.\n"
    },
    {
      "commit": "a0d743062007113c5aa81526f4f1285c083b8daa",
      "tree": "e19caeb9f4dc455ff9fb7c1699de5649174c4d38",
      "parents": [
        "a77e95f64cce417710897d9dee0c62d5169a44a3"
      ],
      "author": {
        "name": "Paul J. Davis",
        "email": "paul.joseph.davis@gmail.com",
        "time": "Tue Apr 16 17:12:38 2013 -0500"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Jul 23 18:12:19 2014 +0100"
      },
      "message": "If two shards differ we need to sync\n\nThere\u0027s no security if two shards return different answers but it gives\nus enough of a signal to know that we need to trigger a full on\nsynchronization.\n\nBugzId: 18955\n"
    },
    {
      "commit": "a77e95f64cce417710897d9dee0c62d5169a44a3",
      "tree": "d74db3a17ca8f0d4f192c806164b4fbe9d7123f3",
      "parents": [
        "d4e7748f096a2ff3bcbf8a00adc0f6bf805d4b7e"
      ],
      "author": {
        "name": "Russell Branca",
        "email": "chewbranca@gmail.com",
        "time": "Fri Apr 12 16:48:14 2013 -0400"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Jul 23 18:12:09 2014 +0100"
      },
      "message": "Moving shard maps _membership endpoint to _shards db handler\n"
    },
    {
      "commit": "d4e7748f096a2ff3bcbf8a00adc0f6bf805d4b7e",
      "tree": "f058f5d2dc0677d8fa4ea46edcee0dfb314d33f7",
      "parents": [
        "51e436f9f578f00cba6b8087c3266346a802f267"
      ],
      "author": {
        "name": "Russell Branca",
        "email": "chewbranca@gmail.com",
        "time": "Fri Apr 12 15:06:58 2013 -0400"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Jul 23 18:12:00 2014 +0100"
      },
      "message": "Add doc shard info endpoint\n"
    },
    {
      "commit": "51e436f9f578f00cba6b8087c3266346a802f267",
      "tree": "cee8d1187a1613ccf968d08f8fa1b9c460d912f9",
      "parents": [
        "7fa726f696fde998a075bf56818941bf65e2bedf"
      ],
      "author": {
        "name": "Russell Branca",
        "email": "chewbranca@gmail.com",
        "time": "Thu Apr 11 14:18:12 2013 -0400"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Jul 23 18:11:47 2014 +0100"
      },
      "message": "Fix _membership/$DBNAME api endpoint\n\nThis switches the JSON key to be a binary, as required by jiffy.\n\nAlso, remove extraneous \u003c\u003c\"parts\"\u003e\u003e path from the url.\n\nShow full shard range.\n"
    },
    {
      "commit": "7fa726f696fde998a075bf56818941bf65e2bedf",
      "tree": "153db8d6af0549bc99cf55bf4f4630ae30d0563f",
      "parents": [
        "9dbea0340b54c234a15ee259ae69dea29fafc927"
      ],
      "author": {
        "name": "Paul J. Davis",
        "email": "paul.joseph.davis@gmail.com",
        "time": "Mon Mar 18 22:57:46 2013 -0500"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Jul 23 18:11:38 2014 +0100"
      },
      "message": "Update to use new multi rexi_server protocol\n"
    },
    {
      "commit": "9dbea0340b54c234a15ee259ae69dea29fafc927",
      "tree": "3f9c5df39eab58fc350efd333e2899a9d0799a61",
      "parents": [
        "8d93ca625de918d15fcbd35869278d0f596b4558"
      ],
      "author": {
        "name": "Russell Branca",
        "email": "chewbranca@apache.org",
        "time": "Wed Jun 18 15:04:35 2014 -0700"
      },
      "committer": {
        "name": "Russell Branca",
        "email": "chewbranca@apache.org",
        "time": "Wed Jun 18 15:24:02 2014 -0700"
      },
      "message": "Handle the #doc_info case in changes_enumerator\n\nThis is to handle the special case where the user migrates a CouchDB\ndatabase to BigCouch and they have not yet compacted the\ndatabase. Once the database has been compacted, this #doc_info clause\nshould never be encountered.\n"
    },
    {
      "commit": "8d93ca625de918d15fcbd35869278d0f596b4558",
      "tree": "1b3a077fa731fb10e545a88d1499697eac051872",
      "parents": [
        "af8b04bd348ef3459ee0a7084becaae45d1fa9f2"
      ],
      "author": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Tue Jun 03 11:21:02 2014 +0100"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Tue Jun 03 11:21:02 2014 +0100"
      },
      "message": "Don\u0027t log when ensuring dbs exist\n"
    },
    {
      "commit": "af8b04bd348ef3459ee0a7084becaae45d1fa9f2",
      "tree": "dfb8850a426ab2cb6b1f60fae6d3da0af1cea74e",
      "parents": [
        "2c3b9cf45faf8f526f5865cb9eaab3380582d4b2"
      ],
      "author": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed May 07 14:48:25 2014 +0100"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed May 07 16:08:43 2014 +0100"
      },
      "message": "Add function to determine shard membership locally\n\nmem3:belongs/2 allows you to determine if a given doc id belongs to a\ngiven shard (whether a #shard{} record or just the filename of a\nshard) without looking up the shard map or making any remote\ncalls.\n"
    },
    {
      "commit": "2c3b9cf45faf8f526f5865cb9eaab3380582d4b2",
      "tree": "e02258581cc7c759d9beea3e684ab0228804dd9f",
      "parents": [
        "d42720ac72c764851f5e1dd3761396a11cb246ef"
      ],
      "author": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Feb 12 23:23:47 2014 +0000"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Wed Feb 12 23:23:47 2014 +0000"
      },
      "message": "Change API to function per level\n"
    },
    {
      "commit": "d42720ac72c764851f5e1dd3761396a11cb246ef",
      "tree": "386f7177fb2957a88244c93f6b5d90936e94c2d0",
      "parents": [
        "ce981e970cff6c0a4cbcafcd98090986f9fb28a6"
      ],
      "author": {
        "name": "Robert Newson",
        "email": "robert.newson@cloudant.com",
        "time": "Wed Feb 12 20:11:56 2014 +0000"
      },
      "committer": {
        "name": "Robert Newson",
        "email": "robert.newson@cloudant.com",
        "time": "Wed Feb 12 22:55:02 2014 +0000"
      },
      "message": "Switch to couch_log\n"
    },
    {
      "commit": "ce981e970cff6c0a4cbcafcd98090986f9fb28a6",
      "tree": "2ffb7bb6bb66731574f6ac20a09ffd96dec79dc6",
      "parents": [
        "4a7ed8ca1bdcf9475de3726d2cd69094da213b33"
      ],
      "author": {
        "name": "Paul J. Davis",
        "email": "paul.joseph.davis@gmail.com",
        "time": "Tue Feb 11 01:54:37 2014 -0600"
      },
      "committer": {
        "name": "Paul J. Davis",
        "email": "paul.joseph.davis@gmail.com",
        "time": "Tue Feb 11 01:54:37 2014 -0600"
      },
      "message": "Add license headers\n"
    },
    {
      "commit": "4a7ed8ca1bdcf9475de3726d2cd69094da213b33",
      "tree": "ebef411ed1928f00fdb9d2ff1936bc22f5bfaf53",
      "parents": [
        "eef6b84eaa3c6187e664d7121dfdf09285bee6a2"
      ],
      "author": {
        "name": "Robert Newson",
        "email": "rnewson@apache.org",
        "time": "Mon Dec 23 16:55:10 2013 +0000"
      },
      "committer": {
        "name": "Paul J. Davis",
        "email": "paul.joseph.davis@gmail.com",
        "time": "Fri Jan 17 13:53:28 2014 -0800"
      },
      "message": "Add ejson_body to all mem3 open_doc attempts that need it\n"
    }
  ],
  "next": "eef6b84eaa3c6187e664d7121dfdf09285bee6a2"
}
