MarginaliaSearch/code/processes/loading-process/java/nu/marginalia/loading/LoaderIndexJournalWriter.java

61 lines
1.7 KiB
Java
Raw Normal View History

package nu.marginalia.loading;
2023-03-04 12:19:01 +00:00
import com.google.inject.Inject;
import com.google.inject.Singleton;
import nu.marginalia.IndexLocations;
import nu.marginalia.index.journal.IndexJournal;
import nu.marginalia.index.journal.IndexJournalSlopWriter;
import nu.marginalia.model.processed.SlopDocumentRecord;
import nu.marginalia.storage.FileStorageService;
2023-03-04 12:19:01 +00:00
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.nio.file.Path;
2023-03-04 12:19:01 +00:00
@Singleton
public class LoaderIndexJournalWriter {
private static final Logger logger = LoggerFactory.getLogger(LoaderIndexJournalWriter.class);
private final Path journalPath;
2023-03-04 12:19:01 +00:00
private IndexJournalSlopWriter currentWriter = null;
private long recordsWritten = 0;
private int page;
2023-03-04 12:19:01 +00:00
@Inject
public LoaderIndexJournalWriter(FileStorageService fileStorageService) throws IOException {
var indexArea = IndexLocations.getIndexConstructionArea(fileStorageService);
2023-03-04 12:19:01 +00:00
journalPath = IndexJournal.allocateName(indexArea);
page = IndexJournal.numPages(journalPath);
switchToNextVersion();
2023-03-04 12:19:01 +00:00
logger.info("Creating Journal Writer {}", indexArea);
}
private void switchToNextVersion() throws IOException {
if (currentWriter != null) {
currentWriter.close();
2023-08-07 10:57:38 +00:00
}
2023-03-04 12:19:01 +00:00
currentWriter = new IndexJournalSlopWriter(journalPath, page++);
}
2023-03-04 12:19:01 +00:00
public void putWords(long header, SlopDocumentRecord.KeywordsProjection data) throws IOException
{
if (++recordsWritten > 200_000) {
recordsWritten = 0;
switchToNextVersion();
}
2023-03-04 12:19:01 +00:00
currentWriter.put(header, data);
2023-03-04 12:19:01 +00:00
}
public void close() throws IOException {
currentWriter.close();
2023-03-04 12:19:01 +00:00
}
}