11
11
import org .opensearch .cluster .DiskUsage ;
12
12
import org .opensearch .core .common .unit .ByteSizeValue ;
13
13
14
+ import java .util .function .Function ;
14
15
import java .util .function .Supplier ;
15
16
16
17
/**
@@ -32,91 +33,71 @@ public WarmNodeDiskThresholdEvaluator(DiskThresholdSettings diskThresholdSetting
32
33
33
34
@ Override
34
35
public boolean isNodeExceedingLowWatermark (DiskUsage diskUsage ) {
35
- if (dataToFileCacheSizeRatioSupplier .get () <= 0 ) {
36
- return false ;
37
- }
38
- long totalBytes = diskUsage .getTotalBytes ();
39
- long freeSpace = diskUsage .getFreeBytes ();
40
- long freeSpaceLowThreshold = calculateFreeSpaceLowThreshold (totalBytes );
41
-
42
- return freeSpace < freeSpaceLowThreshold ;
36
+ return isNodeExceedingWatermark (diskUsage , this ::getFreeSpaceLowThreshold );
43
37
}
44
38
45
39
@ Override
46
40
public boolean isNodeExceedingHighWatermark (DiskUsage diskUsage ) {
47
- if (dataToFileCacheSizeRatioSupplier .get () <= 0 ) {
48
- return false ;
49
- }
50
- long totalBytes = diskUsage .getTotalBytes ();
51
- long freeSpace = diskUsage .getFreeBytes ();
52
- long freeSpaceHighThreshold = calculateFreeSpaceHighThreshold (totalBytes );
53
-
54
- return freeSpace < freeSpaceHighThreshold ;
41
+ return isNodeExceedingWatermark (diskUsage , this ::getFreeSpaceHighThreshold );
55
42
}
56
43
57
44
@ Override
58
45
public boolean isNodeExceedingFloodStageWatermark (DiskUsage diskUsage ) {
46
+ return isNodeExceedingWatermark (diskUsage , this ::getFreeSpaceFloodStageThreshold );
47
+ }
48
+
49
+ private boolean isNodeExceedingWatermark (DiskUsage diskUsage , Function <Long , Long > thresholdFunction ) {
59
50
if (dataToFileCacheSizeRatioSupplier .get () <= 0 ) {
60
51
return false ;
61
52
}
62
53
long totalBytes = diskUsage .getTotalBytes ();
63
54
long freeSpace = diskUsage .getFreeBytes ();
64
- long freeSpaceFloodStageThreshold = calculateFreeSpaceFloodStageThreshold (totalBytes );
55
+ long freeSpaceThreshold = thresholdFunction . apply (totalBytes );
65
56
66
- return freeSpace < freeSpaceFloodStageThreshold ;
57
+ return freeSpace < freeSpaceThreshold ;
67
58
}
68
59
69
60
@ Override
70
- public long calculateFreeSpaceLowThreshold (long totalAddressableSpace ) {
71
- // Check for percentage-based threshold
72
- double percentageThreshold = diskThresholdSettings .getFreeDiskThresholdLow ();
73
- if (percentageThreshold > 0 ) {
74
- return (long ) (totalAddressableSpace * percentageThreshold / 100.0 );
75
- }
76
-
77
- // Check for absolute bytes threshold
78
- final double dataToFileCacheSizeRatio = dataToFileCacheSizeRatioSupplier .get ();
79
- ByteSizeValue bytesThreshold = diskThresholdSettings .getFreeBytesThresholdLow ();
80
- if (bytesThreshold != null && bytesThreshold .getBytes () > 0 ) {
81
- return bytesThreshold .getBytes () * (long ) dataToFileCacheSizeRatio ;
82
- }
83
-
84
- // Default fallback
85
- return 0 ;
61
+ public long getFreeSpaceLowThreshold (long totalAddressableSpace ) {
62
+ return calculateFreeSpaceWatermarkThreshold (
63
+ diskThresholdSettings .getFreeDiskThresholdLow (),
64
+ diskThresholdSettings .getFreeBytesThresholdLow (),
65
+ totalAddressableSpace
66
+ );
86
67
}
87
68
88
69
@ Override
89
- public long calculateFreeSpaceHighThreshold (long totalAddressableSpace ) {
90
- // Check for percentage-based threshold
91
- double percentageThreshold = diskThresholdSettings .getFreeDiskThresholdHigh ();
92
- if (percentageThreshold > 0 ) {
93
- return (long ) (totalAddressableSpace * percentageThreshold / 100.0 );
94
- }
95
-
96
- // Check for absolute bytes threshold
97
- final double dataToFileCacheSizeRatio = dataToFileCacheSizeRatioSupplier .get ();
98
- ByteSizeValue bytesThreshold = diskThresholdSettings .getFreeBytesThresholdHigh ();
99
- if (bytesThreshold != null && bytesThreshold .getBytes () > 0 ) {
100
- return bytesThreshold .getBytes () * (long ) dataToFileCacheSizeRatio ;
101
- }
102
-
103
- // Default fallback
104
- return 0 ;
70
+ public long getFreeSpaceHighThreshold (long totalAddressableSpace ) {
71
+ return calculateFreeSpaceWatermarkThreshold (
72
+ diskThresholdSettings .getFreeDiskThresholdHigh (),
73
+ diskThresholdSettings .getFreeBytesThresholdHigh (),
74
+ totalAddressableSpace
75
+ );
105
76
}
106
77
107
78
@ Override
108
- public long calculateFreeSpaceFloodStageThreshold (long totalAddressableSpace ) {
79
+ public long getFreeSpaceFloodStageThreshold (long totalAddressableSpace ) {
80
+ return calculateFreeSpaceWatermarkThreshold (
81
+ diskThresholdSettings .getFreeDiskThresholdFloodStage (),
82
+ diskThresholdSettings .getFreeBytesThresholdFloodStage (),
83
+ totalAddressableSpace
84
+ );
85
+ }
86
+
87
+ private long calculateFreeSpaceWatermarkThreshold (
88
+ double freeDiskWatermarkThreshold ,
89
+ ByteSizeValue freeBytesWatermarkThreshold ,
90
+ long totalAddressableSpace
91
+ ) {
109
92
// Check for percentage-based threshold
110
- double percentageThreshold = diskThresholdSettings .getFreeDiskThresholdFloodStage ();
111
- if (percentageThreshold > 0 ) {
112
- return (long ) (totalAddressableSpace * percentageThreshold / 100.0 );
93
+ if (freeDiskWatermarkThreshold > 0 ) {
94
+ return (long ) (totalAddressableSpace * freeDiskWatermarkThreshold / 100.0 );
113
95
}
114
96
115
97
// Check for absolute bytes threshold
116
98
final double dataToFileCacheSizeRatio = dataToFileCacheSizeRatioSupplier .get ();
117
- ByteSizeValue bytesThreshold = diskThresholdSettings .getFreeBytesThresholdFloodStage ();
118
- if (bytesThreshold != null && bytesThreshold .getBytes () > 0 ) {
119
- return bytesThreshold .getBytes () * (long ) dataToFileCacheSizeRatio ;
99
+ if (freeBytesWatermarkThreshold != null && freeBytesWatermarkThreshold .getBytes () > 0 ) {
100
+ return freeBytesWatermarkThreshold .getBytes () * (long ) dataToFileCacheSizeRatio ;
120
101
}
121
102
122
103
// Default fallback
0 commit comments