in server/src/main/java/org/apache/cassandra/sidecar/handlers/cdc/ListCdcDirHandler.java [117:161]
private List<CdcSegmentInfo> collectCdcSegmentsFromFileSystem(String cdcDirPath) throws IOException
{
List<CdcSegmentInfo> segmentInfos = new ArrayList<>();
File cdcDir = Paths.get(cdcDirPath).toAbsolutePath().toFile();
if (!cdcDir.isDirectory())
{
throw new IOException("CDC directory does not exist");
}
File[] cdcFiles = cdcDir.listFiles();
if (cdcFiles == null || cdcFiles.length == 0)
{
return segmentInfos;
}
Set<String> idxFileNamePrefixes = new HashSet<>();
for (File cdcFile : cdcFiles)
{
if (CdcUtil.matchIndexExtension(cdcFile.getName()))
{
idxFileNamePrefixes.add(CdcUtil.getIdxFilePrefix(cdcFile.getName()));
}
}
for (File cdcFile : cdcFiles)
{
String fileName = cdcFile.getName();
BasicFileAttributes fileAttributes = Files.readAttributes(cdcFile.toPath(), BasicFileAttributes.class);
if (!cdcFile.exists()
|| !fileAttributes.isRegularFile() // the file just gets deleted? ignore it
|| isIndexFile(fileName) // ignore all .idx files
|| !idxFileNamePrefixes.contains(getLogFilePrefix(fileName))) // ignore .log files found without matching .idx files
{
continue;
}
CdcUtil.CdcIndex cdcIndex = parseIndexFile(new File(cdcDirPath, getIdxFileName(fileName)), fileAttributes.size());
CdcSegmentInfo segmentInfo =
new CdcSegmentInfo(fileName, fileAttributes.size(),
cdcIndex.latestFlushPosition, cdcIndex.isCompleted,
fileAttributes.lastModifiedTime().toMillis());
segmentInfos.add(segmentInfo);
}
return segmentInfos;
}