)]}'
{"doc/source/specs/publish_subscribe_abstraction.rst":[{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"6567397567d7d57b0f534d3042624fde31e5fdee","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"The following diagram depicts Dragonflow architecture with the build in"},{"line_number":53,"context_line":"publish-subscribe module:"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"+--------------------+           +-----------------------+"},{"line_number":56,"context_line":"|                    |           |                       |"},{"line_number":57,"context_line":"|  Dragonflow        |           |   NB API Adapter      |"}],"source_content_type":"text/x-rst","patch_set":3,"id":"fa69d971_cc5b1485","line":54,"updated":"2016-01-11 15:14:02.000000000","message":"How to draw these fascinating ascii picture in the spec?","commit_id":"fd33cc94fe8340c517b27d3dee773db97f3e9375"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"ecf8f8a1c4be79580148cbd55729cbbbfa37902d","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"The following diagram depicts Dragonflow architecture with the build in"},{"line_number":53,"context_line":"publish-subscribe module:"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"+--------------------+           +-----------------------+"},{"line_number":56,"context_line":"|                    |           |                       |"},{"line_number":57,"context_line":"|  Dragonflow        |           |   NB API Adapter      |"}],"source_content_type":"text/x-rst","patch_set":3,"id":"da6ed579_78a15a45","line":54,"in_reply_to":"da6ed579_7f046abf","updated":"2016-01-15 08:10:51.000000000","message":"Thanks. :-)","commit_id":"fd33cc94fe8340c517b27d3dee773db97f3e9375"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"9601d9e23d0bd5a1e220146f747b96e797a60972","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"The following diagram depicts Dragonflow architecture with the build in"},{"line_number":53,"context_line":"publish-subscribe module:"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"+--------------------+           +-----------------------+"},{"line_number":56,"context_line":"|                    |           |                       |"},{"line_number":57,"context_line":"|  Dragonflow        |           |   NB API Adapter      |"}],"source_content_type":"text/x-rst","patch_set":3,"id":"da6ed579_7f046abf","line":54,"in_reply_to":"fa69d971_cc5b1485","updated":"2016-01-13 06:02:11.000000000","message":"You can use http://asciiflow.com/","commit_id":"fd33cc94fe8340c517b27d3dee773db97f3e9375"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"9601d9e23d0bd5a1e220146f747b96e797a60972","unresolved":false,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":"**df-db** CLI tool also needs to be enhanced to support publish-subscribe"},{"line_number":130,"context_line":"notifications as it can be used to bind ports to specific compute nodes"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"Subscriber"},{"line_number":134,"context_line":"----------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"da6ed579_bf40a2a6","line":131,"updated":"2016-01-13 06:02:11.000000000","message":"I think that we should add information about the queue \nWe have a global multi process queue in the Neutron plugin \nAnd we have a one thread that pick the messages from the qouee and dispatch them.\nIn the Controller it is normal queue.\nLet me know if you like,i could add this changes next week","commit_id":"fd33cc94fe8340c517b27d3dee773db97f3e9375"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"ecf8f8a1c4be79580148cbd55729cbbbfa37902d","unresolved":false,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":"**df-db** CLI tool also needs to be enhanced to support publish-subscribe"},{"line_number":130,"context_line":"notifications as it can be used to bind ports to specific compute nodes"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"Subscriber"},{"line_number":134,"context_line":"----------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"da6ed579_9898ce1d","line":131,"in_reply_to":"da6ed579_bf40a2a6","updated":"2016-01-15 08:10:51.000000000","message":"+1 I think it\u0027s worth adding the queue section. It is also important to understand the mechanism.","commit_id":"fd33cc94fe8340c517b27d3dee773db97f3e9375"},{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"fcee4dcc85443103d2eb17aa0154a062318e7bda","unresolved":false,"context_lines":[{"line_number":139,"context_line":"them back to the controller, similar to the process that a DB driver"},{"line_number":140,"context_line":"would do."},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"Its important to note, as mentioned above, that every controller also publish"},{"line_number":143,"context_line":"itself (send details about the compute node like IP, hostname and tunneling protocol)"},{"line_number":144,"context_line":"to the other controllers."},{"line_number":145,"context_line":"This is done one time on controller bring up, and only if the controller"},{"line_number":146,"context_line":"didn\u0027t publish its self before (if a DB entry exists or not in the"},{"line_number":147,"context_line":"chassis table)"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_efe87fe4","line":144,"range":{"start_line":142,"start_character":0,"end_line":144,"end_character":25},"updated":"2016-01-29 06:49:18.000000000","message":"Can this only be published to controllers need to communicate with this controller. For example, controllers have vms created by the same tenant.","commit_id":"fd33cc94fe8340c517b27d3dee773db97f3e9375"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"20d5ee9bcecdac2021e751e4339ac57a1cf4b952","unresolved":false,"context_lines":[{"line_number":139,"context_line":"them back to the controller, similar to the process that a DB driver"},{"line_number":140,"context_line":"would do."},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"Its important to note, as mentioned above, that every controller also publish"},{"line_number":143,"context_line":"itself (send details about the compute node like IP, hostname and tunneling protocol)"},{"line_number":144,"context_line":"to the other controllers."},{"line_number":145,"context_line":"This is done one time on controller bring up, and only if the controller"},{"line_number":146,"context_line":"didn\u0027t publish its self before (if a DB entry exists or not in the"},{"line_number":147,"context_line":"chassis table)"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_279a3b64","line":144,"range":{"start_line":142,"start_character":0,"end_line":144,"end_character":25},"in_reply_to":"7a5de9d1_efe87fe4","updated":"2016-01-29 08:18:09.000000000","message":"If we want to avoid tunnel creation, we whould have to take care of crating them on demand, This part should be covered in the Selective DB distributions\n\nCurrently in this design we update all the compute nodes \n\nThe chassis update is only on the first time the Host local controller registered itself so it does not happen very often so we could use ZMQ  client side filtering.\n\nI will update this spec soon the pub sub reliability","commit_id":"fd33cc94fe8340c517b27d3dee773db97f3e9375"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"6567397567d7d57b0f534d3042624fde31e5fdee","unresolved":false,"context_lines":[{"line_number":167,"context_line":"totally abstracted from Dragonflow and can later be changed and"},{"line_number":168,"context_line":"optimized."},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"The default implementation will use nano queue [1], but it can be easily"},{"line_number":171,"context_line":"changed."},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"DB drivers that don`t support publish-subscribe can leverage this module but"}],"source_content_type":"text/x-rst","patch_set":3,"id":"fa69d971_8c875cb4","line":170,"range":{"start_line":170,"start_character":36,"end_line":170,"end_character":40},"updated":"2016-01-11 15:14:02.000000000","message":"currently we use zeromq instead, right?","commit_id":"fd33cc94fe8340c517b27d3dee773db97f3e9375"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"ecf8f8a1c4be79580148cbd55729cbbbfa37902d","unresolved":false,"context_lines":[{"line_number":167,"context_line":"totally abstracted from Dragonflow and can later be changed and"},{"line_number":168,"context_line":"optimized."},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"The default implementation will use nano queue [1], but it can be easily"},{"line_number":171,"context_line":"changed."},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"DB drivers that don`t support publish-subscribe can leverage this module but"}],"source_content_type":"text/x-rst","patch_set":3,"id":"da6ed579_d8e406ad","line":170,"range":{"start_line":170,"start_character":36,"end_line":170,"end_character":40},"in_reply_to":"da6ed579_1faf6e95","updated":"2016-01-15 08:10:51.000000000","message":"Yes. zeromq is just the first step.","commit_id":"fd33cc94fe8340c517b27d3dee773db97f3e9375"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"9601d9e23d0bd5a1e220146f747b96e797a60972","unresolved":false,"context_lines":[{"line_number":167,"context_line":"totally abstracted from Dragonflow and can later be changed and"},{"line_number":168,"context_line":"optimized."},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"The default implementation will use nano queue [1], but it can be easily"},{"line_number":171,"context_line":"changed."},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"DB drivers that don`t support publish-subscribe can leverage this module but"}],"source_content_type":"text/x-rst","patch_set":3,"id":"da6ed579_1faf6e95","line":170,"range":{"start_line":170,"start_character":36,"end_line":170,"end_character":40},"in_reply_to":"fa69d971_8c875cb4","updated":"2016-01-13 06:02:11.000000000","message":"Yes we should change that \nAnd i think the spec should include that we will support pluggable  implementation","commit_id":"fd33cc94fe8340c517b27d3dee773db97f3e9375"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"9601d9e23d0bd5a1e220146f747b96e797a60972","unresolved":false,"context_lines":[{"line_number":175,"context_line":""},{"line_number":176,"context_line":"References"},{"line_number":177,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":178,"context_line":"[1] http://nanomsg.org/"}],"source_content_type":"text/x-rst","patch_set":3,"id":"da6ed579_3fc83222","line":178,"range":{"start_line":178,"start_character":8,"end_line":178,"end_character":11},"updated":"2016-01-13 06:02:11.000000000","message":"we need to change this to zmq","commit_id":"fd33cc94fe8340c517b27d3dee773db97f3e9375"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"ddaa2286a86d5425808fd9c31bda7ccd765b9566","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"The pub-sub module will be pluggable and allow different drivers to be developed as"},{"line_number":99,"context_line":"the pubsub module driver that will implement the interface of the pubsub api"},{"line_number":100,"context_line":"referenced below [2]."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"Publisher"},{"line_number":103,"context_line":"----------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a5de9d1_a11b3080","line":100,"updated":"2016-02-01 09:28:43.000000000","message":"I\u0027m thinking of how to take advantage of oslo.messaging for unified messaging pipeline. As a result, we don\u0027t need to care much about pluggable framework.","commit_id":"72c19b90432eb62c5e917f9f3bd210d03e607670"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"81171594f21cd86e0a62643f9296eb75ae208762","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"The pub-sub module will be pluggable and allow different drivers to be developed as"},{"line_number":99,"context_line":"the pubsub module driver that will implement the interface of the pubsub api"},{"line_number":100,"context_line":"referenced below [2]."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"Publisher"},{"line_number":103,"context_line":"----------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a5de9d1_7550840b","line":100,"in_reply_to":"7a5de9d1_a11b3080","updated":"2016-02-01 14:08:03.000000000","message":"I am not sure i fully understand lets try to discuss this on IRC \n\n\nplease look at the code  I will add soon the topic subscription to the  API \n\nhttps://review.openstack.org/#/c/263322/20/dragonflow/db/pub_sub_api.py","commit_id":"72c19b90432eb62c5e917f9f3bd210d03e607670"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"ddaa2286a86d5425808fd9c31bda7ccd765b9566","unresolved":false,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":"               +-+-+-+-+-+            +---------+"},{"line_number":145,"context_line":"Send_event+--\u003e | | | | | | +--------\u003e |Publisher|  Publish on publish port"},{"line_number":146,"context_line":"               | | | | | |            |Therad   |----------\u003e"},{"line_number":147,"context_line":"               +-+-+-+-+-+            +---------+"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"**df-db** CLI tool also needs to be enhanced to support publish-subscribe"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a5de9d1_8114f44c","line":146,"updated":"2016-02-01 09:28:43.000000000","message":"Thread","commit_id":"72c19b90432eb62c5e917f9f3bd210d03e607670"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"81171594f21cd86e0a62643f9296eb75ae208762","unresolved":false,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":"               +-+-+-+-+-+            +---------+"},{"line_number":145,"context_line":"Send_event+--\u003e | | | | | | +--------\u003e |Publisher|  Publish on publish port"},{"line_number":146,"context_line":"               | | | | | |            |Therad   |----------\u003e"},{"line_number":147,"context_line":"               +-+-+-+-+-+            +---------+"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"**df-db** CLI tool also needs to be enhanced to support publish-subscribe"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a5de9d1_921e766e","line":146,"in_reply_to":"7a5de9d1_8114f44c","updated":"2016-02-01 14:08:03.000000000","message":"Done","commit_id":"72c19b90432eb62c5e917f9f3bd210d03e607670"},{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"3ffcf643d76d639fb2b22f58c9bf841b911eb16b","unresolved":false,"context_lines":[{"line_number":156,"context_line":"the daemonize() API of the subscriber and send the callback method."},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"The subscriber is in charge to receiving the notifications from both publishers"},{"line_number":159,"context_line":"neutron server and from teh local controllers and sending them back to the"},{"line_number":160,"context_line":"controller, similar to the process that a DB driver would do."},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"Its important to note, as mentioned above, that every controller also publish"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a5de9d1_6008c0da","line":159,"updated":"2016-02-01 14:42:12.000000000","message":"the   , and i would rephrased, \"from the other local controllers\"","commit_id":"72c19b90432eb62c5e917f9f3bd210d03e607670"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"71009678e027139f8e0cd946b2a403df28b57b9d","unresolved":false,"context_lines":[{"line_number":156,"context_line":"the daemonize() API of the subscriber and send the callback method."},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"The subscriber is in charge to receiving the notifications from both publishers"},{"line_number":159,"context_line":"neutron server and from teh local controllers and sending them back to the"},{"line_number":160,"context_line":"controller, similar to the process that a DB driver would do."},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"Its important to note, as mentioned above, that every controller also publish"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a5de9d1_11403206","line":159,"in_reply_to":"7a5de9d1_6008c0da","updated":"2016-02-01 19:56:05.000000000","message":"Done","commit_id":"72c19b90432eb62c5e917f9f3bd210d03e607670"},{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"3ffcf643d76d639fb2b22f58c9bf841b911eb16b","unresolved":false,"context_lines":[{"line_number":157,"context_line":""},{"line_number":158,"context_line":"The subscriber is in charge to receiving the notifications from both publishers"},{"line_number":159,"context_line":"neutron server and from teh local controllers and sending them back to the"},{"line_number":160,"context_line":"controller, similar to the process that a DB driver would do."},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"Its important to note, as mentioned above, that every controller also publish"},{"line_number":163,"context_line":"itself (send details about the compute node like IP, hostname and tunneling protocol)"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a5de9d1_001f8c08","line":160,"updated":"2016-02-01 14:42:12.000000000","message":"\"sending them for processing\"","commit_id":"72c19b90432eb62c5e917f9f3bd210d03e607670"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"71009678e027139f8e0cd946b2a403df28b57b9d","unresolved":false,"context_lines":[{"line_number":157,"context_line":""},{"line_number":158,"context_line":"The subscriber is in charge to receiving the notifications from both publishers"},{"line_number":159,"context_line":"neutron server and from teh local controllers and sending them back to the"},{"line_number":160,"context_line":"controller, similar to the process that a DB driver would do."},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"Its important to note, as mentioned above, that every controller also publish"},{"line_number":163,"context_line":"itself (send details about the compute node like IP, hostname and tunneling protocol)"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a5de9d1_713de68d","line":160,"in_reply_to":"7a5de9d1_001f8c08","updated":"2016-02-01 19:56:05.000000000","message":"Done","commit_id":"72c19b90432eb62c5e917f9f3bd210d03e607670"},{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"3ffcf643d76d639fb2b22f58c9bf841b911eb16b","unresolved":false,"context_lines":[{"line_number":195,"context_line":""},{"line_number":196,"context_line":"Reliable Delivery"},{"line_number":197,"context_line":"-----------------"},{"line_number":198,"context_line":"We pubsub must comply to the following requirements"},{"line_number":199,"context_line":"- Recognize connection drop"},{"line_number":200,"context_line":"- Local Cache Consistency"},{"line_number":201,"context_line":"- Recognize losing an event"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a5de9d1_a0c79862","line":198,"updated":"2016-02-01 14:42:12.000000000","message":"\"The pubsub module must..\"","commit_id":"72c19b90432eb62c5e917f9f3bd210d03e607670"},{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"3ffcf643d76d639fb2b22f58c9bf841b911eb16b","unresolved":false,"context_lines":[{"line_number":198,"context_line":"We pubsub must comply to the following requirements"},{"line_number":199,"context_line":"- Recognize connection drop"},{"line_number":200,"context_line":"- Local Cache Consistency"},{"line_number":201,"context_line":"- Recognize losing an event"},{"line_number":202,"context_line":"- Recognize losing an event"},{"line_number":203,"context_line":"- Configurable max time for detecting lost messages"},{"line_number":204,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a5de9d1_20aac885","line":201,"updated":"2016-02-01 14:42:12.000000000","message":"wrote the same line twice \"Recognize losing an event\"","commit_id":"72c19b90432eb62c5e917f9f3bd210d03e607670"},{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"3ffcf643d76d639fb2b22f58c9bf841b911eb16b","unresolved":false,"context_lines":[{"line_number":204,"context_line":""},{"line_number":205,"context_line":"Neutron Publisher Proposed Solution"},{"line_number":206,"context_line":"-------------------------------------"},{"line_number":207,"context_line":"- Handle reconnect and perform full sync"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"- Local Cache Consistency"},{"line_number":210,"context_line":"We will use trigger based pub sub event without the value, the value"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a5de9d1_003eac27","line":207,"updated":"2016-02-01 14:42:12.000000000","message":"I am not sure what you meant here, but a problem can be if the Neutron server that suppose to send the event \"died\" in the middle, maybe we can define a special message that will tell the local controllers to basically do full sync from the DB.\n(Also we need to refresh the sequence numbering in this case, so we need a \"sync up\" message at startup)","commit_id":"72c19b90432eb62c5e917f9f3bd210d03e607670"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"71009678e027139f8e0cd946b2a403df28b57b9d","unresolved":false,"context_lines":[{"line_number":204,"context_line":""},{"line_number":205,"context_line":"Neutron Publisher Proposed Solution"},{"line_number":206,"context_line":"-------------------------------------"},{"line_number":207,"context_line":"- Handle reconnect and perform full sync"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"- Local Cache Consistency"},{"line_number":210,"context_line":"We will use trigger based pub sub event without the value, the value"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a5de9d1_f17556ca","line":207,"in_reply_to":"7a5de9d1_003eac27","updated":"2016-02-01 19:56:05.000000000","message":"Yes i agree and actually have the sync action.\nThe difficult part will how to detect that this is a startup after crash","commit_id":"72c19b90432eb62c5e917f9f3bd210d03e607670"},{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"3ffcf643d76d639fb2b22f58c9bf841b911eb16b","unresolved":false,"context_lines":[{"line_number":207,"context_line":"- Handle reconnect and perform full sync"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"- Local Cache Consistency"},{"line_number":210,"context_line":"We will use trigger based pub sub event without the value, the value"},{"line_number":211,"context_line":"will be fetched using the DB get. This insure consistency and message"},{"line_number":212,"context_line":"ordering in cost of extra latency i.e get."},{"line_number":213,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a5de9d1_e057d055","line":210,"updated":"2016-02-01 14:42:12.000000000","message":"important to mention that this solves ordering problem (local cache consistency vs DF DB)","commit_id":"72c19b90432eb62c5e917f9f3bd210d03e607670"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"71009678e027139f8e0cd946b2a403df28b57b9d","unresolved":false,"context_lines":[{"line_number":207,"context_line":"- Handle reconnect and perform full sync"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"- Local Cache Consistency"},{"line_number":210,"context_line":"We will use trigger based pub sub event without the value, the value"},{"line_number":211,"context_line":"will be fetched using the DB get. This insure consistency and message"},{"line_number":212,"context_line":"ordering in cost of extra latency i.e get."},{"line_number":213,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a5de9d1_51346afa","line":210,"in_reply_to":"7a5de9d1_e057d055","updated":"2016-02-01 19:56:05.000000000","message":"Yes it is there see below","commit_id":"72c19b90432eb62c5e917f9f3bd210d03e607670"},{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"3ffcf643d76d639fb2b22f58c9bf841b911eb16b","unresolved":false,"context_lines":[{"line_number":222,"context_line":"We need to develop an application layer on top of the pub/sub that guarantee"},{"line_number":223,"context_line":"delivery but as we stated befor do not guarantee order."},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"We proposed to use per publisher a next message ID, each Neutron server Host"},{"line_number":226,"context_line":"will have a single We propose to use per publisher a next message ID sequence"},{"line_number":227,"context_line":", each Neutron server Host will have a single publisher."},{"line_number":228,"context_line":"Each Publisher will add to the message it\u0027s uuid and the next message_id."}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a5de9d1_0001cc37","line":225,"updated":"2016-02-01 14:42:12.000000000","message":"propose","commit_id":"72c19b90432eb62c5e917f9f3bd210d03e607670"},{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"3ffcf643d76d639fb2b22f58c9bf841b911eb16b","unresolved":false,"context_lines":[{"line_number":223,"context_line":"delivery but as we stated befor do not guarantee order."},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"We proposed to use per publisher a next message ID, each Neutron server Host"},{"line_number":226,"context_line":"will have a single We propose to use per publisher a next message ID sequence"},{"line_number":227,"context_line":", each Neutron server Host will have a single publisher."},{"line_number":228,"context_line":"Each Publisher will add to the message it\u0027s uuid and the next message_id."},{"line_number":229,"context_line":"Subscriber will sync with all the publisher of connection on their next id."}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a5de9d1_a09238f4","line":226,"updated":"2016-02-01 14:42:12.000000000","message":"text here is wrong, seems like bad copy/paste","commit_id":"72c19b90432eb62c5e917f9f3bd210d03e607670"},{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"3ffcf643d76d639fb2b22f58c9bf841b911eb16b","unresolved":false,"context_lines":[{"line_number":229,"context_line":"Subscriber will sync with all the publisher of connection on their next id."},{"line_number":230,"context_line":"The subscribers will make sure they receive the next message in a time"},{"line_number":231,"context_line":"window defined by configuration but will not enforce ordering."},{"line_number":232,"context_line":"If subscriber did not receive message in the time window defined he will"},{"line_number":233,"context_line":"perform a full sync."},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"- Configurable max time for detecting lost messages"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a5de9d1_5b857957","line":232,"updated":"2016-02-01 14:42:12.000000000","message":"i would rephrase this, maybe put the algorithm as a list to make it clearer.\n\nAlso, we need to make sure to send a first sync of the number, in case of Neutron server restart.\n(as mentioned above)\n\nThis mechanism is only between the neutron plugin and the local controllers, right?","commit_id":"72c19b90432eb62c5e917f9f3bd210d03e607670"},{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"3ffcf643d76d639fb2b22f58c9bf841b911eb16b","unresolved":false,"context_lines":[{"line_number":238,"context_line":"message id."},{"line_number":239,"context_line":"Solution 1"},{"line_number":240,"context_line":"----------------"},{"line_number":241,"context_line":"Heartbeat messages from the publishers"},{"line_number":242,"context_line":"Solution 2"},{"line_number":243,"context_line":"----------------"},{"line_number":244,"context_line":"Add a new table in the DF DB with the publishers ID and next message"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a5de9d1_fbc22584","line":241,"updated":"2016-02-01 14:42:12.000000000","message":"better have some spaces here :)","commit_id":"72c19b90432eb62c5e917f9f3bd210d03e607670"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"71009678e027139f8e0cd946b2a403df28b57b9d","unresolved":false,"context_lines":[{"line_number":238,"context_line":"message id."},{"line_number":239,"context_line":"Solution 1"},{"line_number":240,"context_line":"----------------"},{"line_number":241,"context_line":"Heartbeat messages from the publishers"},{"line_number":242,"context_line":"Solution 2"},{"line_number":243,"context_line":"----------------"},{"line_number":244,"context_line":"Add a new table in the DF DB with the publishers ID and next message"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a5de9d1_fcdbed79","line":241,"in_reply_to":"7a5de9d1_fbc22584","updated":"2016-02-01 19:56:05.000000000","message":"Done","commit_id":"72c19b90432eb62c5e917f9f3bd210d03e607670"},{"author":{"_account_id":18668,"name":"ding bo","email":"longddropt@163.com","username":"longddropt"},"change_message_id":"d15d504cb240e5c246e7528a797e82ec358b80ce","unresolved":false,"context_lines":[{"line_number":81,"context_line":""},{"line_number":82,"context_line":"When this process ends, up until now the controller had two options, it would"},{"line_number":83,"context_line":"ask the DB driver if it supported publish subscribe, if not the controller"},{"line_number":84,"context_line":"continue with the sync loop and look for changes."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"If the DB driver support publish-subscribe the controller calls a specific"},{"line_number":87,"context_line":"API to the driver to register a callback."}],"source_content_type":"text/x-rst","patch_set":5,"id":"7a5de9d1_56e69244","line":84,"range":{"start_line":84,"start_character":0,"end_line":84,"end_character":8},"updated":"2016-02-02 02:28:54.000000000","message":"continues","commit_id":"5f20bcc5274636aac0e061d2dc9d6494bd9b44d8"},{"author":{"_account_id":18668,"name":"ding bo","email":"longddropt@163.com","username":"longddropt"},"change_message_id":"d15d504cb240e5c246e7528a797e82ec358b80ce","unresolved":false,"context_lines":[{"line_number":81,"context_line":""},{"line_number":82,"context_line":"When this process ends, up until now the controller had two options, it would"},{"line_number":83,"context_line":"ask the DB driver if it supported publish subscribe, if not the controller"},{"line_number":84,"context_line":"continue with the sync loop and look for changes."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"If the DB driver support publish-subscribe the controller calls a specific"},{"line_number":87,"context_line":"API to the driver to register a callback."}],"source_content_type":"text/x-rst","patch_set":5,"id":"7a5de9d1_16d33a61","line":84,"range":{"start_line":84,"start_character":32,"end_line":84,"end_character":36},"updated":"2016-02-02 02:28:54.000000000","message":"looks","commit_id":"5f20bcc5274636aac0e061d2dc9d6494bd9b44d8"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"eaceb0fceee193cf5efb4c07880d7ba187578193","unresolved":false,"context_lines":[{"line_number":81,"context_line":""},{"line_number":82,"context_line":"When this process ends, up until now the controller had two options, it would"},{"line_number":83,"context_line":"ask the DB driver if it supported publish subscribe, if not the controller"},{"line_number":84,"context_line":"continue with the sync loop and look for changes."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"If the DB driver support publish-subscribe the controller calls a specific"},{"line_number":87,"context_line":"API to the driver to register a callback."}],"source_content_type":"text/x-rst","patch_set":5,"id":"7a5de9d1_817a7722","line":84,"range":{"start_line":84,"start_character":0,"end_line":84,"end_character":8},"in_reply_to":"7a5de9d1_56e69244","updated":"2016-02-02 08:31:34.000000000","message":"Will do","commit_id":"5f20bcc5274636aac0e061d2dc9d6494bd9b44d8"},{"author":{"_account_id":18668,"name":"ding bo","email":"longddropt@163.com","username":"longddropt"},"change_message_id":"d15d504cb240e5c246e7528a797e82ec358b80ce","unresolved":false,"context_lines":[{"line_number":234,"context_line":""},{"line_number":235,"context_line":"Connection drop from the Publisher side (server crash):"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"publisher will send a sync up message and in case of inconsistency will send \u0027sync\u0027 action "},{"line_number":238,"context_line":"that will enforce a full sync on all the local controllers."},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"- Configurable max time for detecting lost messages"}],"source_content_type":"text/x-rst","patch_set":5,"id":"7a5de9d1_966baab6","line":237,"range":{"start_line":237,"start_character":90,"end_line":237,"end_character":91},"updated":"2016-02-02 02:28:54.000000000","message":"trailing space.","commit_id":"5f20bcc5274636aac0e061d2dc9d6494bd9b44d8"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"eaceb0fceee193cf5efb4c07880d7ba187578193","unresolved":false,"context_lines":[{"line_number":234,"context_line":""},{"line_number":235,"context_line":"Connection drop from the Publisher side (server crash):"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"publisher will send a sync up message and in case of inconsistency will send \u0027sync\u0027 action "},{"line_number":238,"context_line":"that will enforce a full sync on all the local controllers."},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"- Configurable max time for detecting lost messages"}],"source_content_type":"text/x-rst","patch_set":5,"id":"7a5de9d1_01952731","line":237,"range":{"start_line":237,"start_character":90,"end_line":237,"end_character":91},"in_reply_to":"7a5de9d1_966baab6","updated":"2016-02-02 08:31:34.000000000","message":"Will do","commit_id":"5f20bcc5274636aac0e061d2dc9d6494bd9b44d8"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"48d30b10a3100acf22c927546a936eb90a223597","unresolved":false,"context_lines":[{"line_number":161,"context_line":"Neutron Server q-svc process is forked on a multi-core host, in order to work"},{"line_number":162,"context_line":"around Python cooperative threading."},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"Each q-svc uses an IPC mechanism provided by the Publisher driver, in order"},{"line_number":165,"context_line":"to push its events through a shared"},{"line_number":166,"context_line":"*Publisher Service*, which binds to a one-per-host socket."},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"::"},{"line_number":169,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"dae33548_e58a3363","line":166,"range":{"start_line":164,"start_character":0,"end_line":166,"end_character":58},"updated":"2016-02-18 13:32:27.000000000","message":"This detail is internal to the publisher implementation. If by magic the driver manages to bind the port without a service process (e.g. when using UDP), then the Publisher Service may be winged.","commit_id":"db539efb79c8196334e32359f9abd621ef75bf87"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"b494b445cc9e842d560701aaf6e60cc2d4a23ff0","unresolved":false,"context_lines":[{"line_number":161,"context_line":"Neutron Server q-svc process is forked on a multi-core host, in order to work"},{"line_number":162,"context_line":"around Python cooperative threading."},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"Each q-svc uses an IPC mechanism provided by the Publisher driver, in order"},{"line_number":165,"context_line":"to push its events through a shared"},{"line_number":166,"context_line":"*Publisher Service*, which binds to a one-per-host socket."},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"::"},{"line_number":169,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"dae33548_ce1d8674","line":166,"range":{"start_line":164,"start_character":0,"end_line":166,"end_character":58},"in_reply_to":"dae33548_e58a3363","updated":"2016-02-18 15:14:56.000000000","message":"I agree that there are two possible pasterns I will describe both \n\n*Publisher Service (signal publisher, reference implementation)    \n\n* Multi Publisher connection on one Host like (multicast or epgm)","commit_id":"db539efb79c8196334e32359f9abd621ef75bf87"},{"author":{"_account_id":11364,"name":"Fei Rao","email":"milo.frao@gmail.com","username":"milo.frao"},"change_message_id":"693b9430850b026ea53f97cfd717e6298622f97b","unresolved":false,"context_lines":[{"line_number":206,"context_line":"The subscriber API is being called by the local controllers, they call"},{"line_number":207,"context_line":"the daemonize() API of the subscriber and send the callback method."},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"The subscriber is in charge off receiving the notifications from both publishers types"},{"line_number":210,"context_line":"neutron servers and from the other local controllers and sending them for processing."},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"Its important to note, as mentioned above, that every controller also publish"}],"source_content_type":"text/x-rst","patch_set":8,"id":"dae33548_552f67a0","line":209,"range":{"start_line":209,"start_character":28,"end_line":209,"end_character":31},"updated":"2016-02-18 06:55:21.000000000","message":"off-\u003eof","commit_id":"db539efb79c8196334e32359f9abd621ef75bf87"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"e3880e370a07e9c457d6a04f2cc9118b9f64a099","unresolved":false,"context_lines":[{"line_number":206,"context_line":"The subscriber API is being called by the local controllers, they call"},{"line_number":207,"context_line":"the daemonize() API of the subscriber and send the callback method."},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"The subscriber is in charge off receiving the notifications from both publishers types"},{"line_number":210,"context_line":"neutron servers and from the other local controllers and sending them for processing."},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"Its important to note, as mentioned above, that every controller also publish"}],"source_content_type":"text/x-rst","patch_set":8,"id":"dae33548_d7dff6d3","line":209,"range":{"start_line":209,"start_character":28,"end_line":209,"end_character":31},"in_reply_to":"dae33548_552f67a0","updated":"2016-02-18 09:18:28.000000000","message":"will do","commit_id":"db539efb79c8196334e32359f9abd621ef75bf87"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"48d30b10a3100acf22c927546a936eb90a223597","unresolved":false,"context_lines":[{"line_number":209,"context_line":"The subscriber is in charge off receiving the notifications from both publishers types"},{"line_number":210,"context_line":"neutron servers and from the other local controllers and sending them for processing."},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"Its important to note, as mentioned above, that every controller also publish"},{"line_number":213,"context_line":"itself (send details about the compute node like IP, hostname and tunneling protocol)"},{"line_number":214,"context_line":"to the other controllers."},{"line_number":215,"context_line":"This is done one time on controller bring up, and only if the controller"},{"line_number":216,"context_line":"didn\u0027t publish its self before (if a DB entry exists or not in the"},{"line_number":217,"context_line":"chassis table)"}],"source_content_type":"text/x-rst","patch_set":8,"id":"dae33548_25c09b4f","line":214,"range":{"start_line":212,"start_character":0,"end_line":214,"end_character":25},"updated":"2016-02-18 13:32:27.000000000","message":"It was my understanding that this is no longer the case. If a controller wants to publish information, it has to write it to the distributed DB, and the neutron servers pick up on it and publish it themselves.\n\nThis is also what\u0027s written below in Section \u0027Controller-to-Controller Publisher Proposed Solution\u0027.","commit_id":"db539efb79c8196334e32359f9abd621ef75bf87"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"b494b445cc9e842d560701aaf6e60cc2d4a23ff0","unresolved":false,"context_lines":[{"line_number":209,"context_line":"The subscriber is in charge off receiving the notifications from both publishers types"},{"line_number":210,"context_line":"neutron servers and from the other local controllers and sending them for processing."},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"Its important to note, as mentioned above, that every controller also publish"},{"line_number":213,"context_line":"itself (send details about the compute node like IP, hostname and tunneling protocol)"},{"line_number":214,"context_line":"to the other controllers."},{"line_number":215,"context_line":"This is done one time on controller bring up, and only if the controller"},{"line_number":216,"context_line":"didn\u0027t publish its self before (if a DB entry exists or not in the"},{"line_number":217,"context_line":"chassis table)"}],"source_content_type":"text/x-rst","patch_set":8,"id":"dae33548_b11ce76a","line":214,"range":{"start_line":212,"start_character":0,"end_line":214,"end_character":25},"in_reply_to":"dae33548_25c09b4f","updated":"2016-02-18 15:14:56.000000000","message":"Yes see my response below i will update this","commit_id":"db539efb79c8196334e32359f9abd621ef75bf87"},{"author":{"_account_id":11364,"name":"Fei Rao","email":"milo.frao@gmail.com","username":"milo.frao"},"change_message_id":"693b9430850b026ea53f97cfd717e6298622f97b","unresolved":false,"context_lines":[{"line_number":212,"context_line":"Its important to note, as mentioned above, that every controller also publish"},{"line_number":213,"context_line":"itself (send details about the compute node like IP, hostname and tunneling protocol)"},{"line_number":214,"context_line":"to the other controllers."},{"line_number":215,"context_line":"This is done one time on controller bring up, and only if the controller"},{"line_number":216,"context_line":"didn\u0027t publish its self before (if a DB entry exists or not in the"},{"line_number":217,"context_line":"chassis table)"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"The subscriber thread loop is depicted in the following diagram:"},{"line_number":220,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"dae33548_e83fbeb1","line":217,"range":{"start_line":215,"start_character":0,"end_line":217,"end_character":14},"updated":"2016-02-18 06:55:21.000000000","message":"if the df controller is restarted, does it need to publish itself again?","commit_id":"db539efb79c8196334e32359f9abd621ef75bf87"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"e3880e370a07e9c457d6a04f2cc9118b9f64a099","unresolved":false,"context_lines":[{"line_number":212,"context_line":"Its important to note, as mentioned above, that every controller also publish"},{"line_number":213,"context_line":"itself (send details about the compute node like IP, hostname and tunneling protocol)"},{"line_number":214,"context_line":"to the other controllers."},{"line_number":215,"context_line":"This is done one time on controller bring up, and only if the controller"},{"line_number":216,"context_line":"didn\u0027t publish its self before (if a DB entry exists or not in the"},{"line_number":217,"context_line":"chassis table)"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"The subscriber thread loop is depicted in the following diagram:"},{"line_number":220,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"dae33548_7a6d2fcb","line":217,"range":{"start_line":215,"start_character":0,"end_line":217,"end_character":14},"in_reply_to":"dae33548_e83fbeb1","updated":"2016-02-18 09:18:28.000000000","message":"Please see below \n\nController-to-Controller Publisher Proposed Solution\n\nI will remove or rephrase  this section","commit_id":"db539efb79c8196334e32359f9abd621ef75bf87"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"48d30b10a3100acf22c927546a936eb90a223597","unresolved":false,"context_lines":[{"line_number":263,"context_line":"Delivery"},{"line_number":264,"context_line":"--------"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"In order to detect message delay/loss, we introduce a *per-pub-per-message* sequence ID."},{"line_number":267,"context_line":"The client verifies the sequence order of messages by tracking *current per-pub-message-id*."},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"In case the client detects sequence that is \u003e2 IDs from the *current*, it will wait"},{"line_number":270,"context_line":"for a period defined by *message delay window* for the missing messages to arrive."}],"source_content_type":"text/x-rst","patch_set":8,"id":"dae33548_2566db50","line":267,"range":{"start_line":266,"start_character":0,"end_line":267,"end_character":92},"updated":"2016-02-18 13:32:27.000000000","message":"This part is unclear. Do we introduce a global published message ID, where each published message\u0027s ID is the increment of the previous one? Right now it is worded as if the ID is per publisher as well. Is this the intention? The pub/sub API does not provide source publisher ID.\n\nHow is the consistency of this verified? Do we use the distributed database\u0027s compare-and-swap mechanism for this?","commit_id":"db539efb79c8196334e32359f9abd621ef75bf87"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"b494b445cc9e842d560701aaf6e60cc2d4a23ff0","unresolved":false,"context_lines":[{"line_number":263,"context_line":"Delivery"},{"line_number":264,"context_line":"--------"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"In order to detect message delay/loss, we introduce a *per-pub-per-message* sequence ID."},{"line_number":267,"context_line":"The client verifies the sequence order of messages by tracking *current per-pub-message-id*."},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"In case the client detects sequence that is \u003e2 IDs from the *current*, it will wait"},{"line_number":270,"context_line":"for a period defined by *message delay window* for the missing messages to arrive."}],"source_content_type":"text/x-rst","patch_set":8,"id":"dae33548_b1e6a741","line":267,"range":{"start_line":266,"start_character":0,"end_line":267,"end_character":92},"in_reply_to":"dae33548_2566db50","updated":"2016-02-18 15:14:56.000000000","message":"It is not global it is per publisher We have a UUID and a sequential message id. \nIt is not stored any where and synchronized with the Subscriber via the \"hello\" command","commit_id":"db539efb79c8196334e32359f9abd621ef75bf87"},{"author":{"_account_id":11364,"name":"Fei Rao","email":"milo.frao@gmail.com","username":"milo.frao"},"change_message_id":"693b9430850b026ea53f97cfd717e6298622f97b","unresolved":false,"context_lines":[{"line_number":269,"context_line":"In case the client detects sequence that is \u003e2 IDs from the *current*, it will wait"},{"line_number":270,"context_line":"for a period defined by *message delay window* for the missing messages to arrive."},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"If the time elapsed and some messages did not arrive, the client will perform a full sync against the DB."},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"Flow 1: Subscriber (re)connects"},{"line_number":275,"context_line":"-------------------------------"}],"source_content_type":"text/x-rst","patch_set":8,"id":"dae33548_2849a6b7","line":272,"range":{"start_line":272,"start_character":0,"end_line":272,"end_character":105},"updated":"2016-02-18 06:55:21.000000000","message":"Whether do we consider implementing incremental sync but not full sync like tcp retransmission mechanism. If message sequence x is lost, Neutron-server just re-send the messages starting at x.","commit_id":"db539efb79c8196334e32359f9abd621ef75bf87"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"e3880e370a07e9c457d6a04f2cc9118b9f64a099","unresolved":false,"context_lines":[{"line_number":269,"context_line":"In case the client detects sequence that is \u003e2 IDs from the *current*, it will wait"},{"line_number":270,"context_line":"for a period defined by *message delay window* for the missing messages to arrive."},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"If the time elapsed and some messages did not arrive, the client will perform a full sync against the DB."},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"Flow 1: Subscriber (re)connects"},{"line_number":275,"context_line":"-------------------------------"}],"source_content_type":"text/x-rst","patch_set":8,"id":"dae33548_3a15679b","line":272,"range":{"start_line":272,"start_character":0,"end_line":272,"end_character":105},"in_reply_to":"dae33548_2849a6b7","updated":"2016-02-18 09:18:28.000000000","message":"In this phase we try to keep it simple \n\nIn later phase if we see that it is needed we could implement a more advance cache sync mechanizem","commit_id":"db539efb79c8196334e32359f9abd621ef75bf87"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"48d30b10a3100acf22c927546a936eb90a223597","unresolved":false,"context_lines":[{"line_number":276,"context_line":""},{"line_number":277,"context_line":"When a subscriber connects for the first time, or reconnects after an outage, it will do full-resync."},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"TODO: We will optimize this in a future release, using a \"publisher running life signature\"."},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"Flow 2: Publisher (re)connects"},{"line_number":282,"context_line":"------------------------------"}],"source_content_type":"text/x-rst","patch_set":8,"id":"dae33548_e58d13d4","line":279,"updated":"2016-02-18 13:32:27.000000000","message":"Consider elaborating, or rewording in a clearer way.","commit_id":"db539efb79c8196334e32359f9abd621ef75bf87"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"b494b445cc9e842d560701aaf6e60cc2d4a23ff0","unresolved":false,"context_lines":[{"line_number":276,"context_line":""},{"line_number":277,"context_line":"When a subscriber connects for the first time, or reconnects after an outage, it will do full-resync."},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"TODO: We will optimize this in a future release, using a \"publisher running life signature\"."},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"Flow 2: Publisher (re)connects"},{"line_number":282,"context_line":"------------------------------"}],"source_content_type":"text/x-rst","patch_set":8,"id":"dae33548_51f75bd2","line":279,"in_reply_to":"dae33548_e58d13d4","updated":"2016-02-18 15:14:56.000000000","message":"will do","commit_id":"db539efb79c8196334e32359f9abd621ef75bf87"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"48d30b10a3100acf22c927546a936eb90a223597","unresolved":false,"context_lines":[{"line_number":282,"context_line":"------------------------------"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"When a publisher connects for the first time, or reconnects after an outage,"},{"line_number":285,"context_line":"it will publish its initial sequence number and its UUID, in a special *hello* message."},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"The subscribers will receive this message and reset their *current per-sub-per-message-id* accordingly."},{"line_number":288,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"dae33548_05bf5661","line":285,"updated":"2016-02-18 13:32:27.000000000","message":"As I said above, the API does not provide the publisher\u0027s UUID.","commit_id":"db539efb79c8196334e32359f9abd621ef75bf87"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"b494b445cc9e842d560701aaf6e60cc2d4a23ff0","unresolved":false,"context_lines":[{"line_number":282,"context_line":"------------------------------"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"When a publisher connects for the first time, or reconnects after an outage,"},{"line_number":285,"context_line":"it will publish its initial sequence number and its UUID, in a special *hello* message."},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"The subscribers will receive this message and reset their *current per-sub-per-message-id* accordingly."},{"line_number":288,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"dae33548_916603b9","line":285,"in_reply_to":"dae33548_05bf5661","updated":"2016-02-18 15:14:56.000000000","message":"This UUID could be auto generate or saved to disc/DB it is up to the publisher, the only requirement is to be unique across publishers and we get that from uuid_create","commit_id":"db539efb79c8196334e32359f9abd621ef75bf87"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b99e9d67607b96e9e6c820d382cc815276fc628f","unresolved":false,"context_lines":[{"line_number":282,"context_line":"------------------------------"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"When a publisher connects for the first time, or reconnects after an outage,"},{"line_number":285,"context_line":"it will publish its initial sequence number and its UUID, in a special *hello* message."},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"The subscribers will receive this message and reset their *current per-sub-per-message-id* accordingly."},{"line_number":288,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"dae33548_e4a34bb0","line":285,"in_reply_to":"dae33548_916603b9","updated":"2016-02-18 15:29:23.000000000","message":"The issue is that when an event/pub-sub message is received, it does not contain the publisher\u0027s uuid. Either the information on the event has to be extended, or this information has to be extracted in some other way.\n\nWhat you have said relates only to the registration of the publishers and subscribers. This information has to be maintained throughout the entire system\u0027s lifecycle.\n\nExtending the information on the event may cause the event API to differ than when using DB-based events (which can be mitigated, so it\u0027s not too bad).","commit_id":"db539efb79c8196334e32359f9abd621ef75bf87"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"48d30b10a3100acf22c927546a936eb90a223597","unresolved":false,"context_lines":[{"line_number":302,"context_line":""},{"line_number":303,"context_line":"We compare this versioning to the local cache, before we update it."},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"We only update when local cache version is older, and drop updates that have older version than the local cache."},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"Neutron Server Publisher discovery"},{"line_number":308,"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\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":8,"id":"dae33548_28a18f46","line":305,"updated":"2016-02-18 13:32:27.000000000","message":"Consider stressing that the version in the cache is updated no matter how old it is - incremental updates of one version at a time should not be required.","commit_id":"db539efb79c8196334e32359f9abd621ef75bf87"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"b494b445cc9e842d560701aaf6e60cc2d4a23ff0","unresolved":false,"context_lines":[{"line_number":302,"context_line":""},{"line_number":303,"context_line":"We compare this versioning to the local cache, before we update it."},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"We only update when local cache version is older, and drop updates that have older version than the local cache."},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"Neutron Server Publisher discovery"},{"line_number":308,"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\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":8,"id":"dae33548_91eba3db","line":305,"in_reply_to":"dae33548_28a18f46","updated":"2016-02-18 15:14:56.000000000","message":"I am not sure I understand \nwe update the local cache only if we have a newer version in the update","commit_id":"db539efb79c8196334e32359f9abd621ef75bf87"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"37c7f5cb63a46074da3b9dfff634e8a178026b02","unresolved":false,"context_lines":[{"line_number":310,"context_line":"Each subscriber (i.e. Distributed Dragonflow Controller) uses a local configuration with the"},{"line_number":311,"context_line":"addresses of the publishers."},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"TODO: We will optimize this by adding a Service Directory in the Dragonflow database."},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"Controller-to-Controller Publisher Proposed Solution"},{"line_number":316,"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\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":8,"id":"dae33548_cc5c974d","line":313,"range":{"start_line":313,"start_character":40,"end_line":313,"end_character":58},"updated":"2016-02-18 01:23:33.000000000","message":"It can be achieved by introducing a new table in DF DB for service registration.","commit_id":"db539efb79c8196334e32359f9abd621ef75bf87"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"e3880e370a07e9c457d6a04f2cc9118b9f64a099","unresolved":false,"context_lines":[{"line_number":310,"context_line":"Each subscriber (i.e. Distributed Dragonflow Controller) uses a local configuration with the"},{"line_number":311,"context_line":"addresses of the publishers."},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"TODO: We will optimize this by adding a Service Directory in the Dragonflow database."},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"Controller-to-Controller Publisher Proposed Solution"},{"line_number":316,"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\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":8,"id":"dae33548_1a6983f9","line":313,"range":{"start_line":313,"start_character":40,"end_line":313,"end_character":58},"in_reply_to":"dae33548_cc5c974d","updated":"2016-02-18 09:18:28.000000000","message":"Yes that what I meant, i will rephrase and remove the TODO \n\nActually we are planing to push this in next week","commit_id":"db539efb79c8196334e32359f9abd621ef75bf87"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"48d30b10a3100acf22c927546a936eb90a223597","unresolved":false,"context_lines":[{"line_number":331,"context_line":"\u0027enable_df_pub_sub\u0027, default\u003dFalse, help\u003d_(\"Enable use of Dragonflow built-in pub/sub\")),"},{"line_number":332,"context_line":"\u0027pub_sub_driver\u0027, default\u003d\u0027zmq_pubsub_driver\u0027, help\u003d_(\u0027Drivers to use for the Dragonflow pub/sub\u0027)),"},{"line_number":333,"context_line":"\u0027publishers_ips\u0027, default\u003d[\u0027$local_ip\u0027], help\u003d_(\u0027List of the Neutron Server Publisher IPs.\u0027)),"},{"line_number":334,"context_line":"\u0027publisher_port\u0027, default\u003d8866, help\u003d_(\u0027Neutron Server Publishers Port\u0027))"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"References"},{"line_number":337,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":8,"id":"dae33548_283d0fdd","line":334,"updated":"2016-02-18 13:32:27.000000000","message":"Consider adding configuration: publisher_transport, to allow the transport protocol (e.g. tcp, egpm) to be selected.","commit_id":"db539efb79c8196334e32359f9abd621ef75bf87"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"b494b445cc9e842d560701aaf6e60cc2d4a23ff0","unresolved":false,"context_lines":[{"line_number":331,"context_line":"\u0027enable_df_pub_sub\u0027, default\u003dFalse, help\u003d_(\"Enable use of Dragonflow built-in pub/sub\")),"},{"line_number":332,"context_line":"\u0027pub_sub_driver\u0027, default\u003d\u0027zmq_pubsub_driver\u0027, help\u003d_(\u0027Drivers to use for the Dragonflow pub/sub\u0027)),"},{"line_number":333,"context_line":"\u0027publishers_ips\u0027, default\u003d[\u0027$local_ip\u0027], help\u003d_(\u0027List of the Neutron Server Publisher IPs.\u0027)),"},{"line_number":334,"context_line":"\u0027publisher_port\u0027, default\u003d8866, help\u003d_(\u0027Neutron Server Publishers Port\u0027))"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"References"},{"line_number":337,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":8,"id":"dae33548_f1df8f0a","line":334,"in_reply_to":"dae33548_283d0fdd","updated":"2016-02-18 15:14:56.000000000","message":"I will consider the problem is that this is setting per driver depending on its support \n\nIn ZMQ it is tcp and epgm","commit_id":"db539efb79c8196334e32359f9abd621ef75bf87"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b99e9d67607b96e9e6c820d382cc815276fc628f","unresolved":false,"context_lines":[{"line_number":331,"context_line":"\u0027enable_df_pub_sub\u0027, default\u003dFalse, help\u003d_(\"Enable use of Dragonflow built-in pub/sub\")),"},{"line_number":332,"context_line":"\u0027pub_sub_driver\u0027, default\u003d\u0027zmq_pubsub_driver\u0027, help\u003d_(\u0027Drivers to use for the Dragonflow pub/sub\u0027)),"},{"line_number":333,"context_line":"\u0027publishers_ips\u0027, default\u003d[\u0027$local_ip\u0027], help\u003d_(\u0027List of the Neutron Server Publisher IPs.\u0027)),"},{"line_number":334,"context_line":"\u0027publisher_port\u0027, default\u003d8866, help\u003d_(\u0027Neutron Server Publishers Port\u0027))"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"References"},{"line_number":337,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":8,"id":"dae33548_845cff19","line":334,"in_reply_to":"dae33548_f1df8f0a","updated":"2016-02-18 15:29:23.000000000","message":"Yes, but the driver is also selected in configuration, and the driver can verify that the protocol is supported. (Or the driver should provide a list of supported protocols).","commit_id":"db539efb79c8196334e32359f9abd621ef75bf87"},{"author":{"_account_id":18811,"name":"Shlomo","email":"shlominar@gmail.com","username":"shlominar"},"change_message_id":"f974005311c3f6a99cc45f18ecb8d3b4d536e135","unresolved":false,"context_lines":[{"line_number":47,"context_line":"We therefore want to abstract the publish-subscribe mechanism from the DB driver,"},{"line_number":48,"context_line":"so that we can control the publishing topics in an applicative manner."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"We require that this change will be *optional* allowing the user to default to"},{"line_number":51,"context_line":"the previous behavior, i.e. the publish-subscribe is managed by the DB driver"},{"line_number":52,"context_line":"itself."},{"line_number":53,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"1af94dfe_666372dd","line":50,"range":{"start_line":50,"start_character":65,"end_line":50,"end_character":75},"updated":"2016-03-16 08:31:14.000000000","message":"typo?\nto use the default","commit_id":"31755d24b9a6bd14b3e48db4a79d376564c6f92c"},{"author":{"_account_id":18811,"name":"Shlomo","email":"shlominar@gmail.com","username":"shlominar"},"change_message_id":"f974005311c3f6a99cc45f18ecb8d3b4d536e135","unresolved":false,"context_lines":[{"line_number":89,"context_line":"  |                    |           |                       |"},{"line_number":90,"context_line":"  |  +--------------+  |           |  +----------------+   |           +---------------+"},{"line_number":91,"context_line":"  |  |              |  |           |  |                |   |           |               |"},{"line_number":92,"context_line":"  |  |  SYNC Loop   +---------------\u003e | Fetch DB Data  +-------------\u003e |   DB Driver   |"},{"line_number":93,"context_line":"  |  |              |  |           |  |                |   |           |               |"},{"line_number":94,"context_line":"  |  |              |  |           |  +----------------+   |           +--------+------+"},{"line_number":95,"context_line":"  |  |              |  |           |                       |                    ^"}],"source_content_type":"text/x-rst","patch_set":11,"id":"1af94dfe_86315ea5","line":92,"range":{"start_line":92,"start_character":8,"end_line":92,"end_character":17},"updated":"2016-03-16 08:31:14.000000000","message":"You should cover here the case if it\u0027s pub-sub here as well.","commit_id":"31755d24b9a6bd14b3e48db4a79d376564c6f92c"}]}
