Browse Source

Recovery: RecoveryState.File.toXContent reports file length as recovered bytes

Closes #10310
Boaz Leskes 10 years ago
parent
commit
1200d8e647

+ 1 - 1
src/main/java/org/elasticsearch/indices/recovery/RecoveryState.java

@@ -641,7 +641,7 @@ public class RecoveryState implements ToXContent, Streamable {
             builder.field(Fields.NAME, name);
             builder.byteSizeField(Fields.LENGTH_IN_BYTES, Fields.LENGTH, length);
             builder.field(Fields.REUSED, reused);
-            builder.byteSizeField(Fields.RECOVERED_IN_BYTES, Fields.RECOVERED, length);
+            builder.byteSizeField(Fields.RECOVERED_IN_BYTES, Fields.RECOVERED, recovered);
             builder.endObject();
             return builder;
         }

+ 17 - 9
src/test/java/org/elasticsearch/gateway/RecoveryBackwardsCompatibilityTests.java

@@ -27,11 +27,15 @@ import org.elasticsearch.cluster.metadata.IndexMetaData;
 import org.elasticsearch.cluster.routing.allocation.decider.EnableAllocationDecider;
 import org.elasticsearch.common.settings.ImmutableSettings;
 import org.elasticsearch.common.settings.Settings;
+import org.elasticsearch.common.xcontent.ToXContent;
+import org.elasticsearch.common.xcontent.XContentHelper;
 import org.elasticsearch.indices.recovery.RecoveryState;
 import org.elasticsearch.test.ElasticsearchBackwardsCompatIntegrationTest;
 import org.elasticsearch.test.ElasticsearchIntegrationTest;
 import org.junit.Test;
 
+import java.util.HashMap;
+
 import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertAcked;
 import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertHitCount;
 import static org.hamcrest.Matchers.equalTo;
@@ -96,19 +100,23 @@ public class RecoveryBackwardsCompatibilityTests extends ElasticsearchBackwardsC
         assertHitCount(countResponse, numDocs);
 
         RecoveryResponse recoveryResponse = client().admin().indices().prepareRecoveries("test").setDetailed(true).get();
+        HashMap<String, String> map = new HashMap<>();
+        map.put("details", "true");
+        final ToXContent.Params params = new ToXContent.MapParams(map);
         for (ShardRecoveryResponse response : recoveryResponse.shardResponses().get("test")) {
             RecoveryState recoveryState = response.recoveryState();
+            final String recoverStateAsJSON = XContentHelper.toString(recoveryState, params);
             if (!recoveryState.getPrimary()) {
                 RecoveryState.Index index = recoveryState.getIndex();
-                assertThat(index.toString(), index.recoveredBytes(), equalTo(0l));
-                assertThat(index.toString(), index.reusedBytes(), greaterThan(0l));
-                assertThat(index.toString(), index.reusedBytes(), equalTo(index.totalBytes()));
-                assertThat(index.toString(), index.recoveredFileCount(), equalTo(0));
-                assertThat(index.toString(), index.reusedFileCount(), equalTo(index.totalFileCount()));
-                assertThat(index.toString(), index.reusedFileCount(), greaterThan(0));
-                assertThat(index.toString(), index.recoveredBytesPercent(), equalTo(100.f));
-                assertThat(index.toString(), index.recoveredFilesPercent(), equalTo(100.f));
-                assertThat(index.toString(), index.reusedBytes(), greaterThan(index.recoveredBytes()));
+                assertThat(recoverStateAsJSON, index.recoveredBytes(), equalTo(0l));
+                assertThat(recoverStateAsJSON, index.reusedBytes(), greaterThan(0l));
+                assertThat(recoverStateAsJSON, index.reusedBytes(), equalTo(index.totalBytes()));
+                assertThat(recoverStateAsJSON, index.recoveredFileCount(), equalTo(0));
+                assertThat(recoverStateAsJSON, index.reusedFileCount(), equalTo(index.totalFileCount()));
+                assertThat(recoverStateAsJSON, index.reusedFileCount(), greaterThan(0));
+                assertThat(recoverStateAsJSON, index.recoveredBytesPercent(), equalTo(100.f));
+                assertThat(recoverStateAsJSON, index.recoveredFilesPercent(), equalTo(100.f));
+                assertThat(recoverStateAsJSON, index.reusedBytes(), greaterThan(index.recoveredBytes()));
                 // TODO upgrade via optimize?
             }
         }