You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2015/09/18 16:50:42 UTC
ignite git commit: ignite-1.4-perf1
Repository: ignite
Updated Branches:
refs/heads/ignite-1.4-perf1 [created] 4df650a06
ignite-1.4-perf1
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/4df650a0
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/4df650a0
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/4df650a0
Branch: refs/heads/ignite-1.4-perf1
Commit: 4df650a06668f12c42330a444676a862045b2f44
Parents: 8a5cef6
Author: sboikov <sb...@gridgain.com>
Authored: Fri Sep 18 17:50:35 2015 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Fri Sep 18 17:50:35 2015 +0300
----------------------------------------------------------------------
.../query/h2/opt/GridH2AbstractKeyValueRow.java | 31 +++++++++++++-------
1 file changed, 20 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/4df650a0/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2AbstractKeyValueRow.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2AbstractKeyValueRow.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2AbstractKeyValueRow.java
index 63e2bc3..367d1e4 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2AbstractKeyValueRow.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2AbstractKeyValueRow.java
@@ -182,9 +182,11 @@ public abstract class GridH2AbstractKeyValueRow extends GridH2Row {
/** {@inheritDoc} */
@Override public Value getValue(int col) {
if (col < DEFAULT_COLUMNS_COUNT) {
- Value v = peekValue(col);
+ Value v;
if (col == VAL_COL) {
+ v = peekValue(VAL_COL);
+
long start = 0;
int attempt = 0;
@@ -206,11 +208,15 @@ public abstract class GridH2AbstractKeyValueRow extends GridH2Row {
Object valObj = desc.readFromSwap(k);
if (valObj != null) {
- Value upd = desc.wrap(valObj, desc.valueType());
+ // Even if we've found valObj in swap, it is may be some new value,
+ // while the needed value was already unswapped, so we have to recheck it.
+ if ((v = WeakValue.unwrap(peekValue(VAL_COL))) == null) {
+ Value upd = desc.wrap(valObj, desc.valueType());
- v = updateWeakValue(upd);
+ v = updateWeakValue(upd);
- return v == null ? upd : v;
+ return v == null ? upd : v;
+ }
}
else {
// If nothing found in swap then we should be already unswapped.
@@ -230,18 +236,21 @@ public abstract class GridH2AbstractKeyValueRow extends GridH2Row {
". This can happen due to a long GC pause.");
}
}
-
- if (v == null) {
+ else {
assert col == KEY_COL : col;
- v = getOffheapValue(KEY_COL);
+ v = peekValue(KEY_COL);
- assert v != null : v;
+ if (v == null) {
+ v = getOffheapValue(KEY_COL);
- setValue(KEY_COL, v);
+ assert v != null;
- if (peekValue(VAL_COL) == null)
- cache();
+ setValue(KEY_COL, v);
+
+ if (peekValue(VAL_COL) == null)
+ cache();
+ }
}
assert !(v instanceof WeakValue) : v;