ignite-341 - fix attempt 5
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/debc982b Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/debc982b Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/debc982b Branch: refs/heads/ignite-494b Commit: debc982bf93d588ffd929c73f30b8d525eb73042 Parents: cccaea9 Author: S.Vladykin <svlady...@gridgain.com> Authored: Wed Mar 25 14:54:06 2015 +0300 Committer: S.Vladykin <svlady...@gridgain.com> Committed: Wed Mar 25 14:54:06 2015 +0300 ---------------------------------------------------------------------- .../processors/query/h2/IgniteH2Indexing.java | 39 ++++++++++---------- 1 file changed, 20 insertions(+), 19 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/debc982b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java ---------------------------------------------------------------------- diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java index d5af834..01b0db6 100644 --- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java +++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java @@ -291,20 +291,18 @@ public class IgniteH2Indexing implements GridQueryIndexing { * @param tblToUpdate Table to update. * @throws IgniteCheckedException In case of error. */ - private void removeKey(@Nullable String spaceName, Object key, Object val, TableDescriptor tblToUpdate) + private void removeKey(@Nullable String spaceName, Object key, TableDescriptor tblToUpdate) throws IgniteCheckedException { try { Collection<TableDescriptor> tbls = tables(schema(spaceName)); - if (tbls.size() > 1) { - for (TableDescriptor tbl : tbls) { - if (tbl != tblToUpdate && tbl.type().keyClass().equals(key.getClass())) { - if (tbl.tbl.update(key, val, 0, true)) { - if (tbl.luceneIdx != null) - tbl.luceneIdx.remove(key); + for (TableDescriptor tbl : tbls) { + if (tbl != tblToUpdate && tbl.type().keyClass().isAssignableFrom(key.getClass())) { + if (tbl.tbl.update(key, null, 0, true)) { + if (tbl.luceneIdx != null) + tbl.luceneIdx.remove(key); - return; - } + return; } } } @@ -356,11 +354,11 @@ public class IgniteH2Indexing implements GridQueryIndexing { long expirationTime) throws IgniteCheckedException { TableDescriptor tbl = tableDescriptor(spaceName, type); + removeKey(spaceName, k, tbl); + if (tbl == null) return; // Type was rejected. - removeKey(spaceName, k, v, tbl); - if (expirationTime == 0) expirationTime = Long.MAX_VALUE; @@ -376,7 +374,8 @@ public class IgniteH2Indexing implements GridQueryIndexing { log.debug("Removing key from cache query index [locId=" + nodeId + ", key=" + key + ']'); for (TableDescriptor tbl : tables(schema(spaceName))) { - if (tbl.type().keyClass().equals(key.getClass())) { + if (tbl.type().keyClass().isAssignableFrom(key.getClass()) + && (val == null || tbl.type().valueClass().isAssignableFrom(val.getClass()))) { if (tbl.tbl.update(key, val, 0, true)) { if (tbl.luceneIdx != null) tbl.luceneIdx.remove(key); @@ -395,7 +394,7 @@ public class IgniteH2Indexing implements GridQueryIndexing { return; for (TableDescriptor tbl : schema.tbls.values()) { - if (tbl.type().keyClass().equals(key.getClass())) { + if (tbl.type().keyClass().isAssignableFrom(key.getClass())) { try { if (tbl.tbl.onSwap(key)) return; @@ -410,8 +409,11 @@ public class IgniteH2Indexing implements GridQueryIndexing { /** {@inheritDoc} */ @Override public void onUnswap(@Nullable String spaceName, Object key, Object val, byte[] valBytes) throws IgniteCheckedException { + assert val != null; + for (TableDescriptor tbl : tables(schema(spaceName))) { - if (tbl.type().keyClass().equals(key.getClass())) { + if (tbl.type().keyClass().isAssignableFrom(key.getClass()) + && tbl.type().valueClass().isAssignableFrom(val.getClass())) { try { if (tbl.tbl.onUnswap(key, val)) return; @@ -855,7 +857,7 @@ public class IgniteH2Indexing implements GridQueryIndexing { */ @Override public boolean registerType(@Nullable String spaceName, GridQueryTypeDescriptor type) throws IgniteCheckedException { - if (!validateTypeDescriptor(spaceName, type)) + if (!validateTypeDescriptor(type)) return false; String schemaName = schema(spaceName); @@ -883,12 +885,11 @@ public class IgniteH2Indexing implements GridQueryIndexing { /** * Validates properties described by query types. * - * @param spaceName Space name. * @param type Type descriptor. * @return True if type is valid. * @throws IgniteCheckedException If validation failed. */ - private boolean validateTypeDescriptor(@Nullable String spaceName, GridQueryTypeDescriptor type) + private boolean validateTypeDescriptor(GridQueryTypeDescriptor type) throws IgniteCheckedException { assert type != null; @@ -1899,8 +1900,8 @@ public class IgniteH2Indexing implements GridQueryIndexing { } catch (ClassCastException e) { throw new IgniteCheckedException("Failed to convert key to SQL type. " + - "Please make sure that you always store each value type with the same key type or disable " + - "'defaultIndexFixedTyping' property.", e); + "Please make sure that you always store each value type with the same key type " + + "or configure key type as common super class for all actual keys for this value type.", e); } }