private String[] getResolvedIndexPattern(User user, IndexNameExpressionResolver resolver, ClusterService cs) { String unresolved = getUnresolvedIndexPattern(user); String[] resolved = null; if(WildcardMatcher.containsWildcard(unresolved)) { final String[] aliasesForPermittedPattern = cs.state().getMetaData().getAliasAndIndexLookup() .entrySet().stream() .filter(e->e.getValue().isAlias()) .filter(e->WildcardMatcher.match(unresolved, e.getKey())) .map(e->e.getKey()).toArray(String[]::new); if(aliasesForPermittedPattern != null && aliasesForPermittedPattern.length > 0) { resolved = resolver.concreteIndexNames(cs.state(), IndicesOptions.lenientExpandOpen(), aliasesForPermittedPattern); } } if(resolved == null && !unresolved.isEmpty()) { resolved = resolver.concreteIndexNames(cs.state(), IndicesOptions.lenientExpandOpen(), unresolved); } if(resolved == null || resolved.length == 0) { return new String[]{unresolved}; } else { //append unresolved value for pattern matching String[] retval = Arrays.copyOf(resolved, resolved.length +1); retval[retval.length-1] = unresolved; return retval; } }
final Set<String> aliases = lookup.entrySet().stream().filter(e->e.getValue().isAlias()).map(e->e.getKey()).collect(Collectors.toSet());
public boolean hasAlias(String alias) { AliasOrIndex aliasOrIndex = getAliasAndIndexLookup().get(alias); if (aliasOrIndex != null) { return aliasOrIndex.isAlias(); } else { return false; } }
private static Map<String, AliasOrIndex> suffixWildcard(Context context, MetaData metaData, String expression) { assert expression.length() >= 2 : "expression [" + expression + "] should have at least a length of 2"; String fromPrefix = expression.substring(0, expression.length() - 1); char[] toPrefixCharArr = fromPrefix.toCharArray(); toPrefixCharArr[toPrefixCharArr.length - 1]++; String toPrefix = new String(toPrefixCharArr); SortedMap<String,AliasOrIndex> subMap = metaData.getAliasAndIndexLookup().subMap(fromPrefix, toPrefix); if (context.getOptions().ignoreAliases()) { return subMap.entrySet().stream() .filter(entry -> entry.getValue().isAlias() == false) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); } return subMap; }
private static Map<String, AliasOrIndex> otherWildcard(Context context, MetaData metaData, String expression) { final String pattern = expression; return metaData.getAliasAndIndexLookup() .entrySet() .stream() .filter(e -> context.getOptions().ignoreAliases() == false || e.getValue().isAlias() == false) .filter(e -> Regex.simpleMatch(pattern, e.getKey())) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); }
private static boolean aliasOrIndexExists(IndicesOptions options, MetaData metaData, String expression) { AliasOrIndex aliasOrIndex = metaData.getAliasAndIndexLookup().get(expression); //treat aliases as unavailable indices when ignoreAliases is set to true (e.g. delete index and update aliases api) return aliasOrIndex != null && (options.ignoreAliases() == false || aliasOrIndex.isAlias() == false); }
static void validate(MetaData metaData, RolloverRequest request) { final AliasOrIndex aliasOrIndex = metaData.getAliasAndIndexLookup().get(request.getAlias()); if (aliasOrIndex == null) { throw new IllegalArgumentException("source alias does not exist"); } if (aliasOrIndex.isAlias() == false) { throw new IllegalArgumentException("source alias is a concrete index"); } final AliasOrIndex.Alias alias = (AliasOrIndex.Alias) aliasOrIndex; if (alias.getWriteIndex() == null) { throw new IllegalArgumentException("source alias [" + alias.getAliasName() + "] does not point to a write index"); } }
private static Set<String> expand(Context context, IndexMetaData.State excludeState, Map<String, AliasOrIndex> matches) { Set<String> expand = new HashSet<>(); for (Map.Entry<String, AliasOrIndex> entry : matches.entrySet()) { AliasOrIndex aliasOrIndex = entry.getValue(); if (context.isPreserveAliases() && aliasOrIndex.isAlias()) { expand.add(entry.getKey()); } else { for (IndexMetaData meta : aliasOrIndex.getIndices()) { if (excludeState == null || meta.getState() != excludeState) { expand.add(meta.getIndex().getName()); } } } } return expand; }
public static Map<String, AliasOrIndex> matches(Context context, MetaData metaData, String expression) { if (Regex.isMatchAllPattern(expression)) { // Can only happen if the expressions was initially: '-*' if (context.getOptions().ignoreAliases()) { return metaData.getAliasAndIndexLookup().entrySet().stream() .filter(e -> e.getValue().isAlias() == false) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); } else { return metaData.getAliasAndIndexLookup(); } } else if (expression.indexOf("*") == expression.length() - 1) { return suffixWildcard(context, metaData, expression); } else { return otherWildcard(context, metaData, expression); } }
if (aliasOrIndex != null && aliasOrIndex.isAlias()) { AliasOrIndex.Alias alias = (AliasOrIndex.Alias) aliasOrIndex; for (Tuple<String, AliasMetaData> item : alias.getConcreteIndexAndAliasMetaDatas()) {
if (aliasOrIndex == null) { throw indexNotFoundException(expression); } else if (aliasOrIndex.isAlias() && options.ignoreAliases()) { throw aliasesNotSupportedException(expression);
if (result == null || result.isAlias() == false) { return routingOrParent(parent, routing);
if (result == null || result.isAlias() == false) { return routingOrParent(parent, routing);
continue; } else if (aliasOrIndex.isAlias() && context.getOptions().ignoreAliases()) { if (failNoIndices) { throw aliasesNotSupportedException(expression); if (aliasOrIndex.isAlias() && context.isResolveToWriteIndex()) { AliasOrIndex.Alias alias = (AliasOrIndex.Alias) aliasOrIndex; IndexMetaData writeIndex = alias.getWriteIndex();
static void validate(MetaData metaData, RolloverRequest request) { final AliasOrIndex aliasOrIndex = metaData.getAliasAndIndexLookup().get(request.getAlias()); if (aliasOrIndex == null) { throw new IllegalArgumentException("source alias does not exist"); } if (aliasOrIndex.isAlias() == false) { throw new IllegalArgumentException("source alias is a concrete index"); } if (aliasOrIndex.getIndices().size() != 1) { throw new IllegalArgumentException("source alias maps to multiple indices"); } }
if (indexOrAlias != null && indexOrAlias.isAlias()) { AliasOrIndex.Alias alias = (AliasOrIndex.Alias) indexOrAlias; indexMetaData = alias.getWriteIndex();
public boolean hasAlias(String alias) { AliasOrIndex aliasOrIndex = getAliasAndIndexLookup().get(alias); if (aliasOrIndex != null) { return aliasOrIndex.isAlias(); } else { return false; } }
private static Map<String, AliasOrIndex> otherWildcard(Context context, MetaData metaData, String expression) { final String pattern = expression; return metaData.getAliasAndIndexLookup() .entrySet() .stream() .filter(e -> context.getOptions().ignoreAliases() == false || e.getValue().isAlias() == false) .filter(e -> Regex.simpleMatch(pattern, e.getKey())) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); }
private static Map<String, AliasOrIndex> otherWildcard(Context context, MetaData metaData, String expression) { final String pattern = expression; return metaData.getAliasAndIndexLookup() .entrySet() .stream() .filter(e -> context.getOptions().ignoreAliases() == false || e.getValue().isAlias() == false) .filter(e -> Regex.simpleMatch(pattern, e.getKey())) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); }
private static boolean aliasOrIndexExists(IndicesOptions options, MetaData metaData, String expression) { AliasOrIndex aliasOrIndex = metaData.getAliasAndIndexLookup().get(expression); //treat aliases as unavailable indices when ignoreAliases is set to true (e.g. delete index and update aliases api) return aliasOrIndex != null && (options.ignoreAliases() == false || aliasOrIndex.isAlias() == false); }