Skip to content

Commit 6b2e772

Browse files
Include a way of triggering dockerhub run
1 parent 9d444e4 commit 6b2e772

File tree

3 files changed

+196
-7
lines changed

3 files changed

+196
-7
lines changed

redis_benchmarks_specification/__cli__/args.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
START_TIME_LAST_YEAR_UTC = START_TIME_NOW_UTC - datetime.timedelta(days=90)
2222
CLI_TOOL_STATS = "stats"
2323
CLI_TOOL_TRIGGER = "trigger"
24+
CLI_TOOL_DOCKERHUB = "dockerhub"
2425
PERFORMANCE_GH_TOKEN = os.getenv("PERFORMANCE_GH_TOKEN", None)
2526

2627

@@ -109,7 +110,7 @@ def spec_cli_args(parser):
109110
type=str,
110111
default=CLI_TOOL_TRIGGER,
111112
help="subtool to use. One of '{}' ".format(
112-
",".join([CLI_TOOL_STATS, CLI_TOOL_TRIGGER])
113+
",".join([CLI_TOOL_STATS, CLI_TOOL_TRIGGER, CLI_TOOL_DOCKERHUB])
113114
),
114115
)
115116
parser.add_argument("--gh_token", type=str, default=GH_TOKEN)
@@ -129,6 +130,11 @@ def spec_cli_args(parser):
129130
parser.add_argument("--redis_repo", type=str, default=None)
130131
parser.add_argument("--gh_org", type=str, default="redis")
131132
parser.add_argument("--gh_repo", type=str, default="redis")
133+
parser.add_argument("--server_name", type=str, default=None)
134+
parser.add_argument("--run_image", type=str, default="redis")
135+
parser.add_argument("--build_arch", type=str, default="amd64")
136+
parser.add_argument("--id", type=str, default="dockerhub")
137+
parser.add_argument("--mnt_point", type=str, default="")
132138
parser.add_argument("--trigger-unstable-commits", type=bool, default=True)
133139
parser.add_argument(
134140
"--use-tags",

redis_benchmarks_specification/__cli__/cli.py

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@
1818
from packaging import version
1919
import time
2020

21-
21+
from redis_benchmarks_specification.__builder__.builder import (
22+
generate_benchmark_stream_request,
23+
)
2224
from redis_benchmarks_specification.__common__.github import (
2325
update_comment_if_needed,
2426
create_new_pr_comment,
@@ -38,6 +40,7 @@
3840
REDIS_BINS_EXPIRE_SECS,
3941
STREAM_KEYNAME_GH_EVENTS_COMMIT,
4042
STREAM_GH_EVENTS_COMMIT_BUILDERS_CG,
43+
STREAM_KEYNAME_NEW_BUILD_EVENTS,
4144
)
4245
from redis_benchmarks_specification.__common__.package import (
4346
get_version_string,
@@ -52,6 +55,54 @@
5255
)
5356

5457

58+
def trigger_tests_dockerhub_cli_command_logic(args, project_name, project_version):
59+
logging.info(
60+
"Using: {project_name} {project_version}".format(
61+
project_name=project_name, project_version=project_version
62+
)
63+
)
64+
logging.info(
65+
"Checking connection to redis with user: {}, host: {}, port: {}".format(
66+
args.redis_user,
67+
args.redis_host,
68+
args.redis_port,
69+
)
70+
)
71+
conn = redis.StrictRedis(
72+
host=args.redis_host,
73+
port=args.redis_port,
74+
password=args.redis_pass,
75+
username=args.redis_user,
76+
decode_responses=False,
77+
)
78+
conn.ping()
79+
testDetails = {}
80+
build_stream_fields, result = generate_benchmark_stream_request(
81+
args.id,
82+
conn,
83+
args.run_image,
84+
args.build_arch,
85+
testDetails,
86+
"n/a",
87+
)
88+
build_stream_fields["github_repo"] = args.gh_repo
89+
build_stream_fields["github_org"] = args.gh_org
90+
server_name = args.gh_repo
91+
if args.server_name is not None:
92+
server_name = args.server_name
93+
build_stream_fields["server_name"] = server_name
94+
build_stream_fields["mnt_point"] = args.mnt_point
95+
if result is True:
96+
benchmark_stream_id = conn.xadd(
97+
STREAM_KEYNAME_NEW_BUILD_EVENTS, build_stream_fields
98+
)
99+
logging.info(
100+
"sucessfully requested a new run {}. Stream id: {}".format(
101+
build_stream_fields, benchmark_stream_id
102+
)
103+
)
104+
105+
55106
def main():
56107
_, _, project_version = populate_with_poetry_data()
57108
project_name = "redis-benchmarks-spec-cli"
@@ -65,6 +116,8 @@ def main():
65116
trigger_tests_cli_command_logic(args, project_name, project_version)
66117
if args.tool == "stats":
67118
generate_stats_cli_command_logic(args, project_name, project_version)
119+
if args.tool == "dockerhub":
120+
trigger_tests_dockerhub_cli_command_logic(args, project_name, project_version)
68121

69122

70123
def get_commits_by_branch(args, repo):

utils/tests/test_self_contained_coordinator_memtier.py

Lines changed: 135 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@
1313
from redis_benchmarks_specification.__builder__.builder import (
1414
generate_benchmark_stream_request,
1515
)
16+
from redis_benchmarks_specification.__cli__.args import spec_cli_args
17+
from redis_benchmarks_specification.__cli__.cli import (
18+
trigger_tests_dockerhub_cli_command_logic,
19+
)
1620
from redis_benchmarks_specification.__common__.env import (
1721
STREAM_KEYNAME_NEW_BUILD_EVENTS,
1822
)
@@ -359,6 +363,8 @@ def test_self_contained_coordinator_dockerhub_valkey():
359363
id = "dockerhub"
360364
redis_version = "7.2.6"
361365
run_image = f"valkey/valkey:{redis_version}-bookworm"
366+
github_org = "valkey"
367+
github_repo = "valkey"
362368
build_arch = "amd64"
363369
testDetails = {}
364370
build_os = "test_build_os"
@@ -370,8 +376,6 @@ def test_self_contained_coordinator_dockerhub_valkey():
370376
testDetails,
371377
build_os,
372378
)
373-
github_org = "valkey"
374-
github_repo = "valkey"
375379
build_stream_fields["github_repo"] = github_repo
376380
build_stream_fields["github_org"] = github_org
377381
build_stream_fields["server_name"] = github_repo
@@ -386,9 +390,6 @@ def test_self_contained_coordinator_dockerhub_valkey():
386390
)
387391
)
388392

389-
build_variant_name = "gcc:8.5.0-amd64-debian-buster-default"
390-
expected_datapoint_ts = None
391-
392393
assert conn.exists(STREAM_KEYNAME_NEW_BUILD_EVENTS)
393394
assert conn.xlen(STREAM_KEYNAME_NEW_BUILD_EVENTS) > 0
394395
running_platform = "fco-ThinkPad-T490"
@@ -479,6 +480,135 @@ def test_self_contained_coordinator_dockerhub_valkey():
479480
pass
480481

481482

483+
def test_dockerhub_via_cli():
484+
if run_coordinator_tests_dockerhub():
485+
import argparse
486+
487+
db_port = int(os.getenv("DATASINK_PORT", "6379"))
488+
conn = redis.StrictRedis(port=db_port)
489+
conn.ping()
490+
conn.flushall()
491+
redis_version = "7.2.6"
492+
run_image = f"valkey/valkey:{redis_version}-bookworm"
493+
github_org = "valkey"
494+
github_repo = "valkey"
495+
496+
db_port = os.getenv("DATASINK_PORT", "6379")
497+
498+
# should error due to missing --use-tags or --use-branch
499+
parser = argparse.ArgumentParser(
500+
description="test",
501+
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
502+
)
503+
parser = spec_cli_args(parser)
504+
run_args = [
505+
"--server_name",
506+
"valkey",
507+
"--run_image",
508+
run_image,
509+
"--gh_org",
510+
github_org,
511+
"--gh_repo",
512+
github_repo,
513+
"--redis_port",
514+
"{}".format(db_port),
515+
]
516+
args = parser.parse_args(
517+
args=run_args,
518+
)
519+
try:
520+
trigger_tests_dockerhub_cli_command_logic(args, "tool", "v0")
521+
except SystemExit as e:
522+
assert e.code == 0
523+
524+
# confirm request was made via the cli
525+
assert conn.exists(STREAM_KEYNAME_NEW_BUILD_EVENTS)
526+
assert conn.xlen(STREAM_KEYNAME_NEW_BUILD_EVENTS) > 0
527+
running_platform = "fco-ThinkPad-T490"
528+
529+
build_runners_consumer_group_create(conn, running_platform, "0")
530+
datasink_conn = redis.StrictRedis(port=db_port)
531+
docker_client = docker.from_env()
532+
home = str(Path.home())
533+
stream_id = ">"
534+
topologies_map = get_topologies(
535+
"./redis_benchmarks_specification/setups/topologies/topologies.yml"
536+
)
537+
# we use a benchmark spec with smaller CPU limit for client given github machines only contain 2 cores
538+
# and we need 1 core for DB and another for CLIENT
539+
testsuite_spec_files = [
540+
"./utils/tests/test_data/test-suites/test-memtier-dockerhub.yml"
541+
]
542+
defaults_filename = "./utils/tests/test_data/test-suites/defaults.yml"
543+
(
544+
_,
545+
_,
546+
default_metrics,
547+
_,
548+
_,
549+
_,
550+
) = get_defaults(defaults_filename)
551+
552+
(
553+
result,
554+
stream_id,
555+
number_processed_streams,
556+
num_process_test_suites,
557+
) = self_contained_coordinator_blocking_read(
558+
conn,
559+
True,
560+
docker_client,
561+
home,
562+
stream_id,
563+
datasink_conn,
564+
testsuite_spec_files,
565+
topologies_map,
566+
running_platform,
567+
False,
568+
[],
569+
"",
570+
0,
571+
6399,
572+
1,
573+
False,
574+
5,
575+
default_metrics,
576+
"amd64",
577+
None,
578+
0,
579+
10000,
580+
"unstable",
581+
"",
582+
True,
583+
False,
584+
)
585+
586+
assert result == True
587+
assert number_processed_streams == 1
588+
assert num_process_test_suites == 1
589+
by_version_key = f"ci.benchmarks.redislabs/ci/{github_org}/{github_repo}/memtier_benchmark-1Mkeys-load-string-with-10B-values/by.version/{redis_version}/benchmark_end/oss-standalone/memory_maxmemory"
590+
assert datasink_conn.exists(by_version_key)
591+
rts = datasink_conn.ts()
592+
# check we have by version metrics
593+
assert "version" in rts.info(by_version_key).labels
594+
assert redis_version == rts.info(by_version_key).labels["version"]
595+
596+
# get all keys
597+
all_keys = datasink_conn.keys("*")
598+
by_hash_keys = []
599+
for key in all_keys:
600+
if "/by.hash/" in key.decode():
601+
by_hash_keys.append(key)
602+
603+
# ensure we have by hash keys
604+
assert len(by_hash_keys) > 0
605+
for hash_key in by_hash_keys:
606+
# ensure we have both version and hash info on the key
607+
assert "version" in rts.info(hash_key).labels
608+
assert "hash" in rts.info(hash_key).labels
609+
assert redis_version == rts.info(hash_key).labels["version"]
610+
611+
482612
def test_self_contained_coordinator_skip_build_variant():
483613
try:
484614
if run_coordinator_tests():

0 commit comments

Comments
 (0)