Skip to content

Commit 48cc792

Browse files
authored
Append a random postfix to the app name (#133)
1 parent d247e46 commit 48cc792

File tree

4 files changed

+38
-25
lines changed

4 files changed

+38
-25
lines changed

service_configuration_lib/spark_config.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,7 @@
66
import logging
77
import math
88
import os
9-
import random
109
import re
11-
import string
1210
import time
1311
from typing import Any
1412
from typing import Dict
@@ -1080,16 +1078,15 @@ def get_spark_conf(
10801078
)
10811079

10821080
spark_conf = {**(spark_opts_from_env or {}), **_filter_user_spark_opts(user_spark_opts)}
1081+
random_postfix = utils.get_random_string(4)
10831082

10841083
if aws_creds[2] is not None:
10851084
spark_conf['spark.hadoop.fs.s3a.aws.credentials.provider'] = AWS_ENV_CREDENTIALS_PROVIDER
10861085

10871086
# app_name from env is already appended port and time to make it unique
10881087
app_name = (spark_opts_from_env or {}).get('spark.app.name')
10891088
if not app_name:
1090-
# We want to make the app name more unique so that we can search it
1091-
# from history server.
1092-
app_name = f'{app_base_name}_{ui_port}_{int(time.time())}'
1089+
app_name = f'{app_base_name}_{ui_port}_{int(time.time())}_{random_postfix}'
10931090
is_jupyter = _is_jupyterhub_job(app_name)
10941091

10951092
# Explicitly setting app id: replace special characters to '_' to make it consistent
@@ -1099,7 +1096,6 @@ def get_spark_conf(
10991096
if is_jupyter:
11001097
raw_app_id = app_name
11011098
else:
1102-
random_postfix = ''.join(random.choice(string.ascii_lowercase + string.digits) for _ in range(4))
11031099
raw_app_id = f'{paasta_service}__{paasta_instance}__{random_postfix}'
11041100
app_id = re.sub(r'[\.,-]', '_', _get_k8s_resource_name_limit_size_with_hash(raw_app_id))
11051101

service_configuration_lib/utils.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import contextlib
22
import errno
33
import logging
4+
import random
5+
import string
46
from socket import error as SocketError
57
from socket import SO_REUSEADDR
68
from socket import socket
@@ -79,3 +81,7 @@ def ephemeral_port_reserve_range(preferred_port_start: int, preferred_port_end:
7981
sock, _ = s.accept()
8082
with contextlib.closing(sock):
8183
return sockname[1]
84+
85+
86+
def get_random_string(length: int) -> str:
87+
return ''.join(random.choice(string.ascii_lowercase + string.digits) for _ in range(length))

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
setup(
1919
name='service-configuration-lib',
20-
version='2.18.9',
20+
version='2.18.10',
2121
provides=['service_configuration_lib'],
2222
description='Start, stop, and inspect Yelp SOA services',
2323
url='https://github.com/Yelp/service_configuration_lib',

tests/spark_config_test.py

Lines changed: 29 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@
1616
TEST_ACCOUNT_ID = '123456789'
1717
TEST_USER = 'UNIT_TEST_USER'
1818

19+
UI_PORT_RETURN_VALUE = 65432
20+
EPHEMERAL_PORT_RETURN_VALUE = '12345'
21+
TIME_RETURN_VALUE = 123.456
22+
RANDOM_STRING_RETURN_VALUE = 'do1re2mi3fa4sol4'
23+
1924

2025
@pytest.fixture
2126
def mock_log(monkeypatch):
@@ -26,8 +31,14 @@ def mock_log(monkeypatch):
2631

2732
@pytest.fixture
2833
def mock_time():
29-
with mock.patch.object(spark_config.time, 'time', return_value=123.456):
30-
yield 123.456
34+
with mock.patch.object(spark_config.time, 'time', return_value=TIME_RETURN_VALUE):
35+
yield TIME_RETURN_VALUE
36+
37+
38+
@pytest.fixture
39+
def mock_get_random_string():
40+
with mock.patch.object(utils, 'get_random_string', return_value=RANDOM_STRING_RETURN_VALUE):
41+
yield RANDOM_STRING_RETURN_VALUE
3142

3243

3344
class TestGetAWSCredentials:
@@ -1083,11 +1094,10 @@ def test_convert_user_spark_opts_value_str(self):
10831094

10841095
@pytest.fixture
10851096
def mock_ephemeral_port_reserve_range(self):
1086-
port = '12345'
1087-
with mock.patch.object(utils, 'ephemeral_port_reserve_range', return_value=port):
1088-
yield port
1097+
with mock.patch.object(utils, 'ephemeral_port_reserve_range', return_value=EPHEMERAL_PORT_RETURN_VALUE):
1098+
yield EPHEMERAL_PORT_RETURN_VALUE
10891099

1090-
@pytest.fixture(params=[None, '23456'])
1100+
@pytest.fixture(params=[None, str(UI_PORT_RETURN_VALUE)])
10911101
def ui_port(self, request):
10921102
return request.param
10931103

@@ -1115,13 +1125,21 @@ def user_spark_opts(self, request):
11151125
return request.param
11161126

11171127
@pytest.fixture
1118-
def assert_app_name(self, spark_opts_from_env, user_spark_opts, ui_port, mock_ephemeral_port_reserve_range):
1128+
def assert_app_name(
1129+
self,
1130+
spark_opts_from_env,
1131+
user_spark_opts,
1132+
ui_port,
1133+
mock_ephemeral_port_reserve_range,
1134+
mock_get_random_string,
1135+
):
11191136
expected_output = (spark_opts_from_env or {}).get('spark.app.name')
1137+
11201138
if not expected_output:
1121-
expected_output = (
1122-
(user_spark_opts or {}).get('spark.app.name') or
1123-
self.spark_app_base_name
1124-
) + '_' + (ui_port or mock_ephemeral_port_reserve_range) + '_123'
1139+
base_name = (user_spark_opts or {}).get('spark.app.name') or self.spark_app_base_name
1140+
port = ui_port or mock_ephemeral_port_reserve_range
1141+
time_int = int(TIME_RETURN_VALUE)
1142+
expected_output = f'{base_name}_{port}_{time_int}_{mock_get_random_string}'
11251143

11261144
def verify(output):
11271145
key = 'spark.app.name'
@@ -1477,13 +1495,6 @@ def test_adjust_cpu_mem_ratio_thresh_non_regular_pool(
14771495
assert int(result_dict['spark.task.cpus']) == 1
14781496

14791497

1480-
def test_stringify_spark_env():
1481-
conf = {'spark.mesos.leader': '1234', 'spark.mesos.principal': 'spark'}
1482-
assert spark_config.stringify_spark_env(conf) == (
1483-
'--conf spark.mesos.leader=1234 --conf spark.mesos.principal=spark'
1484-
)
1485-
1486-
14871498
@pytest.mark.parametrize(
14881499
'memory_string,expected_output', [
14891500
('1g', 1024),

0 commit comments

Comments
 (0)