CDH 插件代码重构

https://blueprints.launchpad.net/sahara/+spec/cdh-plugin-refactoring

本规范旨在对代码进行重构,以便将来更容易支持新版本。

问题描述

CDH 插件包含大量重复代码。当前实现提取了一些插件的通用和基础行为,每个版本都有其自身实现,用于处理未包含在基础类和模块中的内容。但由于向下兼容性,版本之间存在很多重叠。例如,sahara.plugins.cdh.v5.config_helper 扩展了 sahara.plugins.cdh.db_helper,但诸如 get_plugin_configs 之类的函数在 sahara.plugins.cdh.v5_3_0.config_helper 中被重新编写。

目前 CDH 插件的测试覆盖率较低,这使得在重构后难以保证新代码的质量。因此,需要添加一些新的单元测试用例。并且根据重构,一些旧的测试用例可能需要修改。

提议的变更

对于插件每个版本中的重复代码,将其移动到基础类中。在验证模块中,validate_cluster_creating 函数过长,难以阅读。将其分解为几个小的、清晰的函数。我们可以将模块中的函数封装到一个类中,以获得更好的可扩展性。ClouderaUtils 和 deploy 模块在 CDH v5 完全移除之前不会被更改,因为这些模块在 v5 中的代码与其他版本差异很大。

替代方案

还有另一种方法,就是让新版本扩展旧版本,而不是所有版本都从基础版本扩展。这在弃用旧版本时可能会带来问题。

数据模型影响

REST API 影响

其他最终用户影响

部署者影响

开发者影响

Sahara-image-elements impact

Sahara-dashboard / Horizon 影响

实现

负责人

主要负责人

jxwang

工作项

这将需要以下更改

  • 将重复代码移动到基础类。需要修改的文件:sahara/plugin/cdh/version/edp_engine.py: EdpOozieEngine, EdpSparkEngine sahara/plugin/cdh/version/plugin_utils.py: PluginUtils sahara/plugin/cdh/version/versionhandler.py: VersionHandler sahara/plugin/cdh/version/config_helper.py sahara/plugin/cdh/version/validation.py

  • 分离 Validation.validate_cluster_creating 函数

  • 为覆盖率低的模块添加单元测试用例。

  • 移除为重构而存在的无用测试用例:sahara/tests/unit/plugins/cdh/v5/test_versionhandler.py sahara/tests/unit/plugins/cdh/v5_3_0/test_versionhandler.py sahara/tests/unit/plugins/cdh/v5_4_0/test_versionhandler.py

依赖项

测试

在开始重构之前,保留当前的场景测试,并提供新的单元测试,以确保 CDH 像以前一样正常工作。对于每个版本,也分别添加单元测试。测试用例是在重构代码之前编写的,因此我们可能需要对新代码进行一些小的更改。

文档影响

参考资料