コード例 #1
0
  @Override
  protected UpgradeResponse newResponse(
      UpgradeRequest request,
      int totalShards,
      int successfulShards,
      int failedShards,
      List<ShardUpgradeResult> shardUpgradeResults,
      List<ShardOperationFailedException> shardFailures,
      ClusterState clusterState) {
    Map<String, Integer> successfulPrimaryShards = newHashMap();
    Map<String, Tuple<Version, org.apache.lucene.util.Version>> versions = newHashMap();
    for (ShardUpgradeResult result : shardUpgradeResults) {
      successfulShards++;
      String index = result.getShardId().getIndex();
      if (result.primary()) {
        Integer count = successfulPrimaryShards.get(index);
        successfulPrimaryShards.put(index, count == null ? 1 : count + 1);
      }
      Tuple<Version, org.apache.lucene.util.Version> versionTuple = versions.get(index);
      if (versionTuple == null) {
        versions.put(index, new Tuple<>(result.upgradeVersion(), result.oldestLuceneSegment()));
      } else {
        // We already have versions for this index - let's see if we need to update them based on
        // the current shard
        Version version = versionTuple.v1();
        org.apache.lucene.util.Version luceneVersion = versionTuple.v2();
        // For the metadata we are interested in the _latest_ Elasticsearch version that was
        // processing the metadata
        // Since we rewrite the mapping during upgrade the metadata is always rewritten by the
        // latest version
        if (result.upgradeVersion().after(versionTuple.v1())) {
          version = result.upgradeVersion();
        }
        // For the lucene version we are interested in the _oldest_ lucene version since it
        // determines the
        // oldest version that we need to support
        if (result.oldestLuceneSegment().onOrAfter(versionTuple.v2()) == false) {
          luceneVersion = result.oldestLuceneSegment();
        }
        versions.put(index, new Tuple<>(version, luceneVersion));
      }
    }
    Map<String, Tuple<org.elasticsearch.Version, String>> updatedVersions = newHashMap();
    MetaData metaData = clusterState.metaData();
    for (Map.Entry<String, Tuple<Version, org.apache.lucene.util.Version>> versionEntry :
        versions.entrySet()) {
      String index = versionEntry.getKey();
      Integer primaryCount = successfulPrimaryShards.get(index);
      int expectedPrimaryCount = metaData.index(index).getNumberOfShards();
      if (primaryCount == metaData.index(index).getNumberOfShards()) {
        updatedVersions.put(
            index,
            new Tuple<>(versionEntry.getValue().v1(), versionEntry.getValue().v2().toString()));
      } else {
        logger.warn(
            "Not updating settings for the index [{}] because upgraded of some primary shards failed - expected[{}], received[{}]",
            index,
            expectedPrimaryCount,
            primaryCount == null ? 0 : primaryCount);
      }
    }

    return new UpgradeResponse(
        updatedVersions, totalShards, successfulShards, failedShards, shardFailures);
  }
コード例 #2
0
 @Override
 protected ShardUpgradeResult readShardResult(StreamInput in) throws IOException {
   ShardUpgradeResult result = new ShardUpgradeResult();
   result.readFrom(in);
   return result;
 }