mirror of
https://gitee.com/dolphinscheduler/DolphinScheduler.git
synced 2024-12-01 11:47:51 +08:00
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 <daili@users.noreply.github.com> * Update ResourceTreeVisitor.java re-run test process Co-authored-by: daili <daili@users.noreply.github.com> Co-authored-by: dailidong <dailidong66@gmail.com>
This commit is contained in:
parent
a5b0536437
commit
cb5285384e
@ -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());
|
||||
|
@ -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())) {
|
||||
|
@ -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
|
||||
|
@ -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 {
|
||||
|
@ -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();
|
||||
|
||||
|
@ -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) {
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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")));
|
||||
}
|
||||
}
|
||||
|
@ -46,6 +46,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
|
||||
@ -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()){
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user