)]}'
{"doc/source/authoring-plugins.rst":[{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"b20562e072d5a83df43a3ef54bbf3b73a96b7b98","unresolved":false,"context_lines":[{"line_number":514,"context_line":""},{"line_number":515,"context_line":".. _mapping: https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping.html"},{"line_number":516,"context_line":""},{"line_number":517,"context_line":"Pipeline architecture "},{"line_number":518,"context_line":"---------------------"},{"line_number":519,"context_line":"Notification handlers can emit enriched resource data into pipeline, configured"},{"line_number":520,"context_line":"publishers could use these data to notify external systems. To use this feature,"}],"source_content_type":"text/x-rst","patch_set":7,"id":"ba5201f7_4321d6b3","line":517,"range":{"start_line":517,"start_character":21,"end_line":517,"end_character":22},"updated":"2017-01-03 19:50:51.000000000","message":"Nit - whitespace","commit_id":"b364b444e2e29d7aef826d91a4d784f22dd7fa29"},{"author":{"_account_id":16150,"name":"Lei Zhang","email":"lei.a.zhang@intel.com","username":"leizhang"},"change_message_id":"139834e87b1c5abf0237e285eaa9a0c8c1a953a5","unresolved":false,"context_lines":[{"line_number":514,"context_line":""},{"line_number":515,"context_line":".. _mapping: https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping.html"},{"line_number":516,"context_line":""},{"line_number":517,"context_line":"Pipeline architecture "},{"line_number":518,"context_line":"---------------------"},{"line_number":519,"context_line":"Notification handlers can emit enriched resource data into pipeline, configured"},{"line_number":520,"context_line":"publishers could use these data to notify external systems. To use this feature,"}],"source_content_type":"text/x-rst","patch_set":7,"id":"ba5201f7_be0d2592","line":517,"range":{"start_line":517,"start_character":21,"end_line":517,"end_character":22},"in_reply_to":"ba5201f7_4321d6b3","updated":"2017-01-04 08:57:41.000000000","message":"Done","commit_id":"b364b444e2e29d7aef826d91a4d784f22dd7fa29"}],"doc/source/plugins.rst":[{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"b20562e072d5a83df43a3ef54bbf3b73a96b7b98","unresolved":false,"context_lines":[{"line_number":223,"context_line":"plugins to use. Don\u0027t forget to re-install the python package(`pip install -e`)"},{"line_number":224,"context_line":"if you have made changes to publisher entry points."},{"line_number":225,"context_line":"Example:: "},{"line_number":226,"context_line":"\t"},{"line_number":227,"context_line":"    [entry_points]"},{"line_number":228,"context_line":"    searchlight.publisher \u003d"},{"line_number":229,"context_line":"        log_publisher \u003d searchlight.publisher.log.LogPublisher"}],"source_content_type":"text/x-rst","patch_set":7,"id":"ba5201f7_839bbe71","line":226,"range":{"start_line":226,"start_character":0,"end_line":226,"end_character":1},"updated":"2017-01-03 19:50:51.000000000","message":"Nit - whitespace","commit_id":"b364b444e2e29d7aef826d91a4d784f22dd7fa29"},{"author":{"_account_id":16150,"name":"Lei Zhang","email":"lei.a.zhang@intel.com","username":"leizhang"},"change_message_id":"139834e87b1c5abf0237e285eaa9a0c8c1a953a5","unresolved":false,"context_lines":[{"line_number":223,"context_line":"plugins to use. Don\u0027t forget to re-install the python package(`pip install -e`)"},{"line_number":224,"context_line":"if you have made changes to publisher entry points."},{"line_number":225,"context_line":"Example:: "},{"line_number":226,"context_line":"\t"},{"line_number":227,"context_line":"    [entry_points]"},{"line_number":228,"context_line":"    searchlight.publisher \u003d"},{"line_number":229,"context_line":"        log_publisher \u003d searchlight.publisher.log.LogPublisher"}],"source_content_type":"text/x-rst","patch_set":7,"id":"ba5201f7_de390943","line":226,"range":{"start_line":226,"start_character":0,"end_line":226,"end_character":1},"in_reply_to":"ba5201f7_839bbe71","updated":"2017-01-04 08:57:41.000000000","message":"Done","commit_id":"b364b444e2e29d7aef826d91a4d784f22dd7fa29"},{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"b20562e072d5a83df43a3ef54bbf3b73a96b7b98","unresolved":false,"context_lines":[{"line_number":237,"context_line":" "},{"line_number":238,"context_line":"Currently publishers only work for incremental updates. Bulk api updates are not"},{"line_number":239,"context_line":"supported."},{"line_number":240,"context_line":" "},{"line_number":241,"context_line":"Global Configuration Options"},{"line_number":242,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":243,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"ba5201f7_e312ca61","line":240,"range":{"start_line":240,"start_character":0,"end_line":240,"end_character":1},"updated":"2017-01-03 19:50:51.000000000","message":"Whitespace (and a couple more instances above)","commit_id":"b364b444e2e29d7aef826d91a4d784f22dd7fa29"},{"author":{"_account_id":16150,"name":"Lei Zhang","email":"lei.a.zhang@intel.com","username":"leizhang"},"change_message_id":"139834e87b1c5abf0237e285eaa9a0c8c1a953a5","unresolved":false,"context_lines":[{"line_number":237,"context_line":" "},{"line_number":238,"context_line":"Currently publishers only work for incremental updates. Bulk api updates are not"},{"line_number":239,"context_line":"supported."},{"line_number":240,"context_line":" "},{"line_number":241,"context_line":"Global Configuration Options"},{"line_number":242,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":243,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"ba5201f7_3e4bf5ca","line":240,"range":{"start_line":240,"start_character":0,"end_line":240,"end_character":1},"in_reply_to":"ba5201f7_e312ca61","updated":"2017-01-04 08:57:41.000000000","message":"Done","commit_id":"b364b444e2e29d7aef826d91a4d784f22dd7fa29"}],"releasenotes/notes/bp-pipeline-architecture-dc2d10d5609af1f9.yaml":[{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"b20562e072d5a83df43a3ef54bbf3b73a96b7b98","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Introduce a pipeline architecture to configure"},{"line_number":4,"context_line":"    publishers for resource plugins. "},{"line_number":5,"context_line":"features:"},{"line_number":6,"context_line":"  - Publishers can be configured at plugin level or"},{"line_number":7,"context_line":"    top level in configuration file. When Searchlight"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"ba5201f7_0316ee54","line":4,"range":{"start_line":4,"start_character":36,"end_line":4,"end_character":37},"updated":"2017-01-03 19:50:51.000000000","message":"Nit - whitespace","commit_id":"b364b444e2e29d7aef826d91a4d784f22dd7fa29"},{"author":{"_account_id":16150,"name":"Lei Zhang","email":"lei.a.zhang@intel.com","username":"leizhang"},"change_message_id":"139834e87b1c5abf0237e285eaa9a0c8c1a953a5","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Introduce a pipeline architecture to configure"},{"line_number":4,"context_line":"    publishers for resource plugins. "},{"line_number":5,"context_line":"features:"},{"line_number":6,"context_line":"  - Publishers can be configured at plugin level or"},{"line_number":7,"context_line":"    top level in configuration file. When Searchlight"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"ba5201f7_9e2f81f5","line":4,"range":{"start_line":4,"start_character":36,"end_line":4,"end_character":37},"in_reply_to":"ba5201f7_0316ee54","updated":"2017-01-04 08:57:41.000000000","message":"Done","commit_id":"b364b444e2e29d7aef826d91a4d784f22dd7fa29"}],"searchlight/common/utils.py":[{"author":{"_account_id":14680,"name":"Rick Aulino","email":"rick.aulino@hpe.com","username":"ricka"},"change_message_id":"4e43748066e913406442d2fd7725c742ad1b1174","unresolved":false,"context_lines":[{"line_number":477,"context_line":"def get_publisher(url):"},{"line_number":478,"context_line":"    namespace \u003d \u0027searchlight.publisher\u0027"},{"line_number":479,"context_line":"    loaded_driver \u003d stevedore.driver.DriverManager("},{"line_number":480,"context_line":"        namespace, url, invoke_on_load\u003dTrue)"},{"line_number":481,"context_line":"    return loaded_driver.driver"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa6399be_da3b3a9b","line":480,"range":{"start_line":480,"start_character":39,"end_line":480,"end_character":43},"updated":"2016-10-11 02:41:38.000000000","message":"What\u0027s being invoked here? The publishers do not seem to have an invokable method.","commit_id":"361abf553e26a1426599e5b062b9c9b855a08216"},{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"005cf3411a6af1ca77589bbfdc9768f112bd7c12","unresolved":false,"context_lines":[{"line_number":475,"context_line":"    return expanded_types"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":""},{"line_number":478,"context_line":"def get_publisher(url):"},{"line_number":479,"context_line":"    namespace \u003d \u0027searchlight.publisher\u0027"},{"line_number":480,"context_line":"    loaded_driver \u003d stevedore.driver.DriverManager("},{"line_number":481,"context_line":"        namespace, url, invoke_on_load\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_4620fb9b","line":478,"range":{"start_line":478,"start_character":4,"end_line":478,"end_character":17},"updated":"2016-12-08 21:12:40.000000000","message":"I\u0027d be inclined to move this into pipeline.py since that\u0027s the only place it\u0027s used","commit_id":"7dde653f76a47960843318024e563ce455d25441"},{"author":{"_account_id":16150,"name":"Lei Zhang","email":"lei.a.zhang@intel.com","username":"leizhang"},"change_message_id":"b8a6551914440195799be02ade7244cc560f9808","unresolved":false,"context_lines":[{"line_number":475,"context_line":"    return expanded_types"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":""},{"line_number":478,"context_line":"def get_publisher(url):"},{"line_number":479,"context_line":"    namespace \u003d \u0027searchlight.publisher\u0027"},{"line_number":480,"context_line":"    loaded_driver \u003d stevedore.driver.DriverManager("},{"line_number":481,"context_line":"        namespace, url, invoke_on_load\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_5ac99878","line":478,"range":{"start_line":478,"start_character":4,"end_line":478,"end_character":17},"in_reply_to":"3a71b18c_4620fb9b","updated":"2016-12-09 07:25:49.000000000","message":"Done","commit_id":"7dde653f76a47960843318024e563ce455d25441"}],"searchlight/elasticsearch/plugins/base.py":[{"author":{"_account_id":14680,"name":"Rick Aulino","email":"rick.aulino@hpe.com","username":"ricka"},"change_message_id":"4e43748066e913406442d2fd7725c742ad1b1174","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                help\u003d\u0027Use doc_values for mapped fields where applicable.\u0027"},{"line_number":41,"context_line":"                     \u0027Allows lower memory usage at the cost of some disk \u0027"},{"line_number":42,"context_line":"                     \u0027space. Recommended, especially in large deployments.\u0027),"},{"line_number":43,"context_line":"    cfg.StrOpt(\u0027publishers\u0027, default\u003d\u0027elasticsearch\u0027,"},{"line_number":44,"context_line":"               help\u003d\u0027The default publisher for Searchlight plugins\u0027)"},{"line_number":45,"context_line":"]"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"fa6399be_bad20633","line":43,"range":{"start_line":43,"start_character":8,"end_line":43,"end_character":14},"updated":"2016-10-11 02:41:38.000000000","message":"Should this be a ListOpt?","commit_id":"361abf553e26a1426599e5b062b9c9b855a08216"},{"author":{"_account_id":14680,"name":"Rick Aulino","email":"rick.aulino@hpe.com","username":"ricka"},"change_message_id":"4e43748066e913406442d2fd7725c742ad1b1174","unresolved":false,"context_lines":[{"line_number":41,"context_line":"                     \u0027Allows lower memory usage at the cost of some disk \u0027"},{"line_number":42,"context_line":"                     \u0027space. Recommended, especially in large deployments.\u0027),"},{"line_number":43,"context_line":"    cfg.StrOpt(\u0027publishers\u0027, default\u003d\u0027elasticsearch\u0027,"},{"line_number":44,"context_line":"               help\u003d\u0027The default publisher for Searchlight plugins\u0027)"},{"line_number":45,"context_line":"]"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa6399be_da625aad","line":44,"range":{"start_line":44,"start_character":25,"end_line":44,"end_character":32},"updated":"2016-10-11 02:41:38.000000000","message":"This comment seems incorrect. Isn\u0027t the default publisher \u0027elasticsearch\u0027 below (line 90). This option is allowing the deployer/user to override the default publisher.","commit_id":"361abf553e26a1426599e5b062b9c9b855a08216"},{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"473776bf7a60ec77cc86b72b55bf003121fcf263","unresolved":false,"context_lines":[{"line_number":41,"context_line":"                     \u0027Allows lower memory usage at the cost of some disk \u0027"},{"line_number":42,"context_line":"                     \u0027space. Recommended, especially in large deployments.\u0027),"},{"line_number":43,"context_line":"    cfg.StrOpt(\u0027publishers\u0027, default\u003d\u0027elasticsearch\u0027,"},{"line_number":44,"context_line":"               help\u003d\u0027The default publisher for Searchlight plugins\u0027)"},{"line_number":45,"context_line":"]"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa6399be_cde889b7","line":44,"range":{"start_line":44,"start_character":25,"end_line":44,"end_character":32},"in_reply_to":"fa6399be_da625aad","updated":"2016-10-12 18:52:06.000000000","message":"It *is* the default in a sense that it\u0027s applied to all plugins, but i agree it\u0027s confusing. I think \"the publishers that will receive event notifications\" is fine, along with some documentation.\n\nI suspect that allowing the option of removing \u0027elasticsearch\u0027 will cause trouble. A number of the notifications retrieve information from elasticsearch to add/delete information to stored documents. This won\u0027t work if ES isn\u0027t being used. Maybe we should consider this to be additional publishers.","commit_id":"361abf553e26a1426599e5b062b9c9b855a08216"},{"author":{"_account_id":14680,"name":"Rick Aulino","email":"rick.aulino@hpe.com","username":"ricka"},"change_message_id":"4e43748066e913406442d2fd7725c742ad1b1174","unresolved":false,"context_lines":[{"line_number":88,"context_line":"            publishers \u003d cfg.CONF.resource_plugin.publishers.split(\u0027,\u0027)"},{"line_number":89,"context_line":"        else:"},{"line_number":90,"context_line":"            publishers \u003d [\u0027elasticsearch\u0027]"},{"line_number":91,"context_line":"        return publishers"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    @property"},{"line_number":94,"context_line":"    def resource_group_name(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa6399be_faaabe84","line":91,"updated":"2016-10-11 02:41:38.000000000","message":"This code will allow the user (either purposely or accidentally) to turn off Elasticsearch. This seems incorrect. If Elasticsearch is turned off, a lot of functionality will break, including some transformers (e.g. OS::Neutron::SecurityGroup rule create/delete).\n\nIt seems that after line 91, we should always add Elasticsearch back as a publisher if it is not specified.","commit_id":"361abf553e26a1426599e5b062b9c9b855a08216"},{"author":{"_account_id":14680,"name":"Rick Aulino","email":"rick.aulino@hpe.com","username":"ricka"},"change_message_id":"4e43748066e913406442d2fd7725c742ad1b1174","unresolved":false,"context_lines":[{"line_number":544,"context_line":"            cfg.BoolOpt(\"enabled\", default\u003dcls.is_plugin_enabled_by_default()),"},{"line_number":545,"context_line":"            cfg.StrOpt(\"admin_only_fields\"),"},{"line_number":546,"context_line":"            cfg.BoolOpt(\u0027mapping_use_doc_values\u0027),"},{"line_number":547,"context_line":"            cfg.StrOpt(\"publishers\")"},{"line_number":548,"context_line":"        ]"},{"line_number":549,"context_line":"        if cls.NotificationHandlerCls:"},{"line_number":550,"context_line":"            opts.extend(cls.NotificationHandlerCls.get_plugin_opts())"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa6399be_9a9c626b","line":547,"range":{"start_line":547,"start_character":16,"end_line":547,"end_character":22},"updated":"2016-10-11 02:41:38.000000000","message":"ListOpt?","commit_id":"361abf553e26a1426599e5b062b9c9b855a08216"},{"author":{"_account_id":14680,"name":"Rick Aulino","email":"rick.aulino@hpe.com","username":"ricka"},"change_message_id":"4e43748066e913406442d2fd7725c742ad1b1174","unresolved":false,"context_lines":[{"line_number":609,"context_line":"        return self.handle_event("},{"line_number":610,"context_line":"            event_type,"},{"line_number":611,"context_line":"            payload,"},{"line_number":612,"context_line":"            metadata[\u0027timestamp\u0027])"},{"line_number":613,"context_line":""},{"line_number":614,"context_line":"    def get_notification_topics_exchanges(self):"},{"line_number":615,"context_line":"        \"\"\"\"Returns a list of (topic,exchange), (topic,exchange)..)"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa6399be_ba94c6e8","line":612,"updated":"2016-10-11 02:41:38.000000000","message":"Maybe we should combine process() and handle_event() below (line 6217). Not sure why we have both. We can either (1) have process() call self.TransformerClass() directly or (2) have the listener call handle_event() directly.\n\nhandle_event is overridden in SwiftContainerHandler(), but it doesn\u0027t appear to be doing anything different. The code is exactly the same as handle_event() below. If we do (1) above, Swift will still work. If we do (2) above, we can have SwiftContainerHandler override process() instead of handle_event(). It will then need to display the LOG.debug message.","commit_id":"361abf553e26a1426599e5b062b9c9b855a08216"},{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"fa44ed971b4bd10e45d23b7146b9a02f33cfd3d2","unresolved":false,"context_lines":[{"line_number":449,"context_line":""},{"line_number":450,"context_line":"    @property"},{"line_number":451,"context_line":"    def publishers(self):"},{"line_number":452,"context_line":"        return self.optinos.publishers"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"    @property"},{"line_number":455,"context_line":"    def allow_admin_ignore_rbac(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a71b18c_aa3c14e3","line":452,"range":{"start_line":452,"start_character":20,"end_line":452,"end_character":27},"updated":"2016-12-02 21:45:09.000000000","message":"self.options","commit_id":"c2c2b18b793b03f80c15fbbce3caa5c352a8662b"},{"author":{"_account_id":16150,"name":"Lei Zhang","email":"lei.a.zhang@intel.com","username":"leizhang"},"change_message_id":"6f43462a809478bc9206dfd17a278e3cf4fe51b8","unresolved":false,"context_lines":[{"line_number":449,"context_line":""},{"line_number":450,"context_line":"    @property"},{"line_number":451,"context_line":"    def publishers(self):"},{"line_number":452,"context_line":"        return self.optinos.publishers"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"    @property"},{"line_number":455,"context_line":"    def allow_admin_ignore_rbac(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a71b18c_389fbab5","line":452,"range":{"start_line":452,"start_character":20,"end_line":452,"end_character":27},"in_reply_to":"3a71b18c_aa3c14e3","updated":"2016-12-08 08:14:49.000000000","message":"Done","commit_id":"c2c2b18b793b03f80c15fbbce3caa5c352a8662b"},{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"d7ba1ad8338f974c207259e334f9261e80be812a","unresolved":false,"context_lines":[{"line_number":610,"context_line":"                             \"\u0027service_credentials\u0027. This is useful when a \""},{"line_number":611,"context_line":"                             \"service is deployed as a cloud-wide service \""},{"line_number":612,"context_line":"                             \"rather than per region (e.g. Region1,Region2).\"),"},{"line_number":613,"context_line":"            cfg.ListOpt(\u0027publishers\u0027)"},{"line_number":614,"context_line":"        ]"},{"line_number":615,"context_line":"        if cls.NotificationHandlerCls:"},{"line_number":616,"context_line":"            opts.extend(cls.NotificationHandlerCls.get_plugin_opts())"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a71b18c_a0cb53a4","line":613,"range":{"start_line":613,"start_character":35,"end_line":613,"end_character":37},"updated":"2016-12-02 22:23:24.000000000","message":"This needs a description (how do I define a publisher? python class path?)","commit_id":"c2c2b18b793b03f80c15fbbce3caa5c352a8662b"},{"author":{"_account_id":16150,"name":"Lei Zhang","email":"lei.a.zhang@intel.com","username":"leizhang"},"change_message_id":"6f43462a809478bc9206dfd17a278e3cf4fe51b8","unresolved":false,"context_lines":[{"line_number":610,"context_line":"                             \"\u0027service_credentials\u0027. This is useful when a \""},{"line_number":611,"context_line":"                             \"service is deployed as a cloud-wide service \""},{"line_number":612,"context_line":"                             \"rather than per region (e.g. Region1,Region2).\"),"},{"line_number":613,"context_line":"            cfg.ListOpt(\u0027publishers\u0027)"},{"line_number":614,"context_line":"        ]"},{"line_number":615,"context_line":"        if cls.NotificationHandlerCls:"},{"line_number":616,"context_line":"            opts.extend(cls.NotificationHandlerCls.get_plugin_opts())"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a71b18c_185d9eec","line":613,"range":{"start_line":613,"start_character":35,"end_line":613,"end_character":37},"in_reply_to":"3a71b18c_a0cb53a4","updated":"2016-12-08 08:14:49.000000000","message":"Done, currently use stevedore to load publishers, you could use publisher names under \u0027searchlight.publisher\u0027 entry points, I will add more details into docs.","commit_id":"c2c2b18b793b03f80c15fbbce3caa5c352a8662b"},{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"005cf3411a6af1ca77589bbfdc9768f112bd7c12","unresolved":false,"context_lines":[{"line_number":610,"context_line":"                             \"\u0027service_credentials\u0027. This is useful when a \""},{"line_number":611,"context_line":"                             \"service is deployed as a cloud-wide service \""},{"line_number":612,"context_line":"                             \"rather than per region (e.g. Region1,Region2).\"),"},{"line_number":613,"context_line":"            cfg.ListOpt(\u0027publishers\u0027,"},{"line_number":614,"context_line":"                        help\u003d\u0027Used to configure publishers for the plugin, \u0027"},{"line_number":615,"context_line":"                             \u0027value could be publisher names configured in \u0027"},{"line_number":616,"context_line":"                             \u0027setup.cfg file.\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_a6aaafd0","line":613,"range":{"start_line":613,"start_character":25,"end_line":613,"end_character":35},"updated":"2016-12-08 21:12:40.000000000","message":"Should this also be available as a top level resource_plugin option for publishers that can handle any notification?","commit_id":"7dde653f76a47960843318024e563ce455d25441"},{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"342346748611ee62044f4049a6568581e3da571a","unresolved":false,"context_lines":[{"line_number":610,"context_line":"                             \"\u0027service_credentials\u0027. This is useful when a \""},{"line_number":611,"context_line":"                             \"service is deployed as a cloud-wide service \""},{"line_number":612,"context_line":"                             \"rather than per region (e.g. Region1,Region2).\"),"},{"line_number":613,"context_line":"            cfg.ListOpt(\u0027publishers\u0027,"},{"line_number":614,"context_line":"                        help\u003d\u0027Used to configure publishers for the plugin, \u0027"},{"line_number":615,"context_line":"                             \u0027value could be publisher names configured in \u0027"},{"line_number":616,"context_line":"                             \u0027setup.cfg file.\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6eadb0_61227dbb","line":613,"range":{"start_line":613,"start_character":25,"end_line":613,"end_character":35},"in_reply_to":"3a71b18c_3a3f7c26","updated":"2016-12-12 20:58:27.000000000","message":"Yes, that makes sense.\n\nIf you define an option in here (in get_plugin_opts) it ONLY applies to this plugin (os_nova_server). Notice that some of these options like resource_group_name, mapping_use_doc_values) mirror the options defined at the top in indexer_opts. You can add \u0027publishers\u0027 in the resource_plugin AND here and it\u0027ll be overridden if specified for a particular plugin.","commit_id":"7dde653f76a47960843318024e563ce455d25441"},{"author":{"_account_id":16150,"name":"Lei Zhang","email":"lei.a.zhang@intel.com","username":"leizhang"},"change_message_id":"b8a6551914440195799be02ade7244cc560f9808","unresolved":false,"context_lines":[{"line_number":610,"context_line":"                             \"\u0027service_credentials\u0027. This is useful when a \""},{"line_number":611,"context_line":"                             \"service is deployed as a cloud-wide service \""},{"line_number":612,"context_line":"                             \"rather than per region (e.g. Region1,Region2).\"),"},{"line_number":613,"context_line":"            cfg.ListOpt(\u0027publishers\u0027,"},{"line_number":614,"context_line":"                        help\u003d\u0027Used to configure publishers for the plugin, \u0027"},{"line_number":615,"context_line":"                             \u0027value could be publisher names configured in \u0027"},{"line_number":616,"context_line":"                             \u0027setup.cfg file.\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_3a3f7c26","line":613,"range":{"start_line":613,"start_character":25,"end_line":613,"end_character":35},"in_reply_to":"3a71b18c_a6aaafd0","updated":"2016-12-09 07:25:49.000000000","message":"Yeah, but we need to define the behavior of overriding publisher configuration. If publisher is defined in plugin level, it always precedes. Top level publisher will be used if no plugin level publisher is configured. Parent plugin\u0027s publisher configuration won\u0027t affect child plugin\u0027s publisher. Does this logic make sense?","commit_id":"7dde653f76a47960843318024e563ce455d25441"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"59a043cff45e4eeb4833e26760e4239d47b57eb8","unresolved":false,"context_lines":[{"line_number":669,"context_line":"        try:"},{"line_number":670,"context_line":"            self.get_event_handlers()[event_type](payload,"},{"line_number":671,"context_line":"                                                  metadata[\u0027timestamp\u0027])"},{"line_number":672,"context_line":"            return oslo_messaging.NotificationResult.HANDLED"},{"line_number":673,"context_line":"        except Exception as e:"},{"line_number":674,"context_line":"            LOG.error(encodeutils.exception_to_unicode(e))"},{"line_number":675,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5201f7_15ec598e","side":"PARENT","line":672,"range":{"start_line":672,"start_character":11,"end_line":672,"end_character":60},"updated":"2017-01-04 00:43:12.000000000","message":"Does this makes pipeline the only way to send out Notification results?","commit_id":"bfdb08e249a718544b6c97b6f4341ddcfa833163"},{"author":{"_account_id":16150,"name":"Lei Zhang","email":"lei.a.zhang@intel.com","username":"leizhang"},"change_message_id":"c55f22414c27674bcb30beb4016fef11362e623e","unresolved":false,"context_lines":[{"line_number":669,"context_line":"        try:"},{"line_number":670,"context_line":"            self.get_event_handlers()[event_type](payload,"},{"line_number":671,"context_line":"                                                  metadata[\u0027timestamp\u0027])"},{"line_number":672,"context_line":"            return oslo_messaging.NotificationResult.HANDLED"},{"line_number":673,"context_line":"        except Exception as e:"},{"line_number":674,"context_line":"            LOG.error(encodeutils.exception_to_unicode(e))"},{"line_number":675,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5201f7_4400e701","side":"PARENT","line":672,"range":{"start_line":672,"start_character":11,"end_line":672,"end_character":60},"in_reply_to":"ba5201f7_15ec598e","updated":"2017-01-04 09:22:06.000000000","message":"Yes, enriched notifications will be passed to pipeline.","commit_id":"bfdb08e249a718544b6c97b6f4341ddcfa833163"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"59a043cff45e4eeb4833e26760e4239d47b57eb8","unresolved":false,"context_lines":[{"line_number":689,"context_line":"            if docs:"},{"line_number":690,"context_line":"                if not hasattr(docs, \u0027__iter__\u0027):"},{"line_number":691,"context_line":"                    docs \u003d [docs]"},{"line_number":692,"context_line":"            return docs"},{"line_number":693,"context_line":"        except Exception as e:"},{"line_number":694,"context_line":"            LOG.error(encodeutils.exception_to_unicode(e))"},{"line_number":695,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5201f7_355f9d42","line":692,"range":{"start_line":692,"start_character":0,"end_line":692,"end_character":23},"updated":"2017-01-04 00:43:12.000000000","message":"Another thing I want to ask is that: this seems to be called by:\nhttp://git.openstack.org/cgit/openstack/searchlight/tree/searchlight/listener.py#n110\nand this returned something here, but the code in the link didn\u0027t handle the return value, is that the correct way?","commit_id":"b364b444e2e29d7aef826d91a4d784f22dd7fa29"},{"author":{"_account_id":16150,"name":"Lei Zhang","email":"lei.a.zhang@intel.com","username":"leizhang"},"change_message_id":"c55f22414c27674bcb30beb4016fef11362e623e","unresolved":false,"context_lines":[{"line_number":689,"context_line":"            if docs:"},{"line_number":690,"context_line":"                if not hasattr(docs, \u0027__iter__\u0027):"},{"line_number":691,"context_line":"                    docs \u003d [docs]"},{"line_number":692,"context_line":"            return docs"},{"line_number":693,"context_line":"        except Exception as e:"},{"line_number":694,"context_line":"            LOG.error(encodeutils.exception_to_unicode(e))"},{"line_number":695,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5201f7_41d4591f","line":692,"range":{"start_line":692,"start_character":0,"end_line":692,"end_character":23},"in_reply_to":"ba5201f7_355f9d42","updated":"2017-01-04 09:22:06.000000000","message":"Yeah, the link is pointing to master branch. I modified listener code also, you can have a look at this patchset.","commit_id":"b364b444e2e29d7aef826d91a4d784f22dd7fa29"}],"searchlight/elasticsearch/plugins/designate/notification_handlers.py":[{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"fa44ed971b4bd10e45d23b7146b9a02f33cfd3d2","unresolved":false,"context_lines":[{"line_number":108,"context_line":"                    )"},{"line_number":109,"context_line":"                self.recordset_helper.save_documents("},{"line_number":110,"context_line":"                    serialized_recordsets, versions\u003drecordset_versions)"},{"line_number":111,"context_line":"                return items"},{"line_number":112,"context_line":"        except Exception as e:"},{"line_number":113,"context_line":"            LOG.exception(e)"},{"line_number":114,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a71b18c_3d484c5b","line":111,"range":{"start_line":111,"start_character":23,"end_line":111,"end_character":28},"updated":"2016-12-02 21:45:09.000000000","message":"The \u0027items\u0027 here are not the domain (/zone) but the recordsets that are created as part of it. The result emitted from this won\u0027t include the zone itself.","commit_id":"c2c2b18b793b03f80c15fbbce3caa5c352a8662b"},{"author":{"_account_id":16150,"name":"Lei Zhang","email":"lei.a.zhang@intel.com","username":"leizhang"},"change_message_id":"6f43462a809478bc9206dfd17a278e3cf4fe51b8","unresolved":false,"context_lines":[{"line_number":108,"context_line":"                    )"},{"line_number":109,"context_line":"                self.recordset_helper.save_documents("},{"line_number":110,"context_line":"                    serialized_recordsets, versions\u003drecordset_versions)"},{"line_number":111,"context_line":"                return items"},{"line_number":112,"context_line":"        except Exception as e:"},{"line_number":113,"context_line":"            LOG.exception(e)"},{"line_number":114,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a71b18c_d86b2684","line":111,"range":{"start_line":111,"start_character":23,"end_line":111,"end_character":28},"in_reply_to":"3a71b18c_3d484c5b","updated":"2016-12-08 08:14:49.000000000","message":"Done","commit_id":"c2c2b18b793b03f80c15fbbce3caa5c352a8662b"}],"searchlight/elasticsearch/plugins/helper.py":[{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"473776bf7a60ec77cc86b72b55bf003121fcf263","unresolved":false,"context_lines":[{"line_number":339,"context_line":"        to_delete \u003d self.get_child_by_parent_id(parent_id, version)"},{"line_number":340,"context_line":"        self.delete_documents(to_delete, override_role_separation\u003dTrue)"},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"    def get_routing_parent(self, doc_id):"},{"line_number":343,"context_line":"        \"\"\"Find routing parent info of a document\"\"\""},{"line_number":344,"context_line":"        search_doc_id \u003d doc_id"},{"line_number":345,"context_line":"        if self.plugin.requires_role_separation:"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa6399be_4d79d9f5","line":342,"range":{"start_line":342,"start_character":8,"end_line":342,"end_character":26},"updated":"2016-10-12 18:52:06.000000000","message":"This change is fine but maybe could be a different patch","commit_id":"361abf553e26a1426599e5b062b9c9b855a08216"}],"searchlight/elasticsearch/plugins/neutron/notification_handlers.py":[{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"473776bf7a60ec77cc86b72b55bf003121fcf263","unresolved":false,"context_lines":[{"line_number":14,"context_line":"# limitations under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from searchlight.elasticsearch.plugins import base"},{"line_number":17,"context_line":"from searchlight.transformer.neutron import FloatingIPTransformer"},{"line_number":18,"context_line":"from searchlight.transformer.neutron import NetworkTransformer"},{"line_number":19,"context_line":"from searchlight.transformer.neutron import PortTransformer"},{"line_number":20,"context_line":"from searchlight.transformer.neutron import RouterTransformer"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa6399be_4d31d904","line":17,"range":{"start_line":17,"start_character":17,"end_line":17,"end_character":28},"updated":"2016-10-12 18:52:06.000000000","message":"Nit I guess but maybe cleaner to import transformer.neutron as transformers and then use transformers.NetworkTransformer ?","commit_id":"361abf553e26a1426599e5b062b9c9b855a08216"}],"searchlight/elasticsearch/plugins/nova/notification_handler.py":[{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"005cf3411a6af1ca77589bbfdc9768f112bd7c12","unresolved":false,"context_lines":[{"line_number":211,"context_line":"            LOG.debug(\"Skipping update or indexing for %s; event contains no \""},{"line_number":212,"context_line":"                      \"useful information\", payload[\u0027instance_id\u0027])"},{"line_number":213,"context_line":"        elif not update_if_state_matches:"},{"line_number":214,"context_line":"            self.index_from_api(event_type, payload, timestamp)"},{"line_number":215,"context_line":"        elif self.partial_state_updates:"},{"line_number":216,"context_line":"            self._partial_state_update("},{"line_number":217,"context_line":"                event_type, payload, update_if_state_matches)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_2ec4b190","line":214,"range":{"start_line":214,"start_character":12,"end_line":214,"end_character":16},"updated":"2016-12-08 21:12:40.000000000","message":"Need return here?","commit_id":"7dde653f76a47960843318024e563ce455d25441"},{"author":{"_account_id":16150,"name":"Lei Zhang","email":"lei.a.zhang@intel.com","username":"leizhang"},"change_message_id":"b8a6551914440195799be02ade7244cc560f9808","unresolved":false,"context_lines":[{"line_number":211,"context_line":"            LOG.debug(\"Skipping update or indexing for %s; event contains no \""},{"line_number":212,"context_line":"                      \"useful information\", payload[\u0027instance_id\u0027])"},{"line_number":213,"context_line":"        elif not update_if_state_matches:"},{"line_number":214,"context_line":"            self.index_from_api(event_type, payload, timestamp)"},{"line_number":215,"context_line":"        elif self.partial_state_updates:"},{"line_number":216,"context_line":"            self._partial_state_update("},{"line_number":217,"context_line":"                event_type, payload, update_if_state_matches)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_7a49f4cf","line":214,"range":{"start_line":214,"start_character":12,"end_line":214,"end_character":16},"in_reply_to":"3a71b18c_2ec4b190","updated":"2016-12-09 07:25:49.000000000","message":"Done","commit_id":"7dde653f76a47960843318024e563ce455d25441"},{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"005cf3411a6af1ca77589bbfdc9768f112bd7c12","unresolved":false,"context_lines":[{"line_number":213,"context_line":"        elif not update_if_state_matches:"},{"line_number":214,"context_line":"            self.index_from_api(event_type, payload, timestamp)"},{"line_number":215,"context_line":"        elif self.partial_state_updates:"},{"line_number":216,"context_line":"            self._partial_state_update("},{"line_number":217,"context_line":"                event_type, payload, update_if_state_matches)"},{"line_number":218,"context_line":"        else:"},{"line_number":219,"context_line":"            LOG.debug(\"Skipping partial state update for %s; functionality \""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_6ebea900","line":216,"range":{"start_line":216,"start_character":12,"end_line":216,"end_character":16},"updated":"2016-12-08 21:12:40.000000000","message":"return?","commit_id":"7dde653f76a47960843318024e563ce455d25441"},{"author":{"_account_id":16150,"name":"Lei Zhang","email":"lei.a.zhang@intel.com","username":"leizhang"},"change_message_id":"b8a6551914440195799be02ade7244cc560f9808","unresolved":false,"context_lines":[{"line_number":213,"context_line":"        elif not update_if_state_matches:"},{"line_number":214,"context_line":"            self.index_from_api(event_type, payload, timestamp)"},{"line_number":215,"context_line":"        elif self.partial_state_updates:"},{"line_number":216,"context_line":"            self._partial_state_update("},{"line_number":217,"context_line":"                event_type, payload, update_if_state_matches)"},{"line_number":218,"context_line":"        else:"},{"line_number":219,"context_line":"            LOG.debug(\"Skipping partial state update for %s; functionality \""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_ba11ccb1","line":216,"range":{"start_line":216,"start_character":12,"end_line":216,"end_character":16},"in_reply_to":"3a71b18c_6ebea900","updated":"2016-12-09 07:25:49.000000000","message":"Done","commit_id":"7dde653f76a47960843318024e563ce455d25441"}],"searchlight/elasticsearch/plugins/utils.py":[{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"b20562e072d5a83df43a3ef54bbf3b73a96b7b98","unresolved":false,"context_lines":[{"line_number":522,"context_line":"    es_doc.pop(searchlight.elasticsearch.ROLE_USER_FIELD, None)"},{"line_number":523,"context_line":""},{"line_number":524,"context_line":"    # Apply plugin\u0027s filter_result"},{"line_number":525,"context_line":"    admin_context \u003d RequestContext(is_admin\u003dTrue)"},{"line_number":526,"context_line":"    plugin.filter_result({\u0027_source\u0027: es_doc}, admin_context)"},{"line_number":527,"context_line":"    return es_doc"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5201f7_ae29898b","line":525,"range":{"start_line":525,"start_character":4,"end_line":525,"end_character":17},"updated":"2017-01-03 19:50:51.000000000","message":"Wouldn\u0027t it be safer to assume the user isn\u0027t an admin? This will potentially leak admin-only information to non-admin users subscribed to published events. I don\u0027t think there\u0027s any mechanism to do any later scrubbing?","commit_id":"b364b444e2e29d7aef826d91a4d784f22dd7fa29"},{"author":{"_account_id":16150,"name":"Lei Zhang","email":"lei.a.zhang@intel.com","username":"leizhang"},"change_message_id":"139834e87b1c5abf0237e285eaa9a0c8c1a953a5","unresolved":false,"context_lines":[{"line_number":522,"context_line":"    es_doc.pop(searchlight.elasticsearch.ROLE_USER_FIELD, None)"},{"line_number":523,"context_line":""},{"line_number":524,"context_line":"    # Apply plugin\u0027s filter_result"},{"line_number":525,"context_line":"    admin_context \u003d RequestContext(is_admin\u003dTrue)"},{"line_number":526,"context_line":"    plugin.filter_result({\u0027_source\u0027: es_doc}, admin_context)"},{"line_number":527,"context_line":"    return es_doc"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5201f7_ce55d850","line":525,"range":{"start_line":525,"start_character":4,"end_line":525,"end_character":17},"in_reply_to":"ba5201f7_ae29898b","updated":"2017-01-04 08:57:41.000000000","message":"Yeah, that\u0027s a good question. It depends on who will consume these events. If there are admin users and non-admin users subscribing to events, we need some extra work to do role separation. Admin users should get all tenant events with admin fields included, non-admin users should receive events of their own tenant without admin fields.\n\nThis role separation could happen outside notification handler. To achieve fine grained role control, another pipeline configuration file maybe needed, with every pipeline detail is configured in this file, including plugin, publisher, role(admin or specific tenant) and so on. And pipeline could use this conf to filter full content documents emit from notification handlers. Pipeline item contains plugin instance, so there should be sufficient info for pipeline to filter documents. Correct me if I go too far.","commit_id":"b364b444e2e29d7aef826d91a4d784f22dd7fa29"}],"searchlight/listener.py":[{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"473776bf7a60ec77cc86b72b55bf003121fcf263","unresolved":false,"context_lines":[{"line_number":105,"context_line":"            log_context \u003d self._log_notification("},{"line_number":106,"context_line":"                handler, ctxt, plugin.document_type,"},{"line_number":107,"context_line":"                event_type_l, payload, metadata)"},{"line_number":108,"context_line":"            self._log_finished(log_context)"},{"line_number":109,"context_line":"            # TODO(lei-zh), catch handler process, if it fails requeue"},{"line_number":110,"context_line":"            #  the message If publish failed, should trigger publisher\u0027s retry"},{"line_number":111,"context_line":"            # method?"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa6399be_e7ce4cb3","line":108,"range":{"start_line":108,"start_character":17,"end_line":108,"end_character":30},"updated":"2016-10-12 18:52:06.000000000","message":"This is not meant to be here i think?","commit_id":"361abf553e26a1426599e5b062b9c9b855a08216"},{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"473776bf7a60ec77cc86b72b55bf003121fcf263","unresolved":false,"context_lines":[{"line_number":110,"context_line":"            #  the message If publish failed, should trigger publisher\u0027s retry"},{"line_number":111,"context_line":"            # method?"},{"line_number":112,"context_line":"            try:"},{"line_number":113,"context_line":"                event \u003d handler.process("},{"line_number":114,"context_line":"                    ctxt,"},{"line_number":115,"context_line":"                    publisher_id,"},{"line_number":116,"context_line":"                    event_type,"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa6399be_07742066","line":113,"range":{"start_line":113,"start_character":16,"end_line":113,"end_character":21},"updated":"2016-10-12 18:52:06.000000000","message":"Perhaps named this \u0027transformed_event\u0027 or something to differentiate from the \u0027event\u0027 as oslo-messaging refers to it","commit_id":"361abf553e26a1426599e5b062b9c9b855a08216"}],"searchlight/pipeline.py":[{"author":{"_account_id":14680,"name":"Rick Aulino","email":"rick.aulino@hpe.com","username":"ricka"},"change_message_id":"4e43748066e913406442d2fd7725c742ad1b1174","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    def __init__(self, plugins):"},{"line_number":39,"context_line":"        self.pipelines \u003d []"},{"line_number":40,"context_line":"        for plugin in six.itervalues(plugins):"},{"line_number":41,"context_line":"            publishers \u003d [get_publisher(pub) for pub in plugin.obj.publishers]"},{"line_number":42,"context_line":"            for publisher in publishers:"},{"line_number":43,"context_line":"                pipeline \u003d Pipeline(plugin.obj, publisher)"},{"line_number":44,"context_line":"                self.pipelines.append(pipeline)"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa6399be_55dd3b6f","line":41,"updated":"2016-10-11 02:41:38.000000000","message":"We should be catching exceptions from stevedore.driver.DriverManager(). At least fail gracefully with an error to help the user debug. I\u0027m assuming it will be either a typo in the config file or the publisher wasn\u0027t deployed with Searchlight.","commit_id":"361abf553e26a1426599e5b062b9c9b855a08216"},{"author":{"_account_id":14680,"name":"Rick Aulino","email":"rick.aulino@hpe.com","username":"ricka"},"change_message_id":"4e43748066e913406442d2fd7725c742ad1b1174","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        for pipeline in self.pipelines:"},{"line_number":48,"context_line":"            for event in events:"},{"line_number":49,"context_line":"                if event.event_type in pipeline.supported_events():"},{"line_number":50,"context_line":"                    pipeline.publish_event(event)"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa6399be_15574303","line":50,"updated":"2016-10-11 02:41:38.000000000","message":"We should be returning oslo_messaging.NotificationResult.HANDLED here, after the outer for loop.","commit_id":"361abf553e26a1426599e5b062b9c9b855a08216"},{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"d7ba1ad8338f974c207259e334f9261e80be812a","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        self.pipelines \u003d []"},{"line_number":43,"context_line":"        for plugin in six.itervalues(plugins):"},{"line_number":44,"context_line":"            publishers \u003d []"},{"line_number":45,"context_line":"            for publisher_name in plugin.obj.publishers:"},{"line_number":46,"context_line":"                try:"},{"line_number":47,"context_line":"                    publishers.append(get_publisher(publisher_name))"},{"line_number":48,"context_line":"                except Exception as exc:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a71b18c_40e43f3a","line":45,"range":{"start_line":45,"start_character":45,"end_line":45,"end_character":55},"updated":"2016-12-02 22:23:24.000000000","message":"The default for this is None; need to default to the empty list here or in the configuration option","commit_id":"c2c2b18b793b03f80c15fbbce3caa5c352a8662b"},{"author":{"_account_id":16150,"name":"Lei Zhang","email":"lei.a.zhang@intel.com","username":"leizhang"},"change_message_id":"6f43462a809478bc9206dfd17a278e3cf4fe51b8","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        self.pipelines \u003d []"},{"line_number":43,"context_line":"        for plugin in six.itervalues(plugins):"},{"line_number":44,"context_line":"            publishers \u003d []"},{"line_number":45,"context_line":"            for publisher_name in plugin.obj.publishers:"},{"line_number":46,"context_line":"                try:"},{"line_number":47,"context_line":"                    publishers.append(get_publisher(publisher_name))"},{"line_number":48,"context_line":"                except Exception as exc:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a71b18c_580e36e6","line":45,"range":{"start_line":45,"start_character":45,"end_line":45,"end_character":55},"in_reply_to":"3a71b18c_40e43f3a","updated":"2016-12-08 08:14:49.000000000","message":"Done","commit_id":"c2c2b18b793b03f80c15fbbce3caa5c352a8662b"},{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"005cf3411a6af1ca77589bbfdc9768f112bd7c12","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def __init__(self, plugins):"},{"line_number":42,"context_line":"        self.pipelines \u003d []"},{"line_number":43,"context_line":"        for plugin in six.itervalues(plugins):"},{"line_number":44,"context_line":"            publishers \u003d []"},{"line_number":45,"context_line":"            if plugin.obj.publishers:"},{"line_number":46,"context_line":"                for publisher_name in plugin.obj.publishers:"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_4dcad6a2","line":43,"range":{"start_line":43,"start_character":26,"end_line":43,"end_character":36},"updated":"2016-12-08 21:12:40.000000000","message":"This isn\u0027t a big deal but the current recommendation is to just use plugins.values() because it\u0027s more efficient in python 3.x and the slight inefficiency in 2.7 isn\u0027t worth it. There was a mailing list thread about this a while back that I can\u0027t find right now","commit_id":"7dde653f76a47960843318024e563ce455d25441"},{"author":{"_account_id":16150,"name":"Lei Zhang","email":"lei.a.zhang@intel.com","username":"leizhang"},"change_message_id":"b8a6551914440195799be02ade7244cc560f9808","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def __init__(self, plugins):"},{"line_number":42,"context_line":"        self.pipelines \u003d []"},{"line_number":43,"context_line":"        for plugin in six.itervalues(plugins):"},{"line_number":44,"context_line":"            publishers \u003d []"},{"line_number":45,"context_line":"            if plugin.obj.publishers:"},{"line_number":46,"context_line":"                for publisher_name in plugin.obj.publishers:"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_fa0b447b","line":43,"range":{"start_line":43,"start_character":26,"end_line":43,"end_character":36},"in_reply_to":"3a71b18c_4dcad6a2","updated":"2016-12-09 07:25:49.000000000","message":"Done","commit_id":"7dde653f76a47960843318024e563ce455d25441"},{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"005cf3411a6af1ca77589bbfdc9768f112bd7c12","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            for item in items:"},{"line_number":65,"context_line":"                if item.event_type in pipeline.supported_events():"},{"line_number":66,"context_line":"                    pipeline.publisher.publish(item)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"class PipelineItem(object):"},{"line_number":70,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_48b484f1","line":67,"updated":"2016-12-08 21:12:40.000000000","message":"To test this I added:\n\nclass LogPublisher(object):\n    def publish(self, item):\n        LOG.info(\"Published notification: %s %s %s\" % (item.event_type, getattr(item, \u0027doc_id\u0027, None), getattr(item, \u0027doc\u0027, None))\n\nI think it\u0027d be good to include this as an example publisher, and to facilitate testing.","commit_id":"7dde653f76a47960843318024e563ce455d25441"},{"author":{"_account_id":16150,"name":"Lei Zhang","email":"lei.a.zhang@intel.com","username":"leizhang"},"change_message_id":"b8a6551914440195799be02ade7244cc560f9808","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            for item in items:"},{"line_number":65,"context_line":"                if item.event_type in pipeline.supported_events():"},{"line_number":66,"context_line":"                    pipeline.publisher.publish(item)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"class PipelineItem(object):"},{"line_number":70,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_5a68b821","line":67,"in_reply_to":"3a71b18c_48b484f1","updated":"2016-12-09 07:25:49.000000000","message":"Yeah, this will be first publisher in code base : )","commit_id":"7dde653f76a47960843318024e563ce455d25441"},{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"005cf3411a6af1ca77589bbfdc9768f112bd7c12","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        :param payload: notification payload received"},{"line_number":79,"context_line":"        \"\"\""},{"line_number":80,"context_line":"        self.plugin \u003d plugin"},{"line_number":81,"context_line":"        self.payload \u003d payload"},{"line_number":82,"context_line":"        self.event_type \u003d event_type"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_a87278e1","line":81,"range":{"start_line":81,"start_character":20,"end_line":81,"end_character":21},"updated":"2016-12-08 21:12:40.000000000","message":"Need to add a note that the payload will have sensitive information in it and shouldn\u0027t be passed on","commit_id":"7dde653f76a47960843318024e563ce455d25441"},{"author":{"_account_id":16150,"name":"Lei Zhang","email":"lei.a.zhang@intel.com","username":"leizhang"},"change_message_id":"b8a6551914440195799be02ade7244cc560f9808","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        :param payload: notification payload received"},{"line_number":79,"context_line":"        \"\"\""},{"line_number":80,"context_line":"        self.plugin \u003d plugin"},{"line_number":81,"context_line":"        self.payload \u003d payload"},{"line_number":82,"context_line":"        self.event_type \u003d event_type"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_da62083d","line":81,"range":{"start_line":81,"start_character":20,"end_line":81,"end_character":21},"in_reply_to":"3a71b18c_a87278e1","updated":"2016-12-09 07:25:49.000000000","message":"Done","commit_id":"7dde653f76a47960843318024e563ce455d25441"},{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"005cf3411a6af1ca77589bbfdc9768f112bd7c12","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        \"\"\""},{"line_number":80,"context_line":"        self.plugin \u003d plugin"},{"line_number":81,"context_line":"        self.payload \u003d payload"},{"line_number":82,"context_line":"        self.event_type \u003d event_type"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"class IndexItem(PipelineItem):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_4e3c8dbf","line":82,"range":{"start_line":82,"start_character":13,"end_line":82,"end_character":23},"updated":"2016-12-08 21:12:40.000000000","message":"I think also the resource type? There are places where the event_type and resource type aren\u0027t obviously linked (like where one plugin listens to events on another resource type). It may not be possible to identify what doc_id or doc refer to","commit_id":"7dde653f76a47960843318024e563ce455d25441"},{"author":{"_account_id":16150,"name":"Lei Zhang","email":"lei.a.zhang@intel.com","username":"leizhang"},"change_message_id":"b8a6551914440195799be02ade7244cc560f9808","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        \"\"\""},{"line_number":80,"context_line":"        self.plugin \u003d plugin"},{"line_number":81,"context_line":"        self.payload \u003d payload"},{"line_number":82,"context_line":"        self.event_type \u003d event_type"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"class IndexItem(PipelineItem):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_809bc2c8","line":82,"range":{"start_line":82,"start_character":13,"end_line":82,"end_character":23},"in_reply_to":"3a71b18c_4e3c8dbf","updated":"2016-12-09 07:25:49.000000000","message":"I don\u0027t realize this until I see server group patch. Passing resource type is certainly necessary. I\u0027m wondering if plugin should be included here，because it may not be linked with the resource publishers are dealing, and publishers should not be aware about these details. Seems resource info and notification info are enough for publishers. What do you think?","commit_id":"7dde653f76a47960843318024e563ce455d25441"},{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"342346748611ee62044f4049a6568581e3da571a","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        \"\"\""},{"line_number":80,"context_line":"        self.plugin \u003d plugin"},{"line_number":81,"context_line":"        self.payload \u003d payload"},{"line_number":82,"context_line":"        self.event_type \u003d event_type"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"class IndexItem(PipelineItem):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6eadb0_2520909b","line":82,"range":{"start_line":82,"start_character":13,"end_line":82,"end_character":23},"in_reply_to":"3a71b18c_809bc2c8","updated":"2016-12-12 20:58:27.000000000","message":"Yeah, I think it should be sufficient to get the resource type, event type and serialized document in most cases. I\u0027m ok including the payload also for the messaging metadata as long as it\u0027s very clear it shouldn\u0027t be passed on further.","commit_id":"7dde653f76a47960843318024e563ce455d25441"},{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"005cf3411a6af1ca77589bbfdc9768f112bd7c12","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"class IndexItem(PipelineItem):"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def __init__(self, plugin, event_type, payload, doc):"},{"line_number":88,"context_line":"        \"\"\""},{"line_number":89,"context_line":"        :param plugin: plugin of changed resource document"},{"line_number":90,"context_line":"        :param event_type: event type of the notification"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_683ea0db","line":87,"range":{"start_line":87,"start_character":52,"end_line":87,"end_character":55},"updated":"2016-12-08 21:12:40.000000000","message":"Maybe have doc_id on here too to make it easier for consumers","commit_id":"7dde653f76a47960843318024e563ce455d25441"},{"author":{"_account_id":16150,"name":"Lei Zhang","email":"lei.a.zhang@intel.com","username":"leizhang"},"change_message_id":"b8a6551914440195799be02ade7244cc560f9808","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"class IndexItem(PipelineItem):"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def __init__(self, plugin, event_type, payload, doc):"},{"line_number":88,"context_line":"        \"\"\""},{"line_number":89,"context_line":"        :param plugin: plugin of changed resource document"},{"line_number":90,"context_line":"        :param event_type: event type of the notification"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_e0a8f6dd","line":87,"range":{"start_line":87,"start_character":52,"end_line":87,"end_character":55},"in_reply_to":"3a71b18c_683ea0db","updated":"2016-12-09 07:25:49.000000000","message":"Done","commit_id":"7dde653f76a47960843318024e563ce455d25441"}],"searchlight/publisher/log.py":[{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"b20562e072d5a83df43a3ef54bbf3b73a96b7b98","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def publish(self, item):"},{"line_number":25,"context_line":"        LOG.info(_LI("},{"line_number":26,"context_line":"            \u0027Published notification: %(event_type)s_%(doc_id)s %(doc)s\u0027) % {"},{"line_number":27,"context_line":"                \u0027event_type\u0027: item.event_type,"},{"line_number":28,"context_line":"                \u0027doc_id\u0027: item.doc_id,"},{"line_number":29,"context_line":"                \u0027doc\u0027: getattr(item, \u0027doc\u0027, None)})"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5201f7_83549e21","line":26,"range":{"start_line":26,"start_character":50,"end_line":26,"end_character":52},"updated":"2017-01-03 19:50:51.000000000","message":"Nit - I\u0027d remove the underscore between event type and doc id unless htere\u0027s a good reason?","commit_id":"b364b444e2e29d7aef826d91a4d784f22dd7fa29"},{"author":{"_account_id":16150,"name":"Lei Zhang","email":"lei.a.zhang@intel.com","username":"leizhang"},"change_message_id":"139834e87b1c5abf0237e285eaa9a0c8c1a953a5","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def publish(self, item):"},{"line_number":25,"context_line":"        LOG.info(_LI("},{"line_number":26,"context_line":"            \u0027Published notification: %(event_type)s_%(doc_id)s %(doc)s\u0027) % {"},{"line_number":27,"context_line":"                \u0027event_type\u0027: item.event_type,"},{"line_number":28,"context_line":"                \u0027doc_id\u0027: item.doc_id,"},{"line_number":29,"context_line":"                \u0027doc\u0027: getattr(item, \u0027doc\u0027, None)})"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5201f7_7e2c9d02","line":26,"range":{"start_line":26,"start_character":50,"end_line":26,"end_character":52},"in_reply_to":"ba5201f7_83549e21","updated":"2017-01-04 08:57:41.000000000","message":"Done","commit_id":"b364b444e2e29d7aef826d91a4d784f22dd7fa29"}],"searchlight/transformer/__init__.py":[{"author":{"_account_id":14680,"name":"Rick Aulino","email":"rick.aulino@hpe.com","username":"ricka"},"change_message_id":"4e43748066e913406442d2fd7725c742ad1b1174","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        meta[key] \u003d value"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"class BaseEvent(object):"},{"line_number":75,"context_line":"    \"\"\""},{"line_number":76,"context_line":"    Base class to store notification and resource info"},{"line_number":77,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"fa6399be_153bc3ec","line":74,"updated":"2016-10-11 02:41:38.000000000","message":"Is there a reason to have the Event classes in the same file as the transformers? Since events span both transformers and publishers, it seems to make sense to separate them out into their own file.","commit_id":"361abf553e26a1426599e5b062b9c9b855a08216"},{"author":{"_account_id":14680,"name":"Rick Aulino","email":"rick.aulino@hpe.com","username":"ricka"},"change_message_id":"4e43748066e913406442d2fd7725c742ad1b1174","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        \"\"\""},{"line_number":110,"context_line":"        doc \u003d kwargs.pop(\u0027doc\u0027)"},{"line_number":111,"context_line":"        super(IndexEvent, self).__init__(*args, **kwargs)"},{"line_number":112,"context_line":"        self.doc \u003d doc"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"class DeleteEvent(BaseEvent):"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa6399be_75ff9f34","line":112,"updated":"2016-10-11 02:41:38.000000000","message":"Nit: I don\u0027t know if we want to be consistent. Sometimes we pop(), call super() then add to self. Other times we pop(), add to self then call super().","commit_id":"361abf553e26a1426599e5b062b9c9b855a08216"}],"setup.cfg":[{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"b20562e072d5a83df43a3ef54bbf3b73a96b7b98","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    os_swift_account \u003d searchlight.elasticsearch.plugins.swift.accounts:AccountIndex"},{"line_number":49,"context_line":"    os_swift_container \u003d searchlight.elasticsearch.plugins.swift.containers:ContainerIndex"},{"line_number":50,"context_line":"    os_swift_object \u003d searchlight.elasticsearch.plugins.swift.objects:ObjectIndex"},{"line_number":51,"context_line":"searchlight.publisher \u003d "},{"line_number":52,"context_line":"    log_publisher \u003d searchlight.publisher.log.LogPublisher"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"[build_sphinx]"}],"source_content_type":"text/x-ttcn-cfg","patch_set":7,"id":"ba5201f7_438556ab","line":51,"range":{"start_line":51,"start_character":23,"end_line":51,"end_character":24},"updated":"2017-01-03 19:50:51.000000000","message":"whitespace","commit_id":"b364b444e2e29d7aef826d91a4d784f22dd7fa29"},{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"b20562e072d5a83df43a3ef54bbf3b73a96b7b98","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    os_swift_container \u003d searchlight.elasticsearch.plugins.swift.containers:ContainerIndex"},{"line_number":50,"context_line":"    os_swift_object \u003d searchlight.elasticsearch.plugins.swift.objects:ObjectIndex"},{"line_number":51,"context_line":"searchlight.publisher \u003d "},{"line_number":52,"context_line":"    log_publisher \u003d searchlight.publisher.log.LogPublisher"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"[build_sphinx]"},{"line_number":55,"context_line":"all_files \u003d 1"}],"source_content_type":"text/x-ttcn-cfg","patch_set":7,"id":"ba5201f7_e3b64a89","line":52,"range":{"start_line":52,"start_character":45,"end_line":52,"end_character":46},"updated":"2017-01-03 19:50:51.000000000","message":"Need colon not dot between module and class name - searchlight.publisher.log:LogPublisher","commit_id":"b364b444e2e29d7aef826d91a4d784f22dd7fa29"}]}
