This is an automated email from the ASF dual-hosted git repository.
haonan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new 52869f4 [IOTDB-1731]Fix sync error between different os (#4245)
52869f4 is described below
commit 52869f4fcfdf3bba493f97a902815617bc0e0198
Author: yschengzi <[email protected]>
AuthorDate: Thu Oct 28 15:19:14 2021 +0800
[IOTDB-1731]Fix sync error between different os (#4245)
---
.../db/sync/receiver/transfer/SyncServiceImpl.java | 44 ++++++++++++++--------
.../iotdb/db/sync/sender/transfer/SyncClient.java | 18 ++++-----
2 files changed, 37 insertions(+), 25 deletions(-)
diff --git
a/server/src/main/java/org/apache/iotdb/db/sync/receiver/transfer/SyncServiceImpl.java
b/server/src/main/java/org/apache/iotdb/db/sync/receiver/transfer/SyncServiceImpl.java
index 832d714..8157dcb 100644
---
a/server/src/main/java/org/apache/iotdb/db/sync/receiver/transfer/SyncServiceImpl.java
+++
b/server/src/main/java/org/apache/iotdb/db/sync/receiver/transfer/SyncServiceImpl.java
@@ -78,7 +78,7 @@ public class SyncServiceImpl implements SyncService.Iface {
public SyncStatus check(ConfirmInfo info) {
String ipAddress = info.address, uuid = info.uuid;
Thread.currentThread().setName(ThreadName.SYNC_SERVER.getName());
- if (!info.version.equals(IoTDBConstant.MAJOR_VERSION)) {
+ if (!getMajorVersion(info.version).equals(IoTDBConstant.MAJOR_VERSION)) {
return getErrorResult(
String.format(
"Version mismatch: the sender <%s>, the receiver <%s>",
@@ -106,6 +106,12 @@ public class SyncServiceImpl implements SyncService.Iface {
}
}
+ private String getMajorVersion(String version) {
+ return version.equals("UNKNOWN")
+ ? "UNKNOWN"
+ : version.split("\\.")[0] + "." + version.split("\\.")[1];
+ }
+
private boolean checkRecovery() {
try {
if (currentFileWriter.get() != null) {
@@ -164,33 +170,41 @@ public class SyncServiceImpl implements SyncService.Iface
{
}
@Override
- public SyncStatus syncDeletedFileName(String fileName) {
+ public SyncStatus syncDeletedFileName(String fileInfo) {
+ String filePath = currentSG.get() + File.separator +
getFilePathByFileInfo(fileInfo);
try {
- syncLog
- .get()
- .finishSyncDeletedFileName(
- new File(getSyncDataPath(), currentSG.get() + File.separatorChar
+ fileName));
+ syncLog.get().finishSyncDeletedFileName(new File(getSyncDataPath(),
filePath));
FileLoaderManager.getInstance()
.getFileLoader(senderName.get())
- .addDeletedFileName(
- new File(getSyncDataPath(), currentSG.get() + File.separatorChar
+ fileName));
+ .addDeletedFileName(new File(getSyncDataPath(), filePath));
} catch (IOException e) {
logger.error("Can not sync deleted file", e);
return getErrorResult(
- String.format("Can not sync deleted file %s because %s", fileName,
e.getMessage()));
+ String.format("Can not sync deleted file %s because %s", filePath,
e.getMessage()));
}
return getSuccessResult();
}
+ private String getFilePathByFileInfo(String fileInfo) { // for different os
+ String filePath = "";
+ String[] fileInfos = fileInfo.split(SyncConstant.SYNC_DIR_NAME_SEPARATOR);
+ for (int i = 0; i < fileInfos.length - 1; i++) {
+ filePath += fileInfos[i] + File.separator;
+ }
+ return filePath + fileInfos[fileInfos.length - 1];
+ }
+
@SuppressWarnings("squid:S2095") // Suppress unclosed resource warning
@Override
- public SyncStatus initSyncData(String filename) {
+ public SyncStatus initSyncData(String fileInfo) {
+ File file;
+ String filePath = fileInfo;
try {
- File file;
if (currentSG.get() == null) { // schema mlog.txt file
- file = new File(getSyncDataPath(), filename);
+ file = new File(getSyncDataPath(), filePath);
} else {
- file = new File(getSyncDataPath(), currentSG.get() +
File.separatorChar + filename);
+ filePath = currentSG.get() + File.separator +
getFilePathByFileInfo(fileInfo);
+ file = new File(getSyncDataPath(), filePath);
}
file.delete();
currentFile.set(file);
@@ -204,10 +218,10 @@ public class SyncServiceImpl implements SyncService.Iface
{
syncLog.get().startSyncTsFiles();
messageDigest.set(MessageDigest.getInstance(SyncConstant.MESSAGE_DIGIT_NAME));
} catch (IOException | NoSuchAlgorithmException e) {
- logger.error("Can not init sync resource for file {}", filename, e);
+ logger.error("Can not init sync resource for file {}", filePath, e);
return getErrorResult(
String.format(
- "Can not init sync resource for file %s because %s", filename,
e.getMessage()));
+ "Can not init sync resource for file %s because %s", filePath,
e.getMessage()));
}
return getSuccessResult();
}
diff --git
a/server/src/main/java/org/apache/iotdb/db/sync/sender/transfer/SyncClient.java
b/server/src/main/java/org/apache/iotdb/db/sync/sender/transfer/SyncClient.java
index 2bc83d0..d1644dc 100644
---
a/server/src/main/java/org/apache/iotdb/db/sync/sender/transfer/SyncClient.java
+++
b/server/src/main/java/org/apache/iotdb/db/sync/sender/transfer/SyncClient.java
@@ -607,9 +607,9 @@ public class SyncClient implements ISyncClient {
if (!isSyncConnect && !reconnect()) {
continue;
}
- if (serviceClient.syncDeletedFileName(getFileNameWithSG(file)).code ==
SUCCESS_CODE) {
- logger.info(
- "Receiver has received deleted file name {} successfully.",
getFileNameWithSG(file));
+ if
(serviceClient.syncDeletedFileName(getFileInfoWithVgAndTimePartition(file)).code
+ == SUCCESS_CODE) {
+ logger.info("Receiver has received deleted file name {}
successfully.", file.getPath());
lastLocalFilesMap.get(sgName).get(vgId).get(timeRangeId).remove(file);
syncLog.finishSyncDeletedFileName(file);
}
@@ -681,7 +681,7 @@ public class SyncClient implements ISyncClient {
try {
int retryCount = 0;
MessageDigest md =
MessageDigest.getInstance(SyncConstant.MESSAGE_DIGIT_NAME);
- serviceClient.initSyncData(getFileNameWithSG(snapshotFile));
+
serviceClient.initSyncData(getFileInfoWithVgAndTimePartition(snapshotFile));
outer:
while (true) {
retryCount++;
@@ -803,13 +803,11 @@ public class SyncClient implements ISyncClient {
SyncClient.config = config;
}
- private String getFileNameWithSG(File file) {
- return file.getParentFile().getParentFile().getParentFile().getName()
- + File.separator
- + file.getParentFile().getParentFile().getName()
- + File.separator
+ private String getFileInfoWithVgAndTimePartition(File file) {
+ return file.getParentFile().getParentFile().getName()
+ + SyncConstant.SYNC_DIR_NAME_SEPARATOR
+ file.getParentFile().getName()
- + File.separator
+ + SyncConstant.SYNC_DIR_NAME_SEPARATOR
+ file.getName();
}
}