Skip to content

Commit 599a9be

Browse files
committed
Fix Sonar hotspot in simple consensus log parsing
1 parent 8f9f175 commit 599a9be

1 file changed

Lines changed: 22 additions & 14 deletions

File tree

iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/statemachine/ConfigRegionStateMachine.java

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,6 @@
6565
import java.util.concurrent.TimeUnit;
6666
import java.util.concurrent.atomic.AtomicBoolean;
6767
import java.util.concurrent.atomic.AtomicLong;
68-
import java.util.regex.Matcher;
69-
import java.util.regex.Pattern;
7068

7169
/** {@link IStateMachine} for ConfigRegion. */
7270
public class ConfigRegionStateMachine implements IStateMachine, IStateMachine.EventApi {
@@ -94,14 +92,14 @@ public class ConfigRegionStateMachine implements IStateMachine, IStateMachine.Ev
9492

9593
private static final String CURRENT_FILE_DIR =
9694
ConsensusManager.getConfigRegionDir() + File.separator + "current";
95+
private static final String LOG_INPROGRESS_FILE_PREFIX = "log_inprogress_";
96+
private static final String LOG_FILE_PREFIX = "log_";
9797
private static final String PROGRESS_FILE_PATH =
98-
CURRENT_FILE_DIR + File.separator + "log_inprogress_";
99-
private static final String FILE_PATH = CURRENT_FILE_DIR + File.separator + "log_";
98+
CURRENT_FILE_DIR + File.separator + LOG_INPROGRESS_FILE_PREFIX;
99+
private static final String FILE_PATH = CURRENT_FILE_DIR + File.separator + LOG_FILE_PREFIX;
100100
private static final long LOG_FILE_MAX_SIZE =
101101
CONF.getConfigNodeSimpleConsensusLogSegmentSizeMax();
102102
private final TEndPoint currentNodeTEndPoint;
103-
private static final Pattern LOG_INPROGRESS_PATTERN = Pattern.compile("\\d+");
104-
private static final Pattern LOG_PATTERN = Pattern.compile("(?<=_)(\\d+)$");
105103

106104
public ConfigRegionStateMachine(ConfigManager configManager, ConfigPlanExecutor executor) {
107105
this.executor = executor;
@@ -626,17 +624,27 @@ private void createLogFile(int startIndex) {
626624
}
627625

628626
private static long parseEndIndex(String filename) {
629-
if (filename.startsWith("log_inprogress_")) {
630-
Matcher matcher = LOG_INPROGRESS_PATTERN.matcher(filename);
631-
if (matcher.find()) {
632-
return Long.parseLong(matcher.group());
627+
final String endIndexString;
628+
if (filename.startsWith(LOG_INPROGRESS_FILE_PREFIX)) {
629+
endIndexString = filename.substring(LOG_INPROGRESS_FILE_PREFIX.length());
630+
} else if (filename.startsWith(LOG_FILE_PREFIX)) {
631+
final int lastSeparatorIndex = filename.lastIndexOf('_');
632+
if (lastSeparatorIndex < LOG_FILE_PREFIX.length()) {
633+
return 0;
633634
}
635+
endIndexString = filename.substring(lastSeparatorIndex + 1);
634636
} else {
635-
Matcher matcher = LOG_PATTERN.matcher(filename);
636-
if (matcher.find()) {
637-
return Long.parseLong(matcher.group());
637+
return 0;
638+
}
639+
640+
if (endIndexString.isEmpty()) {
641+
return 0;
642+
}
643+
for (int i = 0; i < endIndexString.length(); i++) {
644+
if (!Character.isDigit(endIndexString.charAt(i))) {
645+
return 0;
638646
}
639647
}
640-
return 0;
648+
return Long.parseLong(endIndexString);
641649
}
642650
}

0 commit comments

Comments
 (0)