Fix integration tests failure (#2067)

Fixed integration tests failure on Linux with Kernel 5.16.x

Signed-off-by: Andrey Pleskach <ples@aiven.io>
This commit is contained in:
Andrey Pleskach 2022-02-11 15:40:04 +01:00 committed by GitHub
parent 892801a074
commit 27ed6fc82c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 50 additions and 6 deletions

View File

@ -51,6 +51,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
@ -401,6 +402,7 @@ public class OsProbe {
long numberOfPeriods = -1;
long numberOfTimesThrottled = -1;
long timeThrottledNanos = -1;
for (final String line : lines) {
final String[] fields = line.split("\\s+");
switch (fields[0]) {
@ -415,9 +417,17 @@ public class OsProbe {
break;
}
}
assert numberOfPeriods != -1;
assert numberOfTimesThrottled != -1;
assert timeThrottledNanos != -1;
if (isCpuStatWarningsLogged.getAndSet(true) == false) {
if (numberOfPeriods == -1) {
logger.warn("Expected to see nr_periods filed but found nothing");
}
if (numberOfTimesThrottled == -1) {
logger.warn("Expected to see nr_throttled filed but found nothing");
}
if (timeThrottledNanos == -1) {
logger.warn("Expected to see throttled_time filed but found nothing");
}
}
return new OsStats.Cgroup.CpuStat(numberOfPeriods, numberOfTimesThrottled, timeThrottledNanos);
}
@ -440,7 +450,7 @@ public class OsProbe {
@SuppressForbidden(reason = "access /sys/fs/cgroup/cpu")
List<String> readSysFsCgroupCpuAcctCpuStat(final String controlGroup) throws IOException {
final List<String> lines = Files.readAllLines(PathUtils.get("/sys/fs/cgroup/cpu", controlGroup, "cpu.stat"));
assert lines != null && lines.size() == 3;
assert lines != null && lines.isEmpty() == false;
return lines;
}
@ -588,11 +598,18 @@ public class OsProbe {
return OsProbeHolder.INSTANCE;
}
OsProbe() {
private final Logger logger;
private AtomicBoolean isCpuStatWarningsLogged = new AtomicBoolean(false);
OsProbe() {
this(LogManager.getLogger(OsProbe.class));
}
private final Logger logger = LogManager.getLogger(getClass());
/*For testing purpose*/
OsProbe(final Logger logger) {
this.logger = logger;
}
OsInfo osInfo(long refreshInterval, int allocatedProcessors) throws IOException {
return new OsInfo(

View File

@ -50,9 +50,17 @@ import java.util.List;
import java.util.Locale;
import java.util.stream.Collectors;
import org.apache.logging.log4j.Logger;
import org.apache.lucene.util.Constants;
import org.opensearch.test.OpenSearchTestCase;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
public class OsProbeTests extends OpenSearchTestCase {
public void testOsInfo() throws IOException {
@ -277,6 +285,24 @@ public class OsProbeTests extends OpenSearchTestCase {
assertNull(cgroup);
}
public void testLogWarnCpuMessageOnlyOnes() {
final Logger logger = mock(Logger.class);
final OsProbe noCpuStatsOsProbe = new OsProbe(logger) {
@Override
List<String> readSysFsCgroupCpuAcctCpuStat(String controlGroup) throws IOException {
return Collections.singletonList("nr_periods 1");
}
};
noCpuStatsOsProbe.osStats();
// no nr_throttled and throttled_time
verify(logger, times(2)).warn(anyString());
reset(logger);
noCpuStatsOsProbe.osStats();
verify(logger, never()).warn(anyString());
}
private static List<String> getProcSelfGroupLines(String hierarchy) {
return Arrays.asList(
"10:freezer:/",
@ -361,4 +387,5 @@ public class OsProbeTests extends OpenSearchTestCase {
}
};
}
}