Skip to content

Commit aa46a6f

Browse files
authored
Implement ccr file restore (#37130) (#37669)
This is related to #35975. It implements a file based restore in the CcrRepository. The restore transfers files from the leader cluster to the follower cluster. It does not implement any advanced resiliency features at the moment. Any request failure will end the restore.
1 parent 5048162 commit aa46a6f

File tree

20 files changed

+966
-322
lines changed

20 files changed

+966
-322
lines changed

modules/transport-netty4/src/test/java/org/elasticsearch/http/netty4/Netty4HttpChannelTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -590,7 +590,7 @@ private static class TestResponse extends RestResponse {
590590
}
591591
final ByteArray bigArray = bigArrays.newByteArray(bytes.length);
592592
bigArray.set(0, bytes, 0, bytes.length);
593-
reference = new ReleasablePagedBytesReference(bigArrays, bigArray, bytes.length, Releasables.releaseOnce(bigArray));
593+
reference = new ReleasablePagedBytesReference(bigArray, bytes.length, Releasables.releaseOnce(bigArray));
594594
}
595595

596596
@Override

server/src/main/java/org/elasticsearch/common/bytes/PagedBytesReference.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121

2222
import org.apache.lucene.util.BytesRef;
2323
import org.apache.lucene.util.BytesRefIterator;
24-
import org.elasticsearch.common.util.BigArrays;
2524
import org.elasticsearch.common.util.ByteArray;
2625
import org.elasticsearch.common.util.PageCacheRecycler;
2726

@@ -35,17 +34,15 @@ public class PagedBytesReference extends BytesReference {
3534

3635
private static final int PAGE_SIZE = PageCacheRecycler.BYTE_PAGE_SIZE;
3736

38-
private final BigArrays bigarrays;
39-
protected final ByteArray byteArray;
37+
private final ByteArray byteArray;
4038
private final int offset;
4139
private final int length;
4240

43-
public PagedBytesReference(BigArrays bigarrays, ByteArray byteArray, int length) {
44-
this(bigarrays, byteArray, 0, length);
41+
public PagedBytesReference(ByteArray byteArray, int length) {
42+
this(byteArray, 0, length);
4543
}
4644

47-
public PagedBytesReference(BigArrays bigarrays, ByteArray byteArray, int from, int length) {
48-
this.bigarrays = bigarrays;
45+
private PagedBytesReference(ByteArray byteArray, int from, int length) {
4946
this.byteArray = byteArray;
5047
this.offset = from;
5148
this.length = length;
@@ -67,7 +64,7 @@ public BytesReference slice(int from, int length) {
6764
throw new IllegalArgumentException("can't slice a buffer with length [" + length() +
6865
"], with slice parameters from [" + from + "], length [" + length + "]");
6966
}
70-
return new PagedBytesReference(bigarrays, byteArray, offset + from, length);
67+
return new PagedBytesReference(byteArray, offset + from, length);
7168
}
7269

7370
@Override

server/src/main/java/org/elasticsearch/common/bytes/ReleasablePagedBytesReference.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121

2222
import org.elasticsearch.common.lease.Releasable;
2323
import org.elasticsearch.common.lease.Releasables;
24-
import org.elasticsearch.common.util.BigArrays;
2524
import org.elasticsearch.common.util.ByteArray;
2625

2726
/**
@@ -32,9 +31,8 @@ public final class ReleasablePagedBytesReference extends PagedBytesReference imp
3231

3332
private final Releasable releasable;
3433

35-
public ReleasablePagedBytesReference(BigArrays bigarrays, ByteArray byteArray, int length,
36-
Releasable releasable) {
37-
super(bigarrays, byteArray, length);
34+
public ReleasablePagedBytesReference(ByteArray byteArray, int length, Releasable releasable) {
35+
super(byteArray, length);
3836
this.releasable = releasable;
3937
}
4038

server/src/main/java/org/elasticsearch/common/io/stream/BytesStreamOutput.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ public int size() {
140140

141141
@Override
142142
public BytesReference bytes() {
143-
return new PagedBytesReference(bigArrays, bytes, count);
143+
return new PagedBytesReference(bytes, count);
144144
}
145145

146146
/**

server/src/main/java/org/elasticsearch/common/io/stream/ReleasableBytesStreamOutput.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public ReleasableBytesStreamOutput(int expectedSize, BigArrays bigArrays) {
5656
*/
5757
@Override
5858
public ReleasablePagedBytesReference bytes() {
59-
return new ReleasablePagedBytesReference(bigArrays, bytes, count, releasable);
59+
return new ReleasablePagedBytesReference(bytes, count, releasable);
6060
}
6161

6262
@Override

server/src/main/java/org/elasticsearch/repositories/blobstore/BlobStoreRepository.java

Lines changed: 24 additions & 228 deletions
Large diffs are not rendered by default.

server/src/main/java/org/elasticsearch/repositories/blobstore/FileRestoreContext.java

Lines changed: 304 additions & 0 deletions
Large diffs are not rendered by default.

server/src/test/java/org/elasticsearch/common/bytes/PagedBytesReferenceTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,8 +120,8 @@ public void testEquals() {
120120
}
121121

122122
// get refs & compare
123-
BytesReference pbr = new PagedBytesReference(bigarrays, ba1, length);
124-
BytesReference pbr2 = new PagedBytesReference(bigarrays, ba2, length);
123+
BytesReference pbr = new PagedBytesReference(ba1, length);
124+
BytesReference pbr2 = new PagedBytesReference(ba2, length);
125125
assertEquals(pbr, pbr2);
126126
int offsetToFlip = randomIntBetween(0, length - 1);
127127
int value = ~Byte.toUnsignedInt(ba1.get(offsetToFlip));

test/framework/src/main/java/org/elasticsearch/common/bytes/AbstractBytesReferenceTestCase.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -528,7 +528,7 @@ public void testEquals() throws IOException {
528528
public void testSliceEquals() {
529529
int length = randomIntBetween(100, PAGE_SIZE * randomIntBetween(2, 5));
530530
ByteArray ba1 = bigarrays.newByteArray(length, false);
531-
BytesReference pbr = new PagedBytesReference(bigarrays, ba1, length);
531+
BytesReference pbr = new PagedBytesReference(ba1, length);
532532

533533
// test equality of slices
534534
int sliceFrom = randomIntBetween(0, pbr.length());

test/framework/src/main/java/org/elasticsearch/index/shard/IndexShardTestCase.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -455,6 +455,12 @@ protected IndexShard newStartedShard(final boolean primary) throws IOException {
455455
return newStartedShard(primary, Settings.EMPTY);
456456
}
457457

458+
/**
459+
* Creates a new empty shard and starts it.
460+
*
461+
* @param primary controls whether the shard will be a primary or a replica.
462+
* @param settings the settings to use for this shard
463+
*/
458464
protected IndexShard newStartedShard(final boolean primary, Settings settings) throws IOException {
459465
return newStartedShard(primary, settings, new InternalEngineFactory());
460466
}

0 commit comments

Comments
 (0)