Skip to content

Commit dcad176

Browse files
committed
Handling wrong oozie spark version request
PNDA-4543
1 parent 063be3a commit dcad176

File tree

7 files changed

+48
-6
lines changed

7 files changed

+48
-6
lines changed

api/src/main/resources/application_creator.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,11 @@ def __init__(self, config, environment, service):
4646
environment['webhdfs_port'],
4747
'hdfs')
4848

49+
def assert_application_properties(self, override_properties, default_properties):
50+
for component_type, component_properties in default_properties.iteritems():
51+
creator = self._load_creator(component_type)
52+
creator.assert_application_properties(override_properties.get(component_type, {}), component_properties)
53+
4954
def create_application(self, package_data_path, package_metadata, application_name, property_overrides):
5055

5156
logging.debug("create_application: %s", application_name)

api/src/main/resources/deployment_manager.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -464,6 +464,7 @@ def create_application(self, package, application, overrides, user_name):
464464
self._authorize(user_name, Resources.PACKAGE, package_owner, Actions.READ)
465465
self._authorize(user_name, Resources.APPLICATION, None, Actions.CREATE)
466466
defaults = self.get_package_info(package)['defaults']
467+
self._application_creator.assert_application_properties(overrides, defaults)
467468
package_data_path = self._package_registrar.get_package_data(package)
468469
self._application_registrar.create_application(package, application, overrides, defaults)
469470
self._mark_creating(application)

api/src/main/resources/plugins/base_creator.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,15 @@ def create_component(self, staged_component_path, application_name, user_name, c
106106
'''
107107
pass
108108

109+
def assert_application_properties(self, override_properties, default_properties):
110+
'''
111+
Assert application properties before creating the application
112+
113+
override_properties - properties overrided by user
114+
default_properties - default properties present in package
115+
'''
116+
pass
117+
109118
def destroy_component(self, application_name, create_data):
110119
'''
111120
Destroys component of the package of given component type

api/src/main/resources/plugins/flink.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ def create_component(self, staged_component_path, application_name, user_name, c
8787
properties['component_respawn_type'] = 'no'
8888
else:
8989
properties['component_respawn_type'] = 'always'
90-
90+
9191
if 'component_respawn_timeout_sec' not in properties:
9292
if properties['component_flink_job_type'] == 'batch':
9393
properties['component_respawn_timeout_sec'] = '0'

api/src/main/resources/plugins/oozie.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434

3535
import deployer_utils
3636
from plugins.base_creator import Creator
37-
from exceptiondef import FailedCreation
37+
from exceptiondef import FailedCreation, FailedValidation
3838

3939
class OozieCreator(Creator):
4040

@@ -48,6 +48,17 @@ def validate_component(self, component):
4848
def get_component_type(self):
4949
return 'oozie'
5050

51+
def assert_application_properties(self, override_properties, default_properties):
52+
# Assert application properties before creating the application
53+
for component in default_properties:
54+
properties = default_properties[component].copy()
55+
properties.update(override_properties.get(component, {}))
56+
if 'spark_version' in properties and properties['spark_version'] != self._config['oozie_spark_version']:
57+
information = "Mismatch between cluster's oozie spark version (version = %s) and \
58+
requested spark version" % self._config['oozie_spark_version']
59+
raise FailedValidation(json.dumps({"information": information}))
60+
properties = None
61+
5162
def destroy_component(self, application_name, create_data):
5263
logging.debug(
5364
"destroy_component: %s %s",
@@ -98,7 +109,7 @@ def create_component(self, staged_component_path, application_name, user_name, c
98109
# platform shared libs e.g. hbase
99110
properties['oozie.libpath'] = '/pnda/deployment/platform'
100111
# For spark2 add a special setting to select spark2
101-
if 'component_spark_version' in properties and properties['component_spark_version'] == '2':
112+
if self._config['oozie_spark_version'] == '2':
102113
properties['oozie.action.sharelib.for.spark'] = 'spark2'
103114

104115
# insert default queue selection

api/src/main/resources/test_application_creator.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
class ApplicationCreatorTests(unittest.TestCase):
3232

3333
user = getpass.getuser()
34-
config = {'stage_root': 'stage', 'plugins_path': 'plugins'}
34+
config = {'stage_root': 'stage', 'plugins_path': 'plugins', 'oozie_spark_version': '1'}
3535
environment = {
3636
'webhdfs_host': 'webhdfshost',
3737
'webhdfs_port': 'webhdfsport',
@@ -239,10 +239,27 @@ class Resp(object):
239239
def json(self):
240240
return {'id': 'someid'}
241241

242+
default_properties = {
243+
"oozie": {
244+
"componentA": {
245+
"spark_version": "1"
246+
}
247+
}
248+
}
249+
override_properties = {
250+
"user": "root",
251+
"oozie": {
252+
"componentA": {
253+
"spark_version": "2"
254+
}
255+
}
256+
}
257+
242258
post_mock.return_value = Resp()
243259
cmd_mock.return_value = (0, 'dev')
244260
with patch("__builtin__.open", mock_open(read_data="[]")):
245261
creator = ApplicationCreator(self.config, self.environment, self.service)
262+
self.assertRaises(FailedValidation, creator.assert_application_properties, override_properties, default_properties)
246263
self.assertRaises(FailedCreation, creator.create_application, 'abcd', self.package_metadata_2, 'aname', self.property_overrides)
247264

248265
@patch('starbase.Connection')

api/src/main/resources/test_deployer_manager.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ def setUp(self):
7575
'queue_policy': 'echo dev',
7676
'namespace': 'mockspace'
7777
}
78-
self.mock_config = {"deployer_thread_limit": 1, 'stage_root': 'stage', 'plugins_path': 'plugins'}
78+
self.mock_config = {"deployer_thread_limit": 1, 'stage_root': 'stage', 'plugins_path': 'plugins', 'oozie_spark_version': '1'}
7979
# mock app registrar:
8080
mock_application_registar = Mock()
8181
application_data = {}
@@ -934,4 +934,3 @@ def expect_exception():
934934
deployment_manager.start_application(self.test_app_name, 'username2')
935935

936936
self.assertRaises(Forbidden, expect_exception)
937-

0 commit comments

Comments
 (0)