tkalkirill commented on code in PR #947:
URL: https://github.com/apache/ignite-3/pull/947#discussion_r928624158
##########
modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/store/FilePageStoreFactory.java:
##########
@@ -52,45 +54,67 @@ public FilePageStoreFactory(FileIoFactory fileIoFactory,
int pageSize) {
/**
* Creates instance of {@link FilePageStore}.
*
- * <p>If the file exists, an attempt will be made to read its {@link
FilePageStoreHeader header} and create the {@link FilePageStore}.
+ * <p>Page stores are created based on their headers, for a file page
stores with no header, the latest version is generated for delta
+ * file page store files, headers must be present.
*
- * @param filePath File page store path.
- * @param headerBuffer Buffer for reading {@link FilePageStoreHeader
header} from {@code filePath}.
- * @return File page store.
+ * @param headerBuffer Buffer for reading headers.
+ * @param filePageStorePath File page store path.
+ * @param deltaFilePaths Paths to existing delta files page stores of the
file page storage.
* @throws IgniteInternalCheckedException if failed
*/
- public FilePageStore createPageStore(Path filePath, ByteBuffer
headerBuffer) throws IgniteInternalCheckedException {
+ public FilePageStore createPageStore(
+ ByteBuffer headerBuffer,
+ Path filePageStorePath,
+ Path... deltaFilePaths
+ ) throws IgniteInternalCheckedException {
assert headerBuffer.remaining() == pageSize : headerBuffer.remaining();
- if (!Files.exists(filePath)) {
- return createPageStore(filePath, new
FilePageStoreHeader(latestVersion, pageSize));
+ if (!Files.exists(filePageStorePath)) {
+ assert deltaFilePaths.length == 0 :
Arrays.toString(deltaFilePaths);
+
+ return createFilePageStore(filePageStorePath, new
FilePageStoreHeader(latestFilePageStoreVersion, pageSize));
}
- try (FileIo fileIo = fileIoFactory.create(filePath)) {
- FilePageStoreHeader header = readHeader(fileIo, headerBuffer);
+ try (FileIo fileIo = fileIoFactory.create(filePageStorePath)) {
+ FilePageStoreHeader header =
FilePageStoreHeader.readHeader(fileIo, headerBuffer);
if (header == null) {
- header = new FilePageStoreHeader(latestVersion, pageSize);
+ header = new FilePageStoreHeader(latestFilePageStoreVersion,
pageSize);
+ }
+
+ if (deltaFilePaths.length == 0) {
+ return createFilePageStore(filePageStorePath, header);
+ }
+
+ DeltaFilePageStoreIo[] deltaFileIos = new
DeltaFilePageStoreIo[deltaFilePaths.length];
+
+ for (int i = 0; i < deltaFilePaths.length; i++) {
+ Path deltaFilePath = deltaFilePaths[i];
+
+ assert Files.exists(deltaFilePath) : deltaFilePath;
+
+ try (FileIo deltaFileIo = fileIoFactory.create(deltaFilePath))
{
+ DeltaFilePageStoreIoHeader deltaFileHeader =
DeltaFilePageStoreIoHeader.readHeader(deltaFileIo, headerBuffer.rewind());
+
+ assert deltaFileHeader != null : deltaFileHeader;
+
+ deltaFileIos[i] =
createDeltaFilePageStoreIo(deltaFilePath, deltaFileHeader);
+ }
}
- return createPageStore(filePath, header);
+ return createFilePageStore(filePageStorePath, header,
deltaFileIos);
} catch (IOException e) {
- throw new IgniteInternalCheckedException("Error while creating
file page store [file=" + filePath + "]", e);
+ throw new IgniteInternalCheckedException("Error while creating
file page store [file=" + filePageStorePath + "]", e);
Review Comment:
Fix it
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]