33 * SPDX-License-Identifier: Apache-2.0
44 */
55
6- package org .opensearch .ml .common .breaker ;
7-
8- import lombok .extern .log4j .Log4j2 ;
9- import org .opensearch .monitor .jvm .JvmService ;
6+ package org .opensearch .ml .breaker ;
107
118import java .nio .file .Path ;
129import java .util .concurrent .ConcurrentHashMap ;
1310import java .util .concurrent .ConcurrentMap ;
1411
12+ import lombok .extern .log4j .Log4j2 ;
13+
14+ import org .opensearch .cluster .service .ClusterService ;
15+ import org .opensearch .common .settings .Settings ;
16+ import org .opensearch .monitor .jvm .JvmService ;
17+ import org .opensearch .monitor .os .OsService ;
18+
1519/**
1620 * This service registers internal system breakers and provide API for users to register their own breakers.
1721 */
@@ -20,14 +24,23 @@ public class MLCircuitBreakerService {
2024
2125 private final ConcurrentMap <BreakerName , CircuitBreaker > breakers = new ConcurrentHashMap <>();
2226 private final JvmService jvmService ;
27+ private final OsService osService ;
28+ private final Settings settings ;
29+ private final ClusterService clusterService ;
2330
2431 /**
2532 * Constructor.
2633 *
2734 * @param jvmService jvm info
35+ * @param osService os info
36+ * @param settings settings
37+ * @param clusterService clusterService
2838 */
29- public MLCircuitBreakerService (JvmService jvmService ) {
39+ public MLCircuitBreakerService (JvmService jvmService , OsService osService , Settings settings , ClusterService clusterService ) {
3040 this .jvmService = jvmService ;
41+ this .osService = osService ;
42+ this .settings = settings ;
43+ this .clusterService = clusterService ;
3144 }
3245
3346 public void registerBreaker (BreakerName name , CircuitBreaker breaker ) {
@@ -65,18 +78,21 @@ public MLCircuitBreakerService init(Path path) {
6578 log .info ("Registered ML memory breaker." );
6679 registerBreaker (BreakerName .DISK , new DiskCircuitBreaker (path .toString ()));
6780 log .info ("Registered ML disk breaker." );
81+ // Register native memory circuit breaker
82+ registerBreaker (BreakerName .NATIVE_MEMORY , new NativeMemoryCircuitBreaker (this .osService , this .settings , this .clusterService ));
83+ log .info ("Registered ML native memory breaker." );
6884
6985 return this ;
7086 }
7187
7288 /**
7389 *
74- * @return the name of any open circuit breaker; otherwise return null
90+ * @return any open circuit breaker; otherwise return null
7591 */
76- public String checkOpenCB () {
92+ public ThresholdCircuitBreaker checkOpenCB () {
7793 for (CircuitBreaker breaker : breakers .values ()) {
7894 if (breaker .isOpen ()) {
79- return breaker . getName () ;
95+ return ( ThresholdCircuitBreaker ) breaker ;
8096 }
8197 }
8298
0 commit comments