+ * Example of file name prefix is 45_fooid where 45 represents the base offset for the segment and + * fooid represents the unique {@link org.apache.kafka.server.log.remote.storage.RemoteLogSegmentId} + * + * @param remoteLogSegmentMetadata remote segment for the remote indexes + * @return string which should be used as prefix for on-disk representation of remote indexes + */ + private static String generateFileNamePrefixForIndex(RemoteLogSegmentMetadata remoteLogSegmentMetadata) { + long startOffset = remoteLogSegmentMetadata.startOffset(); + Uuid segmentId = remoteLogSegmentMetadata.remoteLogSegmentId().id(); + // uuid.toString uses URL encoding which is safe for filenames and URLs. + return startOffset + "_" + segmentId.toString(); + } + + public static File remoteOffsetIndexFile(File dir, RemoteLogSegmentMetadata remoteLogSegmentMetadata) { + return new File(dir, remoteOffsetIndexFileName(remoteLogSegmentMetadata)); + } + + public static String remoteOffsetIndexFileName(RemoteLogSegmentMetadata remoteLogSegmentMetadata) { + String prefix = generateFileNamePrefixForIndex(remoteLogSegmentMetadata); + return prefix + LogFileUtils.INDEX_FILE_SUFFIX; + } + + public static File remoteTimeIndexFile(File dir, RemoteLogSegmentMetadata remoteLogSegmentMetadata) { + return new File(dir, remoteTimeIndexFileName(remoteLogSegmentMetadata)); + } + + public static String remoteTimeIndexFileName(RemoteLogSegmentMetadata remoteLogSegmentMetadata) { + return generateFileNamePrefixForIndex(remoteLogSegmentMetadata) + TIME_INDEX_FILE_SUFFIX; + } + + public static File remoteTransactionIndexFile(File dir, RemoteLogSegmentMetadata remoteLogSegmentMetadata) { + return new File(dir, remoteTransactionIndexFileName(remoteLogSegmentMetadata)); + } + + public static String remoteTransactionIndexFileName(RemoteLogSegmentMetadata remoteLogSegmentMetadata) { + return generateFileNamePrefixForIndex(remoteLogSegmentMetadata) + LogFileUtils.TXN_INDEX_FILE_SUFFIX; + } + +} \ No newline at end of file