Simplify new translog creation - pending files are not needed anymore
This commit is contained in:
parent
96df7ba7eb
commit
19155d8fd8
|
@ -66,27 +66,18 @@ public class TranslogWriter extends TranslogReader {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static TranslogWriter create(Type type, ShardId shardId, String translogUUID, long fileGeneration, Path file, Callback<ChannelReference> onClose, int bufferSize) throws IOException {
|
public static TranslogWriter create(Type type, ShardId shardId, String translogUUID, long fileGeneration, Path file, Callback<ChannelReference> onClose, int bufferSize) throws IOException {
|
||||||
Path pendingFile = file.resolveSibling("pending_" + file.getFileName());
|
|
||||||
final BytesRef ref = new BytesRef(translogUUID);
|
final BytesRef ref = new BytesRef(translogUUID);
|
||||||
final int headerLength = CodecUtil.headerLength(TRANSLOG_CODEC) + ref.length + RamUsageEstimator.NUM_BYTES_INT;
|
final int headerLength = CodecUtil.headerLength(TRANSLOG_CODEC) + ref.length + RamUsageEstimator.NUM_BYTES_INT;
|
||||||
/**
|
final FileChannel channel = FileChannel.open(file, StandardOpenOption.WRITE, StandardOpenOption.READ, StandardOpenOption.CREATE_NEW);
|
||||||
* We first create pending_translog, write the header, fsync it and write a checkpoint. Then we rename the pending file into
|
try {
|
||||||
* the actual file such that there is never a file without valid header. If the header is missing it's corrupted
|
|
||||||
*/
|
|
||||||
try (FileChannel channel = FileChannel.open(pendingFile, StandardOpenOption.WRITE, StandardOpenOption.CREATE_NEW)) {
|
|
||||||
// This OutputStreamDataOutput is intentionally not closed because
|
// This OutputStreamDataOutput is intentionally not closed because
|
||||||
// closing it will close the FileChannel
|
// closing it will close the FileChannel
|
||||||
OutputStreamDataOutput out = new OutputStreamDataOutput(java.nio.channels.Channels.newOutputStream(channel));
|
final OutputStreamDataOutput out = new OutputStreamDataOutput(java.nio.channels.Channels.newOutputStream(channel));
|
||||||
CodecUtil.writeHeader(out, TRANSLOG_CODEC, VERSION);
|
CodecUtil.writeHeader(out, TRANSLOG_CODEC, VERSION);
|
||||||
out.writeInt(ref.length);
|
out.writeInt(ref.length);
|
||||||
out.writeBytes(ref.bytes, ref.offset, ref.length);
|
out.writeBytes(ref.bytes, ref.offset, ref.length);
|
||||||
channel.force(false);
|
channel.force(false);
|
||||||
writeCheckpoint(headerLength, 0, file.getParent(), fileGeneration, StandardOpenOption.WRITE);
|
writeCheckpoint(headerLength, 0, file.getParent(), fileGeneration, StandardOpenOption.WRITE);
|
||||||
}
|
|
||||||
Files.move(pendingFile, file, StandardCopyOption.ATOMIC_MOVE);
|
|
||||||
FileChannel channel = FileChannel.open(file, StandardOpenOption.READ, StandardOpenOption.WRITE);
|
|
||||||
try {
|
|
||||||
channel.position(headerLength);
|
|
||||||
final TranslogWriter writer = type.create(shardId, fileGeneration, new ChannelReference(file, fileGeneration, channel, onClose), bufferSize);
|
final TranslogWriter writer = type.create(shardId, fileGeneration, new ChannelReference(file, fileGeneration, channel, onClose), bufferSize);
|
||||||
return writer;
|
return writer;
|
||||||
} catch (Throwable throwable){
|
} catch (Throwable throwable){
|
||||||
|
@ -205,7 +196,6 @@ public class TranslogWriter extends TranslogReader {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* returns a new immutable reader which only exposes the current written operation *
|
* returns a new immutable reader which only exposes the current written operation *
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue