protected void validateFiles(HashSet<String> groundTruth, ArrayList<IndexComponentFileReference> validFiles, FilenameFilter filter, TreeIndexFactory<? extends ITreeIndex> treeFactory, IBufferCache bufferCache) throws HyracksDataException { ArrayList<IndexComponentFileReference> tmpAllInvListsFiles = new ArrayList<>(); cleanupAndGetValidFilesInternal(filter, treeFactory, tmpAllInvListsFiles, bufferCache); for (IndexComponentFileReference cmpFileName : tmpAllInvListsFiles) { if (groundTruth.contains(cmpFileName.getSequence())) { validFiles.add(cmpFileName); } else { delete(bufferCache, cmpFileName.getFullPath()); } } }
protected FilenameFilter getTransactionFileFilter(boolean inclusive) throws HyracksDataException { String[] files = listDirFiles(baseDir, txnFileNameFilter); if (files.length == 0) { return dummyFilter; } else { return createTransactionFilter(files[0], inclusive); } }
protected String getNextComponentSequence(FilenameFilter filenameFilter) throws HyracksDataException { if (lastUsedComponentSeq == UNINITALIZED_COMPONENT_SEQ) { lastUsedComponentSeq = getOnDiskLastUsedComponentSequence(filenameFilter); } return IndexComponentFileReference.getFlushSequence(++lastUsedComponentSeq); }
protected void cleanupAndGetValidFilesInternal(FilenameFilter filter, TreeIndexFactory<? extends ITreeIndex> treeFactory, ArrayList<IndexComponentFileReference> allFiles, IBufferCache bufferCache) throws HyracksDataException { String[] files = listDirFiles(baseDir, filter); for (String fileName : files) { FileReference fileRef = getFileReference(fileName); if (treeFactory == null) { allFiles.add(IndexComponentFileReference.of(fileRef)); continue; } TreeIndexState idxState = isValidTreeIndex(treeFactory.createIndexInstance(fileRef)); if (idxState == TreeIndexState.VALID) { allFiles.add(IndexComponentFileReference.of(fileRef)); } else if (idxState == TreeIndexState.INVALID) { bufferCache.deleteFile(fileRef); } } }
private long getOnDiskLastUsedComponentSequence(FilenameFilter filenameFilter) throws HyracksDataException { long maxComponentSeq = -1; final String[] files = listDirFiles(baseDir, filenameFilter); for (String fileName : files) { maxComponentSeq = Math.max(maxComponentSeq, IndexComponentFileReference.of(fileName).getSequenceEnd()); } return maxComponentSeq; } }
@Override public LSMComponentFileReferences getRelFlushFileReference() throws HyracksDataException { final String sequence = getNextComponentSequence(COMPONENT_FILES_FILTER); return new LSMComponentFileReferences(baseDir.getChild(sequence), null, null); }
protected FileReference getFileReference(String name) { final ICompressorDecompressor compDecomp = compressorDecompressorFactory.createInstance(); //Avoid creating LAF file for NoOpCompressorDecompressor if (compDecomp != NoOpCompressorDecompressor.INSTANCE && isCompressible(name)) { final String path = baseDir.getChildPath(name); return new CompressedFileReference(baseDir.getDeviceHandle(), compDecomp, path, path + LAF_SUFFIX); } return baseDir.getChild(name); }
@Override public void recoverTransaction() throws HyracksDataException { String[] files = listDirFiles(baseDir, txnFileNameFilter); if (files.length == 0) { // Do nothing } else if (files.length > 1) { throw HyracksDataException.create(ErrorCode.FOUND_MULTIPLE_TRANSACTIONS, baseDir); } else { IoUtil.delete(baseDir.getChild(files[0])); } }
@Override public void deleteTransactionFiles() throws HyracksDataException { String[] files = listDirFiles(baseDir, txnFileNameFilter); if (files.length == 0) { // Do nothing } else if (files.length > 1) { throw HyracksDataException.create(ErrorCode.FOUND_MULTIPLE_TRANSACTIONS, baseDir); } else { //create transaction filter FilenameFilter transactionFilter = createTransactionFilter(files[0], true); String[] componentsFiles = listDirFiles(baseDir, transactionFilter); for (String fileName : componentsFiles) { FileReference file = baseDir.getChild(fileName); IoUtil.delete(file); } // delete the txn lock file IoUtil.delete(baseDir.getChild(files[0])); } }
cleanupAndGetValidFilesInternal(COMPONENT_FILES_FILTER, treeFactory, allFiles, treeFactory.getBufferCache()); delete(treeFactory.getBufferCache(), current.getFullPath()); } else {