)]}'
{
  "log": [
    {
      "commit": "33184d2edd2d39ef71c3ed883e8ff752c4a18213",
      "tree": "e36fabaaf467c58f4d9ea4685ef83eda664e8ede",
      "parents": [
        "107566880ec5e4c0c2ab65c0329a5ebd4f22bd19"
      ],
      "author": {
        "name": "Robert Iannucci",
        "email": "iannucci@google.com",
        "time": "Wed Nov 11 00:12:31 2015"
      },
      "committer": {
        "name": "Robert Iannucci",
        "email": "iannucci@google.com",
        "time": "Wed Nov 11 00:12:31 2015"
      },
      "message": "Fix race in item too.\n\nR\u003dvadimsh@chromium.org\nBUG\u003d\n\nReview URL: https://chromiumcodereview.appspot.com/1410743011 .\n"
    },
    {
      "commit": "107566880ec5e4c0c2ab65c0329a5ebd4f22bd19",
      "tree": "a98239e0f099b5b2f4805e0608707249fedddb9d",
      "parents": [
        "10bbae231193ace9d3c8969a194b425166b486e8"
      ],
      "author": {
        "name": "Robert Iannucci",
        "email": "iannucci@google.com",
        "time": "Tue Nov 10 20:10:40 2015"
      },
      "committer": {
        "name": "Robert Iannucci",
        "email": "iannucci@google.com",
        "time": "Tue Nov 10 20:10:40 2015"
      },
      "message": "Fix race in gkvlite introduced when removing `unsafe`\n\nThis is very much a giant hammer approach, but it doesn\u0027t seem too bad in terms\nof performance penalty. We can rip all these hacks out when we\u0027re only using\nmanaged VMs instead of classic GAE.\n\nR\u003dvadimsh@chromium.org\nBUG\u003d\n\nReview URL: https://chromiumcodereview.appspot.com/1415183010 .\n"
    },
    {
      "commit": "10bbae231193ace9d3c8969a194b425166b486e8",
      "tree": "f5096505243c0949e97b8f646f149427036b774f",
      "parents": [
        "cf7fa95b097418138e80474e217d865e2eb853ac"
      ],
      "author": {
        "name": "Robert Iannucci",
        "email": "iannucci@google.com",
        "time": "Tue Oct 20 23:54:37 2015"
      },
      "committer": {
        "name": "Robert Iannucci",
        "email": "iannucci@google.com",
        "time": "Tue Oct 20 23:54:52 2015"
      },
      "message": "Remove usage of unsafe from gkvlite.\n\nThis will allow it to be used on appengine.\n\nR\u003dvadimsh@chromium.org\nBUG\u003d\n\nReview URL: https://codereview.chromium.org/1409173004\n"
    },
    {
      "commit": "cf7fa95b097418138e80474e217d865e2eb853ac",
      "tree": "82fd1ade29fd1267690e13e6a2e5a73d047ffda1",
      "parents": [
        "d81e5667d9a36dae52774528c7b8a7f66fbc345c"
      ],
      "author": {
        "name": "Robert Iannucci",
        "email": "robbie@rail.com",
        "time": "Mon May 11 19:35:04 2015"
      },
      "committer": {
        "name": "Robert Iannucci",
        "email": "robbie@rail.com",
        "time": "Mon May 11 19:35:04 2015"
      },
      "message": "Make keys able to hold 4GB as well (though I only plan to use it for 2MB keys, max)\n"
    },
    {
      "commit": "d81e5667d9a36dae52774528c7b8a7f66fbc345c",
      "tree": "de1ac227935ba1e29a30561f412e54ac328a4b54",
      "parents": [
        "5b47ed6d7458f12bd18b0883b197f3e889ab9ad0"
      ],
      "author": {
        "name": "Robert Iannucci",
        "email": "robbie@rail.com",
        "time": "Mon May 11 19:33:22 2015"
      },
      "committer": {
        "name": "Robert Iannucci",
        "email": "robbie@rail.com",
        "time": "Mon May 11 19:33:22 2015"
      },
      "message": "fix imports\n"
    },
    {
      "commit": "5b47ed6d7458f12bd18b0883b197f3e889ab9ad0",
      "tree": "e1cdce2976fd1ba03b25905f81d29989c64d1078",
      "parents": [
        "4f02238d6e3cbfc2e8a8c71a4d5257e784818555"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Mon Nov 17 05:01:05 2014"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Mon Nov 17 05:01:10 2014"
      },
      "message": "Added some random permutation benchmark tests.\n"
    },
    {
      "commit": "4f02238d6e3cbfc2e8a8c71a4d5257e784818555",
      "tree": "0a69088f7d5e8c1770f05a7087b38f4b96e91607",
      "parents": [
        "b79e6837461a5e57fc9d97d3ba8e3cf8ef1019a5"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Thu Nov 13 18:26:26 2014"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Thu Nov 13 18:26:26 2014"
      },
      "message": "package comment\n"
    },
    {
      "commit": "b79e6837461a5e57fc9d97d3ba8e3cf8ef1019a5",
      "tree": "c5a21fa822b6f399777022ff188725d56b56036d",
      "parents": [
        "3d2d2100442e79e3ecd4bc55a53d40a38aa99507"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Thu Nov 13 18:13:27 2014"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Thu Nov 13 18:13:45 2014"
      },
      "message": "Added doc, build, coverage badges.\n"
    },
    {
      "commit": "3d2d2100442e79e3ecd4bc55a53d40a38aa99507",
      "tree": "395c91628ec14e3f51f5f53de134f4deb4bc2136",
      "parents": [
        "7470afc986957d095ff5a64ce7d5beb2943dfc7e",
        "d2f97bca606ae84783bb49329f56e07d95f7f166"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@northscale.com",
        "time": "Thu Sep 18 14:22:17 2014"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@northscale.com",
        "time": "Thu Sep 18 14:22:17 2014"
      },
      "message": "Merge pull request #3 from d2g/patch-1\n\nUpdate README.md example code from d2g."
    },
    {
      "commit": "7470afc986957d095ff5a64ce7d5beb2943dfc7e",
      "tree": "1552d997438485232e0a47b923b227802b18a969",
      "parents": [
        "ed22da1c2c138c1b13a0fa104d22ddc1c90f4600"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Fri Nov 15 17:43:50 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Fri Nov 15 17:43:50 2013"
      },
      "message": "Updated slab testing tool to use ItemNode free-list.\n"
    },
    {
      "commit": "ed22da1c2c138c1b13a0fa104d22ddc1c90f4600",
      "tree": "c474f71d4bbff9db196803db78f371cf8d240858",
      "parents": [
        "9549cb838c6fcafa71c9a44d8c7e23b37034842e"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Thu Nov 14 16:48:53 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Thu Nov 14 16:48:53 2013"
      },
      "message": "Added ItemAlloc() callback and renamed to ItemAddRef/DecRef().\n\nAdded ItemAlloc() callback so that the app can optionally put Items on\na free-list.\n\nRenamed ItemValAddRef() to ItemAddRef().\nRenamed ItemValDecRef() to ItemDecRef().\n"
    },
    {
      "commit": "9549cb838c6fcafa71c9a44d8c7e23b37034842e",
      "tree": "cacadb4c0e2ee302bac37a1647c597889159f110",
      "parents": [
        "9efbad29f754ef0b4bea8d7e8fd687360d28a724"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Thu Nov 14 06:08:17 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Thu Nov 14 06:08:17 2013"
      },
      "message": "Added --slabStats flag.\n"
    },
    {
      "commit": "9efbad29f754ef0b4bea8d7e8fd687360d28a724",
      "tree": "1c591ade79c24981f55d5191414651b3e38786ac",
      "parents": [
        "661dda9d449f152e21683bac93a1550361818015"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Tue Nov 12 06:52:08 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Tue Nov 12 06:52:08 2013"
      },
      "message": "Added more flags to slab test program.\n"
    },
    {
      "commit": "661dda9d449f152e21683bac93a1550361818015",
      "tree": "8221a5e6b9a649b02fc844e2b43eeac7677e096c",
      "parents": [
        "b48db06eafeb05cc5060fae25108827a32c92121"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Mon Nov 11 20:01:21 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Mon Nov 11 20:01:21 2013"
      },
      "message": "Typo with evicts param.\n"
    },
    {
      "commit": "b48db06eafeb05cc5060fae25108827a32c92121",
      "tree": "43bb2a129aeef58923cfaf4636323f9b3a7a1b9b",
      "parents": [
        "bc6bc7c10a101072cd08fbd3579ce6be16f6c6d0"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Mon Nov 11 19:45:59 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Mon Nov 11 19:59:45 2013"
      },
      "message": "Cmd-line test tool for slab allocator performance.\n\nRunning this way uses normal GC...\n\n    GOGCTRACE\u003d1 ./tools/slab/slab -useSlab\u003dfalse test.tmp\n\nRunning this way uses the slab allocator, and you should see much\nbetter performance...\n\n    GOGCTRACE\u003d1 ./tools/slab/slab -useSlab\u003dtrue test.tmp\n"
    },
    {
      "commit": "bc6bc7c10a101072cd08fbd3579ce6be16f6c6d0",
      "tree": "e73aae0694d3ca63a6eebdeff4cc651b68145010",
      "parents": [
        "d143f4a3985d95d7815f1f34512025d73b3eb209"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Mon Nov 11 06:10:43 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Mon Nov 11 06:14:24 2013"
      },
      "message": "Test different value sizes.\n"
    },
    {
      "commit": "d143f4a3985d95d7815f1f34512025d73b3eb209",
      "tree": "f3870ad090ebbfdb83299c1826ad171b6a0e90c4",
      "parents": [
        "32a7698b0425751fcbbf88c7ea7939920eb16191"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Mon Nov 11 05:32:12 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Mon Nov 11 05:32:15 2013"
      },
      "message": "Added itemLoc.NumBytes() to avoid extra val read\u0027s.\n\nWhen possible, itemLoc.NumBytes() favors simple math on the known\npersisted bytes length minus the itemLoc header length, allowing us to\navoid a disk read.\n"
    },
    {
      "commit": "32a7698b0425751fcbbf88c7ea7939920eb16191",
      "tree": "d587aa26998ccccf21d3879fed5c6130a3cd6316",
      "parents": [
        "2bd6484c77a334f61cbe6bfc7e4ff4a3dabb0304"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Mon Nov 11 05:19:33 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Mon Nov 11 05:19:33 2013"
      },
      "message": "Const itemLoc_hdrLength.\n"
    },
    {
      "commit": "2bd6484c77a334f61cbe6bfc7e4ff4a3dabb0304",
      "tree": "16396ab34deb797841067f2a0317acc9813829bc",
      "parents": [
        "aa0836f37512bf5d1970807e97edc81e853637ca"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Mon Nov 11 05:01:47 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Mon Nov 11 05:01:47 2013"
      },
      "message": "TestSlabStoreRandom().\n"
    },
    {
      "commit": "aa0836f37512bf5d1970807e97edc81e853637ca",
      "tree": "5bd05bb3bc003c97aed19d9f9d3b8382d0aaad61",
      "parents": [
        "2f14336541a1c53cfa8a09831c1c3682f0b1bab5"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Mon Nov 11 04:51:38 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Mon Nov 11 04:57:26 2013"
      },
      "message": "Sub-optimally re-read item so NumBytes() works.\n\nThe right fix is to remember the value length in each node instead of\nre-reading the entire item in order to get the right item.NumBytes().\n"
    },
    {
      "commit": "2f14336541a1c53cfa8a09831c1c3682f0b1bab5",
      "tree": "d4390c53ba94d50583afd6c0c133e2ab8eef25ae",
      "parents": [
        "0b34f9e77068911eea1142a490e88a3cfbe02aa4"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Mon Nov 11 03:26:10 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Mon Nov 11 03:26:10 2013"
      },
      "message": "Note that evictions should be serialized.\n"
    },
    {
      "commit": "0b34f9e77068911eea1142a490e88a3cfbe02aa4",
      "tree": "8faa6f7e0ac811a677905588c80b15885a1aa9ab",
      "parents": [
        "4da3a2e8bdc9977be4892b2a630098bceb86469c"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Mon Nov 11 02:54:36 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Mon Nov 11 02:54:48 2013"
      },
      "message": "Added tools/slab to test slab-based buffer mgmt.\n\nThese test cases validate that it is possible to integrate\ngithub.com/steveyen/go-slab with gkvlite.\n"
    },
    {
      "commit": "4da3a2e8bdc9977be4892b2a630098bceb86469c",
      "tree": "5f0f342ed2b20cfc60eb0b5fdc722843692dfe43",
      "parents": [
        "7ad67fdd3d6d67e596953d2802f6c22542360862"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Sun Nov 10 19:37:21 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Sun Nov 10 19:37:21 2013"
      },
      "message": "go fmt.\n"
    },
    {
      "commit": "7ad67fdd3d6d67e596953d2802f6c22542360862",
      "tree": "00d3695d384980e62b9ae57e495437f7c9c7c6c6",
      "parents": [
        "a68c97ed9db4759e693cb14914139bbab1083efa"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Sun Nov 10 19:34:03 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Sun Nov 10 19:34:03 2013"
      },
      "message": "README.md update.\n"
    },
    {
      "commit": "a68c97ed9db4759e693cb14914139bbab1083efa",
      "tree": "00fc0f1fb337599efb27117ffa875388127bdf91",
      "parents": [
        "b7952df5d233b49b8c3319394d44109f9df1546d"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Sun Nov 10 19:21:01 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Sun Nov 10 19:25:36 2013"
      },
      "message": "Snapshots are read-only.\n\nPreviously, with the simple GC-only based implementation,\nnon-persistent mutations were supported by snapshots.  However, as new\nfeatures like garbage-prevention and ItemValAddRef/DecRef() callbacks\nwere added, supporting mutatable snapshots became complex, so dropping\nthe mutable snapshots feature.\n"
    },
    {
      "commit": "b7952df5d233b49b8c3319394d44109f9df1546d",
      "tree": "ceb099e743fd802a32835f50cac9075847c89c64",
      "parents": [
        "a64ab746bfb54f2da7719dbc695c03d808633fef"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Sun Nov 10 06:39:13 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Sun Nov 10 06:39:13 2013"
      },
      "message": "Release the min item during CopyTo().\n"
    },
    {
      "commit": "a64ab746bfb54f2da7719dbc695c03d808633fef",
      "tree": "0b31434cffbc683335bd2fcd757709844bb803e4",
      "parents": [
        "e819ee0b33741d1d77759d8a2d591a88c2792284"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Sun Nov 10 06:37:01 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Sun Nov 10 06:37:01 2013"
      },
      "message": "Need to release min-item during CopyTo().\n"
    },
    {
      "commit": "e819ee0b33741d1d77759d8a2d591a88c2792284",
      "tree": "c6a6b6d681b70cb71b42bcf044f2391f6519a795",
      "parents": [
        "c00066f61dabc8529612b4dba90fa8d6895c2bed"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Sun Nov 10 05:43:41 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Sun Nov 10 06:27:36 2013"
      },
      "message": "TestEvictRefCountRandom().\n"
    },
    {
      "commit": "c00066f61dabc8529612b4dba90fa8d6895c2bed",
      "tree": "280ba3c6f065d423649033cb16968d70d81ceb10",
      "parents": [
        "d2442e8c290a9a6adb3f7445e21a843e9ebac23f"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Sun Nov 10 03:19:38 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Sun Nov 10 03:19:38 2013"
      },
      "message": "TestPersistRefCountRandom().\n"
    },
    {
      "commit": "d2442e8c290a9a6adb3f7445e21a843e9ebac23f",
      "tree": "6311f11a9fb7a69dc067322a7d7517d4e51bb55f",
      "parents": [
        "b683267844439e0c80db20eb084364c0f9fbf608"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Sun Nov 10 03:17:33 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Sun Nov 10 03:17:33 2013"
      },
      "message": "Mark all nodes reclaimable on Close().\n"
    },
    {
      "commit": "b683267844439e0c80db20eb084364c0f9fbf608",
      "tree": "66e0c1fee86718495dfadc44edcf0e81abc20e5a",
      "parents": [
        "bff8cf07d579e9ba0ec16737c259e12fca2fc2a2"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Sun Nov 10 03:08:07 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Sun Nov 10 03:08:07 2013"
      },
      "message": "Use CAS during Close().\n"
    },
    {
      "commit": "bff8cf07d579e9ba0ec16737c259e12fca2fc2a2",
      "tree": "281457f40792009d19a5352802a97cb0767a8505",
      "parents": [
        "42cfe871f8aa0ecb7758fa4cb7e8bfa4bb8bda2a"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Sun Nov 10 02:57:59 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Sun Nov 10 02:57:59 2013"
      },
      "message": "Handle evicted nodes during dump().\n"
    },
    {
      "commit": "42cfe871f8aa0ecb7758fa4cb7e8bfa4bb8bda2a",
      "tree": "59a52f3534690f91c774c032cee28bc62ce91206",
      "parents": [
        "8171efe9019415b8b277557e592a99df785816b2"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Sat Nov 09 15:56:12 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Sat Nov 09 15:56:12 2013"
      },
      "message": "TestStoreRefCountRandom().\n"
    },
    {
      "commit": "8171efe9019415b8b277557e592a99df785816b2",
      "tree": "85fdd6cfe31c86e290824b0b7b4f4aec5ac636ac",
      "parents": [
        "c80145b1e9f39573419be2a7c99aec65b24e9c3f"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Sat Nov 09 15:55:32 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Sat Nov 09 15:55:32 2013"
      },
      "message": "reclaimMarkUpdate() to recursively refresh markings.\n"
    },
    {
      "commit": "c80145b1e9f39573419be2a7c99aec65b24e9c3f",
      "tree": "43c7908f2119d177a2d3bceff9780f3abfd93717",
      "parents": [
        "b2b53a71fd28ce90855fe57253ec189221dcd83b"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Sat Nov 09 06:47:39 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Sat Nov 09 07:09:43 2013"
      },
      "message": "Mark middle node as reclaimable during Delete().\n"
    },
    {
      "commit": "b2b53a71fd28ce90855fe57253ec189221dcd83b",
      "tree": "caa15ef1555c0ec3ab011dfac3a645acf8bc987c",
      "parents": [
        "01b24b85d3f7c7d7abcefa40216796d64b9e72fb"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Sat Nov 09 06:12:56 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Sat Nov 09 06:12:56 2013"
      },
      "message": "Made reclaimLater array bigger.\n"
    },
    {
      "commit": "01b24b85d3f7c7d7abcefa40216796d64b9e72fb",
      "tree": "4da16bfbe46e9c96ee46f0d3b7686e60047e4bda",
      "parents": [
        "e00306f583735e78355344a066fff9834621da7a"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Sat Nov 09 06:12:06 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Sat Nov 09 06:12:06 2013"
      },
      "message": "Comment.\n"
    },
    {
      "commit": "e00306f583735e78355344a066fff9834621da7a",
      "tree": "5ef54b78c15ad256b7f215dab6e1033f9007677e",
      "parents": [
        "66fa46bc5632f6b99d71e79a95ca045e40bab4d0"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Sat Nov 09 01:39:50 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Sat Nov 09 01:39:50 2013"
      },
      "message": "Delete needs dec-ref if wasDeleted.\n"
    },
    {
      "commit": "66fa46bc5632f6b99d71e79a95ca045e40bab4d0",
      "tree": "44c9bc13bfe2695d5bd3ce3a08e680fcad83de82",
      "parents": [
        "8ef453efb3e52c935b4d73c45bccf86a14a7f397"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Sat Nov 09 00:29:08 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Sat Nov 09 00:29:08 2013"
      },
      "message": "Unneeded nil clearing.\n"
    },
    {
      "commit": "8ef453efb3e52c935b4d73c45bccf86a14a7f397",
      "tree": "c84277593d600325f27632e0709774261ddd1fb4",
      "parents": [
        "51974dcc1770f5e306cef9983b27943c6c0c6dae"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Sat Nov 09 00:28:12 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Sat Nov 09 00:28:12 2013"
      },
      "message": "Whitespace.\n"
    },
    {
      "commit": "51974dcc1770f5e306cef9983b27943c6c0c6dae",
      "tree": "58a3033119c18cca8a0c15250b3581f6c0fbc86e",
      "parents": [
        "ab57075829a1cba77cb1b3de7a157663628a3b7d"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Sat Nov 09 00:03:55 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Sat Nov 09 00:03:55 2013"
      },
      "message": "More clearing of reclaimLater.\n"
    },
    {
      "commit": "ab57075829a1cba77cb1b3de7a157663628a3b7d",
      "tree": "724382c2e2c9455a49d89206fa45c31ddc6af9fb",
      "parents": [
        "2b84d370b00e73547a4c0b3dc5c136d7c858b2bd"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Fri Nov 08 22:37:13 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Fri Nov 08 22:37:13 2013"
      },
      "message": "TestStoreRefCount().\n"
    },
    {
      "commit": "d2f97bca606ae84783bb49329f56e07d95f7f166",
      "tree": "4b6d997acd6fc377e21d4f48ec3db5df0e433652",
      "parents": [
        "988f3b536a286a7a7dcb6f698ed54317277b46fd"
      ],
      "author": {
        "name": "Dan Goldsmith",
        "email": "dan@d2g.org.uk",
        "time": "Fri Nov 08 14:54:54 2013"
      },
      "committer": {
        "name": "Dan Goldsmith",
        "email": "dan@d2g.org.uk",
        "time": "Fri Nov 08 14:54:54 2013"
      },
      "message": "Update README.md\n\nIssue #2"
    },
    {
      "commit": "2b84d370b00e73547a4c0b3dc5c136d7c858b2bd",
      "tree": "fdbdd0828cfce2a6d417fc011e63a8b43926de16",
      "parents": [
        "b712a4d61bde97305665a45f46ca470ce776df73"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Thu Nov 07 15:28:57 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Thu Nov 07 15:28:57 2013"
      },
      "message": "Comments on using ItemValAddRef/DecRef().\n"
    },
    {
      "commit": "b712a4d61bde97305665a45f46ca470ce776df73",
      "tree": "2add42e6d07878dedbd024750694770567ec5852",
      "parents": [
        "446005a26a386987f826965c8fa07e9ca10ec9b5"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Thu Nov 07 06:32:36 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Thu Nov 07 06:32:36 2013"
      },
      "message": "Call ItemValDecRef() during freeNode().\n"
    },
    {
      "commit": "446005a26a386987f826965c8fa07e9ca10ec9b5",
      "tree": "ea724f5d358da28adaf60d00a56ba0e160db5838",
      "parents": [
        "aa7cdd084b87c1debf8c6f4b8cdbb294978771e0"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Thu Nov 07 06:31:09 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Thu Nov 07 06:31:09 2013"
      },
      "message": "mkNode() does ItemValAddRef().\n"
    },
    {
      "commit": "aa7cdd084b87c1debf8c6f4b8cdbb294978771e0",
      "tree": "8eddcae9943122bab264b9f873745e8ab9b3c187",
      "parents": [
        "1a1a5742f3ae0a11bc514a9b92661ea1338634ae"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Thu Nov 07 05:44:23 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Thu Nov 07 05:44:23 2013"
      },
      "message": "Some calls to ItemValAddRef/DecRef().\n"
    },
    {
      "commit": "1a1a5742f3ae0a11bc514a9b92661ea1338634ae",
      "tree": "60a8c7bc351c6b3ec64e6176482820d4c8727990",
      "parents": [
        "fdea10ad8044c899fd93e15b7d19e7bfb9c7dd72"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Thu Nov 07 04:51:09 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Thu Nov 07 04:51:09 2013"
      },
      "message": "ItemValAddRef/DecRef() helper functions.\n"
    },
    {
      "commit": "fdea10ad8044c899fd93e15b7d19e7bfb9c7dd72",
      "tree": "9bebd4f5bbf170d5b32d4e29cdfe2b394704babb",
      "parents": [
        "3991b0ebe343f8d4e0ea3e1bf853de695ac3e16c"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Thu Nov 07 04:44:20 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Thu Nov 07 04:44:20 2013"
      },
      "message": "Allow app-specific user data per Collection.\n"
    },
    {
      "commit": "3991b0ebe343f8d4e0ea3e1bf853de695ac3e16c",
      "tree": "1823cc0a1948524c37bf855ec05d3bdd483d5049",
      "parents": [
        "bc9b6a261f56b5cb0a1220d8a0481cd0ec096df2"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Thu Nov 07 04:42:44 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Thu Nov 07 04:42:44 2013"
      },
      "message": "Moved ItemValAddRef/DecRef funcs upwards.\n"
    },
    {
      "commit": "bc9b6a261f56b5cb0a1220d8a0481cd0ec096df2",
      "tree": "3327765525bab1d0d98f289a857ec3e86a374e65",
      "parents": [
        "638ed18a505fdbea21ad32745ef8c5b1e268010b"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Thu Nov 07 04:34:41 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Thu Nov 07 04:34:41 2013"
      },
      "message": "ItemValRead/Write() helper functions.\n"
    },
    {
      "commit": "638ed18a505fdbea21ad32745ef8c5b1e268010b",
      "tree": "9075747c9b7af0596ad5cc217af941fffc0bbb3c",
      "parents": [
        "988f3b536a286a7a7dcb6f698ed54317277b46fd"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Thu Nov 07 04:25:47 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Thu Nov 07 04:25:47 2013"
      },
      "message": "ItemValAddRef/DecRef() callbacks.\n"
    },
    {
      "commit": "988f3b536a286a7a7dcb6f698ed54317277b46fd",
      "tree": "46ffce5cd24bc855a722c8936f30b12480aa84b4",
      "parents": [
        "a5528cc83f1203134aa60931500b65bb94cbc06f"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Wed Oct 30 01:53:48 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Wed Oct 30 01:53:48 2013"
      },
      "message": "More comments.\n"
    },
    {
      "commit": "a5528cc83f1203134aa60931500b65bb94cbc06f",
      "tree": "b16e4439c7c8c410afcee1c88765750e92ad398a",
      "parents": [
        "d501c62c500899a1d03eefea2ef06cab8b6e5340"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Wed Oct 30 01:45:41 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Wed Oct 30 01:45:41 2013"
      },
      "message": "More comments.\n"
    },
    {
      "commit": "d501c62c500899a1d03eefea2ef06cab8b6e5340",
      "tree": "086caeb3d1e0c12a65446665c0286eb4a0b0f58d",
      "parents": [
        "8b4ee12355f03c498946ff60b2aae1627c0b4e5b"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Wed Oct 30 01:12:05 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Wed Oct 30 01:12:05 2013"
      },
      "message": "More comments.\n"
    },
    {
      "commit": "8b4ee12355f03c498946ff60b2aae1627c0b4e5b",
      "tree": "d907a070ee45888de6f7f3b0686e97ca014ff143",
      "parents": [
        "6616c2c4873653cedcff75ad2a1b4771b68a7fd3"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Wed Oct 30 01:00:29 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Wed Oct 30 01:00:29 2013"
      },
      "message": "README tweaks.\n"
    },
    {
      "commit": "6616c2c4873653cedcff75ad2a1b4771b68a7fd3",
      "tree": "4fbc15b99692363a618f9a8be1b2fb0b40afa402",
      "parents": [
        "a64038f7775ffd62fdfd550d2b59b1bb4c80dd54"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Sat Aug 24 01:27:05 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Sat Aug 24 01:27:13 2013"
      },
      "message": "Detect out-of-order keys during VisitItemsAscendEx().\n\ncbugg: bug-840\n"
    },
    {
      "commit": "a64038f7775ffd62fdfd550d2b59b1bb4c80dd54",
      "tree": "612a6dcde25336d03da21e9df2925891ba702ffd",
      "parents": [
        "c6356299d9254acdb0964cbc3b8fb4c4f5befae4"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Fri Aug 02 01:27:23 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Fri Aug 02 01:27:23 2013"
      },
      "message": "TestNodeLocWriteErr().\n"
    },
    {
      "commit": "c6356299d9254acdb0964cbc3b8fb4c4f5befae4",
      "tree": "8b714b8aac4af7e11e0503aa1e425c9dc1a4d9d7",
      "parents": [
        "cf6b3f5f1062407d98ca408e482034aceb7ea391"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Fri Aug 02 01:18:38 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Fri Aug 02 01:18:38 2013"
      },
      "message": "Test split of empty nodeLoc.\n"
    },
    {
      "commit": "cf6b3f5f1062407d98ca408e482034aceb7ea391",
      "tree": "a964450da6e7d17927e179aa49776f6e1a1797ed",
      "parents": [
        "544e2628e978fbe065fb974b6c823ef74156503b"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Fri Aug 02 01:15:49 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Fri Aug 02 01:15:49 2013"
      },
      "message": "TestStatErr().\n"
    },
    {
      "commit": "544e2628e978fbe065fb974b6c823ef74156503b",
      "tree": "00db0ce64728d3dea3c3038e1cb932ef15557943",
      "parents": [
        "218de79f6baeec252d34092d9d4c695e5ba7c877"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Fri Aug 02 01:10:48 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Fri Aug 02 01:10:48 2013"
      },
      "message": "TestDoubleFreeRootNodeLoc().\n"
    },
    {
      "commit": "218de79f6baeec252d34092d9d4c695e5ba7c877",
      "tree": "4a9b9a2b4af15323b1fe19607ed740e85fd3c536",
      "parents": [
        "f7fa061ccbac9fabaee9f580c8159f388917a351"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Fri Aug 02 01:07:40 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Fri Aug 02 01:07:40 2013"
      },
      "message": "TestWriteEmptyItemsErr().\n"
    },
    {
      "commit": "f7fa061ccbac9fabaee9f580c8159f388917a351",
      "tree": "93a052ddba8767ef17f21d03eab85e80de542112",
      "parents": [
        "3017d9883da9fab3d3e3bf0123ef2d4fc4d7e1bb"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Fri Aug 02 01:04:58 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Fri Aug 02 01:04:58 2013"
      },
      "message": "TestWriteItemsErr().\n"
    },
    {
      "commit": "3017d9883da9fab3d3e3bf0123ef2d4fc4d7e1bb",
      "tree": "9ca4deb5aca8f302a20ef63f41ba5ddcc931068c",
      "parents": [
        "36e64cebd673c30c29b0f39b70f4bb7a254f4e52"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Fri Aug 02 00:58:21 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Fri Aug 02 00:58:21 2013"
      },
      "message": "TestNumInfo().\n"
    },
    {
      "commit": "36e64cebd673c30c29b0f39b70f4bb7a254f4e52",
      "tree": "85c616a4c956982b8a9d87094347037090e390ec",
      "parents": [
        "8281e16bfeef04c890b97cf9b1d5997ff36e87af"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Fri Aug 02 00:46:57 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Fri Aug 02 00:46:57 2013"
      },
      "message": "TestDoubleFreeNodeLoc().\n"
    },
    {
      "commit": "8281e16bfeef04c890b97cf9b1d5997ff36e87af",
      "tree": "ba3330f344b77755e5314a3614832eca7c56aa23",
      "parents": [
        "429ad4024e9c9f2a0628e9093f2bcd9c15f651ac"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Fri Aug 02 00:41:27 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Fri Aug 02 00:45:22 2013"
      },
      "message": "TestDoubleFreeNode().\n"
    },
    {
      "commit": "429ad4024e9c9f2a0628e9093f2bcd9c15f651ac",
      "tree": "2485f4c90300514893c14ab0f49a8de2c98f2a04",
      "parents": [
        "e224c60b8c7f9092a2e81475e89de15666614553"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Fri Aug 02 00:33:57 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Fri Aug 02 00:33:57 2013"
      },
      "message": "TestFlushRevertWithReadError().\n"
    },
    {
      "commit": "e224c60b8c7f9092a2e81475e89de15666614553",
      "tree": "ad060c74904108470fd688a4e59d023370598685",
      "parents": [
        "530b454e20426a98076ee63f83ca031d8964faed"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Fri Aug 02 00:25:33 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Fri Aug 02 00:25:33 2013"
      },
      "message": "100% code coverage for Collection.Get().\n"
    },
    {
      "commit": "530b454e20426a98076ee63f83ca031d8964faed",
      "tree": "3f1931c8b7b750d57a56a1a6069fd7f939975deb",
      "parents": [
        "4e823dbb69f96a7a9c2996fe7841038f562fa747"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Fri Aug 02 00:20:38 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Fri Aug 02 00:20:38 2013"
      },
      "message": "100% code coverage for Collection.UnmarshalJSON().\n"
    },
    {
      "commit": "4e823dbb69f96a7a9c2996fe7841038f562fa747",
      "tree": "a9bd9eee7131f07d2cc1f0aa4ab2030a4e7e485d",
      "parents": [
        "f700f7249eb9da9de92bceedab0490f1e2e4f845"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Fri Aug 02 00:16:28 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Fri Aug 02 00:16:28 2013"
      },
      "message": "TestCollectionMisc() added.\n"
    },
    {
      "commit": "f700f7249eb9da9de92bceedab0490f1e2e4f845",
      "tree": "b95a2070a3c22c3cb6ea6009492b4a1e5929acc0",
      "parents": [
        "fa66a8b4da3131713c8d38e57513bb9d464a87d7"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Thu Aug 01 23:58:59 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Thu Aug 01 23:58:59 2013"
      },
      "message": "Moved writeNodes() to be a Collection method.\n"
    },
    {
      "commit": "fa66a8b4da3131713c8d38e57513bb9d464a87d7",
      "tree": "30c854e101ed2a940834c0f8cd7d8cad4b8677b2",
      "parents": [
        "269cdf06b53777277af20c64cafd1ef65b836c7c"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Thu Aug 01 23:45:26 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Thu Aug 01 23:45:26 2013"
      },
      "message": "Flush() must write the \u0027snapshot\u0027ed rootNodeLoc\u0027s.\n\nBefore this commit, there was a race/hole... imagine a Flush() is\nstarted and items+nodes are written to disk.  But, before the\nfinal/tail root records are written, a concurrent mutator sneaks in to\nchange the items+nodes (there\u0027s new treap roots).  When the Flush()\nthen tries to write the final/tail root records, it was incorrectly\nwriting dirty (unpersisted) items+nodes.\n\nThis fix uses \"snapshotted\" rootNodeLoc all the way throughout the\nFlush() so that a concurrent mutator\u0027s changes are not seen.\n"
    },
    {
      "commit": "269cdf06b53777277af20c64cafd1ef65b836c7c",
      "tree": "c90a8631f47c1ef84bb444a7d35380f27a507794",
      "parents": [
        "2c0d734d78c69ffecb22b7a4778128daf37c71f0"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Thu Aug 01 23:02:19 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Thu Aug 01 23:02:19 2013"
      },
      "message": "Moved AllocStats() higher.\n"
    },
    {
      "commit": "2c0d734d78c69ffecb22b7a4778128daf37c71f0",
      "tree": "afa50c4238a6e01538dec79614c82b61c6173ff0",
      "parents": [
        "2fd84d0d98a8c08cf477e2ce664bd292227cc344"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Thu Aug 01 22:38:57 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Thu Aug 01 22:38:57 2013"
      },
      "message": "Renamed to writeItems/writeNodes().\n"
    },
    {
      "commit": "2fd84d0d98a8c08cf477e2ce664bd292227cc344",
      "tree": "5e40013270a937b19448c8120ebfa165663f6f6d",
      "parents": [
        "cd1c3ff2ca97aaa06734b869929c7cc1adbc8279"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Thu Aug 01 22:32:45 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Thu Aug 01 22:32:45 2013"
      },
      "message": "Renamed FreeStats to AllocStats.\n"
    },
    {
      "commit": "cd1c3ff2ca97aaa06734b869929c7cc1adbc8279",
      "tree": "cc102a4565fee245961f95cf3f1843674814f627",
      "parents": [
        "5f42a1aa0508badfceeb0846506bfdef85127265"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Tue Jun 04 20:41:51 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Tue Jun 04 20:41:51 2013"
      },
      "message": "Brief README note on how FlushRevert() works.\n"
    },
    {
      "commit": "5f42a1aa0508badfceeb0846506bfdef85127265",
      "tree": "c088dc5c9ad1127f8307e6ae2cb51c14e430c066",
      "parents": [
        "e771f31f7c590a62bab3a63a1a0483122035a2a2"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Tue Jun 04 20:38:21 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Tue Jun 04 20:38:21 2013"
      },
      "message": "Added FlushRevert() notes to the README.\n"
    },
    {
      "commit": "e771f31f7c590a62bab3a63a1a0483122035a2a2",
      "tree": "714719298b910ef8512310e3a96c076cd146ea81",
      "parents": [
        "160d8ac40e8fa64244d4524e761bb7b7218f244d"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Tue Jun 04 20:24:47 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Tue Jun 04 20:24:47 2013"
      },
      "message": "FlushRevert() on snapshot or read-only store should not truncate.\n\nThis allows the user to bring a snapshot back in time, but keep the\nmain store file untouched.\n"
    },
    {
      "commit": "160d8ac40e8fa64244d4524e761bb7b7218f244d",
      "tree": "d030c68c8c0b160d7647651e8ee4d75bed9f1b01",
      "parents": [
        "019e306bfbe73c12edd12408f6008cef639e6443"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Tue Jun 04 19:05:26 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Tue Jun 04 19:10:16 2013"
      },
      "message": "FlushRevert() API, allowing revert or undo of the last Flush().\n\nAllows the application to revert the last persistence operation,\na.k.a. Flush().  The FlushRevert() operation is destructive, scanning\nbackwards in the file to find the file \"tail\" roots record that was\nwritten by the previous Flush() call and truncating the file to that\npoint.\n\nInvoking FlushRevert() enough times should result in an empty Store.\n\nAs part of this change, the file interface also must support a\nTruncate() method.\n"
    },
    {
      "commit": "019e306bfbe73c12edd12408f6008cef639e6443",
      "tree": "548d48c4295f456e4a5c76945b7590483be1ca0e",
      "parents": [
        "5dddfee404a529bfe7671b21d5a665765b906143"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Tue Jun 04 07:00:11 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Tue Jun 04 07:00:11 2013"
      },
      "message": "go fmt.\n"
    },
    {
      "commit": "5dddfee404a529bfe7671b21d5a665765b906143",
      "tree": "53d477d95e5f328b33291fab8135ce54e6427777",
      "parents": [
        "ff01e0e01ccf9d5bd96c13a13e0dc6d5539cc5cb"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Tue Jun 04 06:32:00 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Tue Jun 04 06:32:00 2013"
      },
      "message": "Refactored out readRootsScan() function.\n"
    },
    {
      "commit": "ff01e0e01ccf9d5bd96c13a13e0dc6d5539cc5cb",
      "tree": "9b78d247ff5dde367ed01b9882a7e96431c34d82",
      "parents": [
        "6680889a12984624e2c0125dc8981c03747122fc"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Wed May 29 06:11:32 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Wed May 29 06:12:16 2013"
      },
      "message": "Fix reclaimLater\u0027s to have the right reclaimMark.\n\nThey were pointing at the rnl\u0027s reclaimMark when instead the nodes for\nreclaimLater should be pointing at the rnlNew\u0027s reclaimMark.\nOtherwise, during the reclaimation processing, the examined nodes\nwouldn\u0027t be reclaimed.\n"
    },
    {
      "commit": "6680889a12984624e2c0125dc8981c03747122fc",
      "tree": "4e95a36267d8241c9d90edf4a650d23fb4b565f4",
      "parents": [
        "307cdf0d8c65885c446b107966d8720ed8a7a97a"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Tue May 28 06:03:25 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Tue May 28 06:03:25 2013"
      },
      "message": "Each rootNodeLoc has its own reclaimMark sentinel.\n\nA single, global, shared reclaimable_node sentinel instance can\ncorrupt data as shown by the test\nTestReclaimRootChainMultipleMutations().  The fix is to give each\nrootNodeLoc its own reclaimMark sentinel node, so that when a\nrootNodeLoc is fully dereferenced, it will only cleanup nodes with its\nreclaimMark sentinel.\n\nThis might leave some nodes inefficiently un-reclaimed (until go\ndecides to GC), but safety/correctness is the top concern here.\n"
    },
    {
      "commit": "307cdf0d8c65885c446b107966d8720ed8a7a97a",
      "tree": "aa4ebed627c2a235d7e3fba4fe67b06523614ea9",
      "parents": [
        "5d70bae9ea87df77c0d2d7ea3fca77f9a3ab6a7f"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Tue May 28 05:08:12 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Tue May 28 05:08:12 2013"
      },
      "message": "Use same colls throughout Flush/writeRoots().\n"
    },
    {
      "commit": "5d70bae9ea87df77c0d2d7ea3fca77f9a3ab6a7f",
      "tree": "95d44e678e13236334e472820bcc9b1c22a039dd",
      "parents": [
        "a1ad374514216c34ad469937d4e07882f10d2b36"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Sun May 26 02:08:25 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Sun May 26 02:08:25 2013"
      },
      "message": "Get refs on all colls before at start of Flush.\n"
    },
    {
      "commit": "a1ad374514216c34ad469937d4e07882f10d2b36",
      "tree": "eedcff17de7f900b27d5d3db60cc9665aef4697a",
      "parents": [
        "aca6a13ea75774c91f3c28fb63f3872e42185622"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Sun May 26 01:38:25 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Sun May 26 01:38:25 2013"
      },
      "message": "Added closeCollection().\n"
    },
    {
      "commit": "aca6a13ea75774c91f3c28fb63f3872e42185622",
      "tree": "0d1bce74084e7c94c2bf4a2a78873dbb2a96abb7",
      "parents": [
        "fee4a2e87fed1c1754d0fe245d9bfa0e96e725b9"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Sat May 25 14:15:10 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Sat May 25 14:15:10 2013"
      },
      "message": "TestReclaimRooChain().\n"
    },
    {
      "commit": "fee4a2e87fed1c1754d0fe245d9bfa0e96e725b9",
      "tree": "6c23758b7f41e8c7f1b927aa1e06b87d4acd5289",
      "parents": [
        "fdd28e4538467f496c32b0547fc7ccaba4e629cc"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Sat May 25 14:14:58 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Sat May 25 14:14:58 2013"
      },
      "message": "Extra panic if key is nil.\n"
    },
    {
      "commit": "fdd28e4538467f496c32b0547fc7ccaba4e629cc",
      "tree": "a674a24280566bb040f85fd02cbc05dc1608d823",
      "parents": [
        "f298a326df1bb6efc1f693bdfb455396b3d9db7a"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Wed May 22 05:33:56 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Wed May 22 05:33:56 2013"
      },
      "message": "TestItemNumValBytes().\n"
    },
    {
      "commit": "f298a326df1bb6efc1f693bdfb455396b3d9db7a",
      "tree": "428d6640a841df4f4327bd65a651a5746e9669c3",
      "parents": [
        "1d4a5cfb056c621c8184a237fea9a0f68784817b"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Wed May 22 05:23:24 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Wed May 22 05:27:13 2013"
      },
      "message": "Support repeated re-Close()\u0027ing.\n"
    },
    {
      "commit": "1d4a5cfb056c621c8184a237fea9a0f68784817b",
      "tree": "b8e2680e5329e8c28679b700b7d6fb873bfbeb1e",
      "parents": [
        "bc4ed9c0d150e9e65b31e686b6ffa18608953719"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Wed May 22 05:20:11 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Wed May 22 05:20:11 2013"
      },
      "message": "TestDump().\n"
    },
    {
      "commit": "bc4ed9c0d150e9e65b31e686b6ffa18608953719",
      "tree": "b34015eec3b9834265b2e01763c734f80a30f071",
      "parents": [
        "702c86ef2cb39675727f20476de3ca528157ef69"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Wed May 22 05:17:14 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Wed May 22 05:17:14 2013"
      },
      "message": "TestCollectionStats().\n"
    },
    {
      "commit": "702c86ef2cb39675727f20476de3ca528157ef69",
      "tree": "871abcf4f57dc2e6e9cc1ac200d30d3a540de98f",
      "parents": [
        "15362fb9764d277b4f142d44d2ee4ef7af707078"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Wed May 22 05:04:42 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Wed May 22 05:04:42 2013"
      },
      "message": "TestStoreClose().\n"
    },
    {
      "commit": "15362fb9764d277b4f142d44d2ee4ef7af707078",
      "tree": "1f110513b527d80847f60a6cfeb0396677d385ca",
      "parents": [
        "c058b37e5ff2b2737ecb6fc519ad34d82959fa9a"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Wed May 22 04:56:05 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Wed May 22 04:56:05 2013"
      },
      "message": "TestCurFreeNodes().\n"
    },
    {
      "commit": "c058b37e5ff2b2737ecb6fc519ad34d82959fa9a",
      "tree": "144a56cd1b1eb271d7a563b9e590ec9cac7d17a3",
      "parents": [
        "bc54fa8b8a6ba2cb60da67dcafd81d8d6c43a7b2"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Wed May 22 04:55:04 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Wed May 22 04:55:04 2013"
      },
      "message": "Remove unused numFreeNodes(), replaced by CurFreeNodes.\n"
    },
    {
      "commit": "bc54fa8b8a6ba2cb60da67dcafd81d8d6c43a7b2",
      "tree": "1aaeef51672b059e12da2f6924916510eb404219",
      "parents": [
        "4f91412323f1c5d6c505fb863bf26e781000cf4f"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Wed May 22 04:15:37 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Wed May 22 04:15:37 2013"
      },
      "message": "TestItemCopy().\n"
    },
    {
      "commit": "4f91412323f1c5d6c505fb863bf26e781000cf4f",
      "tree": "f10b0f59f3efadbd4f2a9c2cb2e3a4682b17aba8",
      "parents": [
        "57e51bff3c657132b94af12e9b111e6cab402348"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Tue May 21 15:54:18 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Tue May 21 15:54:18 2013"
      },
      "message": "Track current free list lengths in freeStats.\n"
    },
    {
      "commit": "57e51bff3c657132b94af12e9b111e6cab402348",
      "tree": "28753223820c2e91d6229106726f9ed9a11fbafc",
      "parents": [
        "76ffe8f9edad5e909928b23b021cd439068ac2ae"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Tue May 21 14:46:07 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Tue May 21 14:46:07 2013"
      },
      "message": "Helper debugging functions.\n"
    },
    {
      "commit": "76ffe8f9edad5e909928b23b021cd439068ac2ae",
      "tree": "be1ca265c590baa10533d1849802bdcca7a56ffe",
      "parents": [
        "422079c27391746dcdb0e0a1797066b1cd2dccf9"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Tue May 21 14:45:04 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Tue May 21 14:45:06 2013"
      },
      "message": "Don\u0027t split() when at the leaf level.\n\nOptimization to avoid extra split() recursion at the leaf level,\nsaving an extra mkNode().\n"
    },
    {
      "commit": "422079c27391746dcdb0e0a1797066b1cd2dccf9",
      "tree": "181795dd6e9ace4fa8e07fab7ad8c7ee830823ce",
      "parents": [
        "516234dc58e2fe28ec7449630babe39a2a1e9996"
      ],
      "author": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Mon May 20 19:10:06 2013"
      },
      "committer": {
        "name": "Steve Yen",
        "email": "steve.yen@gmail.com",
        "time": "Mon May 20 19:10:08 2013"
      },
      "message": "Need to markReclaimable() on the actual middle node.\n\nAs part of this, there were also counts of reclaimations that helped\nwith debugging.\n"
    }
  ],
  "next": "516234dc58e2fe28ec7449630babe39a2a1e9996"
}
