in server/src/main/java/org/apache/cassandra/sidecar/tasks/CdcRawDirectorySpaceCleaner.java [335:378]
private void publishCdcStats(@Nullable List<CdcRawSegmentFile> cdcFiles)
{
// no cdc data consumed or exist
boolean noCdcFiles = cdcFiles == null || cdcFiles.isEmpty();
if (noCdcFiles && priorCdcFiles.isEmpty())
return;
Map<CdcRawSegmentFile, Long> currentFiles;
long totalCurrentBytes = 0L;
if (noCdcFiles)
{
currentFiles = new HashMap<>();
}
else
{
currentFiles = new HashMap<>(cdcFiles.size());
for (CdcRawSegmentFile segment : cdcFiles)
{
if (segment.exists())
{
long len = segment.length();
currentFiles.put(segment, len);
totalCurrentBytes += len;
}
}
}
// skip publishing. there is no cdc data consumed and no data exist.
if (totalCurrentBytes == 0L && priorCdcFiles.isEmpty())
{
priorCdcFiles = currentFiles;
return;
}
// consumed files is the files exist in the prior round but now are deleted.
Set<CdcRawSegmentFile> consumedFiles =
Sets.difference(priorCdcFiles.keySet(), currentFiles.keySet());
long totalConsumedBytes =
consumedFiles.stream().map(priorCdcFiles::get).reduce(0L, Long::sum);
priorCdcFiles.clear();
priorCdcFiles = currentFiles;
cdcMetrics.totalConsumedCdcBytes.metric.update(totalConsumedBytes);
cdcMetrics.totalCdcSpaceUsed.metric.setValue(totalCurrentBytes);
}