commit | f5257fef5b1468d8e05b2102d59fb4f45903e022 | [log] [tgz] |
---|---|---|
author | Taewoo Kim <wangsaeu@yahoo.com> | Thu Mar 22 19:38:00 2018 -0700 |
committer | Taewoo Kim <wangsaeu@gmail.com> | Fri Mar 23 10:30:48 2018 -0700 |
tree | f9af4c6ce7f9f444233acee7013039eacb390e0e | |
parent | ce67554220164a9aab55bc1498d3b0559c498217 [diff] |
[ASTERIXDB-2338][RT] Allow concurrent accesses to an inverted list - user model changes: no - storage format changes: no - interface changes: no Details: Fix a bug that when a page of an inverted list that is pinned to the buffer cache is accessed concurrently. Change-Id: I0d6e7e7188efe1f08016af0ab1840bc0cb59d49c Reviewed-on: https://asterix-gerrit.ics.uci.edu/2517 Reviewed-by: Luo Chen <cluo8@uci.edu> Sonar-Qube: Jenkins <jenkins@fulliautomatix.ics.uci.edu> Tested-by: Jenkins <jenkins@fulliautomatix.ics.uci.edu> Contrib: Jenkins <jenkins@fulliautomatix.ics.uci.edu> Integration-Tests: Jenkins <jenkins@fulliautomatix.ics.uci.edu> Reviewed-by: abdullah alamoudi <bamousaa@gmail.com>
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/ondisk/FixedSizeElementInvertedListCursor.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/ondisk/FixedSizeElementInvertedListCursor.java index da3f079..7f3d12f 100644 --- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/ondisk/FixedSizeElementInvertedListCursor.java +++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/ondisk/FixedSizeElementInvertedListCursor.java
@@ -220,9 +220,11 @@ // Assumption: processing inverted list takes time; so, we don't want to keep them on the buffer cache. // Rather, we utilize the assigned working memory (buffers). tmpBuffer = page.getBuffer(); - tmpBuffer.rewind(); - buffers.get(currentBufferIdx).rewind(); - buffers.get(currentBufferIdx).put(tmpBuffer); + + // Copies the entire content of the page to the current buffer in the working memory. + System.arraycopy(tmpBuffer.array(), 0, buffers.get(currentBufferIdx).array(), 0, + buffers.get(currentBufferIdx).capacity()); + buffers.get(currentBufferIdx).position(buffers.get(currentBufferIdx).capacity()); currentBufferIdx++; bufferCache.unpin(page);