在我的业务log.info打印日志时(此时未释放meta.lock),IOThread.addPackage触发又一次logerror。
public void addPackage(PackageData data, int bytes) {
data.markAddToIOBeginTime();
try {
dataQueue.put(new BlockedData(data, bytes));
} catch (InterruptedException e) {
LOGGER.error("Failed to put data into dataQueue.", e);
}
data.markAddToIOEndTime();
}
在我的业务log.info打印日志时(此时未释放meta.lock),IOThread.addPackage触发又一次logerror。 public void addPackage(PackageData data, int bytes) { data.markAddToIOBeginTime(); try { dataQueue.put(new BlockedData(data, bytes)); } catch (InterruptedException e) { LOGGER.error("Failed to put data into dataQueue.", e); } data.markAddToIOEndTime(); }
此时再执行到append操作拿不到meta.lock就出现死锁了 } else { meta.lock.lock(); metaRWLock.readLock().unlock(); } PackageData data = dataMap.get(key); if (meta.logLinesCount > 0 && (meta.logLinesCount + linesCount >= config.logsCountPerPackage || meta.packageBytes + logBytes >= config.logsBytesPerPackage || System .currentTimeMillis() - meta.arriveTimeInMS >= config.packageTimeoutInMS)) { ioThread.addPackage(data, meta.packageBytes); dataMap.remove(key); data = null; meta.clear(); }
现在不确定是我使用上有什么问题导致的还是这个版本就存在这样的bug,请务必帮忙一起看下,非常感谢。