private List collectCdcSegmentsFromFileSystem()

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;
    }