use of java.nio.file.OpenOption in project cryptofs by cryptomator.
the class CryptoFileSystemProviderTest method testNewAsyncFileChannelReturnsAsyncDelegatingFileChannelWithNewFileChannelAndExecutor.
@Test
@SuppressWarnings("deprecation")
public void testNewAsyncFileChannelReturnsAsyncDelegatingFileChannelWithNewFileChannelAndExecutor() throws IOException {
@SuppressWarnings("unchecked") Set<OpenOption> options = mock(Set.class);
ExecutorService executor = mock(ExecutorService.class);
FileChannel channel = mock(FileChannel.class);
when(cryptoFileSystem.newFileChannel(cryptoPath, options)).thenReturn(channel);
AsynchronousFileChannel result = inTest.newAsynchronousFileChannel(cryptoPath, options, executor);
assertThat(result, is(instanceOf(AsyncDelegatingFileChannel.class)));
AsyncDelegatingFileChannel asyncDelegatingFileChannel = (AsyncDelegatingFileChannel) result;
assertThat(asyncDelegatingFileChannel.getChannel(), is(channel));
assertThat(asyncDelegatingFileChannel.getExecutor(), is(executor));
}
use of java.nio.file.OpenOption in project ignite by apache.
the class GridIoManagerFileTransmissionSelfTest method testFileHandlerReconnectOnReadFail.
/**
* @throws Exception If fails.
*/
@Test(expected = IgniteCheckedException.class)
public void testFileHandlerReconnectOnReadFail() throws Exception {
final String chunkDownloadExMsg = "Test exception. Chunk processing error.";
snd = startGrid(0);
rcv = startGrid(1);
File fileToSend = createFileRandomData("testFile", 5 * 1024 * 1024);
final AtomicInteger readChunks = new AtomicInteger();
transmissionFileIoFactory(rcv, new FileIOFactory() {
@Override
public FileIO create(File file, OpenOption... modes) throws IOException {
fileIo[0] = IO_FACTORY.create(file, modes);
// Blocking writer and stopping node FileIo.
return new FileIODecorator(fileIo[0]) {
@Override
public long transferFrom(ReadableByteChannel src, long position, long count) throws IOException {
// Read 4 chunks than throw an exception to emulate error processing.
if (readChunks.incrementAndGet() == 4)
throw new IgniteException(chunkDownloadExMsg);
return super.transferFrom(src, position, count);
}
};
}
});
rcv.context().io().addTransmissionHandler(topic, new DefaultTransmissionHandler(rcv, fileToSend, tempStore) {
@Override
public void onException(UUID nodeId, Throwable err) {
assertEquals(chunkDownloadExMsg, err.getMessage());
}
});
try (GridIoManager.TransmissionSender sender = snd.context().io().openTransmissionSender(rcv.localNode().id(), topic)) {
sender.send(fileToSend, TransmissionPolicy.FILE);
}
}
use of java.nio.file.OpenOption in project ignite by apache.
the class CorruptedTreeFailureHandlingTest method testCorruptedPage.
/**
* Check that if a corrupted page exists, an {@link CorruptedTreeException}
* will be thrown and a diagnostic file will be generated.
*
* @throws Exception If failed.
*/
@Test
public void testCorruptedPage() throws Exception {
IgniteEx srv = startGrid(0);
File diagnosticDir = new File(srv.context().config().getWorkDirectory(), "diagnostic");
FileUtils.deleteDirectory(diagnosticDir);
srv.cluster().state(ClusterState.ACTIVE);
IgniteCache<Integer, Integer> cache = srv.getOrCreateCache(DEFAULT_CACHE_NAME);
for (int i = 0; i < 10; i++) cache.put(i, i);
int pageSize = srv.configuration().getDataStorageConfiguration().getPageSize();
int grpId = srv.context().cache().cacheGroups().stream().filter(context -> context.cacheOrGroupName().equals(DEFAULT_CACHE_NAME)).findAny().orElseThrow(() -> new RuntimeException("Cache group not found")).groupId();
stopGrid(0, false);
// Node is stopped, we're ready to corrupt partition data.
long link = linkRef.get();
long pageId = PageIdUtils.pageId(link);
int itemId = PageIdUtils.itemId(link);
ByteBuffer pageBuf = ByteBuffer.allocateDirect(pageSize);
OpenOption[] options = { StandardOpenOption.READ, StandardOpenOption.WRITE };
try (RandomAccessFileIO fileIO = new RandomAccessFileIO(fileRef.get(), options)) {
DataPageIO dataPageIO = DataPageIO.VERSIONS.latest();
long pageOff = pageSize + PageIdUtils.pageIndex(pageId) * pageSize;
// Read index page.
fileIO.position(pageOff);
fileIO.readFully(pageBuf);
long pageAddr = GridUnsafe.bufferAddress(pageBuf);
// Remove existing item from index page.
dataPageIO.removeRow(pageAddr, itemId, pageSize);
// Recalculate CRC.
PageIO.setCrc(pageAddr, 0);
pageBuf.rewind();
PageIO.setCrc(pageAddr, FastCrc.calcCrc(pageBuf, pageSize));
// Write it back.
pageBuf.rewind();
fileIO.position(pageOff);
fileIO.writeFully(pageBuf);
}
LogListener logLsnr = LogListener.matches("CorruptedTreeException has occurred. " + "To diagnose it, make a backup of the following directories: ").build();
srv = startGrid(0, cfg -> {
cfg.setGridLogger(new ListeningTestLogger(cfg.getGridLogger(), logLsnr));
});
// Add modified page to WAL so it won't be restored to previous (valid) state.
pageBuf.rewind();
ByteBuffer cpBuf = ByteBuffer.allocate(pageBuf.capacity());
cpBuf.put(pageBuf);
PageSnapshot pageSnapshot = new PageSnapshot(new FullPageId(pageId, grpId), cpBuf.array(), pageSize);
srv.context().cache().context().wal().log(pageSnapshot);
// Access cache.
cache = srv.cache(DEFAULT_CACHE_NAME);
try {
for (int i = 0; i < CACHE_ENTRIES; i++) cache.get(i);
fail("Cache operations are expected to fail");
} catch (Throwable e) {
assertTrue(X.hasCause(e, CorruptedTreeException.class));
}
assertTrue(GridTestUtils.waitForCondition(() -> G.allGrids().isEmpty(), 10_000L));
assertTrue(diagnosticDir.exists());
assertTrue(diagnosticDir.isDirectory());
Pattern corruptedPagesFileNamePtrn = corruptedPagesFileNamePattern();
File[] txtFiles = diagnosticDir.listFiles((dir, name) -> corruptedPagesFileNamePtrn.matcher(name).matches());
assertFalse(F.isEmpty(txtFiles));
assertEquals(1, txtFiles.length);
assertTrue(logLsnr.check());
}
use of java.nio.file.OpenOption in project ignite by apache.
the class IgniteSnapshotManagerSelfTest method testSnapshotLocalPartitionNotEnoughSpace.
/**
* @throws Exception If fails.
*/
@Test
public void testSnapshotLocalPartitionNotEnoughSpace() throws Exception {
String err_msg = "Test exception. Not enough space.";
AtomicInteger throwCntr = new AtomicInteger();
RandomAccessFileIOFactory ioFactory = new RandomAccessFileIOFactory();
IgniteEx ig = startGridWithCache(dfltCacheCfg.setAffinity(new ZeroPartitionAffinityFunction()), CACHE_KEYS_RANGE);
// Change data after backup.
for (int i = 0; i < CACHE_KEYS_RANGE; i++) ig.cache(DEFAULT_CACHE_NAME).put(i, 2 * i);
GridCacheSharedContext<?, ?> cctx0 = ig.context().cache().context();
IgniteSnapshotManager mgr = snp(ig);
mgr.ioFactory(new FileIOFactory() {
@Override
public FileIO create(File file, OpenOption... modes) throws IOException {
FileIO fileIo = ioFactory.create(file, modes);
if (file.getName().equals(IgniteSnapshotManager.partDeltaFileName(0)))
return new FileIODecorator(fileIo) {
@Override
public int writeFully(ByteBuffer srcBuf) throws IOException {
if (throwCntr.incrementAndGet() == 3)
throw new IOException(err_msg);
return super.writeFully(srcBuf);
}
};
return fileIo;
}
});
IgniteInternalFuture<?> snpFut = startLocalSnapshotTask(cctx0, SNAPSHOT_NAME, F.asMap(CU.cacheId(DEFAULT_CACHE_NAME), null), encryption, mgr.localSnapshotSenderFactory().apply(SNAPSHOT_NAME));
// Check the right exception thrown.
assertThrowsAnyCause(log, snpFut::get, IOException.class, err_msg);
}
use of java.nio.file.OpenOption in project cloudsim-plus by manoelcampos.
the class UtilizationModelPlanetLabTest method createTempTraceFile.
private String createTempTraceFile(final int numLines, boolean includeHeaderWithLinesNumber) {
final OpenOption[] options = { StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING };
final String dir = ResourceLoader.getResourcePath(getClass(), "./");
final var path = Paths.get(dir, TEMP_TRACE);
try (BufferedWriter writer = Files.newBufferedWriter(path, options)) {
if (includeHeaderWithLinesNumber) {
writer.write("#" + numLines + System.lineSeparator());
}
for (int i = 0; i < numLines; i++) {
writer.write(i + System.lineSeparator());
}
return path.toString();
} catch (IOException e) {
throw new UncheckedIOException(e);
}
}
Aggregations