)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"8ba36abd1995e7e68c3e357a13e2cb88506f6d81","unresolved":false,"context_lines":[{"line_number":12,"context_line":"add)."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I9d2b80e27eaf817cf561d28e067985fee7fe568d"},{"line_number":15,"context_line":"Implements: blueprint-neutron-security-group-plugin"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"7aa08908_a38441b1","line":15,"updated":"2016-06-15 22:14:11.000000000","message":"add a space between blueprint and neutron-security-group-plugin.\ne.g.\n\nImplements: blueprint neutron-security-group-plugin\n\nIt needs that for jenkins to pick it up and add to launchpad automatically.","commit_id":"862efcddc8da25ae28f43c8a2d5d7c15d43854b6"}],"etc/policy.json":[{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"99df17d13052d1fd4379e82125f8579a159b37cc","unresolved":false,"context_lines":[{"line_number":17,"context_line":"    \"resource:OS::Neutron::Net:allow\": \"\","},{"line_number":18,"context_line":"    \"resource:OS::Neutron::Port:allow\": \"\","},{"line_number":19,"context_line":"    \"resource:OS::Neutron::Subnet:allow\": \"\","},{"line_number":20,"context_line":"    \"resource:OS::Neutron::Router:allow\": \"\""},{"line_number":21,"context_line":"    \"resource:OS::Neutron::SecurityGroup:allow\": \"\","},{"line_number":22,"context_line":"}"}],"source_content_type":"application/json","patch_set":5,"id":"5a9d85d2_19030144","line":20,"range":{"start_line":20,"start_character":42,"end_line":20,"end_character":44},"updated":"2016-06-20 20:09:36.000000000","message":"Missing comma","commit_id":"9c5ea19d6a75cd20e3423a73fcaa4faee8f6ffc1"},{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"99df17d13052d1fd4379e82125f8579a159b37cc","unresolved":false,"context_lines":[{"line_number":18,"context_line":"    \"resource:OS::Neutron::Port:allow\": \"\","},{"line_number":19,"context_line":"    \"resource:OS::Neutron::Subnet:allow\": \"\","},{"line_number":20,"context_line":"    \"resource:OS::Neutron::Router:allow\": \"\""},{"line_number":21,"context_line":"    \"resource:OS::Neutron::SecurityGroup:allow\": \"\","},{"line_number":22,"context_line":"}"}],"source_content_type":"application/json","patch_set":5,"id":"5a9d85d2_59e629b5","line":21,"range":{"start_line":21,"start_character":49,"end_line":21,"end_character":52},"updated":"2016-06-20 20:09:36.000000000","message":"Extraneous comma","commit_id":"9c5ea19d6a75cd20e3423a73fcaa4faee8f6ffc1"}],"searchlight/common/resource_types.py":[{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"88f712668e78cf9804cfb300575331bb8b74bcd9","unresolved":false,"context_lines":[{"line_number":27,"context_line":"NEUTRON_SUBNET \u003d \"OS::Neutron::Subnet\""},{"line_number":28,"context_line":"NEUTRON_ROUTER \u003d \"OS::Neutron::Router\""},{"line_number":29,"context_line":"NEUTRON_SUBNET_POOL \u003d \"OS::Neutron::SubnetPool\""},{"line_number":30,"context_line":"NEUTRON_SECURITY_GROUP \u003d \"OS::Neutron::Security_Group\""},{"line_number":31,"context_line":"NEUTRON_SECURITY_GROUP_RULE \u003d \"OS::Neutron::Security_Group_Rule\""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"NOVA_SERVER \u003d \"OS::Nova::Server\""}],"source_content_type":"text/x-python","patch_set":2,"id":"7aa08908_e89ca5c1","line":30,"updated":"2016-06-14 20:53:47.000000000","message":"We don\u0027t use underscores to separate.\n\nThis should match Heat: http://docs.openstack.org/developer/heat/template_guide/openstack.html#OS::Neutron::SecurityGroup\n\nAnd Heat doesn\u0027t have them separated.","commit_id":"862efcddc8da25ae28f43c8a2d5d7c15d43854b6"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"adc3025565e58ea12c9ef16827ace515ade219a6","unresolved":false,"context_lines":[{"line_number":28,"context_line":"NEUTRON_ROUTER \u003d \"OS::Neutron::Router\""},{"line_number":29,"context_line":"NEUTRON_SUBNET_POOL \u003d \"OS::Neutron::SubnetPool\""},{"line_number":30,"context_line":"NEUTRON_SECURITY_GROUP \u003d \"OS::Neutron::SecurityGroup\""},{"line_number":31,"context_line":"NEUTRON_SECURITY_GROUP_RULE \u003d \"OS::Neutron::SecurityGroupRule\""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"NOVA_SERVER \u003d \"OS::Nova::Server\""},{"line_number":34,"context_line":"NOVA_HYPERVISOR \u003d \"OS::Nova::Hypervisor\""}],"source_content_type":"text/x-python","patch_set":9,"id":"3aaa91ec_9712eab2","line":31,"updated":"2016-06-28 23:57:38.000000000","message":"I think we can / should get rid of this.  The only place this is used is in the meta for security group:\n\n                \"security_group_rules.id\": {\n                    \"resource_type\": resource_types.NEUTRON_SECURITY_GROUP_RULE\n                },\n\nThis is like a self-reference, not an external reference.\n\nAnd there isn\u0027t any way for an API call back to find the security group rule based on the id e.g.\n\n    \"type\": \"OS::Neutron::SecurityGroupRule\",\n      \"query\": {\n        \"match_all\": {}\n      },\n\n\nThe result would be:\n\n400 Bad Request\n\nResource type \u0027OS::Neutron::SecurityGroupRule\u0027 is not in the list of enabled plugins","commit_id":"63929602ef478c656af137323947df6061a2b4a4"},{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"2ae67da789170054e81cae0e93150e5d644abb36","unresolved":false,"context_lines":[{"line_number":28,"context_line":"NEUTRON_ROUTER \u003d \"OS::Neutron::Router\""},{"line_number":29,"context_line":"NEUTRON_SUBNET_POOL \u003d \"OS::Neutron::SubnetPool\""},{"line_number":30,"context_line":"NEUTRON_SECURITY_GROUP \u003d \"OS::Neutron::SecurityGroup\""},{"line_number":31,"context_line":"NEUTRON_SECURITY_GROUP_RULE \u003d \"OS::Neutron::SecurityGroupRule\""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"NOVA_SERVER \u003d \"OS::Nova::Server\""},{"line_number":34,"context_line":"NOVA_HYPERVISOR \u003d \"OS::Nova::Hypervisor\""}],"source_content_type":"text/x-python","patch_set":9,"id":"3aaa91ec_ea0a0078","line":31,"in_reply_to":"3aaa91ec_9712eab2","updated":"2016-06-30 16:53:10.000000000","message":"I think this could go both ways. The same point is true of other resources too (keystone projects, or anything you haven\u0027t enabled a plugin for). Sec group rules ARE entities as far as neutron is concerned; it is certainly questionable how useful they are to reference on their own. I\u0027d be ok with removing them on the basis of them not being useful, but not because we don\u0027t support them as a type.","commit_id":"63929602ef478c656af137323947df6061a2b4a4"},{"author":{"_account_id":14680,"name":"Rick Aulino","email":"rick.aulino@hpe.com","username":"ricka"},"change_message_id":"105aba4d7c1916ab4a63843069e4464785fd1a16","unresolved":false,"context_lines":[{"line_number":28,"context_line":"NEUTRON_ROUTER \u003d \"OS::Neutron::Router\""},{"line_number":29,"context_line":"NEUTRON_SUBNET_POOL \u003d \"OS::Neutron::SubnetPool\""},{"line_number":30,"context_line":"NEUTRON_SECURITY_GROUP \u003d \"OS::Neutron::SecurityGroup\""},{"line_number":31,"context_line":"NEUTRON_SECURITY_GROUP_RULE \u003d \"OS::Neutron::SecurityGroupRule\""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"NOVA_SERVER \u003d \"OS::Nova::Server\""},{"line_number":34,"context_line":"NOVA_HYPERVISOR \u003d \"OS::Nova::Hypervisor\""}],"source_content_type":"text/x-python","patch_set":9,"id":"3aaa91ec_6d14609f","line":31,"in_reply_to":"3aaa91ec_ea0a0078","updated":"2016-06-30 20:11:29.000000000","message":"I\u0027ll remove it. I was mimicking the example of NEUTRON_SUBNET_POOL above.","commit_id":"63929602ef478c656af137323947df6061a2b4a4"}],"searchlight/elasticsearch/plugins/helper.py":[{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"adc3025565e58ea12c9ef16827ace515ade219a6","unresolved":false,"context_lines":[{"line_number":467,"context_line":"           \""},{"line_number":468,"context_line":"        \"\"\""},{"line_number":469,"context_line":"        # Set up query for accessing the \u0027id\u0027 field."},{"line_number":470,"context_line":"        body \u003d {\"query\": {\"match\": {\"id\": id}}}"},{"line_number":471,"context_line":"        if version:"},{"line_number":472,"context_line":"            body[\u0027version\u0027] \u003d True"},{"line_number":473,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":9,"id":"3aaa91ec_17039a43","line":470,"updated":"2016-06-28 23:57:38.000000000","message":"Typically our IDs are not analyzed, so shouldn\u0027t this be a term query rather than a match query? Also, this is doing an exact match right?","commit_id":"63929602ef478c656af137323947df6061a2b4a4"},{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"2ae67da789170054e81cae0e93150e5d644abb36","unresolved":false,"context_lines":[{"line_number":467,"context_line":"           \""},{"line_number":468,"context_line":"        \"\"\""},{"line_number":469,"context_line":"        # Set up query for accessing the \u0027id\u0027 field."},{"line_number":470,"context_line":"        body \u003d {\"query\": {\"match\": {\"id\": id}}}"},{"line_number":471,"context_line":"        if version:"},{"line_number":472,"context_line":"            body[\u0027version\u0027] \u003d True"},{"line_number":473,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":9,"id":"3aaa91ec_cab74483","line":470,"in_reply_to":"3aaa91ec_17039a43","updated":"2016-06-30 16:53:10.000000000","message":"Yes, term query.","commit_id":"63929602ef478c656af137323947df6061a2b4a4"},{"author":{"_account_id":14680,"name":"Rick Aulino","email":"rick.aulino@hpe.com","username":"ricka"},"change_message_id":"105aba4d7c1916ab4a63843069e4464785fd1a16","unresolved":false,"context_lines":[{"line_number":467,"context_line":"           \""},{"line_number":468,"context_line":"        \"\"\""},{"line_number":469,"context_line":"        # Set up query for accessing the \u0027id\u0027 field."},{"line_number":470,"context_line":"        body \u003d {\"query\": {\"match\": {\"id\": id}}}"},{"line_number":471,"context_line":"        if version:"},{"line_number":472,"context_line":"            body[\u0027version\u0027] \u003d True"},{"line_number":473,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":9,"id":"3aaa91ec_ed04d04a","line":470,"in_reply_to":"3aaa91ec_cab74483","updated":"2016-06-30 20:11:29.000000000","message":"Fixed.","commit_id":"63929602ef478c656af137323947df6061a2b4a4"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"adc3025565e58ea12c9ef16827ace515ade219a6","unresolved":false,"context_lines":[{"line_number":480,"context_line":"                {\u0027id\u0027: id, \u0027exc\u0027: exc})"},{"line_number":481,"context_line":"            return {}"},{"line_number":482,"context_line":""},{"line_number":483,"context_line":"    def get_doc_by_nested_field(self, path, field, id, version\u003dFalse):"},{"line_number":484,"context_line":"        \"\"\"Query ElasticSearch based on a nested field. The caller will"},{"line_number":485,"context_line":"           need to specify the path of the nested field as well as the"},{"line_number":486,"context_line":"           field itself. We will include the \u0027version\u0027 field if commanded"}],"source_content_type":"text/x-python","patch_set":9,"id":"3aaa91ec_b7b9e67b","line":483,"updated":"2016-06-28 23:57:38.000000000","message":"This appears to require an id as input.  so, the function name probably should say get_doc_by_nested_field_id.\n\nIf this is just general purpose, then this function name is fine and the param should change from \u0027id\u0027 to \u0027value\u0027.","commit_id":"63929602ef478c656af137323947df6061a2b4a4"},{"author":{"_account_id":14680,"name":"Rick Aulino","email":"rick.aulino@hpe.com","username":"ricka"},"change_message_id":"105aba4d7c1916ab4a63843069e4464785fd1a16","unresolved":false,"context_lines":[{"line_number":480,"context_line":"                {\u0027id\u0027: id, \u0027exc\u0027: exc})"},{"line_number":481,"context_line":"            return {}"},{"line_number":482,"context_line":""},{"line_number":483,"context_line":"    def get_doc_by_nested_field(self, path, field, id, version\u003dFalse):"},{"line_number":484,"context_line":"        \"\"\"Query ElasticSearch based on a nested field. The caller will"},{"line_number":485,"context_line":"           need to specify the path of the nested field as well as the"},{"line_number":486,"context_line":"           field itself. We will include the \u0027version\u0027 field if commanded"}],"source_content_type":"text/x-python","patch_set":9,"id":"3aaa91ec_cd7474d0","line":483,"in_reply_to":"3aaa91ec_a514a99f","updated":"2016-06-30 20:11:29.000000000","message":"It\u0027s an arbitrary field. It wasn\u0027t in the original version, which is why the parameter was still labelled \"id\". I feel that these routines should be kept separate. It feels that trying to derive the ES query based on nested fields or not starts getting clumsy and easy to make mistakes when modifying in the future.","commit_id":"63929602ef478c656af137323947df6061a2b4a4"},{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"2ae67da789170054e81cae0e93150e5d644abb36","unresolved":false,"context_lines":[{"line_number":480,"context_line":"                {\u0027id\u0027: id, \u0027exc\u0027: exc})"},{"line_number":481,"context_line":"            return {}"},{"line_number":482,"context_line":""},{"line_number":483,"context_line":"    def get_doc_by_nested_field(self, path, field, id, version\u003dFalse):"},{"line_number":484,"context_line":"        \"\"\"Query ElasticSearch based on a nested field. The caller will"},{"line_number":485,"context_line":"           need to specify the path of the nested field as well as the"},{"line_number":486,"context_line":"           field itself. We will include the \u0027version\u0027 field if commanded"}],"source_content_type":"text/x-python","patch_set":9,"id":"3aaa91ec_a514a99f","line":483,"in_reply_to":"3aaa91ec_b7b9e67b","updated":"2016-06-30 16:53:10.000000000","message":"Looks like it is an arbitrary field, so value is probably better. Also could think about combining this with the function above (add nested_path, nested_field as optional arguments)","commit_id":"63929602ef478c656af137323947df6061a2b4a4"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"adc3025565e58ea12c9ef16827ace515ade219a6","unresolved":false,"context_lines":[{"line_number":489,"context_line":"        # Set up query for accessing a nested field."},{"line_number":490,"context_line":"        nested_field \u003d path + \".\" + field"},{"line_number":491,"context_line":"        body \u003d {\"query\": {\"nested\": {"},{"line_number":492,"context_line":"                \"path\": path, \"query\": {\"match\": {nested_field: id}}}}}"},{"line_number":493,"context_line":"        if version:"},{"line_number":494,"context_line":"            body[\u0027version\u0027] \u003d True"},{"line_number":495,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":9,"id":"3aaa91ec_77665e2a","line":492,"range":{"start_line":492,"start_character":40,"end_line":492,"end_character":47},"updated":"2016-06-28 23:57:38.000000000","message":"Same comment as above regarding IDs and match vs term query (depending on whether or not your intent is to only do search on ID.","commit_id":"63929602ef478c656af137323947df6061a2b4a4"},{"author":{"_account_id":14680,"name":"Rick Aulino","email":"rick.aulino@hpe.com","username":"ricka"},"change_message_id":"105aba4d7c1916ab4a63843069e4464785fd1a16","unresolved":false,"context_lines":[{"line_number":489,"context_line":"        # Set up query for accessing a nested field."},{"line_number":490,"context_line":"        nested_field \u003d path + \".\" + field"},{"line_number":491,"context_line":"        body \u003d {\"query\": {\"nested\": {"},{"line_number":492,"context_line":"                \"path\": path, \"query\": {\"match\": {nested_field: id}}}}}"},{"line_number":493,"context_line":"        if version:"},{"line_number":494,"context_line":"            body[\u0027version\u0027] \u003d True"},{"line_number":495,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":9,"id":"3aaa91ec_ad3928f4","line":492,"range":{"start_line":492,"start_character":40,"end_line":492,"end_character":47},"in_reply_to":"3aaa91ec_77665e2a","updated":"2016-06-30 20:11:29.000000000","message":"Same fix applied!","commit_id":"63929602ef478c656af137323947df6061a2b4a4"},{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"2ae67da789170054e81cae0e93150e5d644abb36","unresolved":false,"context_lines":[{"line_number":493,"context_line":"        if version:"},{"line_number":494,"context_line":"            body[\u0027version\u0027] \u003d True"},{"line_number":495,"context_line":"        try:"},{"line_number":496,"context_line":"            return self.engine.search(index\u003dself.alias_name,"},{"line_number":497,"context_line":"                                      doc_type\u003dself.document_type,"},{"line_number":498,"context_line":"                                      body\u003dbody, ignore_unavailable\u003dTrue)"},{"line_number":499,"context_line":"        except Exception as exc:"}],"source_content_type":"text/x-python","patch_set":9,"id":"3aaa91ec_85f36d72","line":496,"range":{"start_line":496,"start_character":18,"end_line":496,"end_character":19},"updated":"2016-06-30 16:53:10.000000000","message":"If this is expected to get a single document, it would be nicer to make this function handle that logic rather than everyone who uses it have to do `if [\u0027hit\u0027] then doc \u003d [\u0027hits\u0027][\u0027hits\u0027][0]`","commit_id":"63929602ef478c656af137323947df6061a2b4a4"},{"author":{"_account_id":14680,"name":"Rick Aulino","email":"rick.aulino@hpe.com","username":"ricka"},"change_message_id":"105aba4d7c1916ab4a63843069e4464785fd1a16","unresolved":false,"context_lines":[{"line_number":493,"context_line":"        if version:"},{"line_number":494,"context_line":"            body[\u0027version\u0027] \u003d True"},{"line_number":495,"context_line":"        try:"},{"line_number":496,"context_line":"            return self.engine.search(index\u003dself.alias_name,"},{"line_number":497,"context_line":"                                      doc_type\u003dself.document_type,"},{"line_number":498,"context_line":"                                      body\u003dbody, ignore_unavailable\u003dTrue)"},{"line_number":499,"context_line":"        except Exception as exc:"}],"source_content_type":"text/x-python","patch_set":9,"id":"3aaa91ec_900a7f1e","line":496,"range":{"start_line":496,"start_character":18,"end_line":496,"end_character":19},"in_reply_to":"3aaa91ec_85f36d72","updated":"2016-06-30 20:11:29.000000000","message":"The current usage is for a single document, but the routine is meant to be more general.","commit_id":"63929602ef478c656af137323947df6061a2b4a4"},{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"18c45a46c8766fe55596b61c101e758481264f8e","unresolved":false,"context_lines":[{"line_number":461,"context_line":"                          {\u0027a\u0027: self.alias_name})"},{"line_number":462,"context_line":"                self._index_alias_multiple_indexes_bulk(actions\u003dactions)"},{"line_number":463,"context_line":""},{"line_number":464,"context_line":"    def get_doc_by_id(self, id, version\u003dFalse):"},{"line_number":465,"context_line":"        \"\"\"Query ElasticSearch for a document by id. We will include the"},{"line_number":466,"context_line":"           \u0027version\u0027 field if commanded as such by the caller."},{"line_number":467,"context_line":"           \""}],"source_content_type":"text/x-python","patch_set":11,"id":"1aa78d24_f5b19f90","line":464,"range":{"start_line":464,"start_character":8,"end_line":464,"end_character":21},"updated":"2016-07-05 17:19:00.000000000","message":"I\u0027m having a brain fart I think; is there a reason this isn\u0027t using engine.get instead of running a search? We know the ID, and we know whether there\u0027s admin/user separation. While it doesn\u0027t matter too much in the one case it\u0027s being used, this will return either the admin or the user doc at random and even then only if it\u0027s been indexed already. I\u0027m still slightly baffled we don\u0027t already have this function since I can remember writing it, but I can\u0027t find it anywhere.","commit_id":"c0178fab87600185413eb82af7b835b3cc8fd2c6"},{"author":{"_account_id":14680,"name":"Rick Aulino","email":"rick.aulino@hpe.com","username":"ricka"},"change_message_id":"85fcfdbe3be482b95546d645116bf59a6992e229","unresolved":false,"context_lines":[{"line_number":461,"context_line":"                          {\u0027a\u0027: self.alias_name})"},{"line_number":462,"context_line":"                self._index_alias_multiple_indexes_bulk(actions\u003dactions)"},{"line_number":463,"context_line":""},{"line_number":464,"context_line":"    def get_doc_by_id(self, id, version\u003dFalse):"},{"line_number":465,"context_line":"        \"\"\"Query ElasticSearch for a document by id. We will include the"},{"line_number":466,"context_line":"           \u0027version\u0027 field if commanded as such by the caller."},{"line_number":467,"context_line":"           \""}],"source_content_type":"text/x-python","patch_set":11,"id":"1aa78d24_7650c60b","line":464,"range":{"start_line":464,"start_character":8,"end_line":464,"end_character":21},"in_reply_to":"1aa78d24_f5b19f90","updated":"2016-07-06 22:25:13.000000000","message":"No real reason. Since I was using search() inside of get_doc_by_nested_field() I ended up using search() here also. I can change it if needed. This routine is also meant to be used for the security groups, where there are no ADMIN only fields. I can either add logic here to make it more general or I can rename/document to make it more clear what the intended use/limitations of the routine are. I\u0027d prefer the latter action and leave it specific.","commit_id":"c0178fab87600185413eb82af7b835b3cc8fd2c6"},{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"18c45a46c8766fe55596b61c101e758481264f8e","unresolved":false,"context_lines":[{"line_number":480,"context_line":"                {\u0027id\u0027: id, \u0027exc\u0027: exc})"},{"line_number":481,"context_line":"            return {}"},{"line_number":482,"context_line":""},{"line_number":483,"context_line":"    def get_doc_by_nested_field(self, path, field, value, version\u003dFalse):"},{"line_number":484,"context_line":"        \"\"\"Query ElasticSearch based on a nested field. The caller will"},{"line_number":485,"context_line":"           need to specify the path of the nested field as well as the"},{"line_number":486,"context_line":"           field itself. We will include the \u0027version\u0027 field if commanded"}],"source_content_type":"text/x-python","patch_set":11,"id":"1aa78d24_19e90515","line":483,"range":{"start_line":483,"start_character":8,"end_line":483,"end_character":31},"updated":"2016-07-05 17:19:00.000000000","message":"As per previous comments, if the decision is to make this a general \"find documents by nested term query\" it shouldn\u0027t imply that it will only return one document (\u0027get_doc\u0027). The other functions in helper.py abstract the elasticsearch details away; this is a very thin wrapper around running a fairly specific query and i think the distinction is useful.","commit_id":"c0178fab87600185413eb82af7b835b3cc8fd2c6"}],"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":"e4ae4ecc1933bf1dff6a6d608d16836e26808ca9","unresolved":false,"context_lines":[{"line_number":234,"context_line":""},{"line_number":235,"context_line":"        # Version doesn\u0027t really make a huge amount of security groups"},{"line_number":236,"context_line":"        # but we need to normalize the fields."},{"line_number":237,"context_line":"        sec_id \u003d serialize_security_group(payload[\u0027security_group\u0027])"},{"line_number":238,"context_line":"        version \u003d self.get_version(sec_id, timestamp)"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"        self.index_helper.save_document(sec_id, version\u003dversion)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7aa08908_4ab0e28b","line":237,"range":{"start_line":237,"start_character":8,"end_line":237,"end_character":14},"updated":"2016-06-10 17:58:59.000000000","message":"For readability reusing variable names like this isn\u0027t great; took me a few seconds to gather that sec_id wasn\u0027t in fact an id","commit_id":"2c949bc7c756fac0e5a877227445b9100f4d2407"},{"author":{"_account_id":14680,"name":"Rick Aulino","email":"rick.aulino@hpe.com","username":"ricka"},"change_message_id":"91eb4498efd65b66a87ff735e002b84cc703ac07","unresolved":false,"context_lines":[{"line_number":234,"context_line":""},{"line_number":235,"context_line":"        # Version doesn\u0027t really make a huge amount of security groups"},{"line_number":236,"context_line":"        # but we need to normalize the fields."},{"line_number":237,"context_line":"        sec_id \u003d serialize_security_group(payload[\u0027security_group\u0027])"},{"line_number":238,"context_line":"        version \u003d self.get_version(sec_id, timestamp)"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"        self.index_helper.save_document(sec_id, version\u003dversion)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7aa08908_d0d552e5","line":237,"range":{"start_line":237,"start_character":8,"end_line":237,"end_character":14},"in_reply_to":"7aa08908_4ab0e28b","updated":"2016-06-13 20:53:58.000000000","message":"Yes, needs to be something different.","commit_id":"2c949bc7c756fac0e5a877227445b9100f4d2407"},{"author":{"_account_id":16150,"name":"Lei Zhang","email":"lei.a.zhang@intel.com","username":"leizhang"},"change_message_id":"f93bf938addf86af92f299d9965f86a1ad111270","unresolved":false,"context_lines":[{"line_number":211,"context_line":"    def get_event_handlers(self):"},{"line_number":212,"context_line":"        return {"},{"line_number":213,"context_line":"            \u0027security_group.create.end\u0027: self.create_or_update_group,"},{"line_number":214,"context_line":"            \u0027security_group_rule.create.end\u0027: self.create_or_update_rule,"},{"line_number":215,"context_line":"            \u0027security_group.delete.end\u0027: self.delete,"},{"line_number":216,"context_line":"        }"},{"line_number":217,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7aa08908_90a45fa6","line":214,"updated":"2016-06-14 06:07:22.000000000","message":"Do we need to catch rule delete notification, assuming it exists","commit_id":"862efcddc8da25ae28f43c8a2d5d7c15d43854b6"},{"author":{"_account_id":16150,"name":"Lei Zhang","email":"lei.a.zhang@intel.com","username":"leizhang"},"change_message_id":"f93bf938addf86af92f299d9965f86a1ad111270","unresolved":false,"context_lines":[{"line_number":237,"context_line":"        sec_rule \u003d serialize_security_group(payload[\u0027security_group_rule\u0027])"},{"line_number":238,"context_line":"        version \u003d self.get_version(sec_rule, timestamp)"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"        self.index_helper.save_document(sec_rule, version\u003dversion)"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"    def delete(self, payload, timestamp):"},{"line_number":243,"context_line":"        sec_id \u003d payload[\u0027security_group_id\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"7aa08908_6193e35b","line":240,"updated":"2016-06-14 06:07:22.000000000","message":"Update to nested object requires reindexing the whole document or scripted update.","commit_id":"862efcddc8da25ae28f43c8a2d5d7c15d43854b6"},{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"99df17d13052d1fd4379e82125f8579a159b37cc","unresolved":false,"context_lines":[{"line_number":241,"context_line":"                {\u0027sec_id\u0027: sec_id, \u0027exc\u0027: exc})"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"    # TODO(ricka): Move into elasticsearch/plugin/utils.py?"},{"line_number":244,"context_line":"    def _get_es_doc_by_id(self, field, id):"},{"line_number":245,"context_line":"        \"\"\"Query ElasticSearch for a security_group document. We will base our"},{"line_number":246,"context_line":"           query on a nested field within \"security_group_rules\". Depending on"},{"line_number":247,"context_line":"           the action (add vs delete) we will need to query a different nested"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a9d85d2_649ee357","line":244,"range":{"start_line":244,"start_character":8,"end_line":244,"end_character":25},"updated":"2016-06-20 20:09:36.000000000","message":"I thought there was already a patch with a \u0027get document from search\u0027 but i can\u0027t find it. In any case, I\u0027d be fine with generalising this and moving it into helpers, although i would prefer to file a BP with neutron to ask that the sec group ID be included in rule delete notifications because that would be infinitely preferable.","commit_id":"9c5ea19d6a75cd20e3423a73fcaa4faee8f6ffc1"},{"author":{"_account_id":14680,"name":"Rick Aulino","email":"rick.aulino@hpe.com","username":"ricka"},"change_message_id":"08c7a042d35211c252c97f763f266e771b895790","unresolved":false,"context_lines":[{"line_number":241,"context_line":"                {\u0027sec_id\u0027: sec_id, \u0027exc\u0027: exc})"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"    # TODO(ricka): Move into elasticsearch/plugin/utils.py?"},{"line_number":244,"context_line":"    def _get_es_doc_by_id(self, field, id):"},{"line_number":245,"context_line":"        \"\"\"Query ElasticSearch for a security_group document. We will base our"},{"line_number":246,"context_line":"           query on a nested field within \"security_group_rules\". Depending on"},{"line_number":247,"context_line":"           the action (add vs delete) we will need to query a different nested"}],"source_content_type":"text/x-python","patch_set":5,"id":"3aaa91ec_47514d62","line":244,"range":{"start_line":244,"start_character":8,"end_line":244,"end_character":25},"in_reply_to":"5a9d85d2_649ee357","updated":"2016-06-22 03:27:14.000000000","message":"I thought there was a document search also. In fact I thought I wrote it :) But I didn\u0027t find one when I was writing this patch.\n\nI agree with your suggestion about submitting a Neutron BP. I\u0027ll look into submitting it.","commit_id":"9c5ea19d6a75cd20e3423a73fcaa4faee8f6ffc1"},{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"99df17d13052d1fd4379e82125f8579a159b37cc","unresolved":false,"context_lines":[{"line_number":256,"context_line":"                \"path\": \"security_group_rules\","},{"line_number":257,"context_line":"                \"query\": {\"match\": {nested_field: id}}}}}"},{"line_number":258,"context_line":"        try:"},{"line_number":259,"context_line":"            return es_engine.search(index\u003dself.index_helper.alias_name,"},{"line_number":260,"context_line":"                                    doc_type\u003dself.index_helper.document_type,"},{"line_number":261,"context_line":"                                    body\u003dbody, ignore_unavailable\u003dTrue)"},{"line_number":262,"context_line":"        except Exception as exc:"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a9d85d2_c4f8777f","line":259,"range":{"start_line":259,"start_character":29,"end_line":259,"end_character":35},"updated":"2016-06-20 20:09:36.000000000","message":"Just be aware that attempting to retrieve specific documents for update via search is dangerous because it is very susceptible to indexer delays. For delete rule there\u0027s currently no option but if we can get sec group ID added to notifications that\u0027d be much better.","commit_id":"9c5ea19d6a75cd20e3423a73fcaa4faee8f6ffc1"},{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"99df17d13052d1fd4379e82125f8579a159b37cc","unresolved":false,"context_lines":[{"line_number":270,"context_line":"        LOG.debug(\"Updating security group rule information for %s\", group_id)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"        # Read, modify, write of an existing security group."},{"line_number":273,"context_line":"        doc \u003d self._get_es_doc_by_id(\"security_group_id\", group_id)"},{"line_number":274,"context_line":"        body \u003d doc[\u0027hits\u0027][\u0027hits\u0027][0][\u0027_source\u0027]"},{"line_number":275,"context_line":"        if not body or \u0027security_group_rules\u0027 not in body:"},{"line_number":276,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a9d85d2_e4ef73ae","line":273,"range":{"start_line":273,"start_character":36,"end_line":273,"end_character":38},"updated":"2016-06-20 20:09:36.000000000","message":"This doesn\u0027t need to use _get_es_doc_by_id; you already have the group id so can request it directly.","commit_id":"9c5ea19d6a75cd20e3423a73fcaa4faee8f6ffc1"},{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"99df17d13052d1fd4379e82125f8579a159b37cc","unresolved":false,"context_lines":[{"line_number":275,"context_line":"        if not body or \u0027security_group_rules\u0027 not in body:"},{"line_number":276,"context_line":"            return"},{"line_number":277,"context_line":"        body[\u0027security_group_rules\u0027].append(payload[\u0027security_group_rule\u0027])"},{"line_number":278,"context_line":"        self.index_helper.save_document(body)"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"    def delete_rule(self, payload, timestamp):"},{"line_number":281,"context_line":"        rule_id \u003d payload[\u0027security_group_rule_id\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a9d85d2_645f0373","line":278,"range":{"start_line":278,"start_character":40,"end_line":278,"end_character":44},"updated":"2016-06-20 20:09:36.000000000","message":"Use the existing version + 1, which will provide some transactional protection. If there\u0027s a legit update to the group, the +1 (which represents a millisecond) shouldn\u0027t interfere.","commit_id":"9c5ea19d6a75cd20e3423a73fcaa4faee8f6ffc1"},{"author":{"_account_id":14680,"name":"Rick Aulino","email":"rick.aulino@hpe.com","username":"ricka"},"change_message_id":"08c7a042d35211c252c97f763f266e771b895790","unresolved":false,"context_lines":[{"line_number":275,"context_line":"        if not body or \u0027security_group_rules\u0027 not in body:"},{"line_number":276,"context_line":"            return"},{"line_number":277,"context_line":"        body[\u0027security_group_rules\u0027].append(payload[\u0027security_group_rule\u0027])"},{"line_number":278,"context_line":"        self.index_helper.save_document(body)"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"    def delete_rule(self, payload, timestamp):"},{"line_number":281,"context_line":"        rule_id \u003d payload[\u0027security_group_rule_id\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"3aaa91ec_67028940","line":278,"range":{"start_line":278,"start_character":40,"end_line":278,"end_character":44},"in_reply_to":"5a9d85d2_645f0373","updated":"2016-06-22 03:27:14.000000000","message":"Good catch.","commit_id":"9c5ea19d6a75cd20e3423a73fcaa4faee8f6ffc1"},{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"99df17d13052d1fd4379e82125f8579a159b37cc","unresolved":false,"context_lines":[{"line_number":281,"context_line":"        rule_id \u003d payload[\u0027security_group_rule_id\u0027]"},{"line_number":282,"context_line":"        LOG.debug(\"Updating security group rule information for %s\", rule_id)"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"        # Define \u0027field\u0027 to shorten lines below for PEP8 compliance."},{"line_number":285,"context_line":"        field \u003d \u0027security_group_rules\u0027"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"        # Read, modify, write of an existing security group."}],"source_content_type":"text/x-python","patch_set":5,"id":"5a9d85d2_44c76712","line":284,"range":{"start_line":284,"start_character":18,"end_line":284,"end_character":23},"updated":"2016-06-20 20:09:36.000000000","message":"This comment isn\u0027t necessary","commit_id":"9c5ea19d6a75cd20e3423a73fcaa4faee8f6ffc1"},{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"99df17d13052d1fd4379e82125f8579a159b37cc","unresolved":false,"context_lines":[{"line_number":285,"context_line":"        field \u003d \u0027security_group_rules\u0027"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"        # Read, modify, write of an existing security group."},{"line_number":288,"context_line":"        doc \u003d self._get_es_doc_by_id(\"id\", rule_id)"},{"line_number":289,"context_line":"        body \u003d doc[\u0027hits\u0027][\u0027hits\u0027][0][\u0027_source\u0027]"},{"line_number":290,"context_line":"        if not body or field not in body:"},{"line_number":291,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a9d85d2_24685bf5","line":288,"range":{"start_line":288,"start_character":19,"end_line":288,"end_character":36},"updated":"2016-06-20 20:09:36.000000000","message":"See above; let\u0027s try filing a neutron bug","commit_id":"9c5ea19d6a75cd20e3423a73fcaa4faee8f6ffc1"},{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"99df17d13052d1fd4379e82125f8579a159b37cc","unresolved":false,"context_lines":[{"line_number":286,"context_line":""},{"line_number":287,"context_line":"        # Read, modify, write of an existing security group."},{"line_number":288,"context_line":"        doc \u003d self._get_es_doc_by_id(\"id\", rule_id)"},{"line_number":289,"context_line":"        body \u003d doc[\u0027hits\u0027][\u0027hits\u0027][0][\u0027_source\u0027]"},{"line_number":290,"context_line":"        if not body or field not in body:"},{"line_number":291,"context_line":"            return"},{"line_number":292,"context_line":"        for rule in [x for x in body[field] if x[\u0027id\u0027] \u003d\u003d rule_id]:"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a9d85d2_e47e53ad","line":289,"range":{"start_line":289,"start_character":18,"end_line":289,"end_character":20},"updated":"2016-06-20 20:09:36.000000000","message":"This\u0027ll crap out if the search fails","commit_id":"9c5ea19d6a75cd20e3423a73fcaa4faee8f6ffc1"},{"author":{"_account_id":14680,"name":"Rick Aulino","email":"rick.aulino@hpe.com","username":"ricka"},"change_message_id":"08c7a042d35211c252c97f763f266e771b895790","unresolved":false,"context_lines":[{"line_number":286,"context_line":""},{"line_number":287,"context_line":"        # Read, modify, write of an existing security group."},{"line_number":288,"context_line":"        doc \u003d self._get_es_doc_by_id(\"id\", rule_id)"},{"line_number":289,"context_line":"        body \u003d doc[\u0027hits\u0027][\u0027hits\u0027][0][\u0027_source\u0027]"},{"line_number":290,"context_line":"        if not body or field not in body:"},{"line_number":291,"context_line":"            return"},{"line_number":292,"context_line":"        for rule in [x for x in body[field] if x[\u0027id\u0027] \u003d\u003d rule_id]:"}],"source_content_type":"text/x-python","patch_set":5,"id":"3aaa91ec_e562e7d7","line":289,"range":{"start_line":289,"start_character":18,"end_line":289,"end_character":20},"in_reply_to":"5a9d85d2_e47e53ad","updated":"2016-06-22 03:27:14.000000000","message":"Fixed with a check.","commit_id":"9c5ea19d6a75cd20e3423a73fcaa4faee8f6ffc1"},{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"99df17d13052d1fd4379e82125f8579a159b37cc","unresolved":false,"context_lines":[{"line_number":289,"context_line":"        body \u003d doc[\u0027hits\u0027][\u0027hits\u0027][0][\u0027_source\u0027]"},{"line_number":290,"context_line":"        if not body or field not in body:"},{"line_number":291,"context_line":"            return"},{"line_number":292,"context_line":"        for rule in [x for x in body[field] if x[\u0027id\u0027] \u003d\u003d rule_id]:"},{"line_number":293,"context_line":"            body[field].remove(rule)"},{"line_number":294,"context_line":"        self.index_helper.save_document(body)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a9d85d2_3f9b46cb","line":292,"range":{"start_line":292,"start_character":23,"end_line":292,"end_character":26},"updated":"2016-06-20 20:09:36.000000000","message":"Maybe more concise:\n    body[field] \u003d list(filter(lambda r: r[\u0027id\u0027] !\u003d rule_id, body[field]))\n\nThis seems a bit long winded, and the ordering should be the same in either case.","commit_id":"9c5ea19d6a75cd20e3423a73fcaa4faee8f6ffc1"},{"author":{"_account_id":14680,"name":"Rick Aulino","email":"rick.aulino@hpe.com","username":"ricka"},"change_message_id":"08c7a042d35211c252c97f763f266e771b895790","unresolved":false,"context_lines":[{"line_number":289,"context_line":"        body \u003d doc[\u0027hits\u0027][\u0027hits\u0027][0][\u0027_source\u0027]"},{"line_number":290,"context_line":"        if not body or field not in body:"},{"line_number":291,"context_line":"            return"},{"line_number":292,"context_line":"        for rule in [x for x in body[field] if x[\u0027id\u0027] \u003d\u003d rule_id]:"},{"line_number":293,"context_line":"            body[field].remove(rule)"},{"line_number":294,"context_line":"        self.index_helper.save_document(body)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3aaa91ec_b3aae817","line":292,"range":{"start_line":292,"start_character":23,"end_line":292,"end_character":26},"in_reply_to":"5a9d85d2_3f9b46cb","updated":"2016-06-22 03:27:14.000000000","message":"6 of one, half dozen of another. I\u0027ll change it in a blatant attempt at trolling for a \"+2\" :)","commit_id":"9c5ea19d6a75cd20e3423a73fcaa4faee8f6ffc1"},{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"99df17d13052d1fd4379e82125f8579a159b37cc","unresolved":false,"context_lines":[{"line_number":291,"context_line":"            return"},{"line_number":292,"context_line":"        for rule in [x for x in body[field] if x[\u0027id\u0027] \u003d\u003d rule_id]:"},{"line_number":293,"context_line":"            body[field].remove(rule)"},{"line_number":294,"context_line":"        self.index_helper.save_document(body)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a9d85d2_9facfaee","line":294,"range":{"start_line":294,"start_character":40,"end_line":294,"end_character":44},"updated":"2016-06-20 20:09:36.000000000","message":"Same comment wrt versioning.","commit_id":"9c5ea19d6a75cd20e3423a73fcaa4faee8f6ffc1"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"adc3025565e58ea12c9ef16827ace515ade219a6","unresolved":false,"context_lines":[{"line_number":221,"context_line":"        group_name \u003d payload[\u0027security_group\u0027][\u0027name\u0027]"},{"line_number":222,"context_line":"        sec_id \u003d payload[\u0027security_group\u0027][\u0027id\u0027]"},{"line_number":223,"context_line":"        LOG.debug(\"Updating security group information for %s (%s)\","},{"line_number":224,"context_line":"                  group_name, sec_id)"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"        # Version doesn\u0027t really make sense for security groups,"},{"line_number":227,"context_line":"        # but we need to normalize the fields."}],"source_content_type":"text/x-python","patch_set":9,"id":"3aaa91ec_3754d61f","line":224,"updated":"2016-06-28 23:57:38.000000000","message":"When there is more than one string to interpolate, we should be using the same style of interpolation that you use down on 241.\n\nhttp://docs.openstack.org/developer/hacking/#internationalization-i18n-strings","commit_id":"63929602ef478c656af137323947df6061a2b4a4"},{"author":{"_account_id":14680,"name":"Rick Aulino","email":"rick.aulino@hpe.com","username":"ricka"},"change_message_id":"105aba4d7c1916ab4a63843069e4464785fd1a16","unresolved":false,"context_lines":[{"line_number":221,"context_line":"        group_name \u003d payload[\u0027security_group\u0027][\u0027name\u0027]"},{"line_number":222,"context_line":"        sec_id \u003d payload[\u0027security_group\u0027][\u0027id\u0027]"},{"line_number":223,"context_line":"        LOG.debug(\"Updating security group information for %s (%s)\","},{"line_number":224,"context_line":"                  group_name, sec_id)"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"        # Version doesn\u0027t really make sense for security groups,"},{"line_number":227,"context_line":"        # but we need to normalize the fields."}],"source_content_type":"text/x-python","patch_set":9,"id":"3aaa91ec_6dc90026","line":224,"in_reply_to":"3aaa91ec_3754d61f","updated":"2016-06-30 20:11:29.000000000","message":"I thought we were doing that only for strings that are internationalized (i.e. using the _LE() macro). But I\u0027ll go ahead and make the change.","commit_id":"63929602ef478c656af137323947df6061a2b4a4"}],"searchlight/elasticsearch/plugins/neutron/security.py":[{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"e4ae4ecc1933bf1dff6a6d608d16836e26808ca9","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        return {"},{"line_number":43,"context_line":"            \u0027dynamic\u0027: False,"},{"line_number":44,"context_line":"            \u0027properties\u0027: {"},{"line_number":45,"context_line":"                \u0027security_group_rules\u0027: {"},{"line_number":46,"context_line":"                    \u0027type\u0027: \u0027nested\u0027,"},{"line_number":47,"context_line":"                    \u0027properties\u0027: {"},{"line_number":48,"context_line":"                        \u0027remote_group_id\u0027: ordered_string,"}],"source_content_type":"text/x-python","patch_set":1,"id":"7aa08908_8a580a58","line":45,"range":{"start_line":45,"start_character":17,"end_line":45,"end_character":37},"updated":"2016-06-10 17:58:59.000000000","message":"This is ok although bear in mind that updates to nested objects result in re-indexing the entire document, so there\u0027ll be some churn when a group\u0027s created and rules added. I don\u0027t know whether it makes sense for us to use a parent/child relationship for this; that feels like a design decision being influenced by implementation","commit_id":"2c949bc7c756fac0e5a877227445b9100f4d2407"},{"author":{"_account_id":14680,"name":"Rick Aulino","email":"rick.aulino@hpe.com","username":"ricka"},"change_message_id":"91eb4498efd65b66a87ff735e002b84cc703ac07","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        return {"},{"line_number":43,"context_line":"            \u0027dynamic\u0027: False,"},{"line_number":44,"context_line":"            \u0027properties\u0027: {"},{"line_number":45,"context_line":"                \u0027security_group_rules\u0027: {"},{"line_number":46,"context_line":"                    \u0027type\u0027: \u0027nested\u0027,"},{"line_number":47,"context_line":"                    \u0027properties\u0027: {"},{"line_number":48,"context_line":"                        \u0027remote_group_id\u0027: ordered_string,"}],"source_content_type":"text/x-python","patch_set":1,"id":"7aa08908_50004266","line":45,"range":{"start_line":45,"start_character":17,"end_line":45,"end_character":37},"in_reply_to":"7aa08908_8a580a58","updated":"2016-06-13 20:53:58.000000000","message":"Hmm. Good point. Let me look into this.","commit_id":"2c949bc7c756fac0e5a877227445b9100f4d2407"},{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"e4ae4ecc1933bf1dff6a6d608d16836e26808ca9","unresolved":false,"context_lines":[{"line_number":60,"context_line":"                    },"},{"line_number":61,"context_line":"                },"},{"line_number":62,"context_line":"                \u0027id\u0027: string_not_analyzed,"},{"line_number":63,"context_line":"                \u0027tenant_id\u0027: string_not_analyzed,"},{"line_number":64,"context_line":"                \u0027name\u0027: ordered_string,"},{"line_number":65,"context_line":"                \u0027description\u0027: ordered_string,"},{"line_number":66,"context_line":"            },"}],"source_content_type":"text/x-python","patch_set":1,"id":"7aa08908_6a531e3a","line":63,"range":{"start_line":63,"start_character":29,"end_line":63,"end_character":48},"updated":"2016-06-10 17:58:59.000000000","message":"Need project_id","commit_id":"2c949bc7c756fac0e5a877227445b9100f4d2407"},{"author":{"_account_id":14680,"name":"Rick Aulino","email":"rick.aulino@hpe.com","username":"ricka"},"change_message_id":"91eb4498efd65b66a87ff735e002b84cc703ac07","unresolved":false,"context_lines":[{"line_number":60,"context_line":"                    },"},{"line_number":61,"context_line":"                },"},{"line_number":62,"context_line":"                \u0027id\u0027: string_not_analyzed,"},{"line_number":63,"context_line":"                \u0027tenant_id\u0027: string_not_analyzed,"},{"line_number":64,"context_line":"                \u0027name\u0027: ordered_string,"},{"line_number":65,"context_line":"                \u0027description\u0027: ordered_string,"},{"line_number":66,"context_line":"            },"}],"source_content_type":"text/x-python","patch_set":1,"id":"7aa08908_90f62a8d","line":63,"range":{"start_line":63,"start_character":29,"end_line":63,"end_character":48},"in_reply_to":"7aa08908_6a531e3a","updated":"2016-06-13 20:53:58.000000000","message":"Added.","commit_id":"2c949bc7c756fac0e5a877227445b9100f4d2407"},{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"e4ae4ecc1933bf1dff6a6d608d16836e26808ca9","unresolved":false,"context_lines":[{"line_number":65,"context_line":"                \u0027description\u0027: ordered_string,"},{"line_number":66,"context_line":"            },"},{"line_number":67,"context_line":"            \"_meta\": {"},{"line_number":68,"context_line":"                \"tenant_id\": {"},{"line_number":69,"context_line":"                    \"resource_type\": resource_types.KEYSTONE_PROJECT"},{"line_number":70,"context_line":"                },"},{"line_number":71,"context_line":"            }"}],"source_content_type":"text/x-python","patch_set":1,"id":"7aa08908_0a3b7aec","line":68,"range":{"start_line":68,"start_character":17,"end_line":68,"end_character":26},"updated":"2016-06-10 17:58:59.000000000","message":"Add project_id","commit_id":"2c949bc7c756fac0e5a877227445b9100f4d2407"},{"author":{"_account_id":14680,"name":"Rick Aulino","email":"rick.aulino@hpe.com","username":"ricka"},"change_message_id":"91eb4498efd65b66a87ff735e002b84cc703ac07","unresolved":false,"context_lines":[{"line_number":65,"context_line":"                \u0027description\u0027: ordered_string,"},{"line_number":66,"context_line":"            },"},{"line_number":67,"context_line":"            \"_meta\": {"},{"line_number":68,"context_line":"                \"tenant_id\": {"},{"line_number":69,"context_line":"                    \"resource_type\": resource_types.KEYSTONE_PROJECT"},{"line_number":70,"context_line":"                },"},{"line_number":71,"context_line":"            }"}],"source_content_type":"text/x-python","patch_set":1,"id":"7aa08908_d0ec32bd","line":68,"range":{"start_line":68,"start_character":17,"end_line":68,"end_character":26},"in_reply_to":"7aa08908_0a3b7aec","updated":"2016-06-13 20:53:58.000000000","message":"See above.","commit_id":"2c949bc7c756fac0e5a877227445b9100f4d2407"},{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"e4ae4ecc1933bf1dff6a6d608d16836e26808ca9","unresolved":false,"context_lines":[{"line_number":67,"context_line":"            \"_meta\": {"},{"line_number":68,"context_line":"                \"tenant_id\": {"},{"line_number":69,"context_line":"                    \"resource_type\": resource_types.KEYSTONE_PROJECT"},{"line_number":70,"context_line":"                },"},{"line_number":71,"context_line":"            }"},{"line_number":72,"context_line":"        }"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7aa08908_6a2afe91","line":70,"range":{"start_line":70,"start_character":16,"end_line":70,"end_character":18},"updated":"2016-06-10 17:58:59.000000000","message":"Can also probably add security_group_rules.id as SECURITY_GROUP_RULE","commit_id":"2c949bc7c756fac0e5a877227445b9100f4d2407"},{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"e4ae4ecc1933bf1dff6a6d608d16836e26808ca9","unresolved":false,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    @property"},{"line_number":79,"context_line":"    def facets_excluded(self):"},{"line_number":80,"context_line":"        return {\u0027tenant_id\u0027: True}"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def _get_rbac_field_filters(self, request_context):"},{"line_number":83,"context_line":"        return ["}],"source_content_type":"text/x-python","patch_set":1,"id":"7aa08908_0a125a62","line":80,"range":{"start_line":80,"start_character":28,"end_line":80,"end_character":29},"updated":"2016-06-10 17:58:59.000000000","message":"Exclude project too","commit_id":"2c949bc7c756fac0e5a877227445b9100f4d2407"},{"author":{"_account_id":14680,"name":"Rick Aulino","email":"rick.aulino@hpe.com","username":"ricka"},"change_message_id":"91eb4498efd65b66a87ff735e002b84cc703ac07","unresolved":false,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    @property"},{"line_number":79,"context_line":"    def facets_excluded(self):"},{"line_number":80,"context_line":"        return {\u0027tenant_id\u0027: True}"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def _get_rbac_field_filters(self, request_context):"},{"line_number":83,"context_line":"        return ["}],"source_content_type":"text/x-python","patch_set":1,"id":"7aa08908_f07e8ead","line":80,"range":{"start_line":80,"start_character":28,"end_line":80,"end_character":29},"in_reply_to":"7aa08908_0a125a62","updated":"2016-06-13 20:53:58.000000000","message":"Done.","commit_id":"2c949bc7c756fac0e5a877227445b9100f4d2407"}],"searchlight/elasticsearch/plugins/neutron/security_groups.py":[{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"99df17d13052d1fd4379e82125f8579a159b37cc","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        return resource_types.NEUTRON_SECURITY_GROUP"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    # @classmethod"},{"line_number":31,"context_line":"    # def parent_plugin_type(cls):"},{"line_number":32,"context_line":"    #     return \u0027OS::Neutron::Net\u0027"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    # def get_parent_id_field(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a9d85d2_1f876a62","line":31,"range":{"start_line":31,"start_character":10,"end_line":31,"end_character":28},"updated":"2016-06-20 20:09:36.000000000","message":"Remove","commit_id":"9c5ea19d6a75cd20e3423a73fcaa4faee8f6ffc1"},{"author":{"_account_id":14680,"name":"Rick Aulino","email":"rick.aulino@hpe.com","username":"ricka"},"change_message_id":"08c7a042d35211c252c97f763f266e771b895790","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        return resource_types.NEUTRON_SECURITY_GROUP"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    # @classmethod"},{"line_number":31,"context_line":"    # def parent_plugin_type(cls):"},{"line_number":32,"context_line":"    #     return \u0027OS::Neutron::Net\u0027"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    # def get_parent_id_field(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3aaa91ec_021453f3","line":31,"range":{"start_line":31,"start_character":10,"end_line":31,"end_character":28},"in_reply_to":"5a9d85d2_1f876a62","updated":"2016-06-22 03:27:14.000000000","message":"Gone.","commit_id":"9c5ea19d6a75cd20e3423a73fcaa4faee8f6ffc1"},{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"99df17d13052d1fd4379e82125f8579a159b37cc","unresolved":false,"context_lines":[{"line_number":45,"context_line":"                \u0027security_group_rules\u0027: {"},{"line_number":46,"context_line":"                    \u0027type\u0027: \u0027nested\u0027,"},{"line_number":47,"context_line":"                    \u0027properties\u0027: {"},{"line_number":48,"context_line":"                        \u0027remote_group_id\u0027: ordered_string,"},{"line_number":49,"context_line":"                        \u0027direction\u0027: ordered_string,"},{"line_number":50,"context_line":"                        \u0027protocol\u0027: ordered_string,"},{"line_number":51,"context_line":"                        \u0027description\u0027: ordered_string,"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a9d85d2_b9146df5","line":48,"range":{"start_line":48,"start_character":43,"end_line":48,"end_character":57},"updated":"2016-06-20 20:09:36.000000000","message":"Just store this as not_analyzed","commit_id":"9c5ea19d6a75cd20e3423a73fcaa4faee8f6ffc1"},{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"99df17d13052d1fd4379e82125f8579a159b37cc","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                    \u0027type\u0027: \u0027nested\u0027,"},{"line_number":47,"context_line":"                    \u0027properties\u0027: {"},{"line_number":48,"context_line":"                        \u0027remote_group_id\u0027: ordered_string,"},{"line_number":49,"context_line":"                        \u0027direction\u0027: ordered_string,"},{"line_number":50,"context_line":"                        \u0027protocol\u0027: ordered_string,"},{"line_number":51,"context_line":"                        \u0027description\u0027: ordered_string,"},{"line_number":52,"context_line":"                        \u0027ethertype\u0027: ordered_string,"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a9d85d2_99825151","line":49,"range":{"start_line":49,"start_character":37,"end_line":49,"end_character":51},"updated":"2016-06-20 20:09:36.000000000","message":"This doesn\u0027t need to be special; values are ingress and egress","commit_id":"9c5ea19d6a75cd20e3423a73fcaa4faee8f6ffc1"},{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"99df17d13052d1fd4379e82125f8579a159b37cc","unresolved":false,"context_lines":[{"line_number":47,"context_line":"                    \u0027properties\u0027: {"},{"line_number":48,"context_line":"                        \u0027remote_group_id\u0027: ordered_string,"},{"line_number":49,"context_line":"                        \u0027direction\u0027: ordered_string,"},{"line_number":50,"context_line":"                        \u0027protocol\u0027: ordered_string,"},{"line_number":51,"context_line":"                        \u0027description\u0027: ordered_string,"},{"line_number":52,"context_line":"                        \u0027ethertype\u0027: ordered_string,"},{"line_number":53,"context_line":"                        \u0027remote_ip_prefix\u0027: ordered_string,"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a9d85d2_19978191","line":50,"range":{"start_line":50,"start_character":36,"end_line":50,"end_character":50},"updated":"2016-06-20 20:09:36.000000000","message":"Doesn\u0027t need to be special, can just be string - values are all single word/numbers","commit_id":"9c5ea19d6a75cd20e3423a73fcaa4faee8f6ffc1"},{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"99df17d13052d1fd4379e82125f8579a159b37cc","unresolved":false,"context_lines":[{"line_number":48,"context_line":"                        \u0027remote_group_id\u0027: ordered_string,"},{"line_number":49,"context_line":"                        \u0027direction\u0027: ordered_string,"},{"line_number":50,"context_line":"                        \u0027protocol\u0027: ordered_string,"},{"line_number":51,"context_line":"                        \u0027description\u0027: ordered_string,"},{"line_number":52,"context_line":"                        \u0027ethertype\u0027: ordered_string,"},{"line_number":53,"context_line":"                        \u0027remote_ip_prefix\u0027: ordered_string,"},{"line_number":54,"context_line":"                        \u0027port_range_max\u0027: ordered_string,"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a9d85d2_398ebd78","line":51,"range":{"start_line":51,"start_character":39,"end_line":51,"end_character":53},"updated":"2016-06-20 20:09:36.000000000","message":"Just make this \u0027string\u0027, no need to store it twice","commit_id":"9c5ea19d6a75cd20e3423a73fcaa4faee8f6ffc1"},{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"99df17d13052d1fd4379e82125f8579a159b37cc","unresolved":false,"context_lines":[{"line_number":49,"context_line":"                        \u0027direction\u0027: ordered_string,"},{"line_number":50,"context_line":"                        \u0027protocol\u0027: ordered_string,"},{"line_number":51,"context_line":"                        \u0027description\u0027: ordered_string,"},{"line_number":52,"context_line":"                        \u0027ethertype\u0027: ordered_string,"},{"line_number":53,"context_line":"                        \u0027remote_ip_prefix\u0027: ordered_string,"},{"line_number":54,"context_line":"                        \u0027port_range_max\u0027: ordered_string,"},{"line_number":55,"context_line":"                        \u0027port_range_min\u0027: ordered_string,"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a9d85d2_d9f33909","line":52,"range":{"start_line":52,"start_character":37,"end_line":52,"end_character":51},"updated":"2016-06-20 20:09:36.000000000","message":"No need to store this twice, \"string\" is fine (i\u0027m 99% sure that the default tokenizer won\u0027t split \u0027ipv4\u0027 up but please check)","commit_id":"9c5ea19d6a75cd20e3423a73fcaa4faee8f6ffc1"},{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"99df17d13052d1fd4379e82125f8579a159b37cc","unresolved":false,"context_lines":[{"line_number":50,"context_line":"                        \u0027protocol\u0027: ordered_string,"},{"line_number":51,"context_line":"                        \u0027description\u0027: ordered_string,"},{"line_number":52,"context_line":"                        \u0027ethertype\u0027: ordered_string,"},{"line_number":53,"context_line":"                        \u0027remote_ip_prefix\u0027: ordered_string,"},{"line_number":54,"context_line":"                        \u0027port_range_max\u0027: ordered_string,"},{"line_number":55,"context_line":"                        \u0027port_range_min\u0027: ordered_string,"},{"line_number":56,"context_line":"                        \u0027security_group_id\u0027: string_not_analyzed,"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a9d85d2_59bf49fb","line":53,"range":{"start_line":53,"start_character":25,"end_line":53,"end_character":41},"updated":"2016-06-20 20:09:36.000000000","message":"Not sure why what benefit there is allowing this to not be analyzed; a CIDR typically won\u0027t make much sense analyzed","commit_id":"9c5ea19d6a75cd20e3423a73fcaa4faee8f6ffc1"},{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"99df17d13052d1fd4379e82125f8579a159b37cc","unresolved":false,"context_lines":[{"line_number":51,"context_line":"                        \u0027description\u0027: ordered_string,"},{"line_number":52,"context_line":"                        \u0027ethertype\u0027: ordered_string,"},{"line_number":53,"context_line":"                        \u0027remote_ip_prefix\u0027: ordered_string,"},{"line_number":54,"context_line":"                        \u0027port_range_max\u0027: ordered_string,"},{"line_number":55,"context_line":"                        \u0027port_range_min\u0027: ordered_string,"},{"line_number":56,"context_line":"                        \u0027security_group_id\u0027: string_not_analyzed,"},{"line_number":57,"context_line":"                        \u0027tenant_id\u0027: ordered_string,"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a9d85d2_391b5d74","line":54,"range":{"start_line":54,"start_character":42,"end_line":54,"end_character":56},"updated":"2016-06-20 20:09:36.000000000","message":"Port range max and min are integers ranging from -1 to 2^16-1.","commit_id":"9c5ea19d6a75cd20e3423a73fcaa4faee8f6ffc1"},{"author":{"_account_id":14680,"name":"Rick Aulino","email":"rick.aulino@hpe.com","username":"ricka"},"change_message_id":"08c7a042d35211c252c97f763f266e771b895790","unresolved":false,"context_lines":[{"line_number":51,"context_line":"                        \u0027description\u0027: ordered_string,"},{"line_number":52,"context_line":"                        \u0027ethertype\u0027: ordered_string,"},{"line_number":53,"context_line":"                        \u0027remote_ip_prefix\u0027: ordered_string,"},{"line_number":54,"context_line":"                        \u0027port_range_max\u0027: ordered_string,"},{"line_number":55,"context_line":"                        \u0027port_range_min\u0027: ordered_string,"},{"line_number":56,"context_line":"                        \u0027security_group_id\u0027: string_not_analyzed,"},{"line_number":57,"context_line":"                        \u0027tenant_id\u0027: ordered_string,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3aaa91ec_45813b4a","line":54,"range":{"start_line":54,"start_character":42,"end_line":54,"end_character":56},"in_reply_to":"5a9d85d2_391b5d74","updated":"2016-06-22 03:27:14.000000000","message":"Oops. They are now integers.","commit_id":"9c5ea19d6a75cd20e3423a73fcaa4faee8f6ffc1"},{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"99df17d13052d1fd4379e82125f8579a159b37cc","unresolved":false,"context_lines":[{"line_number":54,"context_line":"                        \u0027port_range_max\u0027: ordered_string,"},{"line_number":55,"context_line":"                        \u0027port_range_min\u0027: ordered_string,"},{"line_number":56,"context_line":"                        \u0027security_group_id\u0027: string_not_analyzed,"},{"line_number":57,"context_line":"                        \u0027tenant_id\u0027: ordered_string,"},{"line_number":58,"context_line":"                        \u0027id\u0027: string_not_analyzed,"},{"line_number":59,"context_line":"                    },"},{"line_number":60,"context_line":"                },"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a9d85d2_595629d3","line":57,"range":{"start_line":57,"start_character":25,"end_line":57,"end_character":34},"updated":"2016-06-20 20:09:36.000000000","message":"Don\u0027t store this as analyzed at all; just not_analyzed","commit_id":"9c5ea19d6a75cd20e3423a73fcaa4faee8f6ffc1"},{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"99df17d13052d1fd4379e82125f8579a159b37cc","unresolved":false,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    @property"},{"line_number":81,"context_line":"    def facets_with_options(self):"},{"line_number":82,"context_line":"        return (\u0027direction\u0027, \u0027ethertype\u0027)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    @property"},{"line_number":85,"context_line":"    def facets_excluded(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a9d85d2_14146842","line":82,"range":{"start_line":82,"start_character":17,"end_line":82,"end_character":26},"updated":"2016-06-20 20:09:36.000000000","message":"These need qualifying; they\u0027re properties on security group rules","commit_id":"9c5ea19d6a75cd20e3423a73fcaa4faee8f6ffc1"},{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"99df17d13052d1fd4379e82125f8579a159b37cc","unresolved":false,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    @property"},{"line_number":81,"context_line":"    def facets_with_options(self):"},{"line_number":82,"context_line":"        return (\u0027direction\u0027, \u0027ethertype\u0027)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    @property"},{"line_number":85,"context_line":"    def facets_excluded(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a9d85d2_992c114c","line":82,"range":{"start_line":82,"start_character":39,"end_line":82,"end_character":41},"updated":"2016-06-20 20:09:36.000000000","message":"rule.protocol","commit_id":"9c5ea19d6a75cd20e3423a73fcaa4faee8f6ffc1"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"adc3025565e58ea12c9ef16827ace515ade219a6","unresolved":false,"context_lines":[{"line_number":64,"context_line":"                \"tenant_id\": {"},{"line_number":65,"context_line":"                    \"resource_type\": resource_types.KEYSTONE_PROJECT"},{"line_number":66,"context_line":"                },"},{"line_number":67,"context_line":"                \"security_group_rules.id\": {"},{"line_number":68,"context_line":"                    \"resource_type\": resource_types.NEUTRON_SECURITY_GROUP_RULE"},{"line_number":69,"context_line":"                },"},{"line_number":70,"context_line":"            }"}],"source_content_type":"text/x-python","patch_set":9,"id":"3aaa91ec_f7208eb2","line":67,"updated":"2016-06-28 23:57:38.000000000","message":"See comments regarding this in the constants file.","commit_id":"63929602ef478c656af137323947df6061a2b4a4"},{"author":{"_account_id":14680,"name":"Rick Aulino","email":"rick.aulino@hpe.com","username":"ricka"},"change_message_id":"105aba4d7c1916ab4a63843069e4464785fd1a16","unresolved":false,"context_lines":[{"line_number":64,"context_line":"                \"tenant_id\": {"},{"line_number":65,"context_line":"                    \"resource_type\": resource_types.KEYSTONE_PROJECT"},{"line_number":66,"context_line":"                },"},{"line_number":67,"context_line":"                \"security_group_rules.id\": {"},{"line_number":68,"context_line":"                    \"resource_type\": resource_types.NEUTRON_SECURITY_GROUP_RULE"},{"line_number":69,"context_line":"                },"},{"line_number":70,"context_line":"            }"}],"source_content_type":"text/x-python","patch_set":9,"id":"3aaa91ec_8dd26ccf","line":67,"in_reply_to":"3aaa91ec_f7208eb2","updated":"2016-06-30 20:11:29.000000000","message":"Done.","commit_id":"63929602ef478c656af137323947df6061a2b4a4"},{"author":{"_account_id":16150,"name":"Lei Zhang","email":"lei.a.zhang@intel.com","username":"leizhang"},"change_message_id":"7b5173d22b40836f9e9972a2ca982b4cf01ef1f5","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    @property"},{"line_number":76,"context_line":"    def facets_excluded(self):"},{"line_number":77,"context_line":"        return {\u0027project_id\u0027: False, \u0027tenant_id\u0027: True}"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def _get_rbac_field_filters(self, request_context):"},{"line_number":80,"context_line":"        return ["}],"source_content_type":"text/x-python","patch_set":12,"id":"1aa78d24_d63bd6e9","line":77,"updated":"2016-07-11 09:54:27.000000000","message":"In most plugins project_id is set to True, can be available to admins. Better to keep consistent with others here?","commit_id":"9bf565698f09c0e70147c4143659a49a07239097"}],"searchlight/tests/unit/test_neutron_securitygroup_plugin.py":[{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"99df17d13052d1fd4379e82125f8579a159b37cc","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def _create_fixtures(self):"},{"line_number":64,"context_line":"        \"\"\"Create a security group to test data serialization. \"\"\""},{"line_number":65,"context_line":"        self.securityGroup \u003d _secgroup_fixture(secgroup_id\u003dID1,"},{"line_number":66,"context_line":"                                               tenant_id\u003dTENANT1,"},{"line_number":67,"context_line":"                                               name\u003d\"test-secgroup\")"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5a9d85d2_f95b9552","line":65,"range":{"start_line":65,"start_character":13,"end_line":65,"end_character":26},"updated":"2016-06-20 20:09:36.000000000","message":"nit on naming convention - prefer underscore to camel","commit_id":"9c5ea19d6a75cd20e3423a73fcaa4faee8f6ffc1"},{"author":{"_account_id":10063,"name":"Steve McLellan","email":"steven.j.mclellan@gmail.com","username":"sjmc7"},"change_message_id":"2ae67da789170054e81cae0e93150e5d644abb36","unresolved":false,"context_lines":[{"line_number":45,"context_line":"            \"id\": secgroup_id,"},{"line_number":46,"context_line":"        }],"},{"line_number":47,"context_line":"        \"id\": secgroup_id,"},{"line_number":48,"context_line":"        \"project_id\": tenant_id,"},{"line_number":49,"context_line":"        \"tenant_id\": tenant_id,"},{"line_number":50,"context_line":"        \"name\": name,"},{"line_number":51,"context_line":"        \"description\": \"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"3aaa91ec_8004fb14","line":48,"range":{"start_line":48,"start_character":9,"end_line":48,"end_character":19},"updated":"2016-06-30 16:53:10.000000000","message":"project_id isn\u0027t in API responses and shouldn\u0027t be in fixtures","commit_id":"63929602ef478c656af137323947df6061a2b4a4"},{"author":{"_account_id":14680,"name":"Rick Aulino","email":"rick.aulino@hpe.com","username":"ricka"},"change_message_id":"105aba4d7c1916ab4a63843069e4464785fd1a16","unresolved":false,"context_lines":[{"line_number":45,"context_line":"            \"id\": secgroup_id,"},{"line_number":46,"context_line":"        }],"},{"line_number":47,"context_line":"        \"id\": secgroup_id,"},{"line_number":48,"context_line":"        \"project_id\": tenant_id,"},{"line_number":49,"context_line":"        \"tenant_id\": tenant_id,"},{"line_number":50,"context_line":"        \"name\": name,"},{"line_number":51,"context_line":"        \"description\": \"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"3aaa91ec_0ddf9cd6","line":48,"range":{"start_line":48,"start_character":9,"end_line":48,"end_character":19},"in_reply_to":"3aaa91ec_8004fb14","updated":"2016-06-30 20:11:29.000000000","message":"\"project_id\" is no longer soiling this fixture.","commit_id":"63929602ef478c656af137323947df6061a2b4a4"}]}
