@Override
public boolean writeEOF(@NotNull Wire wire, long timeoutMS) {
String fileName = mappedFile.file().getAbsolutePath();
if (wire.bytes().tryReserve()) {
try {
wire.writeEndOfWire(timeoutMS, TimeUnit.MILLISECONDS, writePosition());
if (wire.bytes().writePosition() > 4 && Wires.isEndOfFile(wire.bytes().readVolatileInt(wire.bytes().writePosition() - 4))) {
QueueFileShrinkManager.scheduleShrinking(mappedFile.file(), wire.bytes().writePosition());
return true;
}
} finally {
wire.bytes().release();
}
} else {
try (MappedBytes bytes = MappedBytes.mappedBytes(mappedFile.file(), mappedFile.chunkSize())) {
Wire wire0 = WireType.valueOf(wire).apply(bytes);
wire0.writeEndOfWire(timeoutMS, TimeUnit.MILLISECONDS, writePosition());
if (wire.bytes().writePosition() > 4 && Wires.isEndOfFile(wire.bytes().readVolatileInt(wire.bytes().writePosition() - 4))) {
QueueFileShrinkManager.scheduleShrinking(mappedFile.file(), wire.bytes().writePosition());
return true;
}
} catch (Exception e) {
Jvm.warn().on(getClass(), "unable to write the EOF file=" + fileName, e);
}
}
return false;
}