)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"028c9cda209b45bd5b714417440cf42c826b6543","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     kebo duan \u003cduankebo@outlook.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-01-27 17:29:58 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"This spec is for selective proactive distribution."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Iac0169f8b5838d9ec224d8db47032f43c7a9c20a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"7a5de9d1_acddf515","line":7,"updated":"2016-01-28 07:41:17.000000000","message":"In order to track the status, please add a corresponding link in launchpad.net\n\nhttps://blueprints.launchpad.net/dragonflow\n\nAnd add the bp link in this commit message:\n\nImplements: blueprint xxx","commit_id":"791f90e590f63159616769d171fc3c3640227c4a"}],"doc/source/specs/selective_topo_dist.rst":[{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"6e77f451fb841f9ee9af3738cf7789a082bd5b3b","unresolved":false,"context_lines":[{"line_number":2,"context_line":".."},{"line_number":3,"context_line":" This work is licensed under a Creative Commons Attribution 3.0 Unported"},{"line_number":4,"context_line":" License."},{"line_number":5,"context_line":""},{"line_number":6,"context_line":" http://creativecommons.org/licenses/by/3.0/legalcode"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a5de9d1_a13e85b6","line":5,"updated":"2016-01-27 13:28:59.000000000","message":"you also need to add this to doc/source/specs/index.rst\n\n(add \"selective_topo_dist\" under \"distributed_dnat\" which is an example how to do it)\n\nThis will link it to the index when the docs are generated after this is merged","commit_id":"791f90e590f63159616769d171fc3c3640227c4a"},{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"6fadbd7e906f2ec59198f50e63cb204869c21b98","unresolved":false,"context_lines":[{"line_number":2,"context_line":".."},{"line_number":3,"context_line":" This work is licensed under a Creative Commons Attribution 3.0 Unported"},{"line_number":4,"context_line":" License."},{"line_number":5,"context_line":""},{"line_number":6,"context_line":" http://creativecommons.org/licenses/by/3.0/legalcode"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a5de9d1_e3e17e9b","line":5,"in_reply_to":"7a5de9d1_a13e85b6","updated":"2016-01-29 04:44:53.000000000","message":"Done","commit_id":"791f90e590f63159616769d171fc3c3640227c4a"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"028c9cda209b45bd5b714417440cf42c826b6543","unresolved":false,"context_lines":[{"line_number":5,"context_line":""},{"line_number":6,"context_line":" http://creativecommons.org/licenses/by/3.0/legalcode"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":"Selective Topology Distribution"},{"line_number":11,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a5de9d1_8c1119af","line":8,"updated":"2016-01-28 07:41:17.000000000","message":"Suggest to insert newline character if necessary. It is a little bit harder to read.","commit_id":"791f90e590f63159616769d171fc3c3640227c4a"},{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"6fadbd7e906f2ec59198f50e63cb204869c21b98","unresolved":false,"context_lines":[{"line_number":5,"context_line":""},{"line_number":6,"context_line":" http://creativecommons.org/licenses/by/3.0/legalcode"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":"Selective Topology Distribution"},{"line_number":11,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a5de9d1_43e9727f","line":8,"in_reply_to":"7a5de9d1_8c1119af","updated":"2016-01-29 04:44:53.000000000","message":"Done","commit_id":"791f90e590f63159616769d171fc3c3640227c4a"},{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"6e77f451fb841f9ee9af3738cf7789a082bd5b3b","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Problem Description"},{"line_number":16,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":17,"context_line":"Currently, Dragonflow local controller caches all the topology info, for example all the networks, ports and routers etc. In fact,one compute node only have dozens of virtual machines and topology info used by these VMs is merely a tiny part of the topology of the whole data center networks. Most of the info cached by Dragonflow local controller will never be used by the controller."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Moreover, in order to keep all the cached topology info up to date, local controllers have to repeatedly communicate with the Dragonflow database. With the increase of compute nodes, communication of this type will also increase correspondingly. For Dragonflow local controllers, this method will cause high CPU and memory occupation rate. It\u0027s more disastrous to Dragonflow database, for there will be too many request from tens of thousands compute nodes for it to process."},{"line_number":20,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a5de9d1_a63a1be6","line":17,"updated":"2016-01-27 13:28:59.000000000","message":"Its usually best to keep lines at 80 chars.\nIt will be easier to review that way.","commit_id":"791f90e590f63159616769d171fc3c3640227c4a"},{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"6fadbd7e906f2ec59198f50e63cb204869c21b98","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Problem Description"},{"line_number":16,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":17,"context_line":"Currently, Dragonflow local controller caches all the topology info, for example all the networks, ports and routers etc. In fact,one compute node only have dozens of virtual machines and topology info used by these VMs is merely a tiny part of the topology of the whole data center networks. Most of the info cached by Dragonflow local controller will never be used by the controller."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Moreover, in order to keep all the cached topology info up to date, local controllers have to repeatedly communicate with the Dragonflow database. With the increase of compute nodes, communication of this type will also increase correspondingly. For Dragonflow local controllers, this method will cause high CPU and memory occupation rate. It\u0027s more disastrous to Dragonflow database, for there will be too many request from tens of thousands compute nodes for it to process."},{"line_number":20,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a5de9d1_63ecae8f","line":17,"in_reply_to":"7a5de9d1_a63a1be6","updated":"2016-01-29 04:44:53.000000000","message":"Done","commit_id":"791f90e590f63159616769d171fc3c3640227c4a"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"8505034fcb83983d24c4b52039c33bb67b34f289","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"The idea is quite simple: each Dragonflow local controller subscribe topology info it\u0027s interested in from the sub-pub server. When topology changed, in addition to save it to the Dragonflow database, neutron plugin or Dragonflow local controller has to publish the change to the sub-pub server also. The sub-pub server then publishes the change to who that subscribe the change."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"Publisher subscriber pattern"},{"line_number":30,"context_line":"^^^^^^^^^^^^^^^^^^^^^^^^^^^^"},{"line_number":31,"context_line":"Selective topology distribution depends on the sub-pub function which is shown in the following diagram. When there is a topology change, for example, new port created by a tenant, a publisher(in this case, the Dragonflow neutron plugin) will publish this event together with detailed info of the new port to a Topic. Every topic records a list of subscribers. On received a event from publisher, the topic will send the event to every subscribers in the list. For the port creating example, there may be many Dragonflow local controllers which have ports connecting to the same network with the new port. These local controllers care about changes of ports in the network and will subscribe change of this network by registering to the corresponding topic. These controllers will get notified by the topic when this new port is added."},{"line_number":32,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a5de9d1_0f0cb839","line":29,"range":{"start_line":29,"start_character":0,"end_line":29,"end_character":28},"updated":"2016-01-31 20:18:37.000000000","message":"Most pub sub use the client side filtering.\nthey act like \"multicast server\" traffic they are not aware of all the connected client same as in multicast only the local switch/router will handle the IGMP registration.\n\n\nIf we use it this way it will not reach the local cache and ovs flows but it will be transmitted to all the clients.\nLets discuss this in the IRC meeting tomorrow.","commit_id":"791f90e590f63159616769d171fc3c3640227c4a"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"8505034fcb83983d24c4b52039c33bb67b34f289","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":"**Pros**"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"Easier for Publisher to decide which topic to public."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"Easier for Subscriber to decide which topic to subscribe."},{"line_number":62,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a5de9d1_5d1fcd6b","line":59,"range":{"start_line":59,"start_character":46,"end_line":59,"end_character":52},"updated":"2016-01-31 20:18:37.000000000","message":"to publish","commit_id":"791f90e590f63159616769d171fc3c3640227c4a"},{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"6e77f451fb841f9ee9af3738cf7789a082bd5b3b","unresolved":false,"context_lines":[{"line_number":91,"context_line":"+-------+--------+ +------+---------+ | Controller 1     |  | Controller2      |"},{"line_number":92,"context_line":"        |                 |           +--------+---------+  +--------+---------+"},{"line_number":93,"context_line":"        |                 |                    |                     |"},{"line_number":94,"context_line":"        |                 |                    |                     |"},{"line_number":95,"context_line":"        | publish(tenant1)|                    |                     |"},{"line_number":96,"context_line":"        +-----------------\u003e                    |                     |"},{"line_number":97,"context_line":"        |                 |   publish(tenant1) |                     |"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a5de9d1_81cee981","line":94,"updated":"2016-01-27 13:28:59.000000000","message":"need to describe the case of system up with ports","commit_id":"791f90e590f63159616769d171fc3c3640227c4a"},{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"6fadbd7e906f2ec59198f50e63cb204869c21b98","unresolved":false,"context_lines":[{"line_number":91,"context_line":"+-------+--------+ +------+---------+ | Controller 1     |  | Controller2      |"},{"line_number":92,"context_line":"        |                 |           +--------+---------+  +--------+---------+"},{"line_number":93,"context_line":"        |                 |                    |                     |"},{"line_number":94,"context_line":"        |                 |                    |                     |"},{"line_number":95,"context_line":"        | publish(tenant1)|                    |                     |"},{"line_number":96,"context_line":"        +-----------------\u003e                    |                     |"},{"line_number":97,"context_line":"        |                 |   publish(tenant1) |                     |"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a5de9d1_c3fd623b","line":94,"in_reply_to":"7a5de9d1_81cee981","updated":"2016-01-29 04:44:53.000000000","message":"Done","commit_id":"791f90e590f63159616769d171fc3c3640227c4a"},{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"6e77f451fb841f9ee9af3738cf7789a082bd5b3b","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        | publish(tenant1)|                    |                     |"},{"line_number":96,"context_line":"        +-----------------\u003e                    |                     |"},{"line_number":97,"context_line":"        |                 |   publish(tenant1) |                     |"},{"line_number":98,"context_line":"        |                 +--------------------\u003e                     |"},{"line_number":99,"context_line":"        |                 |                    |                     |"},{"line_number":100,"context_line":"        |                 |                    |                     |"},{"line_number":101,"context_line":"        +                 +                    +                     +"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a5de9d1_2194d535","line":98,"updated":"2016-01-27 13:28:59.000000000","message":"How you manage deletes, how do you know when there are no more ports for specific tenant.\n\nAlso how you know its a \"new\" tenant in this compute node, probably needs to be described as well","commit_id":"791f90e590f63159616769d171fc3c3640227c4a"},{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"6fadbd7e906f2ec59198f50e63cb204869c21b98","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        | publish(tenant1)|                    |                     |"},{"line_number":96,"context_line":"        +-----------------\u003e                    |                     |"},{"line_number":97,"context_line":"        |                 |   publish(tenant1) |                     |"},{"line_number":98,"context_line":"        |                 +--------------------\u003e                     |"},{"line_number":99,"context_line":"        |                 |                    |                     |"},{"line_number":100,"context_line":"        |                 |                    |                     |"},{"line_number":101,"context_line":"        +                 +                    +                     +"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a5de9d1_4642e011","line":98,"in_reply_to":"7a5de9d1_2194d535","updated":"2016-01-29 04:44:53.000000000","message":"Done","commit_id":"791f90e590f63159616769d171fc3c3640227c4a"},{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"6e77f451fb841f9ee9af3738cf7789a082bd5b3b","unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"Processing of other northbound topology change, such as creating, deleting or modifying router, network and port are same as the above example."},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"Southbound Topology Change"},{"line_number":108,"context_line":"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\""},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"When nova startup a VM on a host, it will insert a port on the corresponding OVS bridge. On knowing a new OVS port online, Dragonflow local controller queries port\u0027s topology from database and knows which tenant the port belongs to. After that, local controller will subscribe the tenant\u0027s topic."}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a5de9d1_21e295d6","line":107,"updated":"2016-01-27 13:28:59.000000000","message":"How is the OVSDB monitor thread tells the controller that a port is added, we already have a queue that\n\nThe controller listen to DB changes, so it needs to be a message for that queue as well, maybe something\nElse.","commit_id":"791f90e590f63159616769d171fc3c3640227c4a"},{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"6fadbd7e906f2ec59198f50e63cb204869c21b98","unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"Processing of other northbound topology change, such as creating, deleting or modifying router, network and port are same as the above example."},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"Southbound Topology Change"},{"line_number":108,"context_line":"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\""},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"When nova startup a VM on a host, it will insert a port on the corresponding OVS bridge. On knowing a new OVS port online, Dragonflow local controller queries port\u0027s topology from database and knows which tenant the port belongs to. After that, local controller will subscribe the tenant\u0027s topic."}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a5de9d1_860698cc","line":107,"in_reply_to":"7a5de9d1_21e295d6","updated":"2016-01-29 04:44:53.000000000","message":"There will be another spec describes how OVSDB monitor works.","commit_id":"791f90e590f63159616769d171fc3c3640227c4a"},{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"6e77f451fb841f9ee9af3738cf7789a082bd5b3b","unresolved":false,"context_lines":[{"line_number":119,"context_line":"       |                    |    | online"},{"line_number":120,"context_line":"       |                    \u003c----+"},{"line_number":121,"context_line":"       |                    |"},{"line_number":122,"context_line":"       |                 Get port\u0027s topology"},{"line_number":123,"context_line":"       |                 from database"},{"line_number":124,"context_line":"       |                    |"},{"line_number":125,"context_line":"       | subscribe(tenant1) |"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a5de9d1_813fc924","line":122,"updated":"2016-01-27 13:28:59.000000000","message":"How do we fetch all tenant information from the DB once a new tenant is spotted on the compute node\n\nHow do we understand the port tenant id? it really depends how the DB is stored, we might want to start storing it by tenants, we also need to extend the DB_driver API to bring entities only for specific topic, so this probably needs to be described here as well","commit_id":"791f90e590f63159616769d171fc3c3640227c4a"},{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"6fadbd7e906f2ec59198f50e63cb204869c21b98","unresolved":false,"context_lines":[{"line_number":119,"context_line":"       |                    |    | online"},{"line_number":120,"context_line":"       |                    \u003c----+"},{"line_number":121,"context_line":"       |                    |"},{"line_number":122,"context_line":"       |                 Get port\u0027s topology"},{"line_number":123,"context_line":"       |                 from database"},{"line_number":124,"context_line":"       |                    |"},{"line_number":125,"context_line":"       | subscribe(tenant1) |"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a5de9d1_862d3848","line":122,"in_reply_to":"7a5de9d1_813fc924","updated":"2016-01-29 04:44:53.000000000","message":"The api of dragonflow db will be defined in another api.","commit_id":"791f90e590f63159616769d171fc3c3640227c4a"}]}
