)]}'
{
  "log": [
    {
      "commit": "2ef4ce7cf2666ef8fe5bd0fd2546add62907aa83",
      "tree": "16d941f3c6575149763e90662829f77adc9a84f8",
      "parents": [
        "95b919d0155d676ec0abcdf7be35a0b69d7b64fb"
      ],
      "author": {
        "name": "Khen Nursimulu",
        "email": "knursimu@ciena.com",
        "time": "Wed Nov 23 11:37:38 2016 -0500"
      },
      "committer": {
        "name": "Zsolt Haraszti",
        "email": "zharaszt@ciena.com",
        "time": "Wed Nov 23 10:21:21 2016 -0800"
      },
      "message": "Move experimental items undo the experiments directory and some minor name cleanuos\n\nChange-Id: I748e0546a80a593ddef6b8a4ac749d592b9d26b1\n"
    },
    {
      "commit": "95b919d0155d676ec0abcdf7be35a0b69d7b64fb",
      "tree": "1d1ea1399b4a5b5b94b942e6cbc1588aaef2a469",
      "parents": [
        "dafefe16ce5d946271ca9ac5a4fd36ec2a92bee8"
      ],
      "author": {
        "name": "Khen Nursimulu",
        "email": "knursimu@ciena.com",
        "time": "Fri Nov 18 16:20:20 2016 -0500"
      },
      "committer": {
        "name": "Zsolt Haraszti",
        "email": "zharaszt@ciena.com",
        "time": "Wed Nov 23 10:21:21 2016 -0800"
      },
      "message": "This commit includes:\n1) Make descriptiuon fields mandatory\n2) Make some minor changes to comply to IETF\n3) Add a few test cases (more to come)\n\nChange-Id: Id871b2015ddb72c72a03c9fd5d0e08461fe67398\n"
    },
    {
      "commit": "dafefe16ce5d946271ca9ac5a4fd36ec2a92bee8",
      "tree": "a0f218d28f01c9498ca63993e1c8987337be1158",
      "parents": [
        "7b1bab911a9e79da18247746f6b56168d24df049"
      ],
      "author": {
        "name": "Zsolt Haraszti",
        "email": "zharaszt@ciena.com",
        "time": "Mon Nov 14 21:29:58 2016 -0800"
      },
      "committer": {
        "name": "Zsolt Haraszti",
        "email": "zharaszt@ciena.com",
        "time": "Wed Nov 23 10:20:30 2016 -0800"
      },
      "message": "Config/management model framework initial version\n\nThis is the initial commit of the internal config\nmodel tree for Voltha.\n\nA system that borrows key concepts from Docker, repo,\nand git for multi-revision configuration handling with\ntransaction (commit/abort) logic, tagging, and the\nability to diff between config versions.\n\nKey features:\n* Stored model is defined using *annotated* Google protobuf\n  (*.proto) files\n* Model is kept in memory as Python protobuf message objects\n* The whole configuration is arranged in a nested (tree)\n  structure, made up of ConfigNode objects. Each\n  ConfigNode holds its config data as (possibly nested)\n  protobuf message object, as well as lists of \"pointers\"\n  to its logically nested children nodes. What message\n  fields are considered part of the node-local config vs.\n  what is stored as a child node is controlled by \"child_node\"\n  annotations in the *.proto files.\n* Each ConifgNode stores its config in immutable\n  ConfigRevision obects, each revision being identified\n  by a unique hash value, calculated from a unique\n  hash value of its local configuration as well as\n  the list of hash values of all its children node.\n* Collection type children nodes can be indexed (keyed)\n  so that they can be addressed with \"path\" notation\n  friendly to REST and other interfaces/APIs. Which\n  field is used as key is defined in the parent message\n  using \"key\" attribute of the \"child_node\" annotation.\n  Currently string and integer type fields can be used\n  as keys.\n* Changes to the model create new revisions in all\n  affected nodes, which are rolled up as new revisions\n  to the root node.\n* Root revisions can be tagged, tags can be moved\n* The root node by default keeps a rev, but provides\n  a mechanism to purge untagged revs.\n* All branch and leaf nodes auto-purge interim revs\n  not needed. A rev is not needed if no one refers\n  to it.\n* Diffing between revs is supported, it yields RFC6902\n  jsonpatch objects. Diffing can be done between any\n  revs.\n* The main operations are: CRUD (we call them .add,\n  .get, .update, .remove)\n* Get can be recursive to an optionally limited depth.\n* There is support for Read-Only attributes (fields)\n* All CRUD operation support \"path\" based addressing.\n* There is support for an branch/leaf node perspective\n  implemented by ConfigProxy. This proxy, when attached\n  to an arbitrary node in the tree, provides all the\n  CRUD operations in that context, that is, path args\n  are used relative to that node.\n* Transaction support: All mutations made in a transaction\n  are invisible to others until the transaction is committed.\n  The commit is atomic (either all changes are applied\n  to the tree or none). Conflicts between transactions\n  are detected at the per-node level and a conflict\n  results in rejecting the conflicting transaction (first\n  one wins).\n* Registered callbacks: via the proxy objects an\n  observer can register for pre- and post- operation\n  callbacks. Also, there is a post-get callback which\n  can be used to augment stored data with real-time\n  data.\n\nI started hooking up the new config infrastructure to\nVoltha\u0027s CORE, but this is still in progress, as not\nall existing APIs have bee moved over yet.\n\nNote: I also lumped in some experimental files working\nwith \"Any\" types in protobufs\n\nChange-Id: Ic547b36e9b893d54e6d9ce67bdfcb32a6e8acd4c\n"
    },
    {
      "commit": "283d76850c48b70e1821ff2366ecedbea50ed8a5",
      "tree": "6a85e6cfa10a9441455c4b96991d356d66a1d172",
      "parents": [
        "94026691258da57f7e3092f4481c025b9122b4b5"
      ],
      "author": {
        "name": "Khen Nursimulu",
        "email": "knursimu@ciena.com",
        "time": "Fri Nov 11 16:37:32 2016 -0500"
      },
      "committer": {
        "name": "Khen Nursimulu",
        "email": "knursimu@ciena.com",
        "time": "Fri Nov 11 16:37:32 2016 -0500"
      },
      "message": "Update the docker command in smoke-test to work with jenkins.   Also, update the test script as the docker-compose file has new service -podder\n\nChange-Id: I06393287f45b67cc029990f3a791ae397bcb0aae\n"
    },
    {
      "commit": "94026691258da57f7e3092f4481c025b9122b4b5",
      "tree": "a1f0dfca14331aeed8492c198d14eff105026f6e",
      "parents": [
        "34e7ebb30f669f3cc98a4be892901b34e9e150f4"
      ],
      "author": {
        "name": "Khen Nursimulu",
        "email": "knursimu@ciena.com",
        "time": "Thu Nov 10 13:52:00 2016 -0800"
      },
      "committer": {
        "name": "Zsolt Haraszti",
        "email": "zharaszt@ciena.com",
        "time": "Thu Nov 10 21:13:14 2016 -0800"
      },
      "message": "Update comment\n\nChange-Id: I04141c95ec0cdb143e25c4f505366ba193be23b5\n"
    },
    {
      "commit": "34e7ebb30f669f3cc98a4be892901b34e9e150f4",
      "tree": "900ef4d14e4cb094686b6427827e7d84843bff94",
      "parents": [
        "96bb532697cce77beb7b63274add74736bf9f26c"
      ],
      "author": {
        "name": "Khen Nursimulu",
        "email": "knursimu@ciena.com",
        "time": "Thu Nov 10 13:38:44 2016 -0800"
      },
      "committer": {
        "name": "Zsolt Haraszti",
        "email": "zharaszt@ciena.com",
        "time": "Thu Nov 10 21:13:14 2016 -0800"
      },
      "message": "This commit consists of:\n1) Remove frameio reference and use run from root instead\n2) Add a smoke-test to be used mostly by jenkins\n3) Limit the kafka docker heap size\n\nChange-Id: I29ef144996a72088b3c5d7d98b1639b6901ab2b8\n"
    },
    {
      "commit": "96bb532697cce77beb7b63274add74736bf9f26c",
      "tree": "0b8fdf6544aba88e8fd1610bf5c77bea07bce1f2",
      "parents": [
        "9d222026a2a72f13737bfc4e9f6fd6ab2066674c"
      ],
      "author": {
        "name": "Khen Nursimulu",
        "email": "knursimu@ciena.com",
        "time": "Wed Nov 09 20:16:03 2016 -0800"
      },
      "committer": {
        "name": "Zsolt Haraszti",
        "email": "zharaszt@ciena.com",
        "time": "Thu Nov 10 21:13:14 2016 -0800"
      },
      "message": "1) Keep only 1 sanity test as part of the jenkins build test, 2) exclude the test_frameio.py test from direct run, 3) set the frameio test to be run within a docker when the itest is invoked\n\nChange-Id: I2388f0465b891b3aba781ce728000dc92d134727\n"
    },
    {
      "commit": "bf8bf28ea87c4c1b0f4a27d63465bac698db2aaa",
      "tree": "72157b68e1ddb0bfaafa333655ca184e61d672b0",
      "parents": [
        "95b68c5b0b9c7353c78de6e540e85631dac06f4e"
      ],
      "author": {
        "name": "Khen Nursimulu",
        "email": "knursimu@ciena.com",
        "time": "Mon Nov 07 15:21:35 2016 -0500"
      },
      "committer": {
        "name": "Zsolt Haraszti",
        "email": "zharaszt@ciena.com",
        "time": "Thu Nov 10 11:02:49 2016 -0800"
      },
      "message": "Add simple rpc and some cleanups\n\nChange-Id: Ia779f9ee899fabfe5b685124f8c3b7c28a1110bb\n"
    },
    {
      "commit": "91350ebd11fc030359a79332bfe18e75da139d54",
      "tree": "d2307a6b468f41367acc9ecad67674d439a4d21b",
      "parents": [
        "d70cd4de56b7d8b57493a2d1077749d7c58fb3fe"
      ],
      "author": {
        "name": "Zsolt Haraszti",
        "email": "zharaszt@ciena.com",
        "time": "Sat Nov 05 15:33:53 2016 -0700"
      },
      "committer": {
        "name": "Zsolt Haraszti",
        "email": "zharaszt@ciena.com",
        "time": "Sun Nov 06 13:46:28 2016 -0800"
      },
      "message": "Async frame receive/send module\n\nChange-Id: I75b6ecdecf05f2c72b3b0fa1191d849b7d8e67ef\n"
    },
    {
      "commit": "d70cd4de56b7d8b57493a2d1077749d7c58fb3fe",
      "tree": "af229c5f94e131d7346b739f1cd8bfe845fe5f3a",
      "parents": [
        "0df86c177f6e7f81abcc463ad560e6ea7a93f55e"
      ],
      "author": {
        "name": "Zsolt Haraszti",
        "email": "zharaszt@ciena.com",
        "time": "Thu Nov 03 23:23:36 2016 -0700"
      },
      "committer": {
        "name": "Zsolt Haraszti",
        "email": "zharaszt@ciena.com",
        "time": "Fri Nov 04 22:05:27 2016 -0700"
      },
      "message": "Moved event bus to common lib\n\nChange-Id: I530498db2d4fd3ba644dd4a92e0b6ce74bce3a27\n"
    },
    {
      "commit": "0df86c177f6e7f81abcc463ad560e6ea7a93f55e",
      "tree": "03b4864f8aa8c115e5e5aa689dffca8fd5a331e1",
      "parents": [
        "f8abbc992604a3ac08e439ad8449d85178054e75"
      ],
      "author": {
        "name": "Zsolt Haraszti",
        "email": "zharaszt@ciena.com",
        "time": "Thu Nov 03 23:03:35 2016 -0700"
      },
      "committer": {
        "name": "Zsolt Haraszti",
        "email": "zharaszt@ciena.com",
        "time": "Fri Nov 04 22:05:27 2016 -0700"
      },
      "message": "Internal universal pub/sub event bus\n\nChange-Id: I0f295727add5675bef292f5fd764ecc766239107\n"
    },
    {
      "commit": "f8abbc992604a3ac08e439ad8449d85178054e75",
      "tree": "92f628c0067e8aceae0d80d4818214145b16227b",
      "parents": [
        "4c43525b70b09b2ef7267a984c8fe9dd5ba3aa2f"
      ],
      "author": {
        "name": "Khen Nursimulu",
        "email": "knursimu@ciena.com",
        "time": "Fri Nov 04 19:56:45 2016 -0400"
      },
      "committer": {
        "name": "Khen Nursimulu",
        "email": "knursimu@ciena.com",
        "time": "Fri Nov 04 19:56:45 2016 -0400"
      },
      "message": "Adding initial test cases, include enumeration conversion, address review comments\n\nChange-Id: I59a19f80289464c934ad16d2d2ce1c78a6ba6f2c\n"
    },
    {
      "commit": "06854cba6caaaf0f46d8641db7ec42c4ebefe2a7",
      "tree": "aff9c6926d5ac92b25fd67b02508dff608fe1f09",
      "parents": [
        "0f387e6e73f17af75eb8b8a91fd8ea4d92f26119"
      ],
      "author": {
        "name": "Zsolt Haraszti",
        "email": "zharaszt@ciena.com",
        "time": "Wed Nov 02 01:29:20 2016 -0700"
      },
      "committer": {
        "name": "Zsolt Haraszti",
        "email": "zharaszt@ciena.com",
        "time": "Wed Nov 02 01:34:58 2016 -0700"
      },
      "message": "Refined OMCI parsing and serialization\n\nChange-Id: I52f5a1fff997c41de51022fc6f8d4293b191994d\n"
    },
    {
      "commit": "0f387e6e73f17af75eb8b8a91fd8ea4d92f26119",
      "tree": "b320eb304806071c0c3258fbaf1ba235df0476cb",
      "parents": [
        "1c3eba81d41fd5ba1b847f74326518b823f7fc3c"
      ],
      "author": {
        "name": "Zsolt Haraszti",
        "email": "zharaszt@ciena.com",
        "time": "Tue Nov 01 01:57:38 2016 -0700"
      },
      "committer": {
        "name": "Zsolt Haraszti",
        "email": "zharaszt@ciena.com",
        "time": "Wed Nov 02 01:33:34 2016 -0700"
      },
      "message": "Microsemi and OMCI very initial code\n\nChange-Id: Ieb648f43eab3b2dff50093c79ed27b9e40ae130e\n"
    },
    {
      "commit": "9125b1a90ceff0e60c944a6430e8054cf36a0f76",
      "tree": "9be01e5e9cc146403a86b89c68307c2806ff8549",
      "parents": [
        "40f039c39f0fff90a68f7cccf3d772c4e8efcf5d"
      ],
      "author": {
        "name": "Zsolt Haraszti",
        "email": "zharaszt@ciena.com",
        "time": "Mon Oct 24 22:54:33 2016 -0700"
      },
      "committer": {
        "name": "Zsolt Haraszti",
        "email": "zharaszt@ciena.com",
        "time": "Mon Oct 24 23:00:03 2016 -0700"
      },
      "message": "Fixed two bugs in OpenFlow land\n\nChange-Id: I74f37221d93c71398a1985143f03706297bd1661\n"
    },
    {
      "commit": "023ea7cbbc9482643579b92ab02b3ed104e1f575",
      "tree": "e75ec5bff25548904e2a8e358029cc5fe8bb6466",
      "parents": [
        "4ba198966634f48c11a7dfb5590b404b1b2a1f34"
      ],
      "author": {
        "name": "Zsolt Haraszti",
        "email": "zharaszt@ciena.com",
        "time": "Sun Oct 16 19:30:34 2016 -0700"
      },
      "committer": {
        "name": "Zsolt Haraszti",
        "email": "zharaszt@ciena.com",
        "time": "Mon Oct 24 01:38:54 2016 -0700"
      },
      "message": "Async/streaming gRPC client/server proto\n\nThis experiment was to fine-tune how we can implement\nasync gRPC client and server code inside a Twisted\npython app.\n\nChange-Id: I945014e27f4b9d6ed624666e0284cc298548adb3\n\nMajor cleanup of openflow_13.proto\n\nChange-Id: I4e54eaf87b682124ec518a0ade1a6050a6ec6da8\n\nRelocated openflow_13.proto to voltha\n\nChange-Id: I66ae45a9142d180c2c6651e75c7a1ee08aef7ef8\n\nRemoved forced utest from make build\n\nChange-Id: If0da58e9d135ebde6ca68c3316688a03a7b10f2f\n\ntwisted openflow agent first pass\n\nChange-Id: Ibe5b4727ccfe92e6fd464ccd3baf6275569ef5d3\n\nstore openflow derived files\n\nChange-Id: Ib3e1384bb2ca2a9c0872767f7b793f96b0a154e2\n\nMinor cleanup\n\nChange-Id: I1280ed3acb606121b616a0efd573f5f59d010dca\n\nFactored out common utils\n\nChange-Id: Icd86fcd50f60d0900924674cbcd65e13e47782a1\n\nRefactored twisted agent\n\nChange-Id: I71f26ce5357a4f98477df60b8c5ddc068cf75d43\n\nRelocated openflow agent to ofagent\n\n... and preserved obsolete working (non-twisted) agent under\n~/obsolete, so we can still run the olt-oftest and pass tests,\nunit the new twisted based agent reaches that maturity point.\n\nChange-Id: I727f8d7144b1291a40276dad2966b7643bd7bc4b\n\nolt-oftest in fake mode works with new agent\n\nChange-Id: I43b4f5812e8dfaa9f45e4a77fdcf6c30ac520f8d\n\nInitial ofagent/voltha operation\n\nChange-Id: Ia8104f1285a6b1c51635d36d7d78fc113f800e79\n\nAdditional callouts to Voltha\n\nChange-Id: If8f483d5140d3c9d45f22b480b8d33249a29cd4e\n\nMore gRPC calls\n\nChange-Id: I7d24fadf9425217fb26ffe18f25359d072ef38fa\n\nFlow add/list now works\n\nChange-Id: Ie3e3e73108645b47891cef798fc61372a022fd93\n\nMissed some files\n\nChange-Id: I29e81238ff1a26c095c0c73e521579edf7092e21\n"
    },
    {
      "commit": "a54b663f7fe41e222b069bd3ef3e97d3b725d9bd",
      "tree": "6d3c32a7284ad4c237e84fcaa3f72dc8bf3597c7",
      "parents": [
        "da4ef468cbd18c886d50a5af7a4f19e78eda233e"
      ],
      "author": {
        "name": "Khen Nursimulu",
        "email": "knursimu@ciena.com",
        "time": "Tue Oct 18 18:01:25 2016 -0400"
      },
      "committer": {
        "name": "Khen Nursimulu",
        "email": "knursimu@ciena.com",
        "time": "Tue Oct 18 18:01:25 2016 -0400"
      },
      "message": "Adding a wait for containers condition\n\nChange-Id: I4601b9f9e2f17ccfaaa1fcc6c24eaf9e13dd3b38\n"
    },
    {
      "commit": "37a9bf8598001d303178fa2d481e214501004937",
      "tree": "08583c171f70b9a5660f2a330ee16143ae0a206c",
      "parents": [
        "b4b11afec1145a93b6e61c842be1dda92c5e9fa2"
      ],
      "author": {
        "name": "Khen Nursimulu",
        "email": "knursimu@ciena.com",
        "time": "Sun Oct 16 20:11:31 2016 -0400"
      },
      "committer": {
        "name": "Khen Nursimulu",
        "email": "knursimu@ciena.com",
        "time": "Sun Oct 16 20:11:43 2016 -0400"
      },
      "message": "Integration test for the build.md file\n\nChange-Id: I93d25f1563636696a5f71471a06056eafee3e9e2\n"
    },
    {
      "commit": "bae127558ab82e7d662e20e077415fcaccecd765",
      "tree": "83ae8e5895e901ed3467b384e89b92393cdfbade",
      "parents": [
        "c51c065b01038381efb030cc7abdd3fcbe38eb75"
      ],
      "author": {
        "name": "Zsolt Haraszti",
        "email": "zharaszt@ciena.com",
        "time": "Mon Oct 10 09:55:30 2016 -0700"
      },
      "committer": {
        "name": "Zsolt Haraszti",
        "email": "zharaszt@ciena.com",
        "time": "Wed Oct 12 00:44:51 2016 -0700"
      },
      "message": "Chameleon swagger support\n\nChange-Id: I63b8dc7b31d5e87aa0e5153da302537d90ff733e\n"
    },
    {
      "commit": "a96d20d3d35fd94390fe1cb493c522c8e09fbda2",
      "tree": "a60d6ee41cfd82a5bdebff6444b15c9492b1b0dd",
      "parents": [
        "aa3a584c87538701a0b5e212927bb9a8544ec11a"
      ],
      "author": {
        "name": "Nathan Knuth",
        "email": "nathan.knuth@cyaninc.com",
        "time": "Thu Sep 08 14:40:26 2016 -0700"
      },
      "committer": {
        "name": "Nathan Knuth",
        "email": "nathan.knuth@cyaninc.com",
        "time": "Thu Sep 08 14:40:26 2016 -0700"
      },
      "message": "Initial setup.py\n"
    }
  ]
}
