Skip to content

Commit c94d254

Browse files
committed
saev
1 parent 852e624 commit c94d254

File tree

3 files changed

+44
-25
lines changed

3 files changed

+44
-25
lines changed

kyuubi-common/src/main/scala/org/apache/kyuubi/config/KyuubiConf.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2086,7 +2086,7 @@ object KyuubiConf {
20862086
"when there are too many expired metadata to be cleaned.")
20872087
.version("1.11.0")
20882088
.timeConf
2089-
.createWithDefault(Duration.ofMillis(100))
2089+
.createWithDefault(Duration.ofMillis(100).toMillis)
20902090

20912091
val METADATA_CLEANER_BATCH_SIZE: ConfigEntry[Int] =
20922092
buildConf("kyuubi.metadata.cleaner.batch.size")

kyuubi-server/src/main/scala/org/apache/kyuubi/server/metadata/MetadataManager.scala

Lines changed: 28 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@
1717

1818
package org.apache.kyuubi.server.metadata
1919

20+
import com.google.common.annotations.VisibleForTesting
21+
2022
import java.util.concurrent.{ConcurrentHashMap, ThreadPoolExecutor, TimeUnit}
2123
import java.util.concurrent.atomic.AtomicInteger
22-
2324
import scala.collection.JavaConverters._
24-
2525
import org.apache.kyuubi.{KyuubiException, Logging}
2626
import org.apache.kyuubi.client.api.v1.dto.Batch
2727
import org.apache.kyuubi.config.KyuubiConf
@@ -240,27 +240,7 @@ class MetadataManager extends AbstractService("MetadataManager") {
240240
val batchInterval = conf.get(KyuubiConf.METADATA_CLEANER_BATCH_INTERVAL)
241241
val cleanerTask: Runnable = () => {
242242
try {
243-
var needToCleanMetadata = true
244-
var needToCleanKubernetesInfo = true
245-
246-
while (needToCleanMetadata || needToCleanKubernetesInfo) {
247-
if (needToCleanMetadata) {
248-
needToCleanMetadata =
249-
withMetadataRequestMetrics(_metadataStore.cleanupMetadataByAge(
250-
stateMaxAge,
251-
batchSize)) >= batchSize
252-
}
253-
if (needToCleanKubernetesInfo) {
254-
needToCleanKubernetesInfo =
255-
withMetadataRequestMetrics(_metadataStore.cleanupKubernetesEngineInfoByAge(
256-
stateMaxAge,
257-
batchSize)) >= batchSize
258-
}
259-
if (needToCleanMetadata || needToCleanKubernetesInfo) {
260-
info("Sleep for " + batchInterval + "ms before next metadata cleanup batch")
261-
Thread.sleep(batchInterval)
262-
}
263-
}
243+
cleanupMetadata(stateMaxAge, batchSize, batchInterval)
264244
} catch {
265245
case e: Throwable => error("Error cleaning up the metadata by age", e)
266246
}
@@ -274,6 +254,31 @@ class MetadataManager extends AbstractService("MetadataManager") {
274254
TimeUnit.MILLISECONDS)
275255
}
276256

257+
@VisibleForTesting
258+
private[metadata] def cleanupMetadata(maxAge: Long, batchSize: Int, batchInterval: Long): Unit = {
259+
var needToCleanMetadata = true
260+
var needToCleanKubernetesInfo = true
261+
262+
while (needToCleanMetadata || needToCleanKubernetesInfo) {
263+
if (needToCleanMetadata) {
264+
needToCleanMetadata =
265+
withMetadataRequestMetrics(_metadataStore.cleanupMetadataByAge(
266+
maxAge,
267+
batchSize)) >= batchSize
268+
}
269+
if (needToCleanKubernetesInfo) {
270+
needToCleanKubernetesInfo =
271+
withMetadataRequestMetrics(_metadataStore.cleanupKubernetesEngineInfoByAge(
272+
maxAge,
273+
batchSize)) >= batchSize
274+
}
275+
if (needToCleanMetadata || needToCleanKubernetesInfo) {
276+
info("Sleep for " + batchInterval + "ms before next metadata cleanup batch")
277+
Thread.sleep(batchInterval)
278+
}
279+
}
280+
}
281+
277282
def addMetadataRetryRequest(request: MetadataRequest): Unit = {
278283
val maxRequestsAsyncRetryRefs: Int =
279284
conf.get(KyuubiConf.METADATA_REQUEST_ASYNC_RETRY_QUEUE_SIZE)

kyuubi-server/src/test/scala/org/apache/kyuubi/server/metadata/MetadataManagerSuite.scala

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,8 +212,22 @@ class MetadataManagerSuite extends KyuubiFunSuite {
212212
f(metadataManager)
213213
} finally {
214214
metadataManager.getBatches(MetadataFilter(), 0, Int.MaxValue).foreach { batch =>
215-
metadataManager.cleanupMetadataById(batch.getId)
215+
// close the batch if not ended
216+
if (batch.getEndTime == 0) {
217+
metadataManager.updateMetadata(Metadata(
218+
identifier = batch.getId,
219+
state = OperationState.CLOSED.toString,
220+
endTime = System.currentTimeMillis()), false)
221+
}
216222
}
223+
224+
metadataManager.cleanupMetadata(0, 1, 0)
225+
226+
// ensure all metadata are cleaned up
227+
eventually(timeout(3.seconds), interval(200.milliseconds)) {
228+
assert(metadataManager.getBatches(MetadataFilter(), 0, Int.MaxValue).isEmpty)
229+
}
230+
217231
// ensure no metadata request leak
218232
eventually(timeout(5.seconds), interval(200.milliseconds)) {
219233
assert(MetricsSystem.counterValue(METADATA_REQUEST_OPENED).getOrElse(0L) === 0)

0 commit comments

Comments
 (0)