[ https://issues.apache.org/jira/browse/RANGER-3938?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Suman B N updated RANGER-3938: ------------------------------ Description: Lets say for audit, we configure an elasticsearch alias(rollover alias). And if there are 2 or more indices for an alias then audit API doesn't work. Because while fetching the records, ranger uses multi get request on an alias. It results in below error: {noformat} Alias [alias-name] has more than one indices associated with it [[index-000002, index-000001]], can't execute a single index op {noformat} [Code snippet|https://github.com/apache/ranger/blob/6c8a142881896f2c6d1696bcee02c401867a45f9/security-admin/src/main/java/org/apache/ranger/elasticsearch/ElasticSearchUtil.java#L175-L180]: {code:java} MultiGetRequest multiGetRequest = new MultiGetRequest(); for (SearchHit hit : hits) { MultiGetRequest.Item item = new MultiGetRequest.Item(index, null, hit.getId()); item.fetchSourceContext(FetchSourceContext.FETCH_SOURCE); multiGetRequest.add(item); } {code} So there can be 2 possible approaches to resolve this: - Approach 1(Quick and fast): Use `hit.getIndex()` instead of index(in this case its has alias) for a MultiGetRequest.Item object. So that all the documents can be get by id with its index only instead of alias. - Approach 2(Change the MultiGet to search): POST /_search {code:json} { "query": { "ids" : { "values" : ["id1", "id2"] } } } {code} This would be a recommended approach. Correct me if I am wrong. If not, Can I pick this up and fix it? I have already fixed it in my local with approach 1 as a quick fix. was: Lets say for audit, we configure an elasticsearch alias(rollover alias). And if there are 2 or more indices for an alias then audit API doesn't work. Because while fetching the records, ranger uses multi get request on an alias. It results in below error: {noformat} Alias [alias-name] has more than one indices associated with it [[index-000002, index-000001]], can't execute a single index op {noformat} [Code snippet|https://github.com/apache/ranger/blob/6c8a142881896f2c6d1696bcee02c401867a45f9/security-admin/src/main/java/org/apache/ranger/elasticsearch/ElasticSearchUtil.java#L175-L180]: {code:java} MultiGetRequest multiGetRequest = new MultiGetRequest(); for (SearchHit hit : hits) { MultiGetRequest.Item item = new MultiGetRequest.Item(index, null, hit.getId()); item.fetchSourceContext(FetchSourceContext.FETCH_SOURCE); multiGetRequest.add(item); } {code} So there can be 2 possible approaches to resolve this: - Approach 1(Quick and fast): Use `hit.getIndex()` instead of index(in this case its has alias) for a MultiGetRequest.Item object. So that all the documents can be get by id with its index only instead of alias. - Approach 2(Change the MultiGet to search): {noformat} POST /_search {code:json} { "query": { "ids" : { "values" : ["id1", "id2"] } } } {code} {noformat} This would be a recommended approach. Correct me if I am wrong. If not, Can I pick this up and fix it? I have already fixed it in my local with approach 1 as a quick fix. > Unable to access audit logs from an elasticsearch alias > ------------------------------------------------------- > > Key: RANGER-3938 > URL: https://issues.apache.org/jira/browse/RANGER-3938 > Project: Ranger > Issue Type: Bug > Components: audit > Reporter: Suman B N > Priority: Minor > > Lets say for audit, we configure an elasticsearch alias(rollover alias). And > if there are 2 or more indices for an alias then audit API doesn't work. > Because while fetching the records, ranger uses multi get request on an > alias. > It results in below error: > {noformat} > Alias [alias-name] has more than one indices associated with it > [[index-000002, index-000001]], can't execute a single index op > {noformat} > [Code > snippet|https://github.com/apache/ranger/blob/6c8a142881896f2c6d1696bcee02c401867a45f9/security-admin/src/main/java/org/apache/ranger/elasticsearch/ElasticSearchUtil.java#L175-L180]: > {code:java} > MultiGetRequest multiGetRequest = new MultiGetRequest(); > for (SearchHit hit : hits) { > MultiGetRequest.Item item = new MultiGetRequest.Item(index, null, > hit.getId()); > item.fetchSourceContext(FetchSourceContext.FETCH_SOURCE); > multiGetRequest.add(item); > } > {code} > So there can be 2 possible approaches to resolve this: > - Approach 1(Quick and fast): > Use `hit.getIndex()` instead of index(in this case its has alias) for a > MultiGetRequest.Item object. > So that all the documents can be get by id with its index only instead of > alias. > - Approach 2(Change the MultiGet to search): > POST /_search > {code:json} > { > "query": { > "ids" : { > "values" : ["id1", "id2"] > } > } > } > {code} > This would be a recommended approach. > Correct me if I am wrong. If not, Can I pick this up and fix it? I have > already fixed it in my local with approach 1 as a quick fix. -- This message was sent by Atlassian Jira (v8.20.10#820010)