)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"b658d433cfdb784014da49c9d1bf4921ac2439a1","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     shanhe \u003cshan.he@huawei.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-02-19 22:17:32 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"add local controller reliability spec, which is used to address the issues"},{"line_number":8,"context_line":"caused by restart of OVS or local controller."},{"line_number":9,"context_line":"Change-Id: I624eac5457bba53e77f797978f8dfae638f4e434"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"bae84128_1c1ad117","line":8,"range":{"start_line":7,"start_character":0,"end_line":8,"end_character":45},"updated":"2016-02-25 06:55:10.000000000","message":"Implement local controller reliability\n\nadd local controller reliability spec and the corresponding codes, which are used to address the issues\ncaused by restart of OVS or local controller.\n\nYou need to add a title and a blank line, following the community rules.","commit_id":"f63df8780f0908df966504ba90dc1f325a4dad81"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"fa406f5c71248fa541463a1fc03c1715e2fc85e3","unresolved":false,"context_lines":[{"line_number":3,"context_line":"AuthorDate: 2016-01-30 15:56:31 +0800"},{"line_number":4,"context_line":"Commit:     shanhe \u003cshan.he@huawei.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-03-12 14:16:50 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"add local controller reliability spec, which is used to address the issues"},{"line_number":8,"context_line":"caused by restart of OVS or local controller."},{"line_number":9,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"3afc51ec_e182ceff","line":6,"updated":"2016-03-13 06:45:14.000000000","message":"Consider adding a title line, e.g. \u0027add local controller reliability spec\u0027.","commit_id":"cec60c4f9dacd261d1e60333b251211230c8f656"},{"author":{"_account_id":20336,"name":"heshan","email":"shan.he@huawei.com","username":"shanhe"},"change_message_id":"03b9aff2fc4105985ea9e2ebec62cdc650a3c71a","unresolved":false,"context_lines":[{"line_number":3,"context_line":"AuthorDate: 2016-01-30 15:56:31 +0800"},{"line_number":4,"context_line":"Commit:     shanhe \u003cshan.he@huawei.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-03-12 14:16:50 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"add local controller reliability spec, which is used to address the issues"},{"line_number":8,"context_line":"caused by restart of OVS or local controller."},{"line_number":9,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"1af94dfe_9ae9ae1d","line":6,"in_reply_to":"3afc51ec_e182ceff","updated":"2016-03-17 06:48:04.000000000","message":"Done","commit_id":"cec60c4f9dacd261d1e60333b251211230c8f656"}],"doc/source/specs/local_controller_reliability.rst":[{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"5a2e8d7ff18ce5bc74da5c87441dfdeb6d9ffcc4","unresolved":false,"context_lines":[{"line_number":2,"context_line":" License.\r"},{"line_number":3,"context_line":"\r"},{"line_number":4,"context_line":" http://creativecommons.org/licenses/by/3.0/legalcode\r"},{"line_number":5,"context_line":" \r"},{"line_number":6,"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 \r"},{"line_number":7,"context_line":"Local Controller Reliability\r"},{"line_number":8,"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\r"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a5de9d1_7d75e9f7","line":5,"range":{"start_line":5,"start_character":0,"end_line":5,"end_character":1},"updated":"2016-01-31 19:56:20.000000000","message":"Please remove trailing white spaces","commit_id":"0bb978d2d8f69408dc480458d2e4fcb8dab1d531"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"5a2e8d7ff18ce5bc74da5c87441dfdeb6d9ffcc4","unresolved":false,"context_lines":[{"line_number":3,"context_line":"\r"},{"line_number":4,"context_line":" http://creativecommons.org/licenses/by/3.0/legalcode\r"},{"line_number":5,"context_line":" \r"},{"line_number":6,"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 \r"},{"line_number":7,"context_line":"Local Controller Reliability\r"},{"line_number":8,"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\r"},{"line_number":9,"context_line":" \r"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a5de9d1_9d722510","line":6,"range":{"start_line":6,"start_character":32,"end_line":6,"end_character":33},"updated":"2016-01-31 19:56:20.000000000","message":"ditto","commit_id":"0bb978d2d8f69408dc480458d2e4fcb8dab1d531"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"5a2e8d7ff18ce5bc74da5c87441dfdeb6d9ffcc4","unresolved":false,"context_lines":[{"line_number":6,"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 \r"},{"line_number":7,"context_line":"Local Controller Reliability\r"},{"line_number":8,"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\r"},{"line_number":9,"context_line":" \r"},{"line_number":10,"context_line":"\r"},{"line_number":11,"context_line":"Problem Description\r"},{"line_number":12,"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\r"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a5de9d1_3d62113f","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":1},"updated":"2016-01-31 19:56:20.000000000","message":"ditto","commit_id":"0bb978d2d8f69408dc480458d2e4fcb8dab1d531"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"5a2e8d7ff18ce5bc74da5c87441dfdeb6d9ffcc4","unresolved":false,"context_lines":[{"line_number":38,"context_line":"\r"},{"line_number":39,"context_line":"1. Change the fail mode to secure, with this setting, OVS won\u0027t delete flows\r"},{"line_number":40,"context_line":"when it lose connection with local controller.\r"},{"line_number":41,"context_line":"2. Update flows with new controller_uuid_stamp which is set when local controller initialization,\r"},{"line_number":42,"context_line":"retrieve all flows from OVS, delete flows with stale cookies.\r"},{"line_number":43,"context_line":"\r"},{"line_number":44,"context_line":"It should be noted that the controller_uuid_stamp cookie must be added for add-flow, mod-flow and learn-flow.\r"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a5de9d1_1d5dd578","line":41,"range":{"start_line":41,"start_character":10,"end_line":41,"end_character":15},"updated":"2016-01-31 19:56:20.000000000","message":"update flows cookie","commit_id":"0bb978d2d8f69408dc480458d2e4fcb8dab1d531"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"5a2e8d7ff18ce5bc74da5c87441dfdeb6d9ffcc4","unresolved":false,"context_lines":[{"line_number":41,"context_line":"2. Update flows with new controller_uuid_stamp which is set when local controller initialization,\r"},{"line_number":42,"context_line":"retrieve all flows from OVS, delete flows with stale cookies.\r"},{"line_number":43,"context_line":"\r"},{"line_number":44,"context_line":"It should be noted that the controller_uuid_stamp cookie must be added for add-flow, mod-flow and learn-flow.\r"},{"line_number":45,"context_line":"\r"},{"line_number":46,"context_line":"\r"},{"line_number":47,"context_line":"+------------------+          +------------------+          +------------------+\r"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a5de9d1_9d49c5b9","line":44,"range":{"start_line":44,"start_character":98,"end_line":44,"end_character":108},"updated":"2016-01-31 19:56:20.000000000","message":"max 80 char length , we currently do  use learn but maybe we will introduce it to the pipeline","commit_id":"0bb978d2d8f69408dc480458d2e4fcb8dab1d531"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"5a2e8d7ff18ce5bc74da5c87441dfdeb6d9ffcc4","unresolved":false,"context_lines":[{"line_number":117,"context_line":"\r"},{"line_number":118,"context_line":"Solution to residual flows\r"},{"line_number":119,"context_line":"----------------------------\r"},{"line_number":120,"context_line":"Residual flows means flows which don\u0027t take effect any more but stay in flow table.\r"},{"line_number":121,"context_line":"Backward incompatible upgrade and incorrect implementation may generate this kind of flows.\r"},{"line_number":122,"context_line":"The residual flows may not affect the forwarding but it will occupy flow table space and\r"},{"line_number":123,"context_line":"add difficulty for maintenance.\r"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a5de9d1_1da2b54b","line":120,"range":{"start_line":120,"start_character":0,"end_line":120,"end_character":75},"updated":"2016-01-31 19:56:20.000000000","message":"I am not sure I understand this use case, if we upgrade the DF we restarted and we have a new cookie id for the newer pipeline.","commit_id":"0bb978d2d8f69408dc480458d2e4fcb8dab1d531"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"5a2e8d7ff18ce5bc74da5c87441dfdeb6d9ffcc4","unresolved":false,"context_lines":[{"line_number":125,"context_line":"The methods to manage this issue:\r"},{"line_number":126,"context_line":"Delete all flows before adding new flows\r"},{"line_number":127,"context_line":"We could reuse the solution for \u0027OVS restart\u0027, trigger local controller to re-flush\r"},{"line_number":128,"context_line":"flows then delete the flows with old cookie. \r"},{"line_number":129,"context_line":"\r"},{"line_number":130,"context_line":"Pros\r"},{"line_number":131,"context_line":"-----\r"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a5de9d1_fde559a3","line":128,"range":{"start_line":128,"start_character":44,"end_line":128,"end_character":45},"updated":"2016-01-31 19:56:20.000000000","message":"trailing white spaces","commit_id":"0bb978d2d8f69408dc480458d2e4fcb8dab1d531"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"5a2e8d7ff18ce5bc74da5c87441dfdeb6d9ffcc4","unresolved":false,"context_lines":[{"line_number":137,"context_line":"\r"},{"line_number":138,"context_line":"This method is suited for the residual flows caused by the \u0027backward incompatible upgrade\u0027.\r"},{"line_number":139,"context_line":"\r"},{"line_number":140,"context_line":"\t  \r"},{"line_number":141,"context_line":"Solution to missing flows\r"},{"line_number":142,"context_line":"----------------------------------\r"},{"line_number":143,"context_line":"When there are missing flows, OVS cannot forward the packet by itself, it will forward the packet\r"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a5de9d1_dd017d39","line":140,"range":{"start_line":140,"start_character":0,"end_line":140,"end_character":3},"updated":"2016-01-31 19:56:20.000000000","message":"ditto","commit_id":"0bb978d2d8f69408dc480458d2e4fcb8dab1d531"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"5a2e8d7ff18ce5bc74da5c87441dfdeb6d9ffcc4","unresolved":false,"context_lines":[{"line_number":138,"context_line":"This method is suited for the residual flows caused by the \u0027backward incompatible upgrade\u0027.\r"},{"line_number":139,"context_line":"\r"},{"line_number":140,"context_line":"\t  \r"},{"line_number":141,"context_line":"Solution to missing flows\r"},{"line_number":142,"context_line":"----------------------------------\r"},{"line_number":143,"context_line":"When there are missing flows, OVS cannot forward the packet by itself, it will forward the packet\r"},{"line_number":144,"context_line":"to local controller. For example, in the context of DVR forwarding, if no corresponding host route flow\r"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a5de9d1_5d6a6def","line":141,"range":{"start_line":141,"start_character":0,"end_line":141,"end_character":25},"updated":"2016-01-31 19:56:20.000000000","message":"this is application specific not all application support reactive flows, I am not sure I understand this  section","commit_id":"0bb978d2d8f69408dc480458d2e4fcb8dab1d531"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"5a2e8d7ff18ce5bc74da5c87441dfdeb6d9ffcc4","unresolved":false,"context_lines":[{"line_number":145,"context_line":"to destination, OVS will forward the packet to local controller according to the network flow,\r"},{"line_number":146,"context_line":"Upon receive the packet, local controller forward the packet, regenerate host flow and flush it to OVS.\r"},{"line_number":147,"context_line":"We don\u0027t plan to discuss it in more detail here and it will be processed by the specific application of Dragonflow.\r"},{"line_number":148,"context_line":"\t  \r"},{"line_number":149,"context_line":"References\r"},{"line_number":150,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\r"},{"line_number":151,"context_line":"http://www.openvswitch.org/support/dist-docs-2.4/ovs-vswitchd.8.pdf\r"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a5de9d1_7dfac944","line":148,"range":{"start_line":148,"start_character":0,"end_line":148,"end_character":3},"updated":"2016-01-31 19:56:20.000000000","message":"ditto","commit_id":"0bb978d2d8f69408dc480458d2e4fcb8dab1d531"},{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"b29d6226106fd0e286535a50e5101fcbd41b9588","unresolved":false,"context_lines":[{"line_number":42,"context_line":"when it lose connection with local controller.\r"},{"line_number":43,"context_line":"2. Update flow cookie with new controller_uuid_stamp which is set when local\r"},{"line_number":44,"context_line":"controller initialization, update flows with new cookie, retrieve all flows from\r"},{"line_number":45,"context_line":"OVS, delete flows with stale cookies.\r"},{"line_number":46,"context_line":"\r"},{"line_number":47,"context_line":"It should be noted that the controller_uuid_stamp cookie must be added for\r"},{"line_number":48,"context_line":"add-flow and mod-flow.\r"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a57f1b5_0bd0731e","line":45,"updated":"2016-02-11 13:20:34.000000000","message":"Why do you need to modify the flows ? the problem with this is Dragonflow uses the cookie field already to mark some things for smart deletes which means this process will remove them.\n\nI am thinking maybe we can add a \"non-intrusive\" process, you read all flows configured, and then when the controller runs the \"sync process\" and its about to install a flow, it check if its in this list (flows cache list basically) or not, if it is it remove it from the list, if not it adds it.\n\nThen you just need to clean all the flows that remain in that list.\n\nWhat do you think?","commit_id":"186014dbd50580c11620f4b8eb55f59c948a25dd"},{"author":{"_account_id":20336,"name":"heshan","email":"shan.he@huawei.com","username":"shanhe"},"change_message_id":"1d64f64f61d17953657d9b4391041503f3408699","unresolved":false,"context_lines":[{"line_number":42,"context_line":"when it lose connection with local controller.\r"},{"line_number":43,"context_line":"2. Update flow cookie with new controller_uuid_stamp which is set when local\r"},{"line_number":44,"context_line":"controller initialization, update flows with new cookie, retrieve all flows from\r"},{"line_number":45,"context_line":"OVS, delete flows with stale cookies.\r"},{"line_number":46,"context_line":"\r"},{"line_number":47,"context_line":"It should be noted that the controller_uuid_stamp cookie must be added for\r"},{"line_number":48,"context_line":"add-flow and mod-flow.\r"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dae33548_67c1e62e","line":45,"in_reply_to":"3a57f1b5_0bd0731e","updated":"2016-02-14 01:51:05.000000000","message":"The cookie is a 64-bits long value, we could divide the value into several parts, each part got it\u0027s own usage. e.g. the \u0027sync process\u0027 just need 4-bits(maybe less) to mark the flow. with this solution we could still do the smart delete with cookie mask.\nAs for your solution, I think when adding new flow, we should not only add flows to cache but also add flows to OVS. In order to find a flow in cache, we must compare all match field and action field of each flows, it\u0027s time consuming. so I prefer the solution above.","commit_id":"186014dbd50580c11620f4b8eb55f59c948a25dd"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"41e99e430795ba22c949ba50693146de71c91fef","unresolved":false,"context_lines":[{"line_number":69,"context_line":"          |                             |     return  ports\u0027 info     |\r"},{"line_number":70,"context_line":"          |                             | \u003c---------------------------+\r"},{"line_number":71,"context_line":"          |                             |                             |\r"},{"line_number":72,"context_line":"          |   add flows with new cookie |                             |\r"},{"line_number":73,"context_line":"          | \u003c---------------------------+                             |\r"},{"line_number":74,"context_line":"          |                             |                             |\r"},{"line_number":75,"context_line":"          |                             |                             |\r"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5a5ae5dd_7eab07d7","line":72,"range":{"start_line":72,"start_character":29,"end_line":72,"end_character":39},"updated":"2016-02-04 09:04:35.000000000","message":"Some application needs a unique cookie for the purpose of maintenance, so can we use controller_uuid_stamp combined with cookied defined by application?","commit_id":"186014dbd50580c11620f4b8eb55f59c948a25dd"},{"author":{"_account_id":20336,"name":"heshan","email":"shan.he@huawei.com","username":"shanhe"},"change_message_id":"d7ec4b79e659ede218719e4a9806fb89df261ccf","unresolved":false,"context_lines":[{"line_number":69,"context_line":"          |                             |     return  ports\u0027 info     |\r"},{"line_number":70,"context_line":"          |                             | \u003c---------------------------+\r"},{"line_number":71,"context_line":"          |                             |                             |\r"},{"line_number":72,"context_line":"          |   add flows with new cookie |                             |\r"},{"line_number":73,"context_line":"          | \u003c---------------------------+                             |\r"},{"line_number":74,"context_line":"          |                             |                             |\r"},{"line_number":75,"context_line":"          |                             |                             |\r"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5a5ae5dd_b4ef29e8","line":72,"range":{"start_line":72,"start_character":29,"end_line":72,"end_character":39},"in_reply_to":"5a5ae5dd_7eab07d7","updated":"2016-02-05 08:02:05.000000000","message":"cookie has 64-bits, we could leave several bit to applications. e.g. application use 4-bit, 0b0001 is used by l2app, 0b0010 is used by l3app. when comparing cookies, we mask out the 4-bits used by application, just comparing the 60-bits which is same among all applications.","commit_id":"186014dbd50580c11620f4b8eb55f59c948a25dd"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"41e99e430795ba22c949ba50693146de71c91fef","unresolved":false,"context_lines":[{"line_number":121,"context_line":"\r"},{"line_number":122,"context_line":"Solution to residual flows\r"},{"line_number":123,"context_line":"----------------------------\r"},{"line_number":124,"context_line":"Residual flows means flows which don\u0027t take effect any more but stay in flow\r"},{"line_number":125,"context_line":"table. Backward incompatible upgrade and incorrect implementation may generate\r"},{"line_number":126,"context_line":"this kind of flows. The residual flows may not affect the forwarding but it will\r"},{"line_number":127,"context_line":"occupy flow table space and add difficulty for maintenance.\r"},{"line_number":128,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5a5ae5dd_5b55fd4d","line":125,"range":{"start_line":124,"start_character":3,"end_line":125,"end_character":13},"updated":"2016-02-04 09:04:35.000000000","message":"In production enviroment, controller and ovs keep  running for a long time, couldn\u0027t be restarted, so  how to clean the stale flows?","commit_id":"186014dbd50580c11620f4b8eb55f59c948a25dd"},{"author":{"_account_id":20336,"name":"heshan","email":"shan.he@huawei.com","username":"shanhe"},"change_message_id":"92c135d295b5266e7d72152402fd7d793b5b3fff","unresolved":false,"context_lines":[{"line_number":121,"context_line":"\r"},{"line_number":122,"context_line":"Solution to residual flows\r"},{"line_number":123,"context_line":"----------------------------\r"},{"line_number":124,"context_line":"Residual flows means flows which don\u0027t take effect any more but stay in flow\r"},{"line_number":125,"context_line":"table. Backward incompatible upgrade and incorrect implementation may generate\r"},{"line_number":126,"context_line":"this kind of flows. The residual flows may not affect the forwarding but it will\r"},{"line_number":127,"context_line":"occupy flow table space and add difficulty for maintenance.\r"},{"line_number":128,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5a5ae5dd_dba2e998","line":125,"range":{"start_line":124,"start_character":3,"end_line":125,"end_character":13},"in_reply_to":"5a5ae5dd_23c77897","updated":"2016-02-06 01:26:44.000000000","message":"the local cannot connect to OVS if OVS doesn\u0027t start. so we cannot handle this. once the connection is established, we can process the residual flows.","commit_id":"186014dbd50580c11620f4b8eb55f59c948a25dd"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"d630de27bdb869a1f7b65fd4364484026e14a7b9","unresolved":false,"context_lines":[{"line_number":121,"context_line":"\r"},{"line_number":122,"context_line":"Solution to residual flows\r"},{"line_number":123,"context_line":"----------------------------\r"},{"line_number":124,"context_line":"Residual flows means flows which don\u0027t take effect any more but stay in flow\r"},{"line_number":125,"context_line":"table. Backward incompatible upgrade and incorrect implementation may generate\r"},{"line_number":126,"context_line":"this kind of flows. The residual flows may not affect the forwarding but it will\r"},{"line_number":127,"context_line":"occupy flow table space and add difficulty for maintenance.\r"},{"line_number":128,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5a5ae5dd_23c77897","line":125,"range":{"start_line":124,"start_character":3,"end_line":125,"end_character":13},"in_reply_to":"5a5ae5dd_54b7d5f4","updated":"2016-02-05 09:50:40.000000000","message":"I mean if the controller or ovs not be restarted for a long time, but ovs has some stale flows. Shall we consiber this?","commit_id":"186014dbd50580c11620f4b8eb55f59c948a25dd"},{"author":{"_account_id":20336,"name":"heshan","email":"shan.he@huawei.com","username":"shanhe"},"change_message_id":"d7ec4b79e659ede218719e4a9806fb89df261ccf","unresolved":false,"context_lines":[{"line_number":121,"context_line":"\r"},{"line_number":122,"context_line":"Solution to residual flows\r"},{"line_number":123,"context_line":"----------------------------\r"},{"line_number":124,"context_line":"Residual flows means flows which don\u0027t take effect any more but stay in flow\r"},{"line_number":125,"context_line":"table. Backward incompatible upgrade and incorrect implementation may generate\r"},{"line_number":126,"context_line":"this kind of flows. The residual flows may not affect the forwarding but it will\r"},{"line_number":127,"context_line":"occupy flow table space and add difficulty for maintenance.\r"},{"line_number":128,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5a5ae5dd_54b7d5f4","line":125,"range":{"start_line":124,"start_character":3,"end_line":125,"end_character":13},"in_reply_to":"5a5ae5dd_5b55fd4d","updated":"2016-02-05 08:02:05.000000000","message":"how could this situation happend?","commit_id":"186014dbd50580c11620f4b8eb55f59c948a25dd"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"41e99e430795ba22c949ba50693146de71c91fef","unresolved":false,"context_lines":[{"line_number":145,"context_line":"\r"},{"line_number":146,"context_line":"Solution to missing flows\r"},{"line_number":147,"context_line":"----------------------------------\r"},{"line_number":148,"context_line":"When there are missing flows, OVS cannot forward the packet by itself, it will\r"},{"line_number":149,"context_line":"forward the packet to local controller. For example, in the context of DVR\r"},{"line_number":150,"context_line":"forwarding, if no corresponding host route flow to destination, OVS will forward\r"},{"line_number":151,"context_line":"the packet to local controller according to the network flow. Upon receive the\r"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5a5ae5dd_5ba41da5","line":148,"range":{"start_line":148,"start_character":1,"end_line":148,"end_character":29},"updated":"2016-02-04 09:04:35.000000000","message":"Does this solution require  all applications have the aiblity to process packetin message and send flows to ovs?","commit_id":"186014dbd50580c11620f4b8eb55f59c948a25dd"},{"author":{"_account_id":20336,"name":"heshan","email":"shan.he@huawei.com","username":"shanhe"},"change_message_id":"d7ec4b79e659ede218719e4a9806fb89df261ccf","unresolved":false,"context_lines":[{"line_number":145,"context_line":"\r"},{"line_number":146,"context_line":"Solution to missing flows\r"},{"line_number":147,"context_line":"----------------------------------\r"},{"line_number":148,"context_line":"When there are missing flows, OVS cannot forward the packet by itself, it will\r"},{"line_number":149,"context_line":"forward the packet to local controller. For example, in the context of DVR\r"},{"line_number":150,"context_line":"forwarding, if no corresponding host route flow to destination, OVS will forward\r"},{"line_number":151,"context_line":"the packet to local controller according to the network flow. Upon receive the\r"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5a5ae5dd_17dddf6e","line":148,"range":{"start_line":148,"start_character":1,"end_line":148,"end_character":29},"in_reply_to":"5a5ae5dd_5ba41da5","updated":"2016-02-05 08:02:05.000000000","message":"l2app and l3app should process packetin message I think, other application don\u0027t need","commit_id":"186014dbd50580c11620f4b8eb55f59c948a25dd"},{"author":{"_account_id":11364,"name":"Fei Rao","email":"milo.frao@gmail.com","username":"milo.frao"},"change_message_id":"85825110d0933cd9aa63cbc58c0d884dadd9de1f","unresolved":false,"context_lines":[{"line_number":132,"context_line":"this kind of flows. The residual flows may not affect the forwarding but it will\r"},{"line_number":133,"context_line":"occupy flow table space and add difficulty for maintenance.\r"},{"line_number":134,"context_line":"\r"},{"line_number":135,"context_line":"The methods to manage this issue:\r"},{"line_number":136,"context_line":"Delete all flows before adding new flows\r"},{"line_number":137,"context_line":"We could reuse the solution for \u0027OVS restart\u0027, trigger local controller to\r"},{"line_number":138,"context_line":"re-flush flows then delete the flows with old cookie.\r"},{"line_number":139,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bae84128_e6ba1a6e","line":136,"range":{"start_line":135,"start_character":0,"end_line":136,"end_character":40},"updated":"2016-02-19 09:30:27.000000000","message":"If it\u0027s the initialization, df controller may flush off all the flow rules. but if the tenant network get ready and there are residual flow rules, you cannot clean all the flow rules. otherwise it will impact the network service. I think maybe df controller can provide a periodic inspection method. retrieve all the cookie which df controller mantians no more on the bridge and delete them.","commit_id":"5052d0dc0b59400424830863c004afa8ce2913dd"},{"author":{"_account_id":20336,"name":"heshan","email":"shan.he@huawei.com","username":"shanhe"},"change_message_id":"e66866a70dad76d0f071fa74f22680a83cf48b5a","unresolved":false,"context_lines":[{"line_number":132,"context_line":"this kind of flows. The residual flows may not affect the forwarding but it will\r"},{"line_number":133,"context_line":"occupy flow table space and add difficulty for maintenance.\r"},{"line_number":134,"context_line":"\r"},{"line_number":135,"context_line":"The methods to manage this issue:\r"},{"line_number":136,"context_line":"Delete all flows before adding new flows\r"},{"line_number":137,"context_line":"We could reuse the solution for \u0027OVS restart\u0027, trigger local controller to\r"},{"line_number":138,"context_line":"re-flush flows then delete the flows with old cookie.\r"},{"line_number":139,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bae84128_95cec481","line":136,"range":{"start_line":135,"start_character":0,"end_line":136,"end_character":40},"in_reply_to":"bae84128_e6ba1a6e","updated":"2016-02-19 13:42:51.000000000","message":"I don\u0027t understand the scenarios you described above. maybe you could give more detail","commit_id":"5052d0dc0b59400424830863c004afa8ce2913dd"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b335065612dcfddd6f9ff7394adf7729ba6db7a6","unresolved":false,"context_lines":[{"line_number":52,"context_line":"parts, each part is used for a specified purpose. e.g. we could use the least\r"},{"line_number":53,"context_line":"significant part for this solution, the cookie_mask should be 0xf, while apps\r"},{"line_number":54,"context_line":"could use the left 60-bits to do smart deletion.\r"},{"line_number":55,"context_line":"\r"},{"line_number":56,"context_line":"\r"},{"line_number":57,"context_line":"+------------------+          +------------------+          +------------------+\r"},{"line_number":58,"context_line":"|                  |          |                  |          |                  |\r"}],"source_content_type":"text/x-rst","patch_set":6,"id":"9aed3d3a_0eafe081","line":55,"updated":"2016-02-28 12:37:06.000000000","message":"How much does this solution save? Is it worth abusing the cookie field like this, rather than having two cookies? (DF cookie, and app specific cookie?) Is it possible to have two cookies?","commit_id":"f63df8780f0908df966504ba90dc1f325a4dad81"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b335065612dcfddd6f9ff7394adf7729ba6db7a6","unresolved":false,"context_lines":[{"line_number":123,"context_line":"          |                             |                             |\r"},{"line_number":124,"context_line":"          |                             |                             |\r"},{"line_number":125,"context_line":"          +                             +                             +\r"},{"line_number":126,"context_line":"\r"},{"line_number":127,"context_line":"\r"},{"line_number":128,"context_line":"Solution to residual flows\r"},{"line_number":129,"context_line":"----------------------------\r"}],"source_content_type":"text/x-rst","patch_set":6,"id":"9aed3d3a_eea9dc7c","line":126,"updated":"2016-02-28 12:37:06.000000000","message":"DF apps also have to be notified. (I think this is the case in the current implementation, but it needs mentioning).","commit_id":"f63df8780f0908df966504ba90dc1f325a4dad81"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b335065612dcfddd6f9ff7394adf7729ba6db7a6","unresolved":false,"context_lines":[{"line_number":136,"context_line":"Delete all flows before adding new flows\r"},{"line_number":137,"context_line":"We could reuse the solution for \u0027OVS restart\u0027, trigger local controller to\r"},{"line_number":138,"context_line":"re-flush flows then delete the flows with old cookie.\r"},{"line_number":139,"context_line":"\r"},{"line_number":140,"context_line":"Pros\r"},{"line_number":141,"context_line":"-----\r"},{"line_number":142,"context_line":"It\u0027s easy to implement because we could reuse the solution for \u0027OVS restart\u0027\r"}],"source_content_type":"text/x-rst","patch_set":6,"id":"9aed3d3a_8ee810b6","line":139,"updated":"2016-02-28 12:37:06.000000000","message":"OVS provides packet counters and timers on flows. We could set idle-timers on flows to be removed, and with the \u0027Solution to missing flows\u0027, have an alternative complete solution.","commit_id":"f63df8780f0908df966504ba90dc1f325a4dad81"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"510cd4a75f73a5f7ef527a2cd7f197343663dbb3","unresolved":false,"context_lines":[{"line_number":11,"context_line":"Problem Description\r"},{"line_number":12,"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\r"},{"line_number":13,"context_line":"\r"},{"line_number":14,"context_line":"OVS 2.4 default to reset up flows when it lose connection with controller.\r"},{"line_number":15,"context_line":"That means both restart of local controller and OVS will delete flows,\r"},{"line_number":16,"context_line":"result in a disruption in network traffic.\r"},{"line_number":17,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3afc51ec_f17463fe","line":14,"range":{"start_line":14,"start_character":4,"end_line":14,"end_character":7},"updated":"2016-03-12 12:18:42.000000000","message":"The behavior is OVS 2.4 only or OVS 2.4+. Please make it clear. However, in DF, we suggest to use OVS 2.5-branch (along with upstream kernel 4.3+ or build-in kernel 3.10+) due to conntrack-based security group driver. Is it the same to OVS 2.4?","commit_id":"cec60c4f9dacd261d1e60333b251211230c8f656"},{"author":{"_account_id":20336,"name":"heshan","email":"shan.he@huawei.com","username":"shanhe"},"change_message_id":"03b9aff2fc4105985ea9e2ebec62cdc650a3c71a","unresolved":false,"context_lines":[{"line_number":11,"context_line":"Problem Description\r"},{"line_number":12,"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\r"},{"line_number":13,"context_line":"\r"},{"line_number":14,"context_line":"OVS 2.4 default to reset up flows when it lose connection with controller.\r"},{"line_number":15,"context_line":"That means both restart of local controller and OVS will delete flows,\r"},{"line_number":16,"context_line":"result in a disruption in network traffic.\r"},{"line_number":17,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1af94dfe_b94aafc3","line":14,"range":{"start_line":14,"start_character":4,"end_line":14,"end_character":7},"in_reply_to":"3afc51ec_f17463fe","updated":"2016-03-17 06:48:04.000000000","message":"it\u0027s same to OVS 2.5, I\u0027ll delete the OVS version number","commit_id":"cec60c4f9dacd261d1e60333b251211230c8f656"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"fa406f5c71248fa541463a1fc03c1715e2fc85e3","unresolved":false,"context_lines":[{"line_number":52,"context_line":"parts, each part is used for a specified purpose. e.g. we could use the least\r"},{"line_number":53,"context_line":"significant part for this solution, the cookie_mask should be 0xf, while apps\r"},{"line_number":54,"context_line":"could use the left 60-bits to do smart deletion.\r"},{"line_number":55,"context_line":"\r"},{"line_number":56,"context_line":"\r"},{"line_number":57,"context_line":"+------------------+          +------------------+          +------------------+\r"},{"line_number":58,"context_line":"|                  |          |                  |          |                  |\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3afc51ec_e1992e70","line":55,"updated":"2016-03-13 06:45:14.000000000","message":"How much does this solution save? Is it worth abusing the cookie field like this, rather than having two cookies? (DF cookie, and app specific cookie?) Is it possible to have two cookies?","commit_id":"cec60c4f9dacd261d1e60333b251211230c8f656"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"df6980bd2bf9c4be2ba798ce8fd833e74375b0b7","unresolved":false,"context_lines":[{"line_number":52,"context_line":"parts, each part is used for a specified purpose. e.g. we could use the least\r"},{"line_number":53,"context_line":"significant part for this solution, the cookie_mask should be 0xf, while apps\r"},{"line_number":54,"context_line":"could use the left 60-bits to do smart deletion.\r"},{"line_number":55,"context_line":"\r"},{"line_number":56,"context_line":"\r"},{"line_number":57,"context_line":"+------------------+          +------------------+          +------------------+\r"},{"line_number":58,"context_line":"|                  |          |                  |          |                  |\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1af94dfe_181f2b60","line":55,"in_reply_to":"1af94dfe_7c6935be","updated":"2016-03-17 06:58:37.000000000","message":"I\u0027ve reviewed the OVS documentation. I think there can be only one cookie.\n\nI suspect that as long as we don\u0027t have local storage that survives controller restarts, this is the best option.","commit_id":"cec60c4f9dacd261d1e60333b251211230c8f656"},{"author":{"_account_id":20336,"name":"heshan","email":"shan.he@huawei.com","username":"shanhe"},"change_message_id":"03b9aff2fc4105985ea9e2ebec62cdc650a3c71a","unresolved":false,"context_lines":[{"line_number":52,"context_line":"parts, each part is used for a specified purpose. e.g. we could use the least\r"},{"line_number":53,"context_line":"significant part for this solution, the cookie_mask should be 0xf, while apps\r"},{"line_number":54,"context_line":"could use the left 60-bits to do smart deletion.\r"},{"line_number":55,"context_line":"\r"},{"line_number":56,"context_line":"\r"},{"line_number":57,"context_line":"+------------------+          +------------------+          +------------------+\r"},{"line_number":58,"context_line":"|                  |          |                  |          |                  |\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1af94dfe_7c6935be","line":55,"in_reply_to":"3afc51ec_e1992e70","updated":"2016-03-17 06:48:04.000000000","message":"1 bit is enough for aging solution.\nI don\u0027t know how to have two cookie, could you explained more?\nI think there are two kinds of cookie: global cookie and local cookie. aging cookie is global cookie, which should be set for all flows.","commit_id":"cec60c4f9dacd261d1e60333b251211230c8f656"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"fa406f5c71248fa541463a1fc03c1715e2fc85e3","unresolved":false,"context_lines":[{"line_number":123,"context_line":"          |                             |                             |\r"},{"line_number":124,"context_line":"          |                             |                             |\r"},{"line_number":125,"context_line":"          +                             +                             +\r"},{"line_number":126,"context_line":"\r"},{"line_number":127,"context_line":"\r"},{"line_number":128,"context_line":"Solution to residual flows\r"},{"line_number":129,"context_line":"----------------------------\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3afc51ec_21a4b6a4","line":126,"updated":"2016-03-13 06:45:14.000000000","message":"DF apps also have to be notified. (I think this is the case in the current implementation, but it needs mentioning).","commit_id":"cec60c4f9dacd261d1e60333b251211230c8f656"},{"author":{"_account_id":20336,"name":"heshan","email":"shan.he@huawei.com","username":"shanhe"},"change_message_id":"03b9aff2fc4105985ea9e2ebec62cdc650a3c71a","unresolved":false,"context_lines":[{"line_number":123,"context_line":"          |                             |                             |\r"},{"line_number":124,"context_line":"          |                             |                             |\r"},{"line_number":125,"context_line":"          +                             +                             +\r"},{"line_number":126,"context_line":"\r"},{"line_number":127,"context_line":"\r"},{"line_number":128,"context_line":"Solution to residual flows\r"},{"line_number":129,"context_line":"----------------------------\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1af94dfe_7cc5b58c","line":126,"in_reply_to":"3afc51ec_21a4b6a4","updated":"2016-03-17 06:48:04.000000000","message":"I think so, I\u0027ll redraw the diagram to reflect that","commit_id":"cec60c4f9dacd261d1e60333b251211230c8f656"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"fa406f5c71248fa541463a1fc03c1715e2fc85e3","unresolved":false,"context_lines":[{"line_number":136,"context_line":"Delete all flows before adding new flows\r"},{"line_number":137,"context_line":"We could reuse the solution for \u0027OVS restart\u0027, trigger local controller to\r"},{"line_number":138,"context_line":"re-flush flows then delete the flows with old cookie.\r"},{"line_number":139,"context_line":"\r"},{"line_number":140,"context_line":"Pros\r"},{"line_number":141,"context_line":"-----\r"},{"line_number":142,"context_line":"It\u0027s easy to implement because we could reuse the solution for \u0027OVS restart\u0027\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3afc51ec_01a1ba94","line":139,"updated":"2016-03-13 06:45:14.000000000","message":"OVS provides packet counters and timers on flows. We could set idle-timers on flows to be removed, and with the \u0027Solution to missing flows\u0027, have an alternative complete solution.","commit_id":"cec60c4f9dacd261d1e60333b251211230c8f656"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"df6980bd2bf9c4be2ba798ce8fd833e74375b0b7","unresolved":false,"context_lines":[{"line_number":136,"context_line":"Delete all flows before adding new flows\r"},{"line_number":137,"context_line":"We could reuse the solution for \u0027OVS restart\u0027, trigger local controller to\r"},{"line_number":138,"context_line":"re-flush flows then delete the flows with old cookie.\r"},{"line_number":139,"context_line":"\r"},{"line_number":140,"context_line":"Pros\r"},{"line_number":141,"context_line":"-----\r"},{"line_number":142,"context_line":"It\u0027s easy to implement because we could reuse the solution for \u0027OVS restart\u0027\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1af94dfe_b836f7e4","line":139,"in_reply_to":"1af94dfe_9ced21f2","updated":"2016-03-17 06:58:37.000000000","message":"I thought that flows that are ignored and don\u0027t apply to any traffic will be removed automatically.\n\nHowever, on second thought, it just complicates matters, so I think this can be ignored.","commit_id":"cec60c4f9dacd261d1e60333b251211230c8f656"},{"author":{"_account_id":20336,"name":"heshan","email":"shan.he@huawei.com","username":"shanhe"},"change_message_id":"03b9aff2fc4105985ea9e2ebec62cdc650a3c71a","unresolved":false,"context_lines":[{"line_number":136,"context_line":"Delete all flows before adding new flows\r"},{"line_number":137,"context_line":"We could reuse the solution for \u0027OVS restart\u0027, trigger local controller to\r"},{"line_number":138,"context_line":"re-flush flows then delete the flows with old cookie.\r"},{"line_number":139,"context_line":"\r"},{"line_number":140,"context_line":"Pros\r"},{"line_number":141,"context_line":"-----\r"},{"line_number":142,"context_line":"It\u0027s easy to implement because we could reuse the solution for \u0027OVS restart\u0027\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1af94dfe_9ced21f2","line":139,"in_reply_to":"3afc51ec_01a1ba94","updated":"2016-03-17 06:48:04.000000000","message":"how could controller know which flows to be removed? df don\u0027t maintain a flow cache which record the flows it flushed.\n\nwith the \u0027Solution to missing flows\u0027, what\u0027s the alternative complete solution?","commit_id":"cec60c4f9dacd261d1e60333b251211230c8f656"}],"dragonflow/controller/aging.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b335065612dcfddd6f9ff7394adf7729ba6db7a6","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from dragonflow.controller.df_base_app import DFlowApp\r"},{"line_number":17,"context_line":"from dragonflow.controller.ryu_base_app import RyuDFAdapter\r"},{"line_number":18,"context_line":"\r"},{"line_number":19,"context_line":"AGING_COOKIE_MASK \u003d 0x04\r"},{"line_number":20,"context_line":"\r"},{"line_number":21,"context_line":"\r"},{"line_number":22,"context_line":"class Aging(DFlowApp):\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"9aed3d3a_ce4058a8","line":19,"updated":"2016-02-28 12:37:06.000000000","message":"Note, this only tests the 3rd bit. To test all LSB 4 bits, use 0xf (like you said in the spec).","commit_id":"f63df8780f0908df966504ba90dc1f325a4dad81"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b335065612dcfddd6f9ff7394adf7729ba6db7a6","unresolved":false,"context_lines":[{"line_number":23,"context_line":"\r"},{"line_number":24,"context_line":"    def __init__(self, *args, **kwargs):\r"},{"line_number":25,"context_line":"        super(Aging, self).__init__(*args, **kwargs)\r"},{"line_number":26,"context_line":"        self.cookie_mask \u003d AGING_COOKIE_MASK\r"},{"line_number":27,"context_line":"        self.dispatcher \u003d RyuDFAdapter.get_dispatcher()\r"},{"line_number":28,"context_line":"\r"},{"line_number":29,"context_line":"    @staticmethod\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"9aed3d3a_0e4b60ca","line":26,"updated":"2016-02-28 12:37:06.000000000","message":"I couldn\u0027t find where is this member used.","commit_id":"f63df8780f0908df966504ba90dc1f325a4dad81"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b335065612dcfddd6f9ff7394adf7729ba6db7a6","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    def __init__(self, *args, **kwargs):\r"},{"line_number":25,"context_line":"        super(Aging, self).__init__(*args, **kwargs)\r"},{"line_number":26,"context_line":"        self.cookie_mask \u003d AGING_COOKIE_MASK\r"},{"line_number":27,"context_line":"        self.dispatcher \u003d RyuDFAdapter.get_dispatcher()\r"},{"line_number":28,"context_line":"\r"},{"line_number":29,"context_line":"    @staticmethod\r"},{"line_number":30,"context_line":"    def _get_all_flows(datapath):\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"9aed3d3a_ee1c3cc3","line":27,"updated":"2016-02-28 12:37:06.000000000","message":"I couldn\u0027t find the definition of this method.","commit_id":"f63df8780f0908df966504ba90dc1f325a4dad81"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b335065612dcfddd6f9ff7394adf7729ba6db7a6","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        self.dispatcher \u003d RyuDFAdapter.get_dispatcher()\r"},{"line_number":28,"context_line":"\r"},{"line_number":29,"context_line":"    @staticmethod\r"},{"line_number":30,"context_line":"    def _get_all_flows(datapath):\r"},{"line_number":31,"context_line":"        ofp \u003d datapath.ofproto\r"},{"line_number":32,"context_line":"        ofp_parser \u003d datapath.ofproto_parser\r"},{"line_number":33,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"9aed3d3a_0e79a0f6","line":30,"updated":"2016-02-28 12:37:06.000000000","message":"This method doesn\u0027t actually return the flows. Consider renaming (e.g. _send_get_all_flows_msg).","commit_id":"f63df8780f0908df966504ba90dc1f325a4dad81"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b335065612dcfddd6f9ff7394adf7729ba6db7a6","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        datapath.send_msg(req)\r"},{"line_number":42,"context_line":"\r"},{"line_number":43,"context_line":"    def start_aging(self, datapath):\r"},{"line_number":44,"context_line":"        self._get_all_flows(datapath)\r"},{"line_number":45,"context_line":"\r"},{"line_number":46,"context_line":"    # when re-flush all flows done, one should call send_flow_stats_request\r"},{"line_number":47,"context_line":"    def delete_stale_flows(self, ev):\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"9aed3d3a_ae50745f","line":44,"updated":"2016-02-28 12:37:06.000000000","message":"Why is _get_all_flows static? It\u0027s private, and this is its only usage.","commit_id":"f63df8780f0908df966504ba90dc1f325a4dad81"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b335065612dcfddd6f9ff7394adf7729ba6db7a6","unresolved":false,"context_lines":[{"line_number":53,"context_line":"                self.mod_flow(self.get_datapath(), cookie\u003dstat.cookie,\r"},{"line_number":54,"context_line":"                              cookie_mask\u003dAGING_COOKIE_MASK,\r"},{"line_number":55,"context_line":"                              command\u003dself.get_datapath().ofproto.OFPFC_DELETE)\r"},{"line_number":56,"context_line":"\r"},{"line_number":57,"context_line":"                flows.append(\u0027table_id\u003d%s \u0027\r"},{"line_number":58,"context_line":"                             \u0027duration_sec\u003d%d duration_nsec\u003d%d \u0027\r"},{"line_number":59,"context_line":"                             \u0027priority\u003d%d \u0027\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"9aed3d3a_8e6e50ff","line":56,"updated":"2016-02-28 12:37:06.000000000","message":"Consider logging on a per flow basis, i.e. not adding all deleted flows to list flows, and printing the list, but whenever you delete a flow, log it to debug immediately.","commit_id":"f63df8780f0908df966504ba90dc1f325a4dad81"}],"dragonflow/controller/df_base_app.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b335065612dcfddd6f9ff7394adf7729ba6db7a6","unresolved":false,"context_lines":[{"line_number":94,"context_line":"                                  data\u003ddata)"},{"line_number":95,"context_line":"        datapath.send_msg(out)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    def set_cookie(self, cookie_fragment, mask):"},{"line_number":98,"context_line":"        self.cookie \u0026\u003d ~mask"},{"line_number":99,"context_line":"        self.cookie |\u003d (cookie_fragment \u0026 mask)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9aed3d3a_ae7354e6","line":97,"updated":"2016-02-28 12:37:06.000000000","message":"I couldn\u0027t find where this method is called.","commit_id":"f63df8780f0908df966504ba90dc1f325a4dad81"}]}
