FS Gateway: Allow to configure is native file copying will be used, closes #202.
This commit is contained in:
parent
5ef421e779
commit
c2d583064e
|
@ -71,6 +71,9 @@ public class FsIndexShardGateway extends AbstractIndexShardComponent implements
|
||||||
|
|
||||||
private final Store store;
|
private final Store store;
|
||||||
|
|
||||||
|
|
||||||
|
private final boolean nativeCopy;
|
||||||
|
|
||||||
private final File location;
|
private final File location;
|
||||||
|
|
||||||
private final File locationIndex;
|
private final File locationIndex;
|
||||||
|
@ -85,6 +88,8 @@ public class FsIndexShardGateway extends AbstractIndexShardComponent implements
|
||||||
this.store = store;
|
this.store = store;
|
||||||
this.recoveryThrottler = recoveryThrottler;
|
this.recoveryThrottler = recoveryThrottler;
|
||||||
|
|
||||||
|
this.nativeCopy = componentSettings.getAsBoolean("native_copy", true);
|
||||||
|
|
||||||
this.location = new File(((FsIndexGateway) fsIndexGateway).indexGatewayHome(), Integer.toString(shardId.id()));
|
this.location = new File(((FsIndexGateway) fsIndexGateway).indexGatewayHome(), Integer.toString(shardId.id()));
|
||||||
this.locationIndex = new File(location, "index");
|
this.locationIndex = new File(location, "index");
|
||||||
this.locationTranslog = new File(location, "translog");
|
this.locationTranslog = new File(location, "translog");
|
||||||
|
@ -167,7 +172,7 @@ public class FsIndexShardGateway extends AbstractIndexShardComponent implements
|
||||||
@Override public void run() {
|
@Override public void run() {
|
||||||
File copyTo = new File(locationIndex, fileName);
|
File copyTo = new File(locationIndex, fileName);
|
||||||
try {
|
try {
|
||||||
copyFromDirectory(snapshotIndexCommit.getDirectory(), fileName, copyTo);
|
copyFromDirectory(snapshotIndexCommit.getDirectory(), fileName, copyTo, nativeCopy);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
lastException.set(new IndexShardGatewaySnapshotFailedException(shardId, "Failed to copy to [" + copyTo + "], from dir [" + snapshotIndexCommit.getDirectory() + "] and file [" + fileName + "]", e));
|
lastException.set(new IndexShardGatewaySnapshotFailedException(shardId, "Failed to copy to [" + copyTo + "], from dir [" + snapshotIndexCommit.getDirectory() + "] and file [" + fileName + "]", e));
|
||||||
} finally {
|
} finally {
|
||||||
|
@ -249,7 +254,7 @@ public class FsIndexShardGateway extends AbstractIndexShardComponent implements
|
||||||
indexTotalFilesSize += snapshotIndexCommit.getDirectory().fileLength(snapshotIndexCommit.getSegmentsFileName());
|
indexTotalFilesSize += snapshotIndexCommit.getDirectory().fileLength(snapshotIndexCommit.getSegmentsFileName());
|
||||||
long time = System.currentTimeMillis();
|
long time = System.currentTimeMillis();
|
||||||
copyFromDirectory(snapshotIndexCommit.getDirectory(), snapshotIndexCommit.getSegmentsFileName(),
|
copyFromDirectory(snapshotIndexCommit.getDirectory(), snapshotIndexCommit.getSegmentsFileName(),
|
||||||
new File(locationIndex, snapshotIndexCommit.getSegmentsFileName()));
|
new File(locationIndex, snapshotIndexCommit.getSegmentsFileName()), nativeCopy);
|
||||||
indexTime += (System.currentTimeMillis() - time);
|
indexTime += (System.currentTimeMillis() - time);
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
@ -324,7 +329,7 @@ public class FsIndexShardGateway extends AbstractIndexShardComponent implements
|
||||||
Thread.sleep(recoveryThrottler.throttleInterval().millis());
|
Thread.sleep(recoveryThrottler.throttleInterval().millis());
|
||||||
}
|
}
|
||||||
throttlingWaitTime.addAndGet(System.currentTimeMillis() - throttlingStartTime);
|
throttlingWaitTime.addAndGet(System.currentTimeMillis() - throttlingStartTime);
|
||||||
copyToDirectory(file, store.directory(), file.getName());
|
copyToDirectory(file, store.directory(), file.getName(), nativeCopy);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logger.debug("Failed to read [" + file + "] into [" + store + "]", e);
|
logger.debug("Failed to read [" + file + "] into [" + store + "]", e);
|
||||||
lastException.set(e);
|
lastException.set(e);
|
||||||
|
|
|
@ -80,8 +80,8 @@ public class Directories {
|
||||||
return checksum(dir.openInput(name));
|
return checksum(dir.openInput(name));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void copyFromDirectory(Directory dir, String fileName, File copyTo) throws IOException {
|
public static void copyFromDirectory(Directory dir, String fileName, File copyTo, boolean nativeCopy) throws IOException {
|
||||||
if (dir instanceof FSDirectory) {
|
if (nativeCopy && (dir instanceof FSDirectory)) {
|
||||||
if (!copyTo.exists()) {
|
if (!copyTo.exists()) {
|
||||||
copyTo.createNewFile();
|
copyTo.createNewFile();
|
||||||
}
|
}
|
||||||
|
@ -127,8 +127,8 @@ public class Directories {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void copyToDirectory(File copyFrom, Directory dir, String fileName) throws IOException {
|
public static void copyToDirectory(File copyFrom, Directory dir, String fileName, boolean nativeCopy) throws IOException {
|
||||||
if (dir instanceof FSDirectory) {
|
if (nativeCopy && (dir instanceof FSDirectory)) {
|
||||||
File destinationFile = new File(((FSDirectory) dir).getFile(), fileName);
|
File destinationFile = new File(((FSDirectory) dir).getFile(), fileName);
|
||||||
if (!destinationFile.exists()) {
|
if (!destinationFile.exists()) {
|
||||||
destinationFile.createNewFile();
|
destinationFile.createNewFile();
|
||||||
|
|
Loading…
Reference in New Issue