final Set<String> aliases = lookup.entrySet().stream().filter(e->e.getValue().isAlias()).map(e->e.getKey()).collect(Collectors.toSet()); Set<String> doubleIndices = lookup.get(al).getIndices().stream().map(a->a.getIndex().getName()).collect(Collectors.toSet()); _indices.removeAll(doubleIndices);
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; } }
private void rejectSingleIndexOperation(String aliasOrIndex, AliasOrIndex result) { String[] indexNames = new String[result.getIndices().size()]; int i = 0; for (IndexMetaData indexMetaData : result.getIndices()) { indexNames[i++] = indexMetaData.getIndex().getName(); } throw new IllegalArgumentException("Alias [" + aliasOrIndex + "] has more than one index associated with it [" + Arrays.toString(indexNames) + "], can't execute a single index op"); }
public boolean hasAlias(String alias) { AliasOrIndex aliasOrIndex = getAliasAndIndexLookup().get(alias); if (aliasOrIndex != null) { return aliasOrIndex.isAlias(); } else { return false; } }
private void rejectSingleIndexOperation(String aliasOrIndex, AliasOrIndex result) { String[] indexNames = new String[result.getIndices().size()]; int i = 0; for (IndexMetaData indexMetaData : result.getIndices()) { indexNames[i++] = indexMetaData.getIndex().getName(); } throw new IllegalArgumentException("Alias [" + aliasOrIndex + "] has more than one index associated with it [" + Arrays.toString(indexNames) + "], can't execute a single index op"); }
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; }
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 void rejectSingleIndexOperation(String aliasOrIndex, AliasOrIndex result) { String[] indexNames = new String[result.getIndices().size()]; int i = 0; for (IndexMetaData indexMetaData : result.getIndices()) { indexNames[i++] = indexMetaData.getIndex().getName(); } throw new IllegalArgumentException("Alias [" + aliasOrIndex + "] has more than one index associated with it [" + Arrays.toString(indexNames) + "], can't execute a single index op"); }
if (result == null || result.isAlias() == false) { return routingOrParent(parent, routing); if (result.getIndices().size() > 1) { rejectSingleIndexOperation(aliasOrIndex, result);
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 void rejectSingleIndexOperation(String aliasOrIndex, AliasOrIndex result) { String[] indexNames = new String[result.getIndices().size()]; int i = 0; for (IndexMetaData indexMetaData : result.getIndices()) { indexNames[i++] = indexMetaData.getIndex().getName(); } throw new IllegalArgumentException("Alias [" + aliasOrIndex + "] has more than one index associated with it [" + Arrays.toString(indexNames) + "], can't execute a single index op"); }
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(); if (aliasOrIndex.getIndices().size() > 1 && !options.allowAliasesToMultipleIndices()) { String[] indexNames = new String[aliasOrIndex.getIndices().size()]; int i = 0; for (IndexMetaData indexMetaData : aliasOrIndex.getIndices()) { indexNames[i++] = indexMetaData.getIndex().getName(); for (IndexMetaData index : aliasOrIndex.getIndices()) { if (index.getState() == IndexMetaData.State.CLOSE) { if (failClosed) {
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); }
final ScriptInfo[] scriptInfos = aliasOrIndex.getIndices().stream().map(md -> md.getSettings()) .filter(s -> SETTING_INDEX_DYNARANK_LANG.get(s).length() > 0) .map(settings -> new ScriptInfo(SETTING_INDEX_DYNARANK_SCRIPT.get(settings),
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"); } }
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"); } }
final ScriptInfo[] scriptInfos = aliasOrIndex.getIndices().stream().map(md -> md.getSettings()) .filter(s -> SETTING_INDEX_DYNARANK_LANG.get(s).length() > 0) .map(settings -> new ScriptInfo(SETTING_INDEX_DYNARANK_SCRIPT.get(settings),
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); } }
Collection<IndexMetaData> resolvedIndices = aliasOrIndex.getIndices(); if (resolvedIndices.size() > 1 && !options.allowAliasesToMultipleIndices()) { String[] indexNames = new String[resolvedIndices.size()];