Github user dsmiley commented on a diff in the pull request: https://github.com/apache/lucene-solr/pull/304#discussion_r161077363 --- Diff: solr/core/src/java/org/apache/solr/cloud/CreateAliasCmd.java --- @@ -45,13 +147,92 @@ public CreateAliasCmd(OverseerCollectionMessageHandler ocmh) { public void call(ClusterState state, ZkNodeProps message, NamedList results) throws Exception { final String aliasName = message.getStr(NAME); - final List<String> canonicalCollectionList = parseCollectionsParameter(message.get("collections")); - final String canonicalCollectionsString = StrUtils.join(canonicalCollectionList, ','); - ZkStateReader zkStateReader = ocmh.zkStateReader; - validateAllCollectionsExistAndNoDups(canonicalCollectionList, zkStateReader); + ZkStateReader.AliasesManager holder = zkStateReader.aliasesHolder; + if (!anyRoutingParams(message)) { + final List<String> canonicalCollectionList = parseCollectionsParameter(message.get("collections")); + final String canonicalCollectionsString = StrUtils.join(canonicalCollectionList, ','); + validateAllCollectionsExistAndNoDups(canonicalCollectionList, zkStateReader); + holder.applyModificationAndExportToZk(aliases -> aliases.cloneWithCollectionAlias(aliasName, canonicalCollectionsString)); + } else { + final String routedField = message.getStr(ROUTING_FIELD); + final String routingType = message.getStr(ROUTING_TYPE); + final String tz = message.getStr(TZ); + final String start = message.getStr(START); + final String increment = message.getStr(ROUTING_INCREMENT); + final String maxFutureMs = message.getStr(ROUTING_MAX_FUTURE); + + try { + if (0 > Long.valueOf(maxFutureMs)) { + throw new NumberFormatException("Negative value not allowed here"); + } + } catch (NumberFormatException e) { + throw new SolrException(BAD_REQUEST, ROUTING_MAX_FUTURE + " must be a valid long integer representing a number " + + "of milliseconds greater than or equal to zero"); + } - zkStateReader.aliasesHolder.applyModificationAndExportToZk(aliases -> aliases.cloneWithCollectionAlias(aliasName, canonicalCollectionsString)); + // Validate we got everything we need + if (routedField == null || routingType == null || start == null || increment == null) { --- End diff -- I think much of these param validation checks are supposed to be handled at the CollectionsHandler level; no? I'm not 100% sure.
--- --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org For additional commands, e-mail: dev-h...@lucene.apache.org