From 6e1afb5e5c0fd95b9ddd8f493c9668463928a100 Mon Sep 17 00:00:00 2001 From: Kenneth Endfinger Date: Mon, 21 Feb 2022 19:30:27 -0500 Subject: [PATCH] Heimdall: Fix bug where DB being disabled might cause errors. --- .../kubelet/foundation/heimdall/FoundationHeimdallPlugin.kt | 2 +- .../kubelet/foundation/heimdall/buffer/BufferFlushThread.kt | 5 +++++ .../cloud/kubelet/foundation/heimdall/buffer/EventBuffer.kt | 4 ++++ .../foundation/gjallarhorn/export/CombinedChunkFormat.kt | 3 ++- 4 files changed, 12 insertions(+), 2 deletions(-) diff --git a/foundation-heimdall/src/main/kotlin/cloud/kubelet/foundation/heimdall/FoundationHeimdallPlugin.kt b/foundation-heimdall/src/main/kotlin/cloud/kubelet/foundation/heimdall/FoundationHeimdallPlugin.kt index b32aa8f..6ca7c9b 100644 --- a/foundation-heimdall/src/main/kotlin/cloud/kubelet/foundation/heimdall/FoundationHeimdallPlugin.kt +++ b/foundation-heimdall/src/main/kotlin/cloud/kubelet/foundation/heimdall/FoundationHeimdallPlugin.kt @@ -29,7 +29,7 @@ import kotlin.io.path.inputStream class FoundationHeimdallPlugin : JavaPlugin(), Listener { private lateinit var config: HeimdallConfig private lateinit var pool: HikariDataSource - internal lateinit var db: Database + internal var db: Database? = null private val buffer = EventBuffer() private val bufferFlushThread = BufferFlushThread(this, buffer) diff --git a/foundation-heimdall/src/main/kotlin/cloud/kubelet/foundation/heimdall/buffer/BufferFlushThread.kt b/foundation-heimdall/src/main/kotlin/cloud/kubelet/foundation/heimdall/buffer/BufferFlushThread.kt index 1c3eb26..98e46bf 100644 --- a/foundation-heimdall/src/main/kotlin/cloud/kubelet/foundation/heimdall/buffer/BufferFlushThread.kt +++ b/foundation-heimdall/src/main/kotlin/cloud/kubelet/foundation/heimdall/buffer/BufferFlushThread.kt @@ -31,6 +31,11 @@ class BufferFlushThread(val plugin: FoundationHeimdallPlugin, val buffer: EventB fun flush() { try { + val db = plugin.db + if (db == null) { + buffer.clear() + return + } transaction(plugin.db) { val count = buffer.flush(this) if (count > 0) { diff --git a/foundation-heimdall/src/main/kotlin/cloud/kubelet/foundation/heimdall/buffer/EventBuffer.kt b/foundation-heimdall/src/main/kotlin/cloud/kubelet/foundation/heimdall/buffer/EventBuffer.kt index 88f53ba..97a3adf 100644 --- a/foundation-heimdall/src/main/kotlin/cloud/kubelet/foundation/heimdall/buffer/EventBuffer.kt +++ b/foundation-heimdall/src/main/kotlin/cloud/kubelet/foundation/heimdall/buffer/EventBuffer.kt @@ -21,4 +21,8 @@ class EventBuffer { fun push(event: HeimdallEvent) { events.add(event) } + + fun clear() { + events = mutableListOf() + } } diff --git a/tool-gjallarhorn/src/main/kotlin/cloud/kubelet/foundation/gjallarhorn/export/CombinedChunkFormat.kt b/tool-gjallarhorn/src/main/kotlin/cloud/kubelet/foundation/gjallarhorn/export/CombinedChunkFormat.kt index f181f1a..8e7f1d7 100644 --- a/tool-gjallarhorn/src/main/kotlin/cloud/kubelet/foundation/gjallarhorn/export/CombinedChunkFormat.kt +++ b/tool-gjallarhorn/src/main/kotlin/cloud/kubelet/foundation/gjallarhorn/export/CombinedChunkFormat.kt @@ -2,8 +2,9 @@ package cloud.kubelet.foundation.gjallarhorn.export import cloud.kubelet.foundation.gjallarhorn.state.BlockExpanse import cloud.kubelet.foundation.gjallarhorn.state.SparseBlockStateMap +import kotlinx.serialization.Serializable -@kotlinx.serialization.Serializable +@Serializable class CombinedChunkFormat( val expanse: BlockExpanse, val map: SparseBlockStateMap