Skip to content

Commit a4de933

Browse files
test: Fix smoke test for Hadoop 3.4.0
1 parent 632274f commit a4de933

File tree

5 files changed

+132
-102
lines changed

5 files changed

+132
-102
lines changed

tests/templates/kuttl/smoke/51-assert.yaml

Lines changed: 0 additions & 5 deletions
This file was deleted.
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
---
2+
apiVersion: kuttl.dev/v1beta1
3+
kind: TestAssert
4+
commands:
5+
- script: |
6+
{% if test_scenario['values']['hadoop'].find(",") > 0 %}
7+
PRODUCT_VERSION={{ test_scenario['values']['hadoop'].split(',')[0] }}
8+
{% else %}
9+
PRODUCT_VERSION={{ test_scenario['values']['hadoop'] }}
10+
{% endif %}
11+
kubectl exec --namespace=$NAMESPACE test-runner-0 -- \
12+
python /tmp/test_metrics.py $NAMESPACE $PRODUCT_VERSION

tests/templates/kuttl/smoke/51-copy-metrics-test-script.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22
apiVersion: kuttl.dev/v1beta1
33
kind: TestStep
44
commands:
5-
- script: kubectl cp -n $NAMESPACE ./metrics-test.py test-runner-0:/tmp
5+
- script: kubectl cp -n $NAMESPACE ./test_metrics.py test-runner-0:/tmp

tests/templates/kuttl/smoke/metrics-test.py

Lines changed: 0 additions & 96 deletions
This file was deleted.
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
# Every rule in the JMX configuration is covered by one expected metric.
2+
3+
import re
4+
import sys
5+
import logging
6+
7+
import requests
8+
9+
def check_metrics(
10+
namespace: str,
11+
role: str,
12+
port: int,
13+
expected_metrics: list[str]
14+
) -> None:
15+
response: requests.Response = requests.get(
16+
f'http://hdfs-{role}-default-0.hdfs-{role}-default.{namespace}.svc.cluster.local:{port}/metrics',
17+
timeout=10
18+
)
19+
assert response.ok, "Requesting metrics failed"
20+
21+
for metric in expected_metrics:
22+
assert re.search(f'^{metric}', response.text, re.MULTILINE) is not None, \
23+
f"Metric '{metric}' not found for {role}"
24+
25+
26+
def check_namenode_metrics(
27+
namespace: str,
28+
product_version: str,
29+
) -> None:
30+
expected_metrics: list[str] = [
31+
# Kind "MetricsSystem"
32+
'hadoop_namenode_num_active_sources{kind="MetricsSystem",role="NameNode",service="HDFS",sub="Stats"}',
33+
# Attribute "Total"
34+
'hadoop_namenode_total{kind="NameNodeInfo",role="NameNode",service="HDFS"}',
35+
# Counter suffixed with "_total"
36+
'hadoop_namenode_files_total{kind="FSNamesystem",role="NameNode",service="HDFS"}',
37+
# Metric suffixed with "_created"
38+
'hadoop_namenode_files_created_{kind="NameNodeActivity",role="NameNode",service="HDFS"}',
39+
# Non-special metric
40+
'hadoop_namenode_files_deleted{kind="NameNodeActivity",role="NameNode",service="HDFS"}',
41+
]
42+
43+
if product_version in ["3.3.4", "3.3.6"]:
44+
# Log counters were removed in 3.4.0 (HADOOP-17524).
45+
expected_metrics.extend([
46+
# Metric suffixed with "_info"
47+
'hadoop_namenode_log_info_{kind="JvmMetrics",role="NameNode",service="HDFS"}',
48+
])
49+
50+
check_metrics(namespace, 'namenode', 8183, expected_metrics)
51+
52+
53+
def check_datanode_metrics(
54+
namespace: str,
55+
product_version: str,
56+
) -> None:
57+
expected_metrics: list[str] = [
58+
# Kind "MetricsSystem"
59+
'hadoop_datanode_num_active_sources{kind="MetricsSystem",role="DataNode",service="HDFS",sub="Stats"}',
60+
# Kind "FSDatasetState" suffixed with "_total"
61+
'hadoop_datanode_estimated_capacity_lost_total{fsdatasetid=".+",kind="FSDatasetState",role="DataNode",service="HDFS"}',
62+
# Kind "FSDatasetState"
63+
'hadoop_datanode_capacity{fsdatasetid=".+",kind="FSDatasetState",role="DataNode",service="HDFS"}',
64+
# Kind "DataNodeActivity" suffixed with "_info"
65+
'hadoop_datanode_blocks_get_local_path_info_{host="hdfs-datanode-default-0\\.hdfs-datanode-default\\..+\\.svc\\.cluster\\.local",kind="DataNodeActivity",port="9866",role="DataNode",service="HDFS"}',
66+
# Kind "DataNodeActivity"
67+
'hadoop_datanode_blocks_read{host="hdfs-datanode-default-0\\.hdfs-datanode-default\\..+\\.svc\\.cluster\\.local",kind="DataNodeActivity",port="9866",role="DataNode",service="HDFS"}',
68+
# Counter suffixed with "_total"
69+
'hadoop_datanode_estimated_capacity_lost_total{kind="FSDatasetState",role="DataNode",service="HDFS"}',
70+
# Non-special metric
71+
'hadoop_datanode_gc_count{kind="JvmMetrics",role="DataNode",service="HDFS"}',
72+
]
73+
74+
if product_version in ["3.3.4", "3.3.6"]:
75+
# Log counters were removed in 3.4.0 (HADOOP-17524).
76+
expected_metrics.extend([
77+
# Metric suffixed with "_info"
78+
'hadoop_datanode_log_info_{kind="JvmMetrics",role="DataNode",service="HDFS"}',
79+
])
80+
81+
check_metrics(namespace, 'datanode', 8082, expected_metrics)
82+
83+
84+
def check_journalnode_metrics(
85+
namespace: str,
86+
product_version: str,
87+
) -> None:
88+
expected_metrics: list[str] = [
89+
# Kind "MetricsSystem"
90+
'hadoop_journalnode_num_active_sources{kind="MetricsSystem",role="JournalNode",service="HDFS",sub="Stats"}',
91+
# Non-special metric
92+
'hadoop_journalnode_bytes_written{kind="Journal-hdfs",role="JournalNode",service="HDFS"}',
93+
]
94+
95+
if product_version in ["3.3.4", "3.3.6"]:
96+
# Log counters were removed in 3.4.0 (HADOOP-17524).
97+
expected_metrics.extend([
98+
# Metric suffixed with "_info"
99+
'hadoop_journalnode_log_info_{kind="JvmMetrics",role="JournalNode",service="HDFS"}',
100+
])
101+
102+
check_metrics(namespace, 'journalnode', 8081, expected_metrics)
103+
104+
105+
if __name__ == "__main__":
106+
namespace_arg: str = sys.argv[1]
107+
product_version_arg: str = sys.argv[2]
108+
109+
logging.basicConfig(
110+
level="DEBUG",
111+
format="%(asctime)s %(levelname)s: %(message)s",
112+
stream=sys.stdout,
113+
)
114+
115+
check_namenode_metrics(namespace_arg, product_version_arg)
116+
check_datanode_metrics(namespace_arg, product_version_arg)
117+
check_journalnode_metrics(namespace_arg, product_version_arg)
118+
119+
print("All expected metrics found")

0 commit comments

Comments
 (0)