Write version into dirty file queue files

GitOrigin-RevId: 2d6b881af52fad08a70eea1ff20f81470aca3699
This commit is contained in:
Liudmila Kornilova
2024-02-12 15:57:23 +01:00
committed by intellij-monorepo-bot
parent af9fa6862f
commit 2d99d38d8d
2 changed files with 24 additions and 1 deletions

View File

@@ -21,6 +21,8 @@ object PersistentDirtyFilesQueue {
private val isUnittestMode: Boolean
get() = application.isUnitTestMode
val currentVersion = 1L
@JvmStatic
fun getQueuesDir(): Path = PathManager.getIndexRoot() / "dirty-file-queues"
@@ -44,7 +46,13 @@ object PersistentDirtyFilesQueue {
val result = IntArrayList()
try {
DataInputStream(queueFile.inputStream().buffered()).use {
val storedVfsVersion = it.readLong()
val version = it.readLong()
val storedVfsVersion = if (version < 10L) {
// we can assume that small numbers are dirty files queue version and not vfs version
// because vfs version is vfs creation timestamp that is System.currentTimeMillis()
it.readLong()
}
else version
if (storedVfsVersion == currentVfsVersion) {
while (it.available() > -1) {
result.add(it.readInt())
@@ -67,12 +75,18 @@ object PersistentDirtyFilesQueue {
@JvmStatic
fun storeIndexingQueue(queueFile: Path, fileIds: IntCollection, vfsVersion: Long) {
storeIndexingQueue(queueFile, fileIds, vfsVersion, currentVersion)
}
@JvmStatic
fun storeIndexingQueue(queueFile: Path, fileIds: IntCollection, vfsVersion: Long, version: Long) {
try {
if (fileIds.isEmpty()) {
queueFile.deleteIfExists()
}
queueFile.parent.createDirectories()
DataOutputStream(queueFile.outputStream().buffered()).use {
if (version > 0) it.writeLong(version)
it.writeLong(vfsVersion)
fileIds.forEach { fileId ->
it.writeInt(fileId)

View File

@@ -24,4 +24,13 @@ class PersistentDirtyFilesQueueTest {
Assert.assertEquals(IntList.of(1, 2, 3), PersistentDirtyFilesQueue.readIndexingQueue(file, vfsVersion))
Assert.assertEquals(IntList.of(), PersistentDirtyFilesQueue.readIndexingQueue(file, vfsVersion + 1))
}
@Test
fun `test unversioned file is read correctly`() {
val file = tempDir.newDirectoryPath().resolve("test-PersistentDirtyFilesQueue")
val vfsVersion = 987L
PersistentDirtyFilesQueue.storeIndexingQueue(file, IntList.of(1, 2, 3), vfsVersion, 0)
Assert.assertEquals(IntList.of(1, 2, 3), PersistentDirtyFilesQueue.readIndexingQueue(file, vfsVersion))
}
}