From 00e51b517da9275321a1b9e904d1d80640f3c064 Mon Sep 17 00:00:00 2001 From: Boris Kapchits Date: Mon, 4 Apr 2022 16:47:20 +0300 Subject: [PATCH 1/2] added synch on mapOfCleanEntries and fixes function comments --- core/src/main/java/com/yahoo/oak/EntryHashSet.java | 6 +++++- core/src/main/java/com/yahoo/oak/HashChunk.java | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/com/yahoo/oak/EntryHashSet.java b/core/src/main/java/com/yahoo/oak/EntryHashSet.java index dc9b2fab..c6f9bdf4 100644 --- a/core/src/main/java/com/yahoo/oak/EntryHashSet.java +++ b/core/src/main/java/com/yahoo/oak/EntryHashSet.java @@ -537,6 +537,7 @@ boolean allocateEntryAndWriteKey(ThreadContext ctx, K key, int idx, int keyHash) synchronized (mapOfCleanEntries) { // set the appropriate position in the bit map, indicating the entry is not zero + mapOfCleanEntries.set(ctx.entryIndex); } @@ -682,7 +683,10 @@ boolean isEntryDeleted(ValueBuffer tempValue, int ei) { */ @Override int getNextNonZeroIndex(int currentIndex) { - int nxtIdx = mapOfCleanEntries.nextSetBit(currentIndex + 1); + int nxtIdx = INVALID_ENTRY_INDEX; + synchronized (mapOfCleanEntries) { + nxtIdx = mapOfCleanEntries.nextSetBit(currentIndex + 1); + } if (nxtIdx == -1) { nxtIdx = INVALID_ENTRY_INDEX; } diff --git a/core/src/main/java/com/yahoo/oak/HashChunk.java b/core/src/main/java/com/yahoo/oak/HashChunk.java index 32fe5fc0..aa3e0ad6 100644 --- a/core/src/main/java/com/yahoo/oak/HashChunk.java +++ b/core/src/main/java/com/yahoo/oak/HashChunk.java @@ -333,7 +333,7 @@ class HashChunkIter implements BasicChunkIter { /** - * find the index of the next occupied entry in the entryies array + * find the index of the first occupied entry in the entries array * @param ctx * @return index of the next occupied entry, or INVALID_ENTRY_INDEX if no such index exists */ From e6778c09a2e6aff838a0d81badf202c0b8a45c5e Mon Sep 17 00:00:00 2001 From: Boris Kapchits Date: Mon, 4 Apr 2022 16:54:24 +0300 Subject: [PATCH 2/2] minor style fixes --- core/src/main/java/com/yahoo/oak/EntryHashSet.java | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/core/src/main/java/com/yahoo/oak/EntryHashSet.java b/core/src/main/java/com/yahoo/oak/EntryHashSet.java index c6f9bdf4..c3f76c91 100644 --- a/core/src/main/java/com/yahoo/oak/EntryHashSet.java +++ b/core/src/main/java/com/yahoo/oak/EntryHashSet.java @@ -207,8 +207,8 @@ private boolean isKeyAndEntryKeyEqual(KeyBuffer tempKeyBuff, K key, int idx, int ** --> ctx.key, ctx.value, ctx.keyHash keep the data of the entry's key, value, and key hash */ private EntryState getEntryState(ThreadContext ctx, int idx, K key, int keyHash) { - boolean keyReadResult = false; - boolean valueReadResult = false; + boolean keyReadResult; + boolean valueReadResult; // optimization, as invalid key reference should be the most frequent case if (getKeyReference(idx) == config.keysMemoryManager.getInvalidReference()) { @@ -537,7 +537,6 @@ boolean allocateEntryAndWriteKey(ThreadContext ctx, K key, int idx, int keyHash) synchronized (mapOfCleanEntries) { // set the appropriate position in the bit map, indicating the entry is not zero - mapOfCleanEntries.set(ctx.entryIndex); } @@ -676,14 +675,9 @@ boolean isEntryDeleted(ValueBuffer tempValue, int ei) { return tempValue.getSlice().isDeleted() != ValueUtils.ValueResult.FALSE; } - /** - * identify the next non zero entry - * @param currentIndex index of the current entry - * @return - */ @Override int getNextNonZeroIndex(int currentIndex) { - int nxtIdx = INVALID_ENTRY_INDEX; + int nxtIdx; synchronized (mapOfCleanEntries) { nxtIdx = mapOfCleanEntries.nextSetBit(currentIndex + 1); }