This is an automated email from the ASF dual-hosted git repository.
zixi0825 pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler.git
The following commit(s) were added to refs/heads/dev by this push:
new 43d79e45b4 Fix data quality pwd error (#13643)
43d79e45b4 is described below
commit 43d79e45b4b5d81e4066ab2d4e2a96063ed85316
Author: 旺阳 <[email protected]>
AuthorDate: Tue Feb 28 18:50:44 2023 +0800
Fix data quality pwd error (#13643)
---
.../data/quality/flow/batch/reader/JdbcReader.java | 3 +-
.../data/quality/flow/batch/writer/JdbcWriter.java | 3 +-
.../data/quality/utils/ParserUtils.java | 58 ++++++++++++++++++++++
.../data/quality/utils/ParserUtilsTest.java | 39 +++++++++++++++
.../plugin/task/dq/utils/RuleParserUtils.java | 9 ++--
5 files changed, 106 insertions(+), 6 deletions(-)
diff --git
a/dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/flow/batch/reader/JdbcReader.java
b/dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/flow/batch/reader/JdbcReader.java
index 96f980fcb7..1fa6991fc4 100644
---
a/dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/flow/batch/reader/JdbcReader.java
+++
b/dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/flow/batch/reader/JdbcReader.java
@@ -31,6 +31,7 @@ import
org.apache.dolphinscheduler.data.quality.config.ValidateResult;
import
org.apache.dolphinscheduler.data.quality.execution.SparkRuntimeEnvironment;
import org.apache.dolphinscheduler.data.quality.flow.batch.BatchReader;
import org.apache.dolphinscheduler.data.quality.utils.ConfigUtils;
+import org.apache.dolphinscheduler.data.quality.utils.ParserUtils;
import org.apache.spark.sql.DataFrameReader;
import org.apache.spark.sql.Dataset;
@@ -79,7 +80,7 @@ public class JdbcReader implements BatchReader {
.option(URL, config.getString(URL))
.option(DB_TABLE, config.getString(TABLE))
.option(USER, config.getString(USER))
- .option(PASSWORD, config.getString(PASSWORD))
+ .option(PASSWORD,
ParserUtils.decode(config.getString(PASSWORD)))
.option(DRIVER, config.getString(DRIVER));
Config jdbcConfig = ConfigUtils.extractSubConfig(config, JDBC + DOTS,
false);
diff --git
a/dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/flow/batch/writer/JdbcWriter.java
b/dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/flow/batch/writer/JdbcWriter.java
index 0010c4c6e6..b66eccefb9 100644
---
a/dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/flow/batch/writer/JdbcWriter.java
+++
b/dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/flow/batch/writer/JdbcWriter.java
@@ -32,6 +32,7 @@ import org.apache.dolphinscheduler.data.quality.config.Config;
import org.apache.dolphinscheduler.data.quality.config.ValidateResult;
import
org.apache.dolphinscheduler.data.quality.execution.SparkRuntimeEnvironment;
import org.apache.dolphinscheduler.data.quality.flow.batch.BatchWriter;
+import org.apache.dolphinscheduler.data.quality.utils.ParserUtils;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
@@ -80,7 +81,7 @@ public class JdbcWriter implements BatchWriter {
.option(URL, config.getString(URL))
.option(DB_TABLE, config.getString(TABLE))
.option(USER, config.getString(USER))
- .option(PASSWORD, config.getString(PASSWORD))
+ .option(PASSWORD,
ParserUtils.decode(config.getString(PASSWORD)))
.mode(config.getString(SAVE_MODE))
.save();
}
diff --git
a/dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/utils/ParserUtils.java
b/dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/utils/ParserUtils.java
new file mode 100644
index 0000000000..e2b3fc5abf
--- /dev/null
+++
b/dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/utils/ParserUtils.java
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.data.quality.utils;
+
+import static java.nio.charset.StandardCharsets.UTF_8;
+
+import java.net.URLDecoder;
+import java.net.URLEncoder;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * ParserUtil
+ */
+@Slf4j
+public class ParserUtils {
+
+ private ParserUtils() {
+ throw new UnsupportedOperationException("Construct ParserUtils");
+ }
+
+ public static String encode(String str) {
+ String rs = str;
+ try {
+ rs = URLEncoder.encode(str, UTF_8.toString());
+ } catch (Exception e) {
+ log.error("encode str exception!", e);
+ }
+
+ return rs;
+ }
+
+ public static String decode(String str) {
+ String rs = str;
+ try {
+ rs = URLDecoder.decode(str, UTF_8.toString());
+ } catch (Exception e) {
+ log.error("decode str exception!", e);
+ }
+
+ return rs;
+ }
+}
diff --git
a/dolphinscheduler-data-quality/src/test/java/org/apache/dolphinscheduler/data/quality/utils/ParserUtilsTest.java
b/dolphinscheduler-data-quality/src/test/java/org/apache/dolphinscheduler/data/quality/utils/ParserUtilsTest.java
new file mode 100644
index 0000000000..328316cc39
--- /dev/null
+++
b/dolphinscheduler-data-quality/src/test/java/org/apache/dolphinscheduler/data/quality/utils/ParserUtilsTest.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.data.quality.utils;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+public class ParserUtilsTest {
+
+ @Test
+ public void testParserUtils() {
+ String testStr = "aaa$bbb$ccc%ddd^eee#fff";
+ String encode = ParserUtils.encode(testStr);
+ String decode = ParserUtils.decode(encode);
+ Assertions.assertEquals(testStr, decode);
+
+ String blank = "";
+ Assertions.assertEquals(ParserUtils.encode(blank), blank);
+ Assertions.assertEquals(ParserUtils.decode(blank), blank);
+
+ Assertions.assertNull(ParserUtils.encode(null));
+ Assertions.assertNull(ParserUtils.decode(null));
+ }
+}
diff --git
a/dolphinscheduler-task-plugin/dolphinscheduler-task-dataquality/src/main/java/org/apache/dolphinscheduler/plugin/task/dq/utils/RuleParserUtils.java
b/dolphinscheduler-task-plugin/dolphinscheduler-task-dataquality/src/main/java/org/apache/dolphinscheduler/plugin/task/dq/utils/RuleParserUtils.java
index da29b92dcd..e8bc50ab40 100644
---
a/dolphinscheduler-task-plugin/dolphinscheduler-task-dataquality/src/main/java/org/apache/dolphinscheduler/plugin/task/dq/utils/RuleParserUtils.java
+++
b/dolphinscheduler-task-plugin/dolphinscheduler-task-dataquality/src/main/java/org/apache/dolphinscheduler/plugin/task/dq/utils/RuleParserUtils.java
@@ -60,6 +60,7 @@ import static
org.apache.dolphinscheduler.plugin.task.api.utils.DataQualityConst
import static
org.apache.dolphinscheduler.plugin.task.api.utils.DataQualityConstants.USER;
import org.apache.dolphinscheduler.common.utils.JSONUtils;
+import org.apache.dolphinscheduler.data.quality.utils.ParserUtils;
import org.apache.dolphinscheduler.plugin.datasource.api.utils.DataSourceUtils;
import
org.apache.dolphinscheduler.plugin.task.api.DataQualityTaskExecutionContext;
import org.apache.dolphinscheduler.plugin.task.api.enums.dp.ExecuteSqlType;
@@ -120,7 +121,7 @@ public class RuleParserUtils {
config.put(URL,
DataSourceUtils.getJdbcUrl(DbType.of(dataQualityTaskExecutionContext.getSourceType()),
sourceDataSource));
config.put(USER, sourceDataSource.getUser());
- config.put(PASSWORD, sourceDataSource.getPassword());
+ config.put(PASSWORD,
ParserUtils.encode(sourceDataSource.getPassword()));
config.put(DRIVER, DataSourceUtils
.getDatasourceDriver(DbType.of(dataQualityTaskExecutionContext.getSourceType())));
String outputTable = sourceDataSource.getDatabase() + "_" +
inputParameterValue.get(SRC_TABLE);
@@ -147,7 +148,7 @@ public class RuleParserUtils {
config.put(URL,
DataSourceUtils.getJdbcUrl(DbType.of(dataQualityTaskExecutionContext.getTargetType()),
targetDataSource));
config.put(USER, targetDataSource.getUser());
- config.put(PASSWORD, targetDataSource.getPassword());
+ config.put(PASSWORD,
ParserUtils.encode(targetDataSource.getPassword()));
config.put(DRIVER, DataSourceUtils
.getDatasourceDriver(DbType.of(dataQualityTaskExecutionContext.getTargetType())));
String outputTable = targetDataSource.getDatabase() + "_" +
inputParameterValue.get(TARGET_TABLE);
@@ -280,7 +281,7 @@ public class RuleParserUtils {
config.put(URL,
DataSourceUtils.getJdbcUrl(DbType.of(dataQualityTaskExecutionContext.getWriterType()),
writerDataSource));
config.put(USER, writerDataSource.getUser());
- config.put(PASSWORD, writerDataSource.getPassword());
+ config.put(PASSWORD,
ParserUtils.encode(writerDataSource.getPassword()));
config.put(DRIVER, DataSourceUtils
.getDatasourceDriver(DbType.of(dataQualityTaskExecutionContext.getWriterType())));
config.put(SQL, sql);
@@ -350,7 +351,7 @@ public class RuleParserUtils {
config.put(URL, DataSourceUtils.getJdbcUrl(
DbType.of(dataQualityTaskExecutionContext.getStatisticsValueType()),
writerDataSource));
config.put(USER, writerDataSource.getUser());
- config.put(PASSWORD, writerDataSource.getPassword());
+ config.put(PASSWORD,
ParserUtils.encode(writerDataSource.getPassword()));
config.put(DRIVER, DataSourceUtils
.getDatasourceDriver(DbType.of(dataQualityTaskExecutionContext.getWriterType())));
}