This is an automated email from the ASF dual-hosted git repository.
lidongdai pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/incubator-dolphinscheduler.git
The following commit(s) were added to refs/heads/dev by this push:
new cb52853 Fix some code specification issues (#2482)
cb52853 is described below
commit cb5285384efc2fdbaecf129eb4404095eb8ef419
Author: s751167520 <[email protected]>
AuthorDate: Sun May 10 23:05:12 2020 +0800
Fix some code specification issues (#2482)
* Fix some code specification issues
* Pre-compile regular expressions to improve efficiency and solve
concurrency problems
* Solve the nullpoint problem that Object.equals may bring
* Modify if else structure, add {} to improve code readability
Co-Authored-By: daili <[email protected]>
* Update ResourceTreeVisitor.java
re-run test process
Co-authored-by: daili <[email protected]>
Co-authored-by: dailidong <[email protected]>
---
.../dto/resources/visitor/ResourceTreeVisitor.java | 2 +
.../api/service/ResourcesService.java | 6 +-
.../common/task/datax/DataxParameters.java | 4 +-
.../dolphinscheduler/common/utils/OSUtils.java | 11 ++-
.../utils/process/ProcessBuilderForWin32.java | 86 +++++++++++++++------
.../utils/process/ProcessEnvironmentForWin32.java | 38 ++++++++-
.../common/utils/process/ProcessImplForWin32.java | 89 +++++++++++++++-------
.../dao/entity/ProcessInstanceMap.java | 20 +++--
.../apache/dolphinscheduler/dao/entity/Queue.java | 16 +++-
.../dolphinscheduler/dao/entity/Session.java | 20 +++--
.../apache/dolphinscheduler/dao/entity/Tenant.java | 8 +-
.../dao/utils/MysqlPerformance.java | 8 +-
.../server/utils/ProcessUtils.java | 12 ++-
.../service/zk/AbstractZKClient.java | 2 +-
14 files changed, 234 insertions(+), 88 deletions(-)
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/resources/visitor/ResourceTreeVisitor.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/resources/visitor/ResourceTreeVisitor.java
index 5cf1188..391822e 100644
---
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/resources/visitor/ResourceTreeVisitor.java
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/resources/visitor/ResourceTreeVisitor.java
@@ -50,6 +50,7 @@ public class ResourceTreeVisitor implements Visitor{
* visit
* @return resoruce component
*/
+ @Override
public ResourceComponent visit() {
ResourceComponent rootDirectory = new Directory();
for (Resource resource : resourceList) {
@@ -117,6 +118,7 @@ public class ResourceTreeVisitor implements Visitor{
}else{
tempResourceComponent = new FileLeaf();
}
+
tempResourceComponent.setName(resource.getAlias());
tempResourceComponent.setFullName(resource.getFullName().replaceFirst("/",""));
tempResourceComponent.setId(resource.getId());
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ResourcesService.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ResourcesService.java
index 8f30754..ef12519 100644
---
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ResourcesService.java
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ResourcesService.java
@@ -104,7 +104,7 @@ public class ResourcesService extends BaseService {
putMsg(result, Status.HDFS_NOT_STARTUP);
return result;
}
- String fullName = currentDir.equals("/") ?
String.format("%s%s",currentDir,name):String.format("%s/%s",currentDir,name);
+ String fullName = "/".equals(currentDir) ?
String.format("%s%s",currentDir,name):String.format("%s/%s",currentDir,name);
if (pid != -1) {
Resource parentResource = resourcesMapper.selectById(pid);
@@ -229,7 +229,7 @@ public class ResourcesService extends BaseService {
}
// check resoure name exists
- String fullName = currentDir.equals("/") ?
String.format("%s%s",currentDir,name):String.format("%s/%s",currentDir,name);
+ String fullName = "/".equals(currentDir) ?
String.format("%s%s",currentDir,name):String.format("%s/%s",currentDir,name);
if (checkResourceExists(fullName, 0, type.ordinal())) {
logger.error("resource {} has exist, can't recreate", name);
putMsg(result, Status.RESOURCE_EXIST);
@@ -839,7 +839,7 @@ public class ResourcesService extends BaseService {
}
String name = fileName.trim() + "." + nameSuffix;
- String fullName = currentDirectory.equals("/") ?
String.format("%s%s",currentDirectory,name):String.format("%s/%s",currentDirectory,name);
+ String fullName = "/".equals(currentDirectory) ?
String.format("%s%s",currentDirectory,name):String.format("%s/%s",currentDirectory,name);
result = verifyResourceName(fullName,type,loginUser);
if (!result.getCode().equals(Status.SUCCESS.getCode())) {
diff --git
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/task/datax/DataxParameters.java
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/task/datax/DataxParameters.java
index 872b3aa..a6f08cd 100755
---
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/task/datax/DataxParameters.java
+++
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/task/datax/DataxParameters.java
@@ -187,7 +187,9 @@ public class DataxParameters extends AbstractParameters {
@Override
public boolean checkParameters() {
- if (customConfig == null) return false;
+ if (customConfig == null) {
+ return false;
+ }
if (customConfig == 0) {
return dataSource != 0
&& dataTarget != 0
diff --git
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/OSUtils.java
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/OSUtils.java
index 3505e59..652b981 100644
---
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/OSUtils.java
+++
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/OSUtils.java
@@ -57,6 +57,12 @@ public class OSUtils {
private OSUtils() {}
+ /**
+ * Initialization regularization, solve the problem of pre-compilation
performance,
+ * avoid the thread safety problem of multi-thread operation
+ */
+ private static final Pattern PATTERN = Pattern.compile("\\s+");
+
/**
* get memory usage
@@ -219,8 +225,7 @@ public class OSUtils {
List<String> users = new ArrayList<>();
while (startPos <= endPos) {
- Pattern pattern = Pattern.compile("\\s+");
- users.addAll(Arrays.asList(pattern.split(lines[startPos])));
+ users.addAll(Arrays.asList(PATTERN.split(lines[startPos])));
startPos++;
}
@@ -313,7 +318,7 @@ public class OSUtils {
String currentProcUserName = System.getProperty("user.name");
String result = exeCmd(String.format("net user \"%s\"",
currentProcUserName));
String line = result.split("\n")[22];
- String group = Pattern.compile("\\s+").split(line)[1];
+ String group = PATTERN.split(line)[1];
if (group.charAt(0) == '*') {
return group.substring(1);
} else {
diff --git
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/process/ProcessBuilderForWin32.java
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/process/ProcessBuilderForWin32.java
index eee456d..9d51eae 100644
---
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/process/ProcessBuilderForWin32.java
+++
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/process/ProcessBuilderForWin32.java
@@ -189,8 +189,9 @@ public class ProcessBuilderForWin32 {
* @throws NullPointerException if the argument is null
*/
public ProcessBuilderForWin32(List<String> command) {
- if (command == null)
+ if (command == null) {
throw new NullPointerException();
+ }
this.command = command;
}
@@ -207,8 +208,9 @@ public class ProcessBuilderForWin32 {
*/
public ProcessBuilderForWin32(String... command) {
this.command = new ArrayList<>(command.length);
- for (String arg : command)
+ for (String arg : command) {
this.command.add(arg);
+ }
}
/**
@@ -238,8 +240,9 @@ public class ProcessBuilderForWin32 {
* @throws NullPointerException if the argument is null
*/
public ProcessBuilderForWin32 command(List<String> command) {
- if (command == null)
+ if (command == null) {
throw new NullPointerException();
+ }
this.command = command;
return this;
}
@@ -257,8 +260,9 @@ public class ProcessBuilderForWin32 {
*/
public ProcessBuilderForWin32 command(String... command) {
this.command = new ArrayList<>(command.length);
- for (String arg : command)
+ for (String arg : command) {
this.command.add(arg);
+ }
return this;
}
@@ -344,11 +348,13 @@ public class ProcessBuilderForWin32 {
*/
public Map<String,String> environment() {
SecurityManager security = System.getSecurityManager();
- if (security != null)
+ if (security != null) {
security.checkPermission(new RuntimePermission("getenv.*"));
+ }
- if (environment == null)
+ if (environment == null) {
environment = ProcessEnvironmentForWin32.environment();
+ }
assert environment != null;
@@ -369,15 +375,17 @@ public class ProcessBuilderForWin32 {
// for compatibility with old broken code.
// Silently discard any trailing junk.
- if (envstring.indexOf((int) '\u0000') != -1)
+ if (envstring.indexOf((int) '\u0000') != -1) {
envstring = envstring.replaceFirst("\u0000.*", "");
+ }
int eqlsign =
envstring.indexOf('=',
ProcessEnvironmentForWin32.MIN_NAME_LENGTH);
// Silently ignore envstrings lacking the required `='.
- if (eqlsign != -1)
+ if (eqlsign != -1) {
environment.put(envstring.substring(0,eqlsign),
envstring.substring(eqlsign+1));
+ }
}
}
return this;
@@ -425,6 +433,7 @@ public class ProcessBuilderForWin32 {
static class NullInputStream extends InputStream {
static final ProcessBuilderForWin32.NullInputStream INSTANCE = new
ProcessBuilderForWin32.NullInputStream();
private NullInputStream() {}
+ @Override
public int read() { return -1; }
@Override
public int available() { return 0; }
@@ -436,6 +445,7 @@ public class ProcessBuilderForWin32 {
static class NullOutputStream extends OutputStream {
static final ProcessBuilderForWin32.NullOutputStream INSTANCE = new
ProcessBuilderForWin32.NullOutputStream();
private NullOutputStream() {}
+ @Override
public void write(int b) throws IOException {
throw new IOException("Stream closed");
}
@@ -516,7 +526,9 @@ public class ProcessBuilderForWin32 {
* }</pre>
*/
public static final ProcessBuilderForWin32.Redirect PIPE = new
ProcessBuilderForWin32.Redirect() {
+ @Override
public Type type() { return Type.PIPE; }
+ @Override
public String toString() { return type().toString(); }};
/**
@@ -531,7 +543,9 @@ public class ProcessBuilderForWin32 {
* }</pre>
*/
public static final ProcessBuilderForWin32.Redirect INHERIT = new
ProcessBuilderForWin32.Redirect() {
+ @Override
public Type type() { return Type.INHERIT; }
+ @Override
public String toString() { return type().toString(); }};
/**
@@ -565,12 +579,15 @@ public class ProcessBuilderForWin32 {
* @return a redirect to read from the specified file
*/
public static ProcessBuilderForWin32.Redirect from(final File file) {
- if (file == null)
+ if (file == null) {
throw new NullPointerException();
+ }
return new ProcessBuilderForWin32.Redirect() {
+ @Override
public Type type() { return Type.READ; }
@Override
public File file() { return file; }
+ @Override
public String toString() {
return "redirect to read from file \"" + file + "\"";
}
@@ -593,12 +610,15 @@ public class ProcessBuilderForWin32 {
* @return a redirect to write to the specified file
*/
public static ProcessBuilderForWin32.Redirect to(final File file) {
- if (file == null)
+ if (file == null) {
throw new NullPointerException();
+ }
return new ProcessBuilderForWin32.Redirect() {
+ @Override
public Type type() { return Type.WRITE; }
@Override
public File file() { return file; }
+ @Override
public String toString() {
return "redirect to write to file \"" + file + "\"";
}
@@ -626,12 +646,15 @@ public class ProcessBuilderForWin32 {
* @return a redirect to append to the specified file
*/
public static ProcessBuilderForWin32.Redirect appendTo(final File
file) {
- if (file == null)
+ if (file == null) {
throw new NullPointerException();
+ }
return new ProcessBuilderForWin32.Redirect() {
+ @Override
public Type type() { return Type.APPEND; }
@Override
public File file() { return file; }
+ @Override
public String toString() {
return "redirect to append to file \"" + file + "\"";
}
@@ -647,14 +670,18 @@ public class ProcessBuilderForWin32 {
* instances of the same type associated with non-null equal
* {@code File} instances.
*/
+ @Override
public boolean equals(Object obj) {
- if (obj == this)
+ if (obj == this) {
return true;
- if (! (obj instanceof ProcessBuilderForWin32.Redirect))
+ }
+ if (! (obj instanceof ProcessBuilderForWin32.Redirect)) {
return false;
+ }
ProcessBuilderForWin32.Redirect r =
(ProcessBuilderForWin32.Redirect) obj;
- if (r.type() != this.type())
+ if (r.type() != this.type()) {
return false;
+ }
assert this.file() != null;
return this.file().equals(r.file());
}
@@ -663,12 +690,14 @@ public class ProcessBuilderForWin32 {
* Returns a hash code value for this {@code Redirect}.
* @return a hash code value for this {@code Redirect}
*/
+ @Override
public int hashCode() {
File file = file();
- if (file == null)
+ if (file == null) {
return super.hashCode();
- else
+ } else {
return file.hashCode();
+ }
}
/**
@@ -679,10 +708,11 @@ public class ProcessBuilderForWin32 {
}
private ProcessBuilderForWin32.Redirect[] redirects() {
- if (redirects == null)
- redirects = new ProcessBuilderForWin32.Redirect[] {
- ProcessBuilderForWin32.Redirect.PIPE,
ProcessBuilderForWin32.Redirect.PIPE, ProcessBuilderForWin32.Redirect.PIPE
+ if (redirects == null) {
+ redirects = new Redirect[] {
+ Redirect.PIPE, Redirect.PIPE, Redirect.PIPE
};
+ }
return redirects;
}
@@ -711,9 +741,10 @@ public class ProcessBuilderForWin32 {
*/
public ProcessBuilderForWin32
redirectInput(ProcessBuilderForWin32.Redirect source) {
if (source.type() == ProcessBuilderForWin32.Redirect.Type.WRITE ||
- source.type() == ProcessBuilderForWin32.Redirect.Type.APPEND)
+ source.type() == ProcessBuilderForWin32.Redirect.Type.APPEND) {
throw new IllegalArgumentException(
"Redirect invalid for reading: " + source);
+ }
redirects()[0] = source;
return this;
}
@@ -741,9 +772,10 @@ public class ProcessBuilderForWin32 {
* @since 1.7
*/
public ProcessBuilderForWin32
redirectOutput(ProcessBuilderForWin32.Redirect destination) {
- if (destination.type() == ProcessBuilderForWin32.Redirect.Type.READ)
+ if (destination.type() == ProcessBuilderForWin32.Redirect.Type.READ) {
throw new IllegalArgumentException(
"Redirect invalid for writing: " + destination);
+ }
redirects()[1] = destination;
return this;
}
@@ -775,9 +807,10 @@ public class ProcessBuilderForWin32 {
* @since 1.7
*/
public ProcessBuilderForWin32
redirectError(ProcessBuilderForWin32.Redirect destination) {
- if (destination.type() == ProcessBuilderForWin32.Redirect.Type.READ)
+ if (destination.type() == ProcessBuilderForWin32.Redirect.Type.READ) {
throw new IllegalArgumentException(
"Redirect invalid for writing: " + destination);
+ }
redirects()[2] = destination;
return this;
}
@@ -1019,15 +1052,18 @@ public class ProcessBuilderForWin32 {
String[] cmdarray = command.toArray(new String[command.size()]);
cmdarray = cmdarray.clone();
- for (String arg : cmdarray)
- if (arg == null)
+ for (String arg : cmdarray) {
+ if (arg == null) {
throw new NullPointerException();
+ }
+ }
// Throws IndexOutOfBoundsException if command is empty
String prog = cmdarray[0];
SecurityManager security = System.getSecurityManager();
- if (security != null)
+ if (security != null) {
security.checkExec(prog);
+ }
String dir = directory == null ? null : directory.toString();
diff --git
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/process/ProcessEnvironmentForWin32.java
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/process/ProcessEnvironmentForWin32.java
index 39fddfb..85d9a21 100644
---
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/process/ProcessEnvironmentForWin32.java
+++
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/process/ProcessEnvironmentForWin32.java
@@ -27,22 +27,25 @@ final class ProcessEnvironmentForWin32 extends
HashMap<String,String> {
private static String validateName(String name) {
// An initial `=' indicates a magic Windows variable name -- OK
if (name.indexOf('=', 1) != -1 ||
- name.indexOf('\u0000') != -1)
+ name.indexOf('\u0000') != -1) {
throw new IllegalArgumentException
("Invalid environment variable name: \"" + name + "\"");
+ }
return name;
}
private static String validateValue(String value) {
- if (value.indexOf('\u0000') != -1)
+ if (value.indexOf('\u0000') != -1) {
throw new IllegalArgumentException
("Invalid environment variable value: \"" + value + "\"");
+ }
return value;
}
private static String nonNullString(Object o) {
- if (o == null)
+ if (o == null) {
throw new NullPointerException();
+ }
return (String) o;
}
@@ -70,26 +73,38 @@ final class ProcessEnvironmentForWin32 extends
HashMap<String,String> {
private static class CheckedEntry implements Entry<String,String> {
private final Entry<String,String> e;
public CheckedEntry(Entry<String,String> e) {this.e = e;}
+ @Override
public String getKey() { return e.getKey();}
+ @Override
public String getValue() { return e.getValue();}
+ @Override
public String setValue(String value) {
return e.setValue(validateValue(value));
}
+ @Override
public String toString() { return getKey() + "=" + getValue();}
+ @Override
public boolean equals(Object o) {return e.equals(o);}
+ @Override
public int hashCode() {return e.hashCode();}
}
private static class CheckedEntrySet extends
AbstractSet<Entry<String,String>> {
private final Set<Entry<String,String>> s;
public CheckedEntrySet(Set<Entry<String,String>> s) {this.s = s;}
+ @Override
public int size() {return s.size();}
+ @Override
public boolean isEmpty() {return s.isEmpty();}
+ @Override
public void clear() { s.clear();}
+ @Override
public Iterator<Entry<String,String>> iterator() {
return new Iterator<Entry<String,String>>() {
Iterator<Entry<String,String>> i = s.iterator();
+ @Override
public boolean hasNext() { return i.hasNext();}
+ @Override
public Entry<String,String> next() {
return new CheckedEntry(i.next());
}
@@ -104,18 +119,22 @@ final class ProcessEnvironmentForWin32 extends
HashMap<String,String> {
nonNullString(e.getValue());
return e;
}
+ @Override
public boolean contains(Object o) {return s.contains(checkedEntry(o));}
+ @Override
public boolean remove(Object o) {return s.remove(checkedEntry(o));}
}
private static class CheckedValues extends AbstractCollection<String> {
private final Collection<String> c;
public CheckedValues(Collection<String> c) {this.c = c;}
+ @Override
public int size() {return c.size();}
@Override
public boolean isEmpty() {return c.isEmpty();}
@Override
public void clear() { c.clear();}
+ @Override
public Iterator<String> iterator() {return c.iterator();}
@Override
public boolean contains(Object o) {return
c.contains(nonNullString(o));}
@@ -126,11 +145,17 @@ final class ProcessEnvironmentForWin32 extends
HashMap<String,String> {
private static class CheckedKeySet extends AbstractSet<String> {
private final Set<String> s;
public CheckedKeySet(Set<String> s) {this.s = s;}
+ @Override
public int size() {return s.size();}
+ @Override
public boolean isEmpty() {return s.isEmpty();}
+ @Override
public void clear() { s.clear();}
+ @Override
public Iterator<String> iterator() {return s.iterator();}
+ @Override
public boolean contains(Object o) {return
s.contains(nonNullString(o));}
+ @Override
public boolean remove(Object o) {return s.remove(nonNullString(o));}
}
@Override
@@ -147,6 +172,7 @@ final class ProcessEnvironmentForWin32 extends
HashMap<String,String> {
}
private static final class NameComparator implements Comparator<String> {
+ @Override
public int compare(String s1, String s2) {
// We can't use String.compareToIgnoreCase since it
// canonicalizes to lower case, while Windows
@@ -163,7 +189,9 @@ final class ProcessEnvironmentForWin32 extends
HashMap<String,String> {
c2 = Character.toUpperCase(c2);
if (c1 != c2)
// No overflow because of numeric promotion
+ {
return c1 - c2;
+ }
}
}
return n1 - n2;
@@ -171,6 +199,7 @@ final class ProcessEnvironmentForWin32 extends
HashMap<String,String> {
}
private static final class EntryComparator implements
Comparator<Entry<String,String>> {
+ @Override
public int compare(Entry<String,String> e1,
Entry<String,String> e2) {
return nameComparator.compare(e1.getKey(), e2.getKey());
@@ -278,8 +307,9 @@ final class ProcessEnvironmentForWin32 extends
HashMap<String,String> {
// add the environment variable to the child, if it exists in parent
private static void addToEnvIfSet(StringBuilder sb, String name) {
String s = getenv(name);
- if (s != null)
+ if (s != null) {
addToEnv(sb, name, s);
+ }
}
private static void addToEnv(StringBuilder sb, String name, String val) {
diff --git
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/process/ProcessImplForWin32.java
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/process/ProcessImplForWin32.java
index 4f6d719..1efde52 100644
---
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/process/ProcessImplForWin32.java
+++
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/process/ProcessImplForWin32.java
@@ -93,13 +93,15 @@ public class ProcessImplForWin32 extends Process {
if (append) {
String path = f.getPath();
SecurityManager sm = System.getSecurityManager();
- if (sm != null)
+ if (sm != null) {
sm.checkWrite(path);
+ }
long handle = openForAtomicAppend(path);
final FileDescriptor fd = new FileDescriptor();
setHandle(fd, handle);
return AccessController.doPrivileged(
new PrivilegedAction<FileOutputStream>() {
+ @Override
public FileOutputStream run() {
return new FileOutputStream(fd);
}
@@ -133,30 +135,30 @@ public class ProcessImplForWin32 extends Process {
} else {
stdHandles = new long[3];
- if (redirects[0] == ProcessBuilderForWin32.Redirect.PIPE)
+ if (redirects[0] == ProcessBuilderForWin32.Redirect.PIPE) {
stdHandles[0] = -1L;
- else if (redirects[0] ==
ProcessBuilderForWin32.Redirect.INHERIT)
+ } else if (redirects[0] ==
ProcessBuilderForWin32.Redirect.INHERIT) {
stdHandles[0] = getHandle(FileDescriptor.in);
- else {
+ } else {
f0 = new FileInputStream(redirects[0].file());
stdHandles[0] = getHandle(f0.getFD());
}
- if (redirects[1] == ProcessBuilderForWin32.Redirect.PIPE)
+ if (redirects[1] == ProcessBuilderForWin32.Redirect.PIPE) {
stdHandles[1] = -1L;
- else if (redirects[1] ==
ProcessBuilderForWin32.Redirect.INHERIT)
+ } else if (redirects[1] ==
ProcessBuilderForWin32.Redirect.INHERIT) {
stdHandles[1] = getHandle(FileDescriptor.out);
- else {
+ } else {
f1 = newFileOutputStream(redirects[1].file(),
redirects[1].append());
stdHandles[1] = getHandle(f1.getFD());
}
- if (redirects[2] == ProcessBuilderForWin32.Redirect.PIPE)
+ if (redirects[2] == ProcessBuilderForWin32.Redirect.PIPE) {
stdHandles[2] = -1L;
- else if (redirects[2] ==
ProcessBuilderForWin32.Redirect.INHERIT)
+ } else if (redirects[2] ==
ProcessBuilderForWin32.Redirect.INHERIT) {
stdHandles[2] = getHandle(FileDescriptor.err);
- else {
+ } else {
f2 = newFileOutputStream(redirects[2].file(),
redirects[2].append());
stdHandles[2] = getHandle(f2.getFD());
@@ -167,10 +169,19 @@ public class ProcessImplForWin32 extends Process {
} finally {
// In theory, close() can throw IOException
// (although it is rather unlikely to happen here)
- try { if (f0 != null) f0.close(); }
+ try { if (f0 != null) {
+ f0.close();
+ }
+ }
finally {
- try { if (f1 != null) f1.close(); }
- finally { if (f2 != null) f2.close(); }
+ try { if (f1 != null) {
+ f1.close();
+ }
+ }
+ finally { if (f2 != null) {
+ f2.close();
+ }
+ }
}
}
@@ -193,8 +204,9 @@ public class ProcessImplForWin32 extends Process {
private static String[] getTokensFromCommand(String command) {
ArrayList<String> matchList = new ArrayList<>(8);
Matcher regexMatcher =
ProcessImplForWin32.LazyPattern.PATTERN.matcher(command);
- while (regexMatcher.find())
+ while (regexMatcher.find()) {
matchList.add(regexMatcher.group());
+ }
return matchList.toArray(new String[matchList.size()]);
}
@@ -378,8 +390,9 @@ public class ProcessImplForWin32 extends Process {
// .bat files don't include backslashes as part of the quote
private static int countLeadingBackslash(int verificationType,
CharSequence input, int start) {
- if (verificationType == VERIFICATION_CMD_BAT)
+ if (verificationType == VERIFICATION_CMD_BAT) {
return 0;
+ }
int j;
for (j = start - 1; j >= 0 && input.charAt(j) == BACKSLASH; j--) {
// just scanning backwards
@@ -417,8 +430,9 @@ public class ProcessImplForWin32 extends Process {
String executablePath = new File(cmd[0]).getPath();
// No worry about internal, unpaired ["], and redirection/piping.
- if (needsEscaping(VERIFICATION_LEGACY, executablePath) )
+ if (needsEscaping(VERIFICATION_LEGACY, executablePath) ) {
executablePath = quoteString(executablePath);
+ }
cmdstr = createCommandLine(
//legacy mode doesn't worry about extended verification
@@ -442,16 +456,18 @@ public class ProcessImplForWin32 extends Process {
// Restore original command line.
StringBuilder join = new StringBuilder();
// terminal space in command line is ok
- for (String s : cmd)
+ for (String s : cmd) {
join.append(s).append(' ');
+ }
// Parse the command line again.
cmd = getTokensFromCommand(join.toString());
executablePath = getExecutablePath(cmd[0]);
// Check new executable name once more
- if (security != null)
+ if (security != null) {
security.checkExec(executablePath);
+ }
}
// Quotation protects from interpretation of the [path] argument as
@@ -471,28 +487,29 @@ public class ProcessImplForWin32 extends Process {
AccessController.doPrivileged(
new PrivilegedAction<Void>() {
+ @Override
public Void run() {
- if (stdHandles[0] == -1L)
+ if (stdHandles[0] == -1L) {
stdinStream =
ProcessBuilderForWin32.NullOutputStream.INSTANCE;
- else {
+ } else {
FileDescriptor stdinFd = new FileDescriptor();
setHandle(stdinFd, stdHandles[0]);
stdinStream = new BufferedOutputStream(
new FileOutputStream(stdinFd));
}
- if (stdHandles[1] == -1L)
+ if (stdHandles[1] == -1L) {
stdoutStream =
ProcessBuilderForWin32.NullInputStream.INSTANCE;
- else {
+ } else {
FileDescriptor stdoutFd = new FileDescriptor();
setHandle(stdoutFd, stdHandles[1]);
stdoutStream = new BufferedInputStream(
new FileInputStream(stdoutFd));
}
- if (stdHandles[2] == -1L)
+ if (stdHandles[2] == -1L) {
stderrStream =
ProcessBuilderForWin32.NullInputStream.INSTANCE;
- else {
+ } else {
FileDescriptor stderrFd = new FileDescriptor();
setHandle(stderrFd, stdHandles[2]);
stderrStream = new FileInputStream(stderrFd);
@@ -501,33 +518,41 @@ public class ProcessImplForWin32 extends Process {
return null; }});
}
+ @Override
public OutputStream getOutputStream() {
return stdinStream;
}
+ @Override
public InputStream getInputStream() {
return stdoutStream;
}
+ @Override
public InputStream getErrorStream() {
return stderrStream;
}
+ @Override
protected void finalize() {
closeHandle(handle);
}
+ @Override
public int exitValue() {
int exitCode = getExitCodeProcess(handle);
- if (exitCode == STILL_ACTIVE)
+ if (exitCode == STILL_ACTIVE) {
throw new IllegalThreadStateException("process has not exited");
+ }
return exitCode;
}
+ @Override
public int waitFor() throws InterruptedException {
waitForInterruptibly(handle);
- if (Thread.interrupted())
+ if (Thread.interrupted()) {
throw new InterruptedException();
+ }
return exitValue();
}
@@ -535,8 +560,12 @@ public class ProcessImplForWin32 extends Process {
public boolean waitFor(long timeout, TimeUnit unit)
throws InterruptedException
{
- if (getExitCodeProcess(handle) != STILL_ACTIVE) return true;
- if (timeout <= 0) return false;
+ if (getExitCodeProcess(handle) != STILL_ACTIVE) {
+ return true;
+ }
+ if (timeout <= 0) {
+ return false;
+ }
long remainingNanos = unit.toNanos(timeout);
long deadline = System.nanoTime() + remainingNanos ;
@@ -545,8 +574,9 @@ public class ProcessImplForWin32 extends Process {
// Round up to next millisecond
long msTimeout = TimeUnit.NANOSECONDS.toMillis(remainingNanos +
999_999L);
waitForTimeoutInterruptibly(handle, msTimeout);
- if (Thread.interrupted())
+ if (Thread.interrupted()) {
throw new InterruptedException();
+ }
if (getExitCodeProcess(handle) != STILL_ACTIVE) {
return true;
}
@@ -556,6 +586,7 @@ public class ProcessImplForWin32 extends Process {
return (getExitCodeProcess(handle) != STILL_ACTIVE);
}
+ @Override
public void destroy() { terminateProcess(handle); }
@Override
diff --git
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessInstanceMap.java
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessInstanceMap.java
index 637d573..58e5411 100644
---
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessInstanceMap.java
+++
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessInstanceMap.java
@@ -91,14 +91,24 @@ public class ProcessInstanceMap {
@Override
public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
ProcessInstanceMap that = (ProcessInstanceMap) o;
- if (id != that.id) return false;
- if (parentProcessInstanceId != that.parentProcessInstanceId) return
false;
- if (parentTaskInstanceId != that.parentTaskInstanceId) return false;
+ if (id != that.id) {
+ return false;
+ }
+ if (parentProcessInstanceId != that.parentProcessInstanceId) {
+ return false;
+ }
+ if (parentTaskInstanceId != that.parentTaskInstanceId) {
+ return false;
+ }
return processInstanceId == that.processInstanceId;
}
diff --git
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Queue.java
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Queue.java
index 5d8f7e2..57b678d 100644
---
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Queue.java
+++
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Queue.java
@@ -104,13 +104,21 @@ public class Queue {
@Override
public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
Queue queue1 = (Queue) o;
- if (id != queue1.id) return false;
- if (!queueName.equals(queue1.queueName)) return false;
+ if (id != queue1.id) {
+ return false;
+ }
+ if (!queueName.equals(queue1.queueName)) {
+ return false;
+ }
return queue.equals(queue1.queue);
}
diff --git
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Session.java
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Session.java
index 83bf246..39bf614 100644
---
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Session.java
+++
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Session.java
@@ -93,14 +93,24 @@ public class Session {
@Override
public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
Session session = (Session) o;
- if (userId != session.userId) return false;
- if (!id.equals(session.id)) return false;
- if (!lastLoginTime.equals(session.lastLoginTime)) return false;
+ if (userId != session.userId) {
+ return false;
+ }
+ if (!id.equals(session.id)) {
+ return false;
+ }
+ if (!lastLoginTime.equals(session.lastLoginTime)) {
+ return false;
+ }
return ip.equals(session.ip);
}
diff --git
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Tenant.java
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Tenant.java
index bf23ad5..a289f4f 100644
---
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Tenant.java
+++
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Tenant.java
@@ -166,8 +166,12 @@ public class Tenant {
@Override
public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
Tenant tenant = (Tenant) o;
diff --git
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/utils/MysqlPerformance.java
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/utils/MysqlPerformance.java
index 1e1ee78..e7e9c70 100644
---
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/utils/MysqlPerformance.java
+++
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/utils/MysqlPerformance.java
@@ -56,7 +56,7 @@ public class MysqlPerformance extends BaseDBPerformance{
try (ResultSet rs1 = pstmt.executeQuery("show global variables")) {
while(rs1.next()){
-
if(rs1.getString(VARIABLE_NAME).equalsIgnoreCase("MAX_CONNECTIONS")){
+
if("MAX_CONNECTIONS".equalsIgnoreCase(rs1.getString(VARIABLE_NAME))){
monitorRecord.setMaxConnections(
Long.parseLong(rs1.getString("value")));
}
}
@@ -64,11 +64,11 @@ public class MysqlPerformance extends BaseDBPerformance{
try (ResultSet rs2 = pstmt.executeQuery("show global status")) {
while(rs2.next()){
-
if(rs2.getString(VARIABLE_NAME).equalsIgnoreCase("MAX_USED_CONNECTIONS")){
+
if("MAX_USED_CONNECTIONS".equalsIgnoreCase(rs2.getString(VARIABLE_NAME))){
monitorRecord.setMaxUsedConnections(Long.parseLong(rs2.getString("value")));
- }else
if(rs2.getString(VARIABLE_NAME).equalsIgnoreCase("THREADS_CONNECTED")){
+ }else
if("THREADS_CONNECTED".equalsIgnoreCase(rs2.getString(VARIABLE_NAME))){
monitorRecord.setThreadsConnections(Long.parseLong(rs2.getString("value")));
- }else
if(rs2.getString(VARIABLE_NAME).equalsIgnoreCase("THREADS_RUNNING")){
+ }else
if("THREADS_RUNNING".equalsIgnoreCase(rs2.getString(VARIABLE_NAME))){
monitorRecord.setThreadsRunningConnections(Long.parseLong(rs2.getString("value")));
}
}
diff --git
a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/utils/ProcessUtils.java
b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/utils/ProcessUtils.java
index 5074a5e..310ab62 100644
---
a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/utils/ProcessUtils.java
+++
b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/utils/ProcessUtils.java
@@ -47,6 +47,14 @@ public class ProcessUtils {
private final static Logger logger =
LoggerFactory.getLogger(ProcessUtils.class);
/**
+ * Initialization regularization, solve the problem of pre-compilation
performance,
+ * avoid the thread safety problem of multi-thread operation
+ */
+ private static final Pattern MACPATTERN =
Pattern.compile("-[+|-]-\\s(\\d+)");
+
+ private static final Pattern WINDOWSATTERN = Pattern.compile("(\\d+)");
+
+ /**
* build command line characters
* @param commandList command list
* @return command
@@ -356,10 +364,10 @@ public class ProcessUtils {
// pstree pid get sub pids
if (OSUtils.isMacOS()) {
String pids = OSUtils.exeCmd("pstree -sp " + processId);
- mat = Pattern.compile("-[+|-]-\\s(\\d+)").matcher(pids);
+ mat = MACPATTERN.matcher(pids);
} else {
String pids = OSUtils.exeCmd("pstree -p " + processId);
- mat = Pattern.compile("(\\d+)").matcher(pids);
+ mat = WINDOWSATTERN.matcher(pids);
}
while (mat.find()){
diff --git
a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/zk/AbstractZKClient.java
b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/zk/AbstractZKClient.java
index e75e20b..a27a89a 100644
---
a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/zk/AbstractZKClient.java
+++
b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/zk/AbstractZKClient.java
@@ -272,7 +272,7 @@ public abstract class AbstractZKClient extends
ZookeeperCachedOperator {
try {
mutex.release();
} catch (Exception e) {
- if(e.getMessage().equals("instance must be
started before calling this method")){
+ if("instance must be started before calling
this method".equals(e.getMessage())){
logger.warn("lock release");
}else{
logger.error("lock release failed",e);