)]}'
{"doc/source/specs/mitaka/kuryr_k8s_integration.rst":[{"author":{"_account_id":15967,"name":"vikas choudhary","email":"choudharyvikas16@gmail.com","username":"vikaschoudhary16"},"change_message_id":"3529e447625ddee7c1cec0afc561df6ffc66cd27","unresolved":false,"context_lines":[{"line_number":236,"context_line":""},{"line_number":237,"context_line":"API Watcher"},{"line_number":238,"context_line":"^^^^^^^^^^^"},{"line_number":239,"context_line":"To watch kubernetes API server for changes in services and pods and later"},{"line_number":240,"context_line":"policies collections."},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"In order to react to the Kubernetes API events for each resource type, the API"},{"line_number":243,"context_line":"watcher should take into account the **watch** and the **resourceVersion** [8]"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_b529103a","line":240,"range":{"start_line":239,"start_character":68,"end_line":240,"end_character":8},"updated":"2016-06-16 05:24:06.000000000","message":"would be nice to have , after later.\n\nlater, policies collections","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":15967,"name":"vikas choudhary","email":"choudharyvikas16@gmail.com","username":"vikaschoudhary16"},"change_message_id":"3529e447625ddee7c1cec0afc561df6ffc66cd27","unresolved":false,"context_lines":[{"line_number":241,"context_line":""},{"line_number":242,"context_line":"In order to react to the Kubernetes API events for each resource type, the API"},{"line_number":243,"context_line":"watcher should take into account the **watch** and the **resourceVersion** [8]"},{"line_number":244,"context_line":"parameters to the resource URLS. Setting the former to true will make the"},{"line_number":245,"context_line":"connection to the Kubernetes API server use a chunked HTTP transfer in which"},{"line_number":246,"context_line":"each event takes a newline. The latter allows you to tell the API which is the"},{"line_number":247,"context_line":"last version that the resource watcher saw for that type of resource, which"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_157bc42a","line":244,"range":{"start_line":244,"start_character":27,"end_line":244,"end_character":31},"updated":"2016-06-16 05:24:06.000000000","message":"s/URL/URLs","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":14352,"name":"Antoni Segura Puimedon","email":"celebdor@gmail.com","username":"toni"},"change_message_id":"c031a6d65bf77e02e1cd12e3f84ef2e9b2b9ea78","unresolved":false,"context_lines":[{"line_number":241,"context_line":""},{"line_number":242,"context_line":"In order to react to the Kubernetes API events for each resource type, the API"},{"line_number":243,"context_line":"watcher should take into account the **watch** and the **resourceVersion** [8]"},{"line_number":244,"context_line":"parameters to the resource URLS. Setting the former to true will make the"},{"line_number":245,"context_line":"connection to the Kubernetes API server use a chunked HTTP transfer in which"},{"line_number":246,"context_line":"each event takes a newline. The latter allows you to tell the API which is the"},{"line_number":247,"context_line":"last version that the resource watcher saw for that type of resource, which"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_0e97eeeb","line":244,"range":{"start_line":244,"start_character":27,"end_line":244,"end_character":31},"in_reply_to":"7aa08908_157bc42a","updated":"2016-06-17 09:35:21.000000000","message":"Done","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":12069,"name":"Taku Fukushima","email":"f.tac.mac@gmail.com","username":"tfukushima"},"change_message_id":"b8442052f2e327e1157d34c2e7cf69779e81297f","unresolved":false,"context_lines":[{"line_number":247,"context_line":"last version that the resource watcher saw for that type of resource, which"},{"line_number":248,"context_line":"will make the API service not to repeat older events. An example uri could be:"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    https://localhost:8080/api/v1/watch/pods?watch\u003dTrue\u0026resourceVersion\u003d121"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"Watching"},{"line_number":253,"context_line":"~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_4984500a","line":250,"range":{"start_line":250,"start_character":51,"end_line":250,"end_character":55},"updated":"2016-06-17 09:57:33.000000000","message":"nit: Although I confirmed this worked perfectly but it\u0027d be better to make this lower case to avoid the unnecessary confusion since it is on the official doc.\n\nhttp://kubernetes.io/docs/api/#v1beta3-conversion-tips-from-v1beta12","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":14352,"name":"Antoni Segura Puimedon","email":"celebdor@gmail.com","username":"toni"},"change_message_id":"10988ff3983f2a10fb6c42ef007b98ffaa72143d","unresolved":false,"context_lines":[{"line_number":247,"context_line":"last version that the resource watcher saw for that type of resource, which"},{"line_number":248,"context_line":"will make the API service not to repeat older events. An example uri could be:"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    https://localhost:8080/api/v1/watch/pods?watch\u003dTrue\u0026resourceVersion\u003d121"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"Watching"},{"line_number":253,"context_line":"~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_8d3d9d90","line":250,"range":{"start_line":250,"start_character":51,"end_line":250,"end_character":55},"in_reply_to":"7aa08908_4984500a","updated":"2016-06-17 10:55:44.000000000","message":"thanks!","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":7505,"name":"Jaume Devesa","email":"devvesa@gmail.com","username":"devesa"},"change_message_id":"cf6d74bbd1cefe0cf8a351210fd3486b7c065e55","unresolved":false,"context_lines":[{"line_number":252,"context_line":"Watching"},{"line_number":253,"context_line":"~~~~~~~~"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"Each watcher should run in a separate asyncio green thread. Watchers should"},{"line_number":256,"context_line":"allow others to subscribe to the events that they process."},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"Each resource watcher should start its watch by requesting the"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_91467779","line":255,"range":{"start_line":255,"start_character":46,"end_line":255,"end_character":58},"updated":"2016-06-16 21:09:49.000000000","message":"Isn\u0027t better to say coroutines?","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":14352,"name":"Antoni Segura Puimedon","email":"celebdor@gmail.com","username":"toni"},"change_message_id":"c031a6d65bf77e02e1cd12e3f84ef2e9b2b9ea78","unresolved":false,"context_lines":[{"line_number":252,"context_line":"Watching"},{"line_number":253,"context_line":"~~~~~~~~"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"Each watcher should run in a separate asyncio green thread. Watchers should"},{"line_number":256,"context_line":"allow others to subscribe to the events that they process."},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"Each resource watcher should start its watch by requesting the"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_ae885ac7","line":255,"range":{"start_line":255,"start_character":46,"end_line":255,"end_character":58},"in_reply_to":"7aa08908_91467779","updated":"2016-06-17 09:35:21.000000000","message":"Most certainly.","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"7d595a75334ff2e2a066144ed345240b20ccb744","unresolved":false,"context_lines":[{"line_number":253,"context_line":"~~~~~~~~"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"Each watcher should run in a separate asyncio green thread. Watchers should"},{"line_number":256,"context_line":"allow others to subscribe to the events that they process."},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"Each resource watcher should start its watch by requesting the"},{"line_number":259,"context_line":"**resourceVersion zero**. This makes the Kubernetes API server to feed the"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5a9d85d2_7e3a0fcf","line":256,"range":{"start_line":256,"start_character":6,"end_line":256,"end_character":12},"updated":"2016-06-20 07:19:06.000000000","message":"who are others? What subscription mechanism are you planning? Can you please refer to it?","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":14352,"name":"Antoni Segura Puimedon","email":"celebdor@gmail.com","username":"toni"},"change_message_id":"bb0c6ba5d188bd2bdbb3e1f10b99b93b8a0c611e","unresolved":false,"context_lines":[{"line_number":253,"context_line":"~~~~~~~~"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"Each watcher should run in a separate asyncio green thread. Watchers should"},{"line_number":256,"context_line":"allow others to subscribe to the events that they process."},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"Each resource watcher should start its watch by requesting the"},{"line_number":259,"context_line":"**resourceVersion zero**. This makes the Kubernetes API server to feed the"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5a9d85d2_21a4e855","line":256,"range":{"start_line":256,"start_character":6,"end_line":256,"end_character":12},"in_reply_to":"5a9d85d2_7e3a0fcf","updated":"2016-06-20 07:58:48.000000000","message":"Others is whichever code imports the watchers\u0027 module.\n\nI\u0027ll expand on that","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"7d595a75334ff2e2a066144ed345240b20ccb744","unresolved":false,"context_lines":[{"line_number":257,"context_line":""},{"line_number":258,"context_line":"Each resource watcher should start its watch by requesting the"},{"line_number":259,"context_line":"**resourceVersion zero**. This makes the Kubernetes API server to feed the"},{"line_number":260,"context_line":"watcher events for the current state and then continues with any event that"},{"line_number":261,"context_line":"happened in the meantime and that continues to happen. This way we prevent the"},{"line_number":262,"context_line":"watchers from processing events for things that were already deleted long ago."},{"line_number":263,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5a9d85d2_3e6ec7c9","line":260,"range":{"start_line":260,"start_character":8,"end_line":260,"end_character":36},"updated":"2016-06-20 07:19:06.000000000","message":"does it mean that create events will be received for current state following by the modify/delete events if the k8s model was changed after the request?","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":14352,"name":"Antoni Segura Puimedon","email":"celebdor@gmail.com","username":"toni"},"change_message_id":"bb0c6ba5d188bd2bdbb3e1f10b99b93b8a0c611e","unresolved":false,"context_lines":[{"line_number":257,"context_line":""},{"line_number":258,"context_line":"Each resource watcher should start its watch by requesting the"},{"line_number":259,"context_line":"**resourceVersion zero**. This makes the Kubernetes API server to feed the"},{"line_number":260,"context_line":"watcher events for the current state and then continues with any event that"},{"line_number":261,"context_line":"happened in the meantime and that continues to happen. This way we prevent the"},{"line_number":262,"context_line":"watchers from processing events for things that were already deleted long ago."},{"line_number":263,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5a9d85d2_81b03c8d","line":260,"range":{"start_line":260,"start_character":8,"end_line":260,"end_character":36},"in_reply_to":"5a9d85d2_3e6ec7c9","updated":"2016-06-20 07:58:48.000000000","message":"exactly","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":7505,"name":"Jaume Devesa","email":"devvesa@gmail.com","username":"devesa"},"change_message_id":"cf6d74bbd1cefe0cf8a351210fd3486b7c065e55","unresolved":false,"context_lines":[{"line_number":257,"context_line":""},{"line_number":258,"context_line":"Each resource watcher should start its watch by requesting the"},{"line_number":259,"context_line":"**resourceVersion zero**. This makes the Kubernetes API server to feed the"},{"line_number":260,"context_line":"watcher events for the current state and then continues with any event that"},{"line_number":261,"context_line":"happened in the meantime and that continues to happen. This way we prevent the"},{"line_number":262,"context_line":"watchers from processing events for things that were already deleted long ago."},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"Resouce watchers should provide a register method per event type that allows"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_144435b5","line":261,"range":{"start_line":260,"start_character":38,"end_line":261,"end_character":54},"updated":"2016-06-16 21:09:49.000000000","message":"I think this sentence is over-complicated and it even confuses the meaning of the previous one. What about:\n\n    \"[...] for the current state. We\u0027ll receive only the following events when they\u0027ll happen. This way [...]","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":14352,"name":"Antoni Segura Puimedon","email":"celebdor@gmail.com","username":"toni"},"change_message_id":"c031a6d65bf77e02e1cd12e3f84ef2e9b2b9ea78","unresolved":false,"context_lines":[{"line_number":257,"context_line":""},{"line_number":258,"context_line":"Each resource watcher should start its watch by requesting the"},{"line_number":259,"context_line":"**resourceVersion zero**. This makes the Kubernetes API server to feed the"},{"line_number":260,"context_line":"watcher events for the current state and then continues with any event that"},{"line_number":261,"context_line":"happened in the meantime and that continues to happen. This way we prevent the"},{"line_number":262,"context_line":"watchers from processing events for things that were already deleted long ago."},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"Resouce watchers should provide a register method per event type that allows"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_4eb8d675","line":261,"range":{"start_line":260,"start_character":38,"end_line":261,"end_character":54},"in_reply_to":"7aa08908_144435b5","updated":"2016-06-17 09:35:21.000000000","message":"I\u0027ll reword","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":15967,"name":"vikas choudhary","email":"choudharyvikas16@gmail.com","username":"vikaschoudhary16"},"change_message_id":"3529e447625ddee7c1cec0afc561df6ffc66cd27","unresolved":false,"context_lines":[{"line_number":262,"context_line":"watchers from processing events for things that were already deleted long ago."},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"Resouce watchers should provide a register method per event type that allows"},{"line_number":265,"context_line":"the calling code to pass a register a routine as the translator to pass the"},{"line_number":266,"context_line":"processed event data to. In the case of the Kuryr Kubernetes integration, that"},{"line_number":267,"context_line":"should be for example, the NeutronPortTranslator registering its create_port"},{"line_number":268,"context_line":"method to the PodWatcher ADDED event."}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_f5c5583d","line":265,"range":{"start_line":265,"start_character":25,"end_line":265,"end_character":27},"updated":"2016-06-16 05:24:06.000000000","message":"s/a/and","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"7d595a75334ff2e2a066144ed345240b20ccb744","unresolved":false,"context_lines":[{"line_number":262,"context_line":"watchers from processing events for things that were already deleted long ago."},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"Resouce watchers should provide a register method per event type that allows"},{"line_number":265,"context_line":"the calling code to pass a register a routine as the translator to pass the"},{"line_number":266,"context_line":"processed event data to. In the case of the Kuryr Kubernetes integration, that"},{"line_number":267,"context_line":"should be for example, the NeutronPortTranslator registering its create_port"},{"line_number":268,"context_line":"method to the PodWatcher ADDED event."}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_a6e1d32c","line":265,"range":{"start_line":265,"start_character":20,"end_line":265,"end_character":37},"updated":"2016-06-20 07:19:06.000000000","message":"to pass/to register","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":14352,"name":"Antoni Segura Puimedon","email":"celebdor@gmail.com","username":"toni"},"change_message_id":"bb0c6ba5d188bd2bdbb3e1f10b99b93b8a0c611e","unresolved":false,"context_lines":[{"line_number":262,"context_line":"watchers from processing events for things that were already deleted long ago."},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"Resouce watchers should provide a register method per event type that allows"},{"line_number":265,"context_line":"the calling code to pass a register a routine as the translator to pass the"},{"line_number":266,"context_line":"processed event data to. In the case of the Kuryr Kubernetes integration, that"},{"line_number":267,"context_line":"should be for example, the NeutronPortTranslator registering its create_port"},{"line_number":268,"context_line":"method to the PodWatcher ADDED event."}],"source_content_type":"text/x-rst","patch_set":1,"id":"5a9d85d2_c1aa4419","line":265,"range":{"start_line":265,"start_character":20,"end_line":265,"end_character":37},"in_reply_to":"7aa08908_a6e1d32c","updated":"2016-06-20 07:58:48.000000000","message":"Done","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":14352,"name":"Antoni Segura Puimedon","email":"celebdor@gmail.com","username":"toni"},"change_message_id":"c031a6d65bf77e02e1cd12e3f84ef2e9b2b9ea78","unresolved":false,"context_lines":[{"line_number":262,"context_line":"watchers from processing events for things that were already deleted long ago."},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"Resouce watchers should provide a register method per event type that allows"},{"line_number":265,"context_line":"the calling code to pass a register a routine as the translator to pass the"},{"line_number":266,"context_line":"processed event data to. In the case of the Kuryr Kubernetes integration, that"},{"line_number":267,"context_line":"should be for example, the NeutronPortTranslator registering its create_port"},{"line_number":268,"context_line":"method to the PodWatcher ADDED event."}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_c9b84014","line":265,"range":{"start_line":265,"start_character":25,"end_line":265,"end_character":27},"in_reply_to":"7aa08908_f5c5583d","updated":"2016-06-17 09:35:21.000000000","message":"Done","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"7d595a75334ff2e2a066144ed345240b20ccb744","unresolved":false,"context_lines":[{"line_number":261,"context_line":"happened in the meantime and that continues to happen. This way we prevent the"},{"line_number":262,"context_line":"watchers from processing events for things that were already deleted long ago."},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"Resouce watchers should provide a register method per event type that allows"},{"line_number":265,"context_line":"the calling code to pass a register a routine as the translator to pass the"},{"line_number":266,"context_line":"processed event data to. In the case of the Kuryr Kubernetes integration, that"},{"line_number":267,"context_line":"should be for example, the NeutronPortTranslator registering its create_port"},{"line_number":268,"context_line":"method to the PodWatcher ADDED event."},{"line_number":269,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_e638fba1","line":266,"range":{"start_line":264,"start_character":0,"end_line":266,"end_character":24},"updated":"2016-06-20 07:19:06.000000000","message":"Can you please rephrase? The intention is not clear","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":7505,"name":"Jaume Devesa","email":"devvesa@gmail.com","username":"devesa"},"change_message_id":"cf6d74bbd1cefe0cf8a351210fd3486b7c065e55","unresolved":false,"context_lines":[{"line_number":262,"context_line":"watchers from processing events for things that were already deleted long ago."},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"Resouce watchers should provide a register method per event type that allows"},{"line_number":265,"context_line":"the calling code to pass a register a routine as the translator to pass the"},{"line_number":266,"context_line":"processed event data to. In the case of the Kuryr Kubernetes integration, that"},{"line_number":267,"context_line":"should be for example, the NeutronPortTranslator registering its create_port"},{"line_number":268,"context_line":"method to the PodWatcher ADDED event."},{"line_number":269,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_94b82577","line":266,"range":{"start_line":265,"start_character":17,"end_line":266,"end_character":23},"updated":"2016-06-16 21:09:49.000000000","message":"I would say:\n\n\"to declare one or more callbacks to process the event\"","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":7505,"name":"Jaume Devesa","email":"devvesa@gmail.com","username":"devesa"},"change_message_id":"baa9c2ec399fe6602787e0b6033c21fb70e475de","unresolved":false,"context_lines":[{"line_number":262,"context_line":"watchers from processing events for things that were already deleted long ago."},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"Resouce watchers should provide a register method per event type that allows"},{"line_number":265,"context_line":"the calling code to pass a register a routine as the translator to pass the"},{"line_number":266,"context_line":"processed event data to. In the case of the Kuryr Kubernetes integration, that"},{"line_number":267,"context_line":"should be for example, the NeutronPortTranslator registering its create_port"},{"line_number":268,"context_line":"method to the PodWatcher ADDED event."},{"line_number":269,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_b210aa01","line":266,"range":{"start_line":265,"start_character":17,"end_line":266,"end_character":23},"in_reply_to":"7aa08908_495a90f3","updated":"2016-06-17 14:41:24.000000000","message":"Ok:\n\n\"to declare a callback to process the event\"\n\n:)","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":14352,"name":"Antoni Segura Puimedon","email":"celebdor@gmail.com","username":"toni"},"change_message_id":"c031a6d65bf77e02e1cd12e3f84ef2e9b2b9ea78","unresolved":false,"context_lines":[{"line_number":262,"context_line":"watchers from processing events for things that were already deleted long ago."},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"Resouce watchers should provide a register method per event type that allows"},{"line_number":265,"context_line":"the calling code to pass a register a routine as the translator to pass the"},{"line_number":266,"context_line":"processed event data to. In the case of the Kuryr Kubernetes integration, that"},{"line_number":267,"context_line":"should be for example, the NeutronPortTranslator registering its create_port"},{"line_number":268,"context_line":"method to the PodWatcher ADDED event."},{"line_number":269,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_495a90f3","line":266,"range":{"start_line":265,"start_character":17,"end_line":266,"end_character":23},"in_reply_to":"7aa08908_94b82577","updated":"2016-06-17 09:35:21.000000000","message":"For now I\u0027m thinking of putting a single translating method. If we see need for more, we can always add it afterwards.","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":14352,"name":"Antoni Segura Puimedon","email":"celebdor@gmail.com","username":"toni"},"change_message_id":"bb0c6ba5d188bd2bdbb3e1f10b99b93b8a0c611e","unresolved":false,"context_lines":[{"line_number":261,"context_line":"happened in the meantime and that continues to happen. This way we prevent the"},{"line_number":262,"context_line":"watchers from processing events for things that were already deleted long ago."},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"Resouce watchers should provide a register method per event type that allows"},{"line_number":265,"context_line":"the calling code to pass a register a routine as the translator to pass the"},{"line_number":266,"context_line":"processed event data to. In the case of the Kuryr Kubernetes integration, that"},{"line_number":267,"context_line":"should be for example, the NeutronPortTranslator registering its create_port"},{"line_number":268,"context_line":"method to the PodWatcher ADDED event."},{"line_number":269,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5a9d85d2_a1a7384e","line":266,"range":{"start_line":264,"start_character":0,"end_line":266,"end_character":24},"in_reply_to":"7aa08908_e638fba1","updated":"2016-06-20 07:58:48.000000000","message":"Done","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":12069,"name":"Taku Fukushima","email":"f.tac.mac@gmail.com","username":"tfukushima"},"change_message_id":"b8442052f2e327e1157d34c2e7cf69779e81297f","unresolved":false,"context_lines":[{"line_number":264,"context_line":"Resouce watchers should provide a register method per event type that allows"},{"line_number":265,"context_line":"the calling code to pass a register a routine as the translator to pass the"},{"line_number":266,"context_line":"processed event data to. In the case of the Kuryr Kubernetes integration, that"},{"line_number":267,"context_line":"should be for example, the NeutronPortTranslator registering its create_port"},{"line_number":268,"context_line":"method to the PodWatcher ADDED event."},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"The Kubernetes API periodically closes the chunk transferring connection so"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_21cc7834","line":267,"range":{"start_line":267,"start_character":65,"end_line":267,"end_character":76},"updated":"2016-06-17 09:57:33.000000000","message":"Although it\u0027s completely the implementation detail, why not added_event_handler or other more generic and common name that can be used among any watcher?\n\nPredefined method names provide the clearer and better organised code because of the \"convention over configuration\" principle in my opinion.\n\nOr am I missing your point and is this a more abstracted design principle in general?","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":14352,"name":"Antoni Segura Puimedon","email":"celebdor@gmail.com","username":"toni"},"change_message_id":"10988ff3983f2a10fb6c42ef007b98ffaa72143d","unresolved":false,"context_lines":[{"line_number":264,"context_line":"Resouce watchers should provide a register method per event type that allows"},{"line_number":265,"context_line":"the calling code to pass a register a routine as the translator to pass the"},{"line_number":266,"context_line":"processed event data to. In the case of the Kuryr Kubernetes integration, that"},{"line_number":267,"context_line":"should be for example, the NeutronPortTranslator registering its create_port"},{"line_number":268,"context_line":"method to the PodWatcher ADDED event."},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"The Kubernetes API periodically closes the chunk transferring connection so"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_0d524dde","line":267,"range":{"start_line":267,"start_character":65,"end_line":267,"end_character":76},"in_reply_to":"7aa08908_21cc7834","updated":"2016-06-17 10:55:44.000000000","message":"I agree with a more generic name","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":15967,"name":"vikas choudhary","email":"choudharyvikas16@gmail.com","username":"vikaschoudhary16"},"change_message_id":"3529e447625ddee7c1cec0afc561df6ffc66cd27","unresolved":false,"context_lines":[{"line_number":269,"context_line":""},{"line_number":270,"context_line":"The Kubernetes API periodically closes the chunk transferring connection so"},{"line_number":271,"context_line":"that non-active watchers are dropped and the load of the API server is"},{"line_number":272,"context_line":"reduced. Thus, when the connection is inevitably dropped, each resource watcher"},{"line_number":273,"context_line":"should schedule itself again. When the new watch starts, it could either GET"},{"line_number":274,"context_line":"from **resourceVersion \u003d 0** or it could resume from the latest annotated"},{"line_number":275,"context_line":"resource."}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_754de898","line":272,"range":{"start_line":272,"start_character":0,"end_line":272,"end_character":7},"updated":"2016-06-16 05:24:06.000000000","message":"This can be accomodated in previous line, ensuring length \u003c 79","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":14352,"name":"Antoni Segura Puimedon","email":"celebdor@gmail.com","username":"toni"},"change_message_id":"c031a6d65bf77e02e1cd12e3f84ef2e9b2b9ea78","unresolved":false,"context_lines":[{"line_number":269,"context_line":""},{"line_number":270,"context_line":"The Kubernetes API periodically closes the chunk transferring connection so"},{"line_number":271,"context_line":"that non-active watchers are dropped and the load of the API server is"},{"line_number":272,"context_line":"reduced. Thus, when the connection is inevitably dropped, each resource watcher"},{"line_number":273,"context_line":"should schedule itself again. When the new watch starts, it could either GET"},{"line_number":274,"context_line":"from **resourceVersion \u003d 0** or it could resume from the latest annotated"},{"line_number":275,"context_line":"resource."}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_e96b7c83","line":272,"range":{"start_line":272,"start_character":0,"end_line":272,"end_character":7},"in_reply_to":"7aa08908_754de898","updated":"2016-06-17 09:35:21.000000000","message":"Done","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":7505,"name":"Jaume Devesa","email":"devvesa@gmail.com","username":"devesa"},"change_message_id":"cf6d74bbd1cefe0cf8a351210fd3486b7c065e55","unresolved":false,"context_lines":[{"line_number":270,"context_line":"The Kubernetes API periodically closes the chunk transferring connection so"},{"line_number":271,"context_line":"that non-active watchers are dropped and the load of the API server is"},{"line_number":272,"context_line":"reduced. Thus, when the connection is inevitably dropped, each resource watcher"},{"line_number":273,"context_line":"should schedule itself again. When the new watch starts, it could either GET"},{"line_number":274,"context_line":"from **resourceVersion \u003d 0** or it could resume from the latest annotated"},{"line_number":275,"context_line":"resource."},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"The current proposal for re-scheduling of resouce watchers is that when"},{"line_number":278,"context_line":"a translator is registered, it should pass the *keyname* that it will use."}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_9414a54d","line":275,"range":{"start_line":273,"start_character":30,"end_line":275,"end_character":8},"updated":"2016-06-16 21:09:49.000000000","message":"What happens if this new \u0027reschedule\u0027 with resourceVersion\u003d0 over a list of resources misses a DELETED event over a resource already created in Neutron?\n\nSame for service respawning.","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":14352,"name":"Antoni Segura Puimedon","email":"celebdor@gmail.com","username":"toni"},"change_message_id":"c031a6d65bf77e02e1cd12e3f84ef2e9b2b9ea78","unresolved":false,"context_lines":[{"line_number":270,"context_line":"The Kubernetes API periodically closes the chunk transferring connection so"},{"line_number":271,"context_line":"that non-active watchers are dropped and the load of the API server is"},{"line_number":272,"context_line":"reduced. Thus, when the connection is inevitably dropped, each resource watcher"},{"line_number":273,"context_line":"should schedule itself again. When the new watch starts, it could either GET"},{"line_number":274,"context_line":"from **resourceVersion \u003d 0** or it could resume from the latest annotated"},{"line_number":275,"context_line":"resource."},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"The current proposal for re-scheduling of resouce watchers is that when"},{"line_number":278,"context_line":"a translator is registered, it should pass the *keyname* that it will use."}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_89c8f876","line":275,"range":{"start_line":273,"start_character":30,"end_line":275,"end_character":8},"in_reply_to":"7aa08908_9414a54d","updated":"2016-06-17 09:35:21.000000000","message":"One more point for re-scheduling from the latest annotated resource.\n\nAbout re-spawning... The only good way to tackle that is to do a cleanup in the re-sync. When we re-spawn and put resourceversion\u003d0, we get the current state for kubernetes, we should then check which k8s things are in Neutron that were not referred to, and clean them up.","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"7d595a75334ff2e2a066144ed345240b20ccb744","unresolved":false,"context_lines":[{"line_number":275,"context_line":"resource."},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"The current proposal for re-scheduling of resouce watchers is that when"},{"line_number":278,"context_line":"a translator is registered, it should pass the *keyname* that it will use."},{"line_number":279,"context_line":"E.g., *kuryr.org*. When a resource watcher sees a **MODIFIED** event with an"},{"line_number":280,"context_line":"annotation containing the *keyname*, it should increase a variable called, for"},{"line_number":281,"context_line":"example *pod_resource_version*. When the time for scheduling a new Pod watcher"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5a9d85d2_7eddef6f","line":278,"range":{"start_line":278,"start_character":38,"end_line":278,"end_character":57},"updated":"2016-06-20 07:19:06.000000000","message":"pass to whom? who is responsible to maintain the resource version?","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":14352,"name":"Antoni Segura Puimedon","email":"celebdor@gmail.com","username":"toni"},"change_message_id":"bb0c6ba5d188bd2bdbb3e1f10b99b93b8a0c611e","unresolved":false,"context_lines":[{"line_number":275,"context_line":"resource."},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"The current proposal for re-scheduling of resouce watchers is that when"},{"line_number":278,"context_line":"a translator is registered, it should pass the *keyname* that it will use."},{"line_number":279,"context_line":"E.g., *kuryr.org*. When a resource watcher sees a **MODIFIED** event with an"},{"line_number":280,"context_line":"annotation containing the *keyname*, it should increase a variable called, for"},{"line_number":281,"context_line":"example *pod_resource_version*. When the time for scheduling a new Pod watcher"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5a9d85d2_416db403","line":278,"range":{"start_line":278,"start_character":38,"end_line":278,"end_character":57},"in_reply_to":"5a9d85d2_7eddef6f","updated":"2016-06-20 07:58:48.000000000","message":"to the watcher","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":15967,"name":"vikas choudhary","email":"choudharyvikas16@gmail.com","username":"vikaschoudhary16"},"change_message_id":"3529e447625ddee7c1cec0afc561df6ffc66cd27","unresolved":false,"context_lines":[{"line_number":276,"context_line":""},{"line_number":277,"context_line":"The current proposal for re-scheduling of resouce watchers is that when"},{"line_number":278,"context_line":"a translator is registered, it should pass the *keyname* that it will use."},{"line_number":279,"context_line":"E.g., *kuryr.org*. When a resource watcher sees a **MODIFIED** event with an"},{"line_number":280,"context_line":"annotation containing the *keyname*, it should increase a variable called, for"},{"line_number":281,"context_line":"example *pod_resource_version*. When the time for scheduling a new Pod watcher"},{"line_number":282,"context_line":"comes, it will use the resourceVersion as part of the URI to save the trouble"},{"line_number":283,"context_line":"of going through already processed events."}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_95933400","line":280,"range":{"start_line":279,"start_character":19,"end_line":280,"end_character":36},"updated":"2016-06-16 05:24:06.000000000","message":"Can you please help me understand \"annotation containing the keyname\"?\n\nIs it like events on resources are numbered?\nOr any other doc reference for understanding annotations used in this context.","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":12069,"name":"Taku Fukushima","email":"f.tac.mac@gmail.com","username":"tfukushima"},"change_message_id":"289613489387708c2a7e865d7603c543fda8bf09","unresolved":false,"context_lines":[{"line_number":276,"context_line":""},{"line_number":277,"context_line":"The current proposal for re-scheduling of resouce watchers is that when"},{"line_number":278,"context_line":"a translator is registered, it should pass the *keyname* that it will use."},{"line_number":279,"context_line":"E.g., *kuryr.org*. When a resource watcher sees a **MODIFIED** event with an"},{"line_number":280,"context_line":"annotation containing the *keyname*, it should increase a variable called, for"},{"line_number":281,"context_line":"example *pod_resource_version*. When the time for scheduling a new Pod watcher"},{"line_number":282,"context_line":"comes, it will use the resourceVersion as part of the URI to save the trouble"},{"line_number":283,"context_line":"of going through already processed events."}],"source_content_type":"text/x-rst","patch_set":1,"id":"5a9d85d2_01056cc1","line":280,"range":{"start_line":279,"start_character":19,"end_line":280,"end_character":36},"in_reply_to":"7aa08908_64420e11","updated":"2016-06-20 07:44:35.000000000","message":"Ooops, I forgot to put the link.\nhttps://github.com/openstack/kuryr/blob/95925f32074b33576cec9ac534cc6801c4704ba0/doc/source/devref/k8s_api_watcher_design.rst#added-1","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":7505,"name":"Jaume Devesa","email":"devvesa@gmail.com","username":"devesa"},"change_message_id":"cf6d74bbd1cefe0cf8a351210fd3486b7c065e55","unresolved":false,"context_lines":[{"line_number":276,"context_line":""},{"line_number":277,"context_line":"The current proposal for re-scheduling of resouce watchers is that when"},{"line_number":278,"context_line":"a translator is registered, it should pass the *keyname* that it will use."},{"line_number":279,"context_line":"E.g., *kuryr.org*. When a resource watcher sees a **MODIFIED** event with an"},{"line_number":280,"context_line":"annotation containing the *keyname*, it should increase a variable called, for"},{"line_number":281,"context_line":"example *pod_resource_version*. When the time for scheduling a new Pod watcher"},{"line_number":282,"context_line":"comes, it will use the resourceVersion as part of the URI to save the trouble"},{"line_number":283,"context_line":"of going through already processed events."}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_a71ff159","line":280,"range":{"start_line":279,"start_character":19,"end_line":280,"end_character":36},"in_reply_to":"7aa08908_95933400","updated":"2016-06-16 21:09:49.000000000","message":"+1","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":14352,"name":"Antoni Segura Puimedon","email":"celebdor@gmail.com","username":"toni"},"change_message_id":"c031a6d65bf77e02e1cd12e3f84ef2e9b2b9ea78","unresolved":false,"context_lines":[{"line_number":276,"context_line":""},{"line_number":277,"context_line":"The current proposal for re-scheduling of resouce watchers is that when"},{"line_number":278,"context_line":"a translator is registered, it should pass the *keyname* that it will use."},{"line_number":279,"context_line":"E.g., *kuryr.org*. When a resource watcher sees a **MODIFIED** event with an"},{"line_number":280,"context_line":"annotation containing the *keyname*, it should increase a variable called, for"},{"line_number":281,"context_line":"example *pod_resource_version*. When the time for scheduling a new Pod watcher"},{"line_number":282,"context_line":"comes, it will use the resourceVersion as part of the URI to save the trouble"},{"line_number":283,"context_line":"of going through already processed events."}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_c999607b","line":280,"range":{"start_line":279,"start_character":19,"end_line":280,"end_character":36},"in_reply_to":"7aa08908_95933400","updated":"2016-06-17 09:35:21.000000000","message":"I\u0027ll put an example right here in the new patchset","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":12069,"name":"Taku Fukushima","email":"f.tac.mac@gmail.com","username":"tfukushima"},"change_message_id":"b8442052f2e327e1157d34c2e7cf69779e81297f","unresolved":false,"context_lines":[{"line_number":276,"context_line":""},{"line_number":277,"context_line":"The current proposal for re-scheduling of resouce watchers is that when"},{"line_number":278,"context_line":"a translator is registered, it should pass the *keyname* that it will use."},{"line_number":279,"context_line":"E.g., *kuryr.org*. When a resource watcher sees a **MODIFIED** event with an"},{"line_number":280,"context_line":"annotation containing the *keyname*, it should increase a variable called, for"},{"line_number":281,"context_line":"example *pod_resource_version*. When the time for scheduling a new Pod watcher"},{"line_number":282,"context_line":"comes, it will use the resourceVersion as part of the URI to save the trouble"},{"line_number":283,"context_line":"of going through already processed events."}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_64420e11","line":280,"range":{"start_line":279,"start_character":19,"end_line":280,"end_character":36},"in_reply_to":"7aa08908_a71ff159","updated":"2016-06-17 09:57:33.000000000","message":"\"annotations\" property in the JSON object corresponds to \"metadata\" property in this  doc would be that. You can see the key \"\"kubernetes.io/created-by\" is in there.","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":7505,"name":"Jaume Devesa","email":"devvesa@gmail.com","username":"devesa"},"change_message_id":"cf6d74bbd1cefe0cf8a351210fd3486b7c065e55","unresolved":false,"context_lines":[{"line_number":282,"context_line":"comes, it will use the resourceVersion as part of the URI to save the trouble"},{"line_number":283,"context_line":"of going through already processed events."},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"When a ResourceWatcher calls the translator it has registered, it should do so"},{"line_number":286,"context_line":"protecting the call so that translation errors do not prevent future event"},{"line_number":287,"context_line":"processing. Otherwise, the Resource would crash and other events of other"},{"line_number":288,"context_line":"resources would continue to be processed potentially breaking the global state"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_a756d103","line":285,"range":{"start_line":285,"start_character":22,"end_line":285,"end_character":43},"updated":"2016-06-16 21:09:49.000000000","message":"I prefer \u0027invokes the callback\u0027","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":14352,"name":"Antoni Segura Puimedon","email":"celebdor@gmail.com","username":"toni"},"change_message_id":"c031a6d65bf77e02e1cd12e3f84ef2e9b2b9ea78","unresolved":false,"context_lines":[{"line_number":282,"context_line":"comes, it will use the resourceVersion as part of the URI to save the trouble"},{"line_number":283,"context_line":"of going through already processed events."},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"When a ResourceWatcher calls the translator it has registered, it should do so"},{"line_number":286,"context_line":"protecting the call so that translation errors do not prevent future event"},{"line_number":287,"context_line":"processing. Otherwise, the Resource would crash and other events of other"},{"line_number":288,"context_line":"resources would continue to be processed potentially breaking the global state"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_e433a1f4","line":285,"range":{"start_line":285,"start_character":22,"end_line":285,"end_character":43},"in_reply_to":"7aa08908_a756d103","updated":"2016-06-17 09:35:21.000000000","message":"Done","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":15967,"name":"vikas choudhary","email":"choudharyvikas16@gmail.com","username":"vikaschoudhary16"},"change_message_id":"3529e447625ddee7c1cec0afc561df6ffc66cd27","unresolved":false,"context_lines":[{"line_number":284,"context_line":""},{"line_number":285,"context_line":"When a ResourceWatcher calls the translator it has registered, it should do so"},{"line_number":286,"context_line":"protecting the call so that translation errors do not prevent future event"},{"line_number":287,"context_line":"processing. Otherwise, the Resource would crash and other events of other"},{"line_number":288,"context_line":"resources would continue to be processed potentially breaking the global state"},{"line_number":289,"context_line":"of the translation."},{"line_number":290,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_95ba1470","line":287,"range":{"start_line":287,"start_character":27,"end_line":287,"end_character":35},"updated":"2016-06-16 05:24:06.000000000","message":"Resource or watcher?","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":7505,"name":"Jaume Devesa","email":"devvesa@gmail.com","username":"devesa"},"change_message_id":"cf6d74bbd1cefe0cf8a351210fd3486b7c065e55","unresolved":false,"context_lines":[{"line_number":282,"context_line":"comes, it will use the resourceVersion as part of the URI to save the trouble"},{"line_number":283,"context_line":"of going through already processed events."},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"When a ResourceWatcher calls the translator it has registered, it should do so"},{"line_number":286,"context_line":"protecting the call so that translation errors do not prevent future event"},{"line_number":287,"context_line":"processing. Otherwise, the Resource would crash and other events of other"},{"line_number":288,"context_line":"resources would continue to be processed potentially breaking the global state"},{"line_number":289,"context_line":"of the translation."},{"line_number":290,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_67e86917","line":287,"range":{"start_line":285,"start_character":63,"end_line":287,"end_character":10},"updated":"2016-06-16 21:09:49.000000000","message":"uhm...\n\n   \"it should do it in a way that prevents future translation errors\"?","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":15967,"name":"vikas choudhary","email":"choudharyvikas16@gmail.com","username":"vikaschoudhary16"},"change_message_id":"3529e447625ddee7c1cec0afc561df6ffc66cd27","unresolved":false,"context_lines":[{"line_number":285,"context_line":"When a ResourceWatcher calls the translator it has registered, it should do so"},{"line_number":286,"context_line":"protecting the call so that translation errors do not prevent future event"},{"line_number":287,"context_line":"processing. Otherwise, the Resource would crash and other events of other"},{"line_number":288,"context_line":"resources would continue to be processed potentially breaking the global state"},{"line_number":289,"context_line":"of the translation."},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"Neutron Translation"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_75bfa860","line":288,"range":{"start_line":288,"start_character":16,"end_line":288,"end_character":24},"updated":"2016-06-16 05:24:06.000000000","message":"continue or not continue?","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":14352,"name":"Antoni Segura Puimedon","email":"celebdor@gmail.com","username":"toni"},"change_message_id":"c031a6d65bf77e02e1cd12e3f84ef2e9b2b9ea78","unresolved":false,"context_lines":[{"line_number":285,"context_line":"When a ResourceWatcher calls the translator it has registered, it should do so"},{"line_number":286,"context_line":"protecting the call so that translation errors do not prevent future event"},{"line_number":287,"context_line":"processing. Otherwise, the Resource would crash and other events of other"},{"line_number":288,"context_line":"resources would continue to be processed potentially breaking the global state"},{"line_number":289,"context_line":"of the translation."},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"Neutron Translation"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_c1d134fd","line":288,"range":{"start_line":288,"start_character":16,"end_line":288,"end_character":24},"in_reply_to":"7aa08908_75bfa860","updated":"2016-06-17 09:35:21.000000000","message":"continue. The crash of a coroutine does not affect other coroutines","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"7d595a75334ff2e2a066144ed345240b20ccb744","unresolved":false,"context_lines":[{"line_number":285,"context_line":"When a ResourceWatcher calls the translator it has registered, it should do so"},{"line_number":286,"context_line":"protecting the call so that translation errors do not prevent future event"},{"line_number":287,"context_line":"processing. Otherwise, the Resource would crash and other events of other"},{"line_number":288,"context_line":"resources would continue to be processed potentially breaking the global state"},{"line_number":289,"context_line":"of the translation."},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"Neutron Translation"},{"line_number":292,"context_line":"~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5a9d85d2_7eca0f51","line":289,"range":{"start_line":288,"start_character":66,"end_line":289,"end_character":19},"updated":"2016-06-20 07:19:06.000000000","message":"I think the last statement is confusing. I would say that each resource translation should be handled independently, so if it fails it fails for its own reasons (this of course may be due to some missing preexisting entities in neutron model )","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":14352,"name":"Antoni Segura Puimedon","email":"celebdor@gmail.com","username":"toni"},"change_message_id":"bb0c6ba5d188bd2bdbb3e1f10b99b93b8a0c611e","unresolved":false,"context_lines":[{"line_number":285,"context_line":"When a ResourceWatcher calls the translator it has registered, it should do so"},{"line_number":286,"context_line":"protecting the call so that translation errors do not prevent future event"},{"line_number":287,"context_line":"processing. Otherwise, the Resource would crash and other events of other"},{"line_number":288,"context_line":"resources would continue to be processed potentially breaking the global state"},{"line_number":289,"context_line":"of the translation."},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"Neutron Translation"},{"line_number":292,"context_line":"~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5a9d85d2_217228e6","line":289,"range":{"start_line":288,"start_character":66,"end_line":289,"end_character":19},"in_reply_to":"5a9d85d2_7eca0f51","updated":"2016-06-20 07:58:48.000000000","message":"Done","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"7d595a75334ff2e2a066144ed345240b20ccb744","unresolved":false,"context_lines":[{"line_number":291,"context_line":"Neutron Translation"},{"line_number":292,"context_line":"~~~~~~~~~~~~~~~~~~~"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"Each **Neutron Translator** should register one of its methods with the"},{"line_number":295,"context_line":"resource watcher that processes the kind of resource that is relevant to it.i"},{"line_number":296,"context_line":"For example, the NeutronPortTranslator should register routines to the"},{"line_number":297,"context_line":"**ADDED**, **DELETED** and **MODIFIED** event types of the PodWatcher."}],"source_content_type":"text/x-rst","patch_set":1,"id":"5a9d85d2_bec47740","line":294,"range":{"start_line":294,"start_character":62,"end_line":294,"end_character":67},"updated":"2016-06-20 07:19:06.000000000","message":"within/into","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":15967,"name":"vikas choudhary","email":"choudharyvikas16@gmail.com","username":"vikaschoudhary16"},"change_message_id":"3529e447625ddee7c1cec0afc561df6ffc66cd27","unresolved":false,"context_lines":[{"line_number":292,"context_line":"~~~~~~~~~~~~~~~~~~~"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"Each **Neutron Translator** should register one of its methods with the"},{"line_number":295,"context_line":"resource watcher that processes the kind of resource that is relevant to it.i"},{"line_number":296,"context_line":"For example, the NeutronPortTranslator should register routines to the"},{"line_number":297,"context_line":"**ADDED**, **DELETED** and **MODIFIED** event types of the PodWatcher."},{"line_number":298,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_95169456","line":295,"range":{"start_line":295,"start_character":73,"end_line":295,"end_character":77},"updated":"2016-06-16 05:24:06.000000000","message":"unnecessary \u0027i\u0027","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":14352,"name":"Antoni Segura Puimedon","email":"celebdor@gmail.com","username":"toni"},"change_message_id":"c031a6d65bf77e02e1cd12e3f84ef2e9b2b9ea78","unresolved":false,"context_lines":[{"line_number":292,"context_line":"~~~~~~~~~~~~~~~~~~~"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"Each **Neutron Translator** should register one of its methods with the"},{"line_number":295,"context_line":"resource watcher that processes the kind of resource that is relevant to it.i"},{"line_number":296,"context_line":"For example, the NeutronPortTranslator should register routines to the"},{"line_number":297,"context_line":"**ADDED**, **DELETED** and **MODIFIED** event types of the PodWatcher."},{"line_number":298,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_01d85c1d","line":295,"range":{"start_line":295,"start_character":73,"end_line":295,"end_character":77},"in_reply_to":"7aa08908_95169456","updated":"2016-06-17 09:35:21.000000000","message":"I use VI :-)","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":15967,"name":"vikas choudhary","email":"choudharyvikas16@gmail.com","username":"vikaschoudhary16"},"change_message_id":"3529e447625ddee7c1cec0afc561df6ffc66cd27","unresolved":false,"context_lines":[{"line_number":298,"context_line":""},{"line_number":299,"context_line":"It is probably a good idea that the translator implements some filtering"},{"line_number":300,"context_line":"routines that are able to detect when a passed event has already been processed"},{"line_number":301,"context_line":"to handle, among other things, API watcher restarts from resourceVersion\u003d0."},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"Another good use is to, for example, allow the configuration of labels to"},{"line_number":304,"context_line":"ignore per translator. One good example is that in hyperkube environments,"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_3502400c","line":301,"range":{"start_line":301,"start_character":31,"end_line":301,"end_character":74},"updated":"2016-06-16 05:24:06.000000000","message":"\u0027API Watcher restarts\u0027 can be rephrased for better readability.","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":14352,"name":"Antoni Segura Puimedon","email":"celebdor@gmail.com","username":"toni"},"change_message_id":"c031a6d65bf77e02e1cd12e3f84ef2e9b2b9ea78","unresolved":false,"context_lines":[{"line_number":298,"context_line":""},{"line_number":299,"context_line":"It is probably a good idea that the translator implements some filtering"},{"line_number":300,"context_line":"routines that are able to detect when a passed event has already been processed"},{"line_number":301,"context_line":"to handle, among other things, API watcher restarts from resourceVersion\u003d0."},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"Another good use is to, for example, allow the configuration of labels to"},{"line_number":304,"context_line":"ignore per translator. One good example is that in hyperkube environments,"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_21091896","line":301,"range":{"start_line":301,"start_character":31,"end_line":301,"end_character":74},"in_reply_to":"7aa08908_3502400c","updated":"2016-06-17 09:35:21.000000000","message":"Done","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"7d595a75334ff2e2a066144ed345240b20ccb744","unresolved":false,"context_lines":[{"line_number":300,"context_line":"routines that are able to detect when a passed event has already been processed"},{"line_number":301,"context_line":"to handle, among other things, API watcher restarts from resourceVersion\u003d0."},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"Another good use is to, for example, allow the configuration of labels to"},{"line_number":304,"context_line":"ignore per translator. One good example is that in hyperkube environments,"},{"line_number":305,"context_line":"there is a Kubernetes *kubernetes* Service with its Endpoints that should most"},{"line_number":306,"context_line":"likely not end up having ports in Neutron since it is for service Kubernetes"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5a9d85d2_9e46dbbd","line":303,"range":{"start_line":303,"start_character":0,"end_line":303,"end_character":17},"updated":"2016-06-20 07:19:06.000000000","message":"Please add subsection. I think it deserves its own place for customization of the Raven behaviour. I had in mind some pluggable mechanism of the \u0027special\u0027 labels handling. One can be for ignoring certain labels while other can be for treating certain label in a special way, i.e security_groroups, qos_policy, etc.","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":15967,"name":"vikas choudhary","email":"choudharyvikas16@gmail.com","username":"vikaschoudhary16"},"change_message_id":"3529e447625ddee7c1cec0afc561df6ffc66cd27","unresolved":false,"context_lines":[{"line_number":300,"context_line":"routines that are able to detect when a passed event has already been processed"},{"line_number":301,"context_line":"to handle, among other things, API watcher restarts from resourceVersion\u003d0."},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"Another good use is to, for example, allow the configuration of labels to"},{"line_number":304,"context_line":"ignore per translator. One good example is that in hyperkube environments,"},{"line_number":305,"context_line":"there is a Kubernetes *kubernetes* Service with its Endpoints that should most"},{"line_number":306,"context_line":"likely not end up having ports in Neutron since it is for service Kubernetes"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_c71eaf5e","line":303,"range":{"start_line":303,"start_character":13,"end_line":303,"end_character":17},"updated":"2016-06-16 05:24:06.000000000","message":"feature/idea/use_case","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":14352,"name":"Antoni Segura Puimedon","email":"celebdor@gmail.com","username":"toni"},"change_message_id":"bb0c6ba5d188bd2bdbb3e1f10b99b93b8a0c611e","unresolved":false,"context_lines":[{"line_number":300,"context_line":"routines that are able to detect when a passed event has already been processed"},{"line_number":301,"context_line":"to handle, among other things, API watcher restarts from resourceVersion\u003d0."},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"Another good use is to, for example, allow the configuration of labels to"},{"line_number":304,"context_line":"ignore per translator. One good example is that in hyperkube environments,"},{"line_number":305,"context_line":"there is a Kubernetes *kubernetes* Service with its Endpoints that should most"},{"line_number":306,"context_line":"likely not end up having ports in Neutron since it is for service Kubernetes"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5a9d85d2_014a8c83","line":303,"range":{"start_line":303,"start_character":0,"end_line":303,"end_character":17},"in_reply_to":"5a9d85d2_9e46dbbd","updated":"2016-06-20 07:58:48.000000000","message":"Done","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":14352,"name":"Antoni Segura Puimedon","email":"celebdor@gmail.com","username":"toni"},"change_message_id":"c031a6d65bf77e02e1cd12e3f84ef2e9b2b9ea78","unresolved":false,"context_lines":[{"line_number":300,"context_line":"routines that are able to detect when a passed event has already been processed"},{"line_number":301,"context_line":"to handle, among other things, API watcher restarts from resourceVersion\u003d0."},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"Another good use is to, for example, allow the configuration of labels to"},{"line_number":304,"context_line":"ignore per translator. One good example is that in hyperkube environments,"},{"line_number":305,"context_line":"there is a Kubernetes *kubernetes* Service with its Endpoints that should most"},{"line_number":306,"context_line":"likely not end up having ports in Neutron since it is for service Kubernetes"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_c1f8147f","line":303,"range":{"start_line":303,"start_character":13,"end_line":303,"end_character":17},"in_reply_to":"7aa08908_c71eaf5e","updated":"2016-06-17 09:35:21.000000000","message":"Done","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":12069,"name":"Taku Fukushima","email":"f.tac.mac@gmail.com","username":"tfukushima"},"change_message_id":"b8442052f2e327e1157d34c2e7cf69779e81297f","unresolved":false,"context_lines":[{"line_number":306,"context_line":"likely not end up having ports in Neutron since it is for service Kubernetes"},{"line_number":307,"context_line":"infrastructure like the API watcher itself."},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"Finally, Translators should strive to work independently, that is, if possible"},{"line_number":310,"context_line":"they should perform an action and annotate a Kubernetes resource as a response"},{"line_number":311,"context_line":"to a single resourceWatching event. This reduces coupling and prevents the need"},{"line_number":312,"context_line":"for inter green thread synchronization/serialization constructs. As a result,"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_649a0e64","line":309,"range":{"start_line":309,"start_character":43,"end_line":309,"end_character":56},"updated":"2016-06-17 09:57:33.000000000","message":"This is idea but in reality we need to coordinate multiple translators following their resource dependency graph with the synchronization mechanism of asyncio. They should care of its own concerned resource but they need to work coordinating with each other. So this might need to be rephrased a bit.","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":14352,"name":"Antoni Segura Puimedon","email":"celebdor@gmail.com","username":"toni"},"change_message_id":"10988ff3983f2a10fb6c42ef007b98ffaa72143d","unresolved":false,"context_lines":[{"line_number":306,"context_line":"likely not end up having ports in Neutron since it is for service Kubernetes"},{"line_number":307,"context_line":"infrastructure like the API watcher itself."},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"Finally, Translators should strive to work independently, that is, if possible"},{"line_number":310,"context_line":"they should perform an action and annotate a Kubernetes resource as a response"},{"line_number":311,"context_line":"to a single resourceWatching event. This reduces coupling and prevents the need"},{"line_number":312,"context_line":"for inter green thread synchronization/serialization constructs. As a result,"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_0dc52d5b","line":309,"range":{"start_line":309,"start_character":43,"end_line":309,"end_character":56},"in_reply_to":"7aa08908_649a0e64","updated":"2016-06-17 10:55:44.000000000","message":"\"strive to work\" -\u003e \"try hard to work\"\n\nWith that being said, I think that there are ways in which the translators can be designed so that synchronization is not necessary.\n\nIt will help the discussion if you put examples that may need synchronization, so that we can see if there are alternatives.","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":15967,"name":"vikas choudhary","email":"choudharyvikas16@gmail.com","username":"vikaschoudhary16"},"change_message_id":"3529e447625ddee7c1cec0afc561df6ffc66cd27","unresolved":false,"context_lines":[{"line_number":312,"context_line":"for inter green thread synchronization/serialization constructs. As a result,"},{"line_number":313,"context_line":"it is perfectly possible that the event for an Endpoints resource change be"},{"line_number":314,"context_line":"ignored because the event for the service associated to the Endpoints has not yet"},{"line_number":315,"context_line":"been processed by the NeutronServiceTranslator. In this example, case, it could"},{"line_number":316,"context_line":"be handled by having the Service translation end up by getting the endpoints"},{"line_number":317,"context_line":"and adding them as members of the load balancer pool itself."},{"line_number":318,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_474abf56","line":315,"range":{"start_line":315,"start_character":63,"end_line":315,"end_character":64},"updated":"2016-06-16 05:24:06.000000000","message":", not needed","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":7505,"name":"Jaume Devesa","email":"devvesa@gmail.com","username":"devesa"},"change_message_id":"cf6d74bbd1cefe0cf8a351210fd3486b7c065e55","unresolved":false,"context_lines":[{"line_number":312,"context_line":"for inter green thread synchronization/serialization constructs. As a result,"},{"line_number":313,"context_line":"it is perfectly possible that the event for an Endpoints resource change be"},{"line_number":314,"context_line":"ignored because the event for the service associated to the Endpoints has not yet"},{"line_number":315,"context_line":"been processed by the NeutronServiceTranslator. In this example, case, it could"},{"line_number":316,"context_line":"be handled by having the Service translation end up by getting the endpoints"},{"line_number":317,"context_line":"and adding them as members of the load balancer pool itself."},{"line_number":318,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_27c82174","line":315,"range":{"start_line":315,"start_character":65,"end_line":315,"end_character":69},"updated":"2016-06-16 21:09:49.000000000","message":"case not needed either.","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":14352,"name":"Antoni Segura Puimedon","email":"celebdor@gmail.com","username":"toni"},"change_message_id":"c031a6d65bf77e02e1cd12e3f84ef2e9b2b9ea78","unresolved":false,"context_lines":[{"line_number":312,"context_line":"for inter green thread synchronization/serialization constructs. As a result,"},{"line_number":313,"context_line":"it is perfectly possible that the event for an Endpoints resource change be"},{"line_number":314,"context_line":"ignored because the event for the service associated to the Endpoints has not yet"},{"line_number":315,"context_line":"been processed by the NeutronServiceTranslator. In this example, case, it could"},{"line_number":316,"context_line":"be handled by having the Service translation end up by getting the endpoints"},{"line_number":317,"context_line":"and adding them as members of the load balancer pool itself."},{"line_number":318,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_e1eb90a2","line":315,"range":{"start_line":315,"start_character":65,"end_line":315,"end_character":69},"in_reply_to":"7aa08908_27c82174","updated":"2016-06-17 09:35:21.000000000","message":"Done","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"7d595a75334ff2e2a066144ed345240b20ccb744","unresolved":false,"context_lines":[{"line_number":313,"context_line":"it is perfectly possible that the event for an Endpoints resource change be"},{"line_number":314,"context_line":"ignored because the event for the service associated to the Endpoints has not yet"},{"line_number":315,"context_line":"been processed by the NeutronServiceTranslator. In this example, case, it could"},{"line_number":316,"context_line":"be handled by having the Service translation end up by getting the endpoints"},{"line_number":317,"context_line":"and adding them as members of the load balancer pool itself."},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"It is the translators duty to update the annotations in the Kubernetes API"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5a9d85d2_9e741bfe","line":316,"range":{"start_line":316,"start_character":24,"end_line":316,"end_character":44},"updated":"2016-06-20 07:19:06.000000000","message":"end points will still have to be processed independently, since after service creation, pods can come and go which will be reflected by endpoints events.   But maybe it worth to mention that it should be allowed that different watchers may handle same entities, so the implementation should allow this","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":14352,"name":"Antoni Segura Puimedon","email":"celebdor@gmail.com","username":"toni"},"change_message_id":"bb0c6ba5d188bd2bdbb3e1f10b99b93b8a0c611e","unresolved":false,"context_lines":[{"line_number":313,"context_line":"it is perfectly possible that the event for an Endpoints resource change be"},{"line_number":314,"context_line":"ignored because the event for the service associated to the Endpoints has not yet"},{"line_number":315,"context_line":"been processed by the NeutronServiceTranslator. In this example, case, it could"},{"line_number":316,"context_line":"be handled by having the Service translation end up by getting the endpoints"},{"line_number":317,"context_line":"and adding them as members of the load balancer pool itself."},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"It is the translators duty to update the annotations in the Kubernetes API"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5a9d85d2_a155781e","line":316,"range":{"start_line":316,"start_character":24,"end_line":316,"end_character":44},"in_reply_to":"5a9d85d2_9e741bfe","updated":"2016-06-20 07:58:48.000000000","message":"The watchers do not handle different entities, the translators do.","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":7505,"name":"Jaume Devesa","email":"devvesa@gmail.com","username":"devesa"},"change_message_id":"cf6d74bbd1cefe0cf8a351210fd3486b7c065e55","unresolved":false,"context_lines":[{"line_number":316,"context_line":"be handled by having the Service translation end up by getting the endpoints"},{"line_number":317,"context_line":"and adding them as members of the load balancer pool itself."},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"It is the translators duty to update the annotations in the Kubernetes API"},{"line_number":320,"context_line":"setting the data obtained from the translator under a *keyname*. In order to"},{"line_number":321,"context_line":"perform these operations, a **Stategic Merge PATCH** operation should be"},{"line_number":322,"context_line":"performed on the resource specifying the resourceVersion. By specifying the"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_c7cb1d49","line":319,"range":{"start_line":319,"start_character":10,"end_line":319,"end_character":52},"updated":"2016-06-16 21:09:49.000000000","message":"I don\u0027t agree on this. If watchers are in the Kubernetes side for read, they also should be on the Kubernetes side to write (or create another entity).\n\nThe fact that the translator writes on Neutron and on Kubernetes it seems to me very highly coupled.","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":14352,"name":"Antoni Segura Puimedon","email":"celebdor@gmail.com","username":"toni"},"change_message_id":"c031a6d65bf77e02e1cd12e3f84ef2e9b2b9ea78","unresolved":false,"context_lines":[{"line_number":316,"context_line":"be handled by having the Service translation end up by getting the endpoints"},{"line_number":317,"context_line":"and adding them as members of the load balancer pool itself."},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"It is the translators duty to update the annotations in the Kubernetes API"},{"line_number":320,"context_line":"setting the data obtained from the translator under a *keyname*. In order to"},{"line_number":321,"context_line":"perform these operations, a **Stategic Merge PATCH** operation should be"},{"line_number":322,"context_line":"performed on the resource specifying the resourceVersion. By specifying the"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_21f3d874","line":319,"range":{"start_line":319,"start_character":10,"end_line":319,"end_character":52},"in_reply_to":"7aa08908_c7cb1d49","updated":"2016-06-17 09:35:21.000000000","message":"That\u0027s an interesting notion. I think we could define a good contract between watchers and translators that made the watcher update the resource with whatever the translator returns...\n\nI like it! I\u0027ll draw it up for the next patchset.","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":12069,"name":"Taku Fukushima","email":"f.tac.mac@gmail.com","username":"tfukushima"},"change_message_id":"b8442052f2e327e1157d34c2e7cf69779e81297f","unresolved":false,"context_lines":[{"line_number":319,"context_line":"It is the translators duty to update the annotations in the Kubernetes API"},{"line_number":320,"context_line":"setting the data obtained from the translator under a *keyname*. In order to"},{"line_number":321,"context_line":"perform these operations, a **Stategic Merge PATCH** operation should be"},{"line_number":322,"context_line":"performed on the resource specifying the resourceVersion. By specifying the"},{"line_number":323,"context_line":"resourceVersion, we guarantee that we are modifying the resource in the state"},{"line_number":324,"context_line":"that we saw it when we initiated the translation, so we do not patch"},{"line_number":325,"context_line":"unknowingly something that was annotated or updated by another party."},{"line_number":326,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_a4519664","line":323,"range":{"start_line":322,"start_character":58,"end_line":323,"end_character":15},"updated":"2016-06-17 09:57:33.000000000","message":"I thought the resource version could be modified internally by Kubernetes itself and the operation with the invalidated resource version was failed. The resource version can be the exact number and the way to specify the version greater than or less than (and \"or equal\" could be added to them) is not provided AFAIK although I\u0027m not 100% sure.","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":12069,"name":"Taku Fukushima","email":"f.tac.mac@gmail.com","username":"tfukushima"},"change_message_id":"289613489387708c2a7e865d7603c543fda8bf09","unresolved":false,"context_lines":[{"line_number":319,"context_line":"It is the translators duty to update the annotations in the Kubernetes API"},{"line_number":320,"context_line":"setting the data obtained from the translator under a *keyname*. In order to"},{"line_number":321,"context_line":"perform these operations, a **Stategic Merge PATCH** operation should be"},{"line_number":322,"context_line":"performed on the resource specifying the resourceVersion. By specifying the"},{"line_number":323,"context_line":"resourceVersion, we guarantee that we are modifying the resource in the state"},{"line_number":324,"context_line":"that we saw it when we initiated the translation, so we do not patch"},{"line_number":325,"context_line":"unknowingly something that was annotated or updated by another party."},{"line_number":326,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5a9d85d2_c1f1a4cf","line":323,"range":{"start_line":322,"start_character":58,"end_line":323,"end_character":15},"in_reply_to":"7aa08908_a4519664","updated":"2016-06-20 07:44:35.000000000","message":"I chatted with Toni and I understood if we specified the resourceVersion, we\u0027ll get the resources created or modified after the resourceVersion. So never mind this comment.","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"7d595a75334ff2e2a066144ed345240b20ccb744","unresolved":false,"context_lines":[{"line_number":321,"context_line":"perform these operations, a **Stategic Merge PATCH** operation should be"},{"line_number":322,"context_line":"performed on the resource specifying the resourceVersion. By specifying the"},{"line_number":323,"context_line":"resourceVersion, we guarantee that we are modifying the resource in the state"},{"line_number":324,"context_line":"that we saw it when we initiated the translation, so we do not patch"},{"line_number":325,"context_line":"unknowingly something that was annotated or updated by another party."},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"To perform the Neutron actions it should use the python neutron client to"},{"line_number":328,"context_line":"invoke neutron API in an asyncio executor thread so that the neutron requests do not prevent the watchers from continuing to get new events. Neither the Resource Watchers nor the Neutron translators should perform any blocking operation. If they must, they should do so in an executor thread."}],"source_content_type":"text/x-rst","patch_set":1,"id":"5a9d85d2_1ed66bc5","line":325,"range":{"start_line":324,"start_character":1,"end_line":325,"end_character":69},"updated":"2016-06-20 07:19:06.000000000","message":"Please mention the expected action in case of the unexpected version. should the update just be discarded?","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":14352,"name":"Antoni Segura Puimedon","email":"celebdor@gmail.com","username":"toni"},"change_message_id":"bb0c6ba5d188bd2bdbb3e1f10b99b93b8a0c611e","unresolved":false,"context_lines":[{"line_number":321,"context_line":"perform these operations, a **Stategic Merge PATCH** operation should be"},{"line_number":322,"context_line":"performed on the resource specifying the resourceVersion. By specifying the"},{"line_number":323,"context_line":"resourceVersion, we guarantee that we are modifying the resource in the state"},{"line_number":324,"context_line":"that we saw it when we initiated the translation, so we do not patch"},{"line_number":325,"context_line":"unknowingly something that was annotated or updated by another party."},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"To perform the Neutron actions it should use the python neutron client to"},{"line_number":328,"context_line":"invoke neutron API in an asyncio executor thread so that the neutron requests do not prevent the watchers from continuing to get new events. Neither the Resource Watchers nor the Neutron translators should perform any blocking operation. If they must, they should do so in an executor thread."}],"source_content_type":"text/x-rst","patch_set":1,"id":"5a9d85d2_c12fe49f","line":325,"range":{"start_line":324,"start_character":1,"end_line":325,"end_character":69},"in_reply_to":"5a9d85d2_1ed66bc5","updated":"2016-06-20 07:58:48.000000000","message":"It depends on the case.","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":15967,"name":"vikas choudhary","email":"choudharyvikas16@gmail.com","username":"vikaschoudhary16"},"change_message_id":"3529e447625ddee7c1cec0afc561df6ffc66cd27","unresolved":false,"context_lines":[{"line_number":325,"context_line":"unknowingly something that was annotated or updated by another party."},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"To perform the Neutron actions it should use the python neutron client to"},{"line_number":328,"context_line":"invoke neutron API in an asyncio executor thread so that the neutron requests do not prevent the watchers from continuing to get new events. Neither the Resource Watchers nor the Neutron translators should perform any blocking operation. If they must, they should do so in an executor thread."},{"line_number":329,"context_line":""},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"CNI Driver"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_67bd3bd7","line":328,"range":{"start_line":328,"start_character":69,"end_line":328,"end_character":77},"updated":"2016-06-16 05:24:06.000000000","message":"too long line.","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":14352,"name":"Antoni Segura Puimedon","email":"celebdor@gmail.com","username":"toni"},"change_message_id":"c031a6d65bf77e02e1cd12e3f84ef2e9b2b9ea78","unresolved":false,"context_lines":[{"line_number":325,"context_line":"unknowingly something that was annotated or updated by another party."},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"To perform the Neutron actions it should use the python neutron client to"},{"line_number":328,"context_line":"invoke neutron API in an asyncio executor thread so that the neutron requests do not prevent the watchers from continuing to get new events. Neither the Resource Watchers nor the Neutron translators should perform any blocking operation. If they must, they should do so in an executor thread."},{"line_number":329,"context_line":""},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"CNI Driver"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7aa08908_81e44ca8","line":328,"range":{"start_line":328,"start_character":69,"end_line":328,"end_character":77},"in_reply_to":"7aa08908_67bd3bd7","updated":"2016-06-17 09:35:21.000000000","message":"Done","commit_id":"a8216fb2cdb544933de1735741ca02d5f3c47178"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"19ff8c8642d3a8c773ba7f16fe1b18bade8e9b1a","unresolved":false,"context_lines":[{"line_number":236,"context_line":""},{"line_number":237,"context_line":"API Watcher"},{"line_number":238,"context_line":"^^^^^^^^^^^"},{"line_number":239,"context_line":"To watch kubernetes API server for changes in services and pods and later,"},{"line_number":240,"context_line":"policies collections."},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"In order to react to the Kubernetes API events for each resource type, the API"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a9d85d2_116db098","line":239,"range":{"start_line":239,"start_character":45,"end_line":239,"end_character":63},"updated":"2016-06-20 13:39:07.000000000","message":"and namespaces","commit_id":"5e6235e5332352b5391c89bc004a27b2043adceb"},{"author":{"_account_id":14352,"name":"Antoni Segura Puimedon","email":"celebdor@gmail.com","username":"toni"},"change_message_id":"51a228621f0905f35e99bb432ef1aab3984603ae","unresolved":false,"context_lines":[{"line_number":236,"context_line":""},{"line_number":237,"context_line":"API Watcher"},{"line_number":238,"context_line":"^^^^^^^^^^^"},{"line_number":239,"context_line":"To watch kubernetes API server for changes in services and pods and later,"},{"line_number":240,"context_line":"policies collections."},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"In order to react to the Kubernetes API events for each resource type, the API"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a9d85d2_871bec7f","line":239,"range":{"start_line":239,"start_character":45,"end_line":239,"end_character":63},"in_reply_to":"5a9d85d2_116db098","updated":"2016-06-21 10:59:34.000000000","message":"Done","commit_id":"5e6235e5332352b5391c89bc004a27b2043adceb"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"19ff8c8642d3a8c773ba7f16fe1b18bade8e9b1a","unresolved":false,"context_lines":[{"line_number":259,"context_line":"    ::"},{"line_number":260,"context_line":"    pod_watcher \u003d PodWatcher()"},{"line_number":261,"context_line":"    pod_translator \u003d NeutronPortTranslator()"},{"line_number":262,"context_line":"    pod_watcher.register_added_handler(\u0027kuryr.org/port\u0027,"},{"line_number":263,"context_line":"                                       pod_translator.create_port)"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"where:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a9d85d2_b1c77c44","line":262,"range":{"start_line":262,"start_character":50,"end_line":262,"end_character":54},"updated":"2016-06-20 13:39:07.000000000","message":"pod?","commit_id":"5e6235e5332352b5391c89bc004a27b2043adceb"},{"author":{"_account_id":14352,"name":"Antoni Segura Puimedon","email":"celebdor@gmail.com","username":"toni"},"change_message_id":"51a228621f0905f35e99bb432ef1aab3984603ae","unresolved":false,"context_lines":[{"line_number":259,"context_line":"    ::"},{"line_number":260,"context_line":"    pod_watcher \u003d PodWatcher()"},{"line_number":261,"context_line":"    pod_translator \u003d NeutronPortTranslator()"},{"line_number":262,"context_line":"    pod_watcher.register_added_handler(\u0027kuryr.org/port\u0027,"},{"line_number":263,"context_line":"                                       pod_translator.create_port)"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"where:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a9d85d2_4702a40c","line":262,"range":{"start_line":262,"start_character":50,"end_line":262,"end_character":54},"in_reply_to":"5a9d85d2_b1c77c44","updated":"2016-06-21 10:59:34.000000000","message":"No, I really meant port, since the pod will be annotated mostly with Neutron port information.","commit_id":"5e6235e5332352b5391c89bc004a27b2043adceb"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"19ff8c8642d3a8c773ba7f16fe1b18bade8e9b1a","unresolved":false,"context_lines":[{"line_number":260,"context_line":"    pod_watcher \u003d PodWatcher()"},{"line_number":261,"context_line":"    pod_translator \u003d NeutronPortTranslator()"},{"line_number":262,"context_line":"    pod_watcher.register_added_handler(\u0027kuryr.org/port\u0027,"},{"line_number":263,"context_line":"                                       pod_translator.create_port)"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"where:"},{"line_number":266,"context_line":"* **pod_watcher** is the Kubernetes API watcher that connects to the Kubernetes"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a9d85d2_31c1cce5","line":263,"range":{"start_line":263,"start_character":39,"end_line":263,"end_character":65},"updated":"2016-06-20 13:39:07.000000000","message":"shouldn\u0027t there be the event type as well?","commit_id":"5e6235e5332352b5391c89bc004a27b2043adceb"},{"author":{"_account_id":14352,"name":"Antoni Segura Puimedon","email":"celebdor@gmail.com","username":"toni"},"change_message_id":"51a228621f0905f35e99bb432ef1aab3984603ae","unresolved":false,"context_lines":[{"line_number":260,"context_line":"    pod_watcher \u003d PodWatcher()"},{"line_number":261,"context_line":"    pod_translator \u003d NeutronPortTranslator()"},{"line_number":262,"context_line":"    pod_watcher.register_added_handler(\u0027kuryr.org/port\u0027,"},{"line_number":263,"context_line":"                                       pod_translator.create_port)"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"where:"},{"line_number":266,"context_line":"* **pod_watcher** is the Kubernetes API watcher that connects to the Kubernetes"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a9d85d2_4230d2e8","line":263,"range":{"start_line":263,"start_character":39,"end_line":263,"end_character":65},"in_reply_to":"5a9d85d2_31c1cce5","updated":"2016-06-21 10:59:34.000000000","message":"I leave it up to whoever implements the translator :-)","commit_id":"5e6235e5332352b5391c89bc004a27b2043adceb"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"58740699db6b733807e8f182af718b84542b0cc5","unresolved":false,"context_lines":[{"line_number":260,"context_line":"    pod_watcher \u003d PodWatcher()"},{"line_number":261,"context_line":"    pod_translator \u003d NeutronPortTranslator()"},{"line_number":262,"context_line":"    pod_watcher.register_added_handler(\u0027kuryr.org/port\u0027,"},{"line_number":263,"context_line":"                                       pod_translator.create_port)"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"where:"},{"line_number":266,"context_line":"* **pod_watcher** is the Kubernetes API watcher that connects to the Kubernetes"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a9d85d2_dcd02656","line":263,"range":{"start_line":263,"start_character":39,"end_line":263,"end_character":65},"in_reply_to":"5a9d85d2_4230d2e8","updated":"2016-06-21 11:56:01.000000000","message":"I disagree. You are defining the API contract here, and it should be clear if the responsibility to filter by event type is on watcher or translator.  Do I understand correctly that you suggest to have different methods in the watcher to subscribe for ADD/DELETE/etc versus singe subscribe method where event type can be an argument?","commit_id":"5e6235e5332352b5391c89bc004a27b2043adceb"},{"author":{"_account_id":15967,"name":"vikas choudhary","email":"choudharyvikas16@gmail.com","username":"vikaschoudhary16"},"change_message_id":"e7bb882a3ea94e3625bc6751a2bcfc04a80087a5","unresolved":false,"context_lines":[{"line_number":260,"context_line":"    pod_watcher \u003d PodWatcher()"},{"line_number":261,"context_line":"    pod_translator \u003d NeutronPortTranslator()"},{"line_number":262,"context_line":"    pod_watcher.register_added_handler(\u0027kuryr.org/port\u0027,"},{"line_number":263,"context_line":"                                       pod_translator.create_port)"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"where:"},{"line_number":266,"context_line":"* **pod_watcher** is the Kubernetes API watcher that connects to the Kubernetes"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3aaa91ec_1fc93379","line":263,"in_reply_to":"5a9d85d2_dcd02656","updated":"2016-06-22 08:54:04.000000000","message":"@Irena, +1 on passsing event_type as argument to single register api versus a register api for each event_type.","commit_id":"5e6235e5332352b5391c89bc004a27b2043adceb"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"19ff8c8642d3a8c773ba7f16fe1b18bade8e9b1a","unresolved":false,"context_lines":[{"line_number":268,"context_line":"* **pod_translator** is an object that receives calls for individual Kubernetes"},{"line_number":269,"context_line":"  pod events, performs actions with the Neutron API and returns the json data"},{"line_number":270,"context_line":"  to annotate the resource with."},{"line_number":271,"context_line":"* **kuryr.org/pod** is the *keyname* that will be used by **pod_watcher** to"},{"line_number":272,"context_line":"  add metadata to the event by sending a *merge patch* request to the"},{"line_number":273,"context_line":"  Kubernetes API. The keyname belongs in the resource annotations metadata"},{"line_number":274,"context_line":"  field (See \u0027kubernetes.io/created-by\u0027 in [9]). After successfully updating"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a9d85d2_71b514cc","line":271,"range":{"start_line":271,"start_character":14,"end_line":271,"end_character":17},"updated":"2016-06-20 13:39:07.000000000","message":"port?","commit_id":"5e6235e5332352b5391c89bc004a27b2043adceb"},{"author":{"_account_id":14352,"name":"Antoni Segura Puimedon","email":"celebdor@gmail.com","username":"toni"},"change_message_id":"51a228621f0905f35e99bb432ef1aab3984603ae","unresolved":false,"context_lines":[{"line_number":268,"context_line":"* **pod_translator** is an object that receives calls for individual Kubernetes"},{"line_number":269,"context_line":"  pod events, performs actions with the Neutron API and returns the json data"},{"line_number":270,"context_line":"  to annotate the resource with."},{"line_number":271,"context_line":"* **kuryr.org/pod** is the *keyname* that will be used by **pod_watcher** to"},{"line_number":272,"context_line":"  add metadata to the event by sending a *merge patch* request to the"},{"line_number":273,"context_line":"  Kubernetes API. The keyname belongs in the resource annotations metadata"},{"line_number":274,"context_line":"  field (See \u0027kubernetes.io/created-by\u0027 in [9]). After successfully updating"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a9d85d2_a24d3674","line":271,"range":{"start_line":271,"start_character":14,"end_line":271,"end_character":17},"in_reply_to":"5a9d85d2_71b514cc","updated":"2016-06-21 10:59:34.000000000","message":"Done","commit_id":"5e6235e5332352b5391c89bc004a27b2043adceb"},{"author":{"_account_id":7505,"name":"Jaume Devesa","email":"devvesa@gmail.com","username":"devesa"},"change_message_id":"4212f519cd94c9730091bc6350a79849ec7594ca","unresolved":false,"context_lines":[{"line_number":283,"context_line":"watchers from processing events for things that were already deleted long ago"},{"line_number":284,"context_line":"and we do not miss events after the initial GET for the current state."},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"Resouce watchers should provide a register method, as in the example above, per"},{"line_number":287,"context_line":"event type that allows the calling code to register a coroutine as a *callback*"},{"line_number":288,"context_line":"to the processed event. In the case of the Kuryr Kubernetes integration, that"},{"line_number":289,"context_line":"should be for example, the NeutronPortTranslator registering its create_port"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a9d85d2_c7008fad","line":286,"range":{"start_line":286,"start_character":34,"end_line":286,"end_character":74},"updated":"2016-06-20 11:04:25.000000000","message":"To me the explanation is not well organized. The part of the \nexample and the description of it should be after the sentence \u0027[...] method to the PodWatcher ADDED event.\u0027","commit_id":"5e6235e5332352b5391c89bc004a27b2043adceb"},{"author":{"_account_id":7505,"name":"Jaume Devesa","email":"devvesa@gmail.com","username":"devesa"},"change_message_id":"4212f519cd94c9730091bc6350a79849ec7594ca","unresolved":false,"context_lines":[{"line_number":294,"context_line":"Thus, when the connection is inevitably dropped, each resource watcher should"},{"line_number":295,"context_line":"schedule itself again. When the new watch starts, it should resume from the"},{"line_number":296,"context_line":"latest annotated resource using its internal **resource_version** variable that"},{"line_number":297,"context_line":"is updated as described above. When we are starting a new Kuryr API watcher,"},{"line_number":298,"context_line":"all the resource watchers will set their **resource_version** to zero"},{"line_number":299,"context_line":"effectively supposing a re-sync. When the Kuryr API watcher is able to work in"},{"line_number":300,"context_line":"HA, in active-passive, for example, it is possible that we will use a key-value"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a9d85d2_07a617c1","line":297,"range":{"start_line":297,"start_character":4,"end_line":297,"end_character":29},"updated":"2016-06-20 11:04:25.000000000","message":"Same here. The sentence that starts with `The Kubernetes API periodically...[...]` explains the motivations behind the field **resource version**. Why not explain before exposing the ery field instead of make the reader jump above?","commit_id":"5e6235e5332352b5391c89bc004a27b2043adceb"},{"author":{"_account_id":15967,"name":"vikas choudhary","email":"choudharyvikas16@gmail.com","username":"vikaschoudhary16"},"change_message_id":"b449e2628ed27633723cfa06df9ff209452de121","unresolved":false,"context_lines":[{"line_number":301,"context_line":"store so that when there is a leader change, the passive watchers can resume"},{"line_number":302,"context_line":"from the latest translated version)"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"The current proposal for re-scheduling of resouce watchers is that when"},{"line_number":305,"context_line":"a translator is registered, it should pass the *keyname* that it will use."},{"line_number":306,"context_line":"E.g., *kuryr.org/port*. As explained above, when a resource watcher"},{"line_number":307,"context_line":"successfully patches a resource, it will bump its **resource_version** variable"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3aaa91ec_c047801b","line":304,"updated":"2016-06-23 11:49:00.000000000","message":"s/resouce/resource","commit_id":"5e6235e5332352b5391c89bc004a27b2043adceb"},{"author":{"_account_id":15967,"name":"vikas choudhary","email":"choudharyvikas16@gmail.com","username":"vikaschoudhary16"},"change_message_id":"b449e2628ed27633723cfa06df9ff209452de121","unresolved":false,"context_lines":[{"line_number":305,"context_line":"a translator is registered, it should pass the *keyname* that it will use."},{"line_number":306,"context_line":"E.g., *kuryr.org/port*. As explained above, when a resource watcher"},{"line_number":307,"context_line":"successfully patches a resource, it will bump its **resource_version** variable"},{"line_number":308,"context_line":"and,when the time for scheduling a new Pod watcher comes, it will use the"},{"line_number":309,"context_line":"resourceVersion as part of the URI to save the trouble of going through already"},{"line_number":310,"context_line":"processed events."},{"line_number":311,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"3aaa91ec_c0f5c0cb","line":308,"updated":"2016-06-23 11:49:00.000000000","message":", not needed","commit_id":"5e6235e5332352b5391c89bc004a27b2043adceb"},{"author":{"_account_id":15967,"name":"vikas choudhary","email":"choudharyvikas16@gmail.com","username":"vikaschoudhary16"},"change_message_id":"b449e2628ed27633723cfa06df9ff209452de121","unresolved":false,"context_lines":[{"line_number":306,"context_line":"E.g., *kuryr.org/port*. As explained above, when a resource watcher"},{"line_number":307,"context_line":"successfully patches a resource, it will bump its **resource_version** variable"},{"line_number":308,"context_line":"and,when the time for scheduling a new Pod watcher comes, it will use the"},{"line_number":309,"context_line":"resourceVersion as part of the URI to save the trouble of going through already"},{"line_number":310,"context_line":"processed events."},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"When a ResourceWatcher calls the coroutines that are registered for an event,"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3aaa91ec_4009d0dc","line":309,"updated":"2016-06-23 11:49:00.000000000","message":"**resource_version**","commit_id":"5e6235e5332352b5391c89bc004a27b2043adceb"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"19ff8c8642d3a8c773ba7f16fe1b18bade8e9b1a","unresolved":false,"context_lines":[{"line_number":366,"context_line":"synchronization/serialization constructs. As a result, it is perfectly possible"},{"line_number":367,"context_line":"that the event for an Endpoints resource change be ignored because the event"},{"line_number":368,"context_line":"for the service associated to the Endpoints has not yet been processed by the"},{"line_number":369,"context_line":"NeutronServiceTranslator. In this example, it could be handled by having the"},{"line_number":370,"context_line":"Service translation end up by getting the endpoints and adding them as members"},{"line_number":371,"context_line":"of the load balancer pool itself."},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"Filtering"},{"line_number":374,"context_line":"*********"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a9d85d2_34637ab3","line":371,"range":{"start_line":369,"start_character":26,"end_line":371,"end_character":33},"updated":"2016-06-20 13:39:07.000000000","message":"I would suggest to keep this pat as a separate patch, it is not related to the resource version part. As for the endpoints, I would prefer not to bind the endpoints translation to the service, since endpoints events will keep arrive after service creation.  I think keeping the resource version unchanged, will allow to get the same changes once again, and this time most of the chances, the service will be already translated.","commit_id":"5e6235e5332352b5391c89bc004a27b2043adceb"},{"author":{"_account_id":15967,"name":"vikas choudhary","email":"choudharyvikas16@gmail.com","username":"vikaschoudhary16"},"change_message_id":"b449e2628ed27633723cfa06df9ff209452de121","unresolved":false,"context_lines":[{"line_number":368,"context_line":"for the service associated to the Endpoints has not yet been processed by the"},{"line_number":369,"context_line":"NeutronServiceTranslator. In this example, it could be handled by having the"},{"line_number":370,"context_line":"Service translation end up by getting the endpoints and adding them as members"},{"line_number":371,"context_line":"of the load balancer pool itself."},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"Filtering"},{"line_number":374,"context_line":"*********"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3aaa91ec_035fd20e","line":371,"in_reply_to":"5a9d85d2_34637ab3","updated":"2016-06-23 11:49:00.000000000","message":"@Irena +1 on not binding endpoint translations to service translation.","commit_id":"5e6235e5332352b5391c89bc004a27b2043adceb"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"19ff8c8642d3a8c773ba7f16fe1b18bade8e9b1a","unresolved":false,"context_lines":[{"line_number":370,"context_line":"Service translation end up by getting the endpoints and adding them as members"},{"line_number":371,"context_line":"of the load balancer pool itself."},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"Filtering"},{"line_number":374,"context_line":"*********"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"It is probably a good idea that the translator implements some filtering"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a9d85d2_14047ebe","line":373,"range":{"start_line":373,"start_character":0,"end_line":373,"end_character":9},"updated":"2016-06-20 13:39:07.000000000","message":"By filtering you meen, skip processing?\n I would suggest to allow flexible, i.e. configurable way to request for filtering","commit_id":"5e6235e5332352b5391c89bc004a27b2043adceb"},{"author":{"_account_id":15967,"name":"vikas choudhary","email":"choudharyvikas16@gmail.com","username":"vikaschoudhary16"},"change_message_id":"b449e2628ed27633723cfa06df9ff209452de121","unresolved":false,"context_lines":[{"line_number":370,"context_line":"Service translation end up by getting the endpoints and adding them as members"},{"line_number":371,"context_line":"of the load balancer pool itself."},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"Filtering"},{"line_number":374,"context_line":"*********"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"It is probably a good idea that the translator implements some filtering"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3aaa91ec_c3caea6d","line":373,"updated":"2016-06-23 11:49:00.000000000","message":"I think this can be broken into smaller and simpler sentences.","commit_id":"5e6235e5332352b5391c89bc004a27b2043adceb"},{"author":{"_account_id":14352,"name":"Antoni Segura Puimedon","email":"celebdor@gmail.com","username":"toni"},"change_message_id":"51a228621f0905f35e99bb432ef1aab3984603ae","unresolved":false,"context_lines":[{"line_number":370,"context_line":"Service translation end up by getting the endpoints and adding them as members"},{"line_number":371,"context_line":"of the load balancer pool itself."},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"Filtering"},{"line_number":374,"context_line":"*********"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"It is probably a good idea that the translator implements some filtering"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a9d85d2_2296664c","line":373,"range":{"start_line":373,"start_character":0,"end_line":373,"end_character":9},"in_reply_to":"5a9d85d2_14047ebe","updated":"2016-06-21 10:59:34.000000000","message":"Yes, filtering out events that should not go through to the part that does neutron actions","commit_id":"5e6235e5332352b5391c89bc004a27b2043adceb"},{"author":{"_account_id":15967,"name":"vikas choudhary","email":"choudharyvikas16@gmail.com","username":"vikaschoudhary16"},"change_message_id":"b449e2628ed27633723cfa06df9ff209452de121","unresolved":false,"context_lines":[{"line_number":376,"context_line":"It is probably a good idea that the translator implements some filtering"},{"line_number":377,"context_line":"routines that are able to detect when a passed event has already been processed"},{"line_number":378,"context_line":"to handle, among other things, the resync that happens when the Kuryr API"},{"line_number":379,"context_line":"watcher is restarted by, the user or systemd. One example of the minimum"},{"line_number":380,"context_line":"functionality that an **ADDED** event filter could do is to check if the"},{"line_number":381,"context_line":"*kuryr.org/port* annotation exists and that the port that it references exists"},{"line_number":382,"context_line":"in Neutron as well."}],"source_content_type":"text/x-rst","patch_set":2,"id":"3aaa91ec_23576ecf","line":379,"updated":"2016-06-23 11:49:00.000000000","message":", not needed","commit_id":"5e6235e5332352b5391c89bc004a27b2043adceb"},{"author":{"_account_id":15967,"name":"vikas choudhary","email":"choudharyvikas16@gmail.com","username":"vikaschoudhary16"},"change_message_id":"b449e2628ed27633723cfa06df9ff209452de121","unresolved":false,"context_lines":[{"line_number":373,"context_line":"Filtering"},{"line_number":374,"context_line":"*********"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"It is probably a good idea that the translator implements some filtering"},{"line_number":377,"context_line":"routines that are able to detect when a passed event has already been processed"},{"line_number":378,"context_line":"to handle, among other things, the resync that happens when the Kuryr API"},{"line_number":379,"context_line":"watcher is restarted by, the user or systemd. One example of the minimum"},{"line_number":380,"context_line":"functionality that an **ADDED** event filter could do is to check if the"},{"line_number":381,"context_line":"*kuryr.org/port* annotation exists and that the port that it references exists"},{"line_number":382,"context_line":"in Neutron as well."}],"source_content_type":"text/x-rst","patch_set":2,"id":"3aaa91ec_e3a446a7","line":379,"range":{"start_line":376,"start_character":1,"end_line":379,"end_character":44},"updated":"2016-06-23 11:49:00.000000000","message":"Should this be broken into smaller sentences for better readability?","commit_id":"5e6235e5332352b5391c89bc004a27b2043adceb"},{"author":{"_account_id":15967,"name":"vikas choudhary","email":"choudharyvikas16@gmail.com","username":"vikaschoudhary16"},"change_message_id":"b449e2628ed27633723cfa06df9ff209452de121","unresolved":false,"context_lines":[{"line_number":387,"context_line":"Endpoints that should most likely not end up having ports in Neutron since it"},{"line_number":388,"context_line":"is for service Kubernetes infrastructure like the API watcher itself. Once"},{"line_number":389,"context_line":"filters exist, it is to make a user configurable option of which labels to"},{"line_number":390,"context_line":"ignore, which can serve for having non-kuryr workloads."},{"line_number":391,"context_line":""},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"To perform the Neutron actions, a translator event handler should use the"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3aaa91ec_a3d23ed0","line":390,"range":{"start_line":390,"start_character":8,"end_line":390,"end_character":53},"updated":"2016-06-23 11:49:00.000000000","message":"sorry, I could not get this part clearly.","commit_id":"5e6235e5332352b5391c89bc004a27b2043adceb"}]}
