This is an automated email from the ASF dual-hosted git repository.
jackietien pushed a commit to branch ChunkCacheBug
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/ChunkCacheBug by this push:
new 6d476c9 add logs
6d476c9 is described below
commit 6d476c9b5765b47ebb0aa331a9f0668b4453b9c2
Author: JackieTien97 <[email protected]>
AuthorDate: Wed May 26 19:34:00 2021 +0800
add logs
---
.../iotdb/db/engine/cache/LRULinkedHashMap.java | 34 +++++++++++++++++-----
1 file changed, 27 insertions(+), 7 deletions(-)
diff --git
a/server/src/main/java/org/apache/iotdb/db/engine/cache/LRULinkedHashMap.java
b/server/src/main/java/org/apache/iotdb/db/engine/cache/LRULinkedHashMap.java
index e6056be..39f1ba8 100644
---
a/server/src/main/java/org/apache/iotdb/db/engine/cache/LRULinkedHashMap.java
+++
b/server/src/main/java/org/apache/iotdb/db/engine/cache/LRULinkedHashMap.java
@@ -44,7 +44,7 @@ public abstract class LRULinkedHashMap<K extends Accountable,
V> {
/** maximum memory threshold. */
private final long maxMemory;
/** current used memory. */
- private volatile long usedMemory;
+ private long usedMemory;
/** memory size we need to retain while the cache is full */
private final long retainMemory;
@@ -63,25 +63,45 @@ public abstract class LRULinkedHashMap<K extends
Accountable, V> {
key.setRamSize(size);
usedMemory += size;
V v = linkedHashMap.put(key, value);
+ if (v != null) {
+ logger.error("shouldn't put a key that already exists");
+ }
+
if (usedMemory > maxMemory) {
Iterator<Entry<K, V>> iterator = linkedHashMap.entrySet().iterator();
- long count = 0;
+ int removeCount = 0;
int beforeSize = linkedHashMap.size();
- while (usedMemory > retainMemory && iterator.hasNext()) {
- count++;
+ while (usedMemory > retainMemory) {
+ removeCount++;
+ if (!iterator.hasNext()) {
+ iterator = linkedHashMap.entrySet().iterator();
+ }
+ if (!iterator.hasNext()) {
+ break;
+ }
Entry<K, V> entry = iterator.next();
usedMemory -= entry.getKey().getRamSize();
iterator.remove();
}
if (usedMemory > retainMemory) {
logger.error(
- "Current used memory is {}, retain memory is {}, map before size
is {}, map current size is {}, iterator has next {}, delete {} entry",
+ "Current used memory is {}, retain memory is {}, map before size
is {}, map current size is {}, delete {} entry",
usedMemory,
retainMemory,
beforeSize,
linkedHashMap.size(),
- iterator.hasNext(),
- count);
+ removeCount);
+ iterator = linkedHashMap.entrySet().iterator();
+ logger.error("new iterator has next {}", iterator.hasNext());
+ int actualSize = linkedHashMap.size();
+ int iteratorCount = 0;
+ while (iterator.hasNext()) {
+ iteratorCount++;
+ iterator.next();
+ }
+ if (actualSize != iteratorCount) {
+ logger.error("iteratorCount is {}, map actual size is {}",
iteratorCount, actualSize);
+ }
}
}
return v;