提交 b0fd6b12 编写于 作者: T Tianan Li 提交者: Jialin Qiao

fix bug of dead lock in compression ratio (#641)

上级 025653a4
......@@ -18,6 +18,7 @@
*/
package org.apache.iotdb.db.conf.adapter;
import com.google.common.util.concurrent.AtomicDouble;
import java.io.File;
import java.io.IOException;
import java.util.Locale;
......@@ -55,6 +56,8 @@ public class CompressionRatio {
private static final double DEFAULT_COMPRESSION_RATIO = 2.0;
private AtomicDouble compressionRatio = new AtomicDouble(DEFAULT_COMPRESSION_RATIO);
/**
* The total sum of all compression ratios.
*/
......@@ -87,8 +90,9 @@ public class CompressionRatio {
File newFile = SystemFileFactory.INSTANCE.getFile(directory,
String.format(Locale.ENGLISH, RATIO_FILE_PATH_FORMAT, compressionRatioSum, calcTimes));
persist(oldFile, newFile);
compressionRatio.set(compressionRatioSum / calcTimes);
if (LOGGER.isInfoEnabled()) {
LOGGER.info("Compression ratio is {}", getRatio());
LOGGER.info("Compression ratio is {}", compressionRatio.get());
}
if (CONFIG.isEnableParameterAdapter()) {
if (LOGGER.isInfoEnabled()) {
......@@ -112,8 +116,8 @@ public class CompressionRatio {
/**
* Get the average compression ratio for all closed files
*/
public synchronized double getRatio() {
return calcTimes == 0 ? DEFAULT_COMPRESSION_RATIO : compressionRatioSum / calcTimes;
public double getRatio() {
return compressionRatio.get();
}
private void persist(File oldFile, File newFile) throws IOException {
......@@ -158,6 +162,7 @@ public class CompressionRatio {
}
calcTimes = maxTimes;
compressionRatioSum = maxCompressionRatioSum;
compressionRatio.set(compressionRatioSum / calcTimes);
LOGGER.debug(
"After restoring from compression ratio file, compressionRatioSum = {}, calcTimes = {}",
compressionRatioSum, calcTimes);
......@@ -199,3 +204,4 @@ public class CompressionRatio {
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册