3
3
* SPDX-License-Identifier: Apache-2.0
4
4
*/
5
5
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 ;
10
7
11
8
import java .nio .file .Path ;
12
9
import java .util .concurrent .ConcurrentHashMap ;
13
10
import java .util .concurrent .ConcurrentMap ;
14
11
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
+
15
19
/**
16
20
* This service registers internal system breakers and provide API for users to register their own breakers.
17
21
*/
@@ -20,14 +24,23 @@ public class MLCircuitBreakerService {
20
24
21
25
private final ConcurrentMap <BreakerName , CircuitBreaker > breakers = new ConcurrentHashMap <>();
22
26
private final JvmService jvmService ;
27
+ private final OsService osService ;
28
+ private final Settings settings ;
29
+ private final ClusterService clusterService ;
23
30
24
31
/**
25
32
* Constructor.
26
33
*
27
34
* @param jvmService jvm info
35
+ * @param osService os info
36
+ * @param settings settings
37
+ * @param clusterService clusterService
28
38
*/
29
- public MLCircuitBreakerService (JvmService jvmService ) {
39
+ public MLCircuitBreakerService (JvmService jvmService , OsService osService , Settings settings , ClusterService clusterService ) {
30
40
this .jvmService = jvmService ;
41
+ this .osService = osService ;
42
+ this .settings = settings ;
43
+ this .clusterService = clusterService ;
31
44
}
32
45
33
46
public void registerBreaker (BreakerName name , CircuitBreaker breaker ) {
@@ -65,18 +78,21 @@ public MLCircuitBreakerService init(Path path) {
65
78
log .info ("Registered ML memory breaker." );
66
79
registerBreaker (BreakerName .DISK , new DiskCircuitBreaker (path .toString ()));
67
80
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." );
68
84
69
85
return this ;
70
86
}
71
87
72
88
/**
73
89
*
74
- * @return the name of any open circuit breaker; otherwise return null
90
+ * @return any open circuit breaker; otherwise return null
75
91
*/
76
- public String checkOpenCB () {
92
+ public ThresholdCircuitBreaker checkOpenCB () {
77
93
for (CircuitBreaker breaker : breakers .values ()) {
78
94
if (breaker .isOpen ()) {
79
- return breaker . getName () ;
95
+ return ( ThresholdCircuitBreaker ) breaker ;
80
96
}
81
97
}
82
98
0 commit comments