Skip to content

Commit 2ddfc6e

Browse files
committed
RUM-6171: Make lastCleanupTimestamp thread-safe
1 parent ff7093a commit 2ddfc6e

File tree

1 file changed

+5
-6
lines changed

1 file changed

+5
-6
lines changed

dd-sdk-android-core/src/main/kotlin/com/datadog/android/core/internal/persistence/file/batch/BatchFileOrchestrator.kt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,9 @@ import com.datadog.android.core.internal.persistence.file.mkdirsSafe
2727
import java.io.File
2828
import java.util.Locale
2929
import java.util.concurrent.atomic.AtomicInteger
30+
import java.util.concurrent.atomic.AtomicLong
3031
import kotlin.math.roundToLong
3132

32-
// TODO RUM-438 Improve this class: need to make it thread-safe and optimize work with file
33-
// system in order to reduce the number of syscalls (which are expensive) for files already seen
3433
@Suppress("TooManyFunctions")
3534
internal class BatchFileOrchestrator(
3635
private val rootDir: File,
@@ -52,7 +51,7 @@ internal class BatchFileOrchestrator(
5251
private var previousFile: File? = null
5352
private var previousFileItemCount: Long = 0
5453
private var lastFileAccessTimestamp: Long = 0L
55-
private var lastCleanupTimestamp: Long = 0L
54+
private val lastCleanupTimestamp: AtomicLong = AtomicLong(0L)
5655
private var isFileObserverStarted: Boolean = false
5756

5857
private val knownFiles: MutableSet<File> = mutableSetOf()
@@ -91,7 +90,7 @@ internal class BatchFileOrchestrator(
9190
var files = listBatchFiles()
9291
files = deleteObsoleteFiles(files)
9392
freeSpaceIfNeeded(files)
94-
lastCleanupTimestamp = System.currentTimeMillis()
93+
lastCleanupTimestamp.set(System.currentTimeMillis())
9594
}
9695

9796
return getReusableWritableFile() ?: createNewFile()
@@ -104,7 +103,7 @@ internal class BatchFileOrchestrator(
104103
}
105104

106105
val files = deleteObsoleteFiles(listSortedBatchFiles())
107-
lastCleanupTimestamp = System.currentTimeMillis()
106+
lastCleanupTimestamp.set(System.currentTimeMillis())
108107
pendingFiles.set(files.count())
109108

110109
return files.firstOrNull {
@@ -362,7 +361,7 @@ internal class BatchFileOrchestrator(
362361
}
363362

364363
private fun canDoCleanup(): Boolean {
365-
return System.currentTimeMillis() - lastCleanupTimestamp > config.cleanupFrequencyThreshold
364+
return System.currentTimeMillis() - lastCleanupTimestamp.get() > config.cleanupFrequencyThreshold
366365
}
367366

368367
private val File.metadata: File

0 commit comments

Comments
 (0)