< prev index next >
test/jdk/java/nio/channels/FileChannel/directio/DirectIOTest.java
Print this page
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2021, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
@@ -45,34 +45,41 @@
import java.nio.file.StandardOpenOption;
import com.sun.nio.file.ExtendedOpenOption;
public class DirectIOTest {
- private static final int SIZE = 4096;
+ private static final int BASE_SIZE = 4096;
+ private static long blockSize;
- private static void testWrite(Path p) throws Exception {
+ private static int testWrite(Path p) throws Exception {
try (FileChannel fc = FileChannel.open(p, StandardOpenOption.WRITE,
ExtendedOpenOption.DIRECT)) {
- FileStore fs = Files.getFileStore(p);
- int alignment = (int)fs.getBlockSize();
- ByteBuffer src = ByteBuffer.allocateDirect(SIZE + alignment - 1)
+ int bs = (int)blockSize;
+ int size = Math.max(BASE_SIZE, bs);
+ int alignment = bs;
+ ByteBuffer src = ByteBuffer.allocateDirect(size + alignment - 1)
.alignedSlice(alignment);
- for (int j = 0; j < SIZE; j++) {
+ assert src.capacity() != 0;
+ for (int j = 0; j < size; j++) {
src.put((byte)0);
}
src.flip();
fc.write(src);
+ return size;
}
}
- private static void testRead(Path p) throws Exception {
+ private static int testRead(Path p) throws Exception {
try (FileChannel fc = FileChannel.open(p, ExtendedOpenOption.DIRECT)) {
- FileStore fs = Files.getFileStore(p);
- int alignment = (int)fs.getBlockSize();
- ByteBuffer dest = ByteBuffer.allocateDirect(SIZE + alignment - 1)
+ int bs = (int)blockSize;
+ int size = Math.max(BASE_SIZE, bs);
+ int alignment = bs;
+ ByteBuffer dest = ByteBuffer.allocateDirect(size + alignment - 1)
.alignedSlice(alignment);
+ assert dest.capacity() != 0;
fc.read(dest);
+ return size;
}
}
public static Path createTempFile() throws IOException {
return Files.createTempFile(
@@ -91,35 +98,36 @@
}
}
return supported;
}
- private static boolean isFileInCache(Path p) {
+ private static boolean isFileInCache(int size, Path p) {
String path = p.toString();
- return isFileInCache0(SIZE, path);
+ return isFileInCache0(size, path);
}
private static native boolean isFileInCache0(int size, String path);
public static void main(String[] args) throws Exception {
Path p = createTempFile();
+ blockSize = Files.getFileStore(p).getBlockSize();
if (!isDirectIOSupportedByFS(p)) {
Files.delete(p);
return;
}
System.loadLibrary("DirectIO");
try {
- testWrite(p);
- if (isFileInCache(p)) {
+ int size = testWrite(p);
+ if (isFileInCache(size, p)) {
throw new RuntimeException("DirectIO is not working properly with "
+ "write. File still exists in cache!");
}
- testRead(p);
- if (isFileInCache(p)) {
+ size = testRead(p);
+ if (isFileInCache(size, p)) {
throw new RuntimeException("DirectIO is not working properly with "
+ "read. File still exists in cache!");
}
} finally {
Files.delete(p);
< prev index next >