Repository: incubator-ignite Updated Branches: refs/heads/ignite-471 8bdfdba20 -> 392285406
ignite-471: fixing id mapping Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/39228540 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/39228540 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/39228540 Branch: refs/heads/ignite-471 Commit: 392285406aa584f6fc95715497e434595cc447cb Parents: 8bdfdba Author: Denis Magda <dma...@gridgain.com> Authored: Tue May 5 10:57:04 2015 +0300 Committer: Denis Magda <dma...@gridgain.com> Committed: Tue May 5 10:57:04 2015 +0300 ---------------------------------------------------------------------- .../internal/MarshallerContextAdapter.java | 31 +++++++++++++++++- .../ignite/marshaller/MarshallerContext.java | 10 ++++++ .../ignite/marshaller/MarshallerIdMapper.java | 33 ++++++++++++++++++++ .../optimized/OptimizedClassDescriptor.java | 4 +-- .../optimized/OptimizedMarshaller.java | 4 +-- .../optimized/OptimizedMarshallerIdMapper.java | 33 -------------------- .../optimized/OptimizedMarshallerUtils.java | 6 ++-- .../optimized/OptimizedObjectInputStream.java | 4 +-- .../optimized/OptimizedObjectOutputStream.java | 4 +-- .../cache/GridCacheEntryMemorySizeSelfTest.java | 4 +++ 10 files changed, 88 insertions(+), 45 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/39228540/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextAdapter.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextAdapter.java index eac9d9b..3d532e2 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextAdapter.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextAdapter.java @@ -40,10 +40,20 @@ public abstract class MarshallerContextAdapter implements MarshallerContext { /** */ private final ConcurrentMap<Integer, String> map = new ConcurrentHashMap8<>(); + /** */ + private volatile MarshallerIdMapper idMapper = new ClassNamesDefaultIdMapper(); + /** * Initializes context. */ public MarshallerContextAdapter() { + initMapping(); + } + + /** + * Initializes mapping + */ + private void initMapping() { try { ClassLoader ldr = U.gridClassLoader(); @@ -66,6 +76,7 @@ public abstract class MarshallerContextAdapter implements MarshallerContext { private void processResource(URL url) throws IOException { try (InputStream in = url.openStream()) { BufferedReader rdr = new BufferedReader(new InputStreamReader(in)); + MarshallerIdMapper idMapper0 = idMapper; String line; @@ -75,7 +86,7 @@ public abstract class MarshallerContextAdapter implements MarshallerContext { String clsName = line.trim(); - map.put(clsName.hashCode(), clsName); + map.put(idMapper0.typeId(clsName), clsName); } } } @@ -113,6 +124,14 @@ public abstract class MarshallerContextAdapter implements MarshallerContext { return U.forName(clsName, ldr); } + /** {@inheritDoc} */ + @Override public void setIdMapper(MarshallerIdMapper idMapper) { + this.idMapper = idMapper; + + map.clear(); + initMapping(); + } + /** * Registers class name. * @@ -131,4 +150,14 @@ public abstract class MarshallerContextAdapter implements MarshallerContext { * @throws IgniteCheckedException In case of error. */ protected abstract String className(int id) throws IgniteCheckedException; + + /** + * Default ID mapper. + */ + private class ClassNamesDefaultIdMapper implements MarshallerIdMapper { + + @Override public int typeId(String clsName) { + return clsName.hashCode(); + } + } } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/39228540/modules/core/src/main/java/org/apache/ignite/marshaller/MarshallerContext.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/marshaller/MarshallerContext.java b/modules/core/src/main/java/org/apache/ignite/marshaller/MarshallerContext.java index f0e248a..6a35f50 100644 --- a/modules/core/src/main/java/org/apache/ignite/marshaller/MarshallerContext.java +++ b/modules/core/src/main/java/org/apache/ignite/marshaller/MarshallerContext.java @@ -43,4 +43,14 @@ public interface MarshallerContext { * @throws IgniteCheckedException In case of any other error. */ public Class getClass(int id, ClassLoader ldr) throws ClassNotFoundException, IgniteCheckedException; + + /** + * Sets class names ID mapper. + * + * If the method is called after {@link #registerClass(int, Class)} or {@link #getClass(int, ClassLoader)} it will + * lead to unpredictable behavior. + * + * @param idMapper ID mapper. + */ + public void setIdMapper(MarshallerIdMapper idMapper); } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/39228540/modules/core/src/main/java/org/apache/ignite/marshaller/MarshallerIdMapper.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/marshaller/MarshallerIdMapper.java b/modules/core/src/main/java/org/apache/ignite/marshaller/MarshallerIdMapper.java new file mode 100644 index 0000000..f8d2acb --- /dev/null +++ b/modules/core/src/main/java/org/apache/ignite/marshaller/MarshallerIdMapper.java @@ -0,0 +1,33 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.ignite.marshaller; + +/** + * ID mapper. + */ +public interface MarshallerIdMapper { + /** + * Gets type ID for provided class name. + * <p> + * If {@code 0} is returned, hash code of class name will be used. + * + * @param clsName Class name. + * @return Type ID. + */ + public int typeId(String clsName); +} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/39228540/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedClassDescriptor.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedClassDescriptor.java b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedClassDescriptor.java index 05ef534..59ebb44 100644 --- a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedClassDescriptor.java +++ b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedClassDescriptor.java @@ -48,7 +48,7 @@ class OptimizedClassDescriptor { private ConcurrentMap<Class, OptimizedClassDescriptor> clsMap; /** ID mapper. */ - private final OptimizedMarshallerIdMapper mapper; + private final MarshallerIdMapper mapper; /** Class name. */ private final String name; @@ -122,7 +122,7 @@ class OptimizedClassDescriptor { int typeId, ConcurrentMap<Class, OptimizedClassDescriptor> clsMap, MarshallerContext ctx, - OptimizedMarshallerIdMapper mapper) + MarshallerIdMapper mapper) throws IOException { this.cls = cls; this.typeId = typeId; http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/39228540/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshaller.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshaller.java b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshaller.java index 914d78d..0b0baea 100644 --- a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshaller.java +++ b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshaller.java @@ -91,7 +91,7 @@ public class OptimizedMarshaller extends AbstractMarshaller { private int initBufSize = DFLT_INIT_BUF_SIZE; /** ID mapper. */ - private OptimizedMarshallerIdMapper mapper; + private MarshallerIdMapper mapper; /** Class descriptors by class. */ private final ConcurrentMap<Class, OptimizedClassDescriptor> clsMap = new ConcurrentHashMap8<>(); @@ -142,7 +142,7 @@ public class OptimizedMarshaller extends AbstractMarshaller { * * @param mapper ID mapper. */ - public void setIdMapper(OptimizedMarshallerIdMapper mapper) { + public void setIdMapper(MarshallerIdMapper mapper) { this.mapper = mapper; } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/39228540/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerIdMapper.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerIdMapper.java b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerIdMapper.java deleted file mode 100644 index e4e2627..0000000 --- a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerIdMapper.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.ignite.marshaller.optimized; - -/** - * ID mapper. - */ -public interface OptimizedMarshallerIdMapper { - /** - * Gets type ID for provided class name. - * <p> - * If {@code 0} is returned, hash code of class name will be used. - * - * @param clsName Class name. - * @return Type ID. - */ - public int typeId(String clsName); -} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/39228540/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerUtils.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerUtils.java b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerUtils.java index fafdea1..5fb7269 100644 --- a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerUtils.java +++ b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerUtils.java @@ -178,7 +178,7 @@ class OptimizedMarshallerUtils { ConcurrentMap<Class, OptimizedClassDescriptor> clsMap, Class cls, MarshallerContext ctx, - OptimizedMarshallerIdMapper mapper) + MarshallerIdMapper mapper) throws IOException { OptimizedClassDescriptor desc = clsMap.get(cls); @@ -213,7 +213,7 @@ class OptimizedMarshallerUtils { * @param mapper Mapper. * @return Type ID. */ - private static int resolveTypeId(String clsName, OptimizedMarshallerIdMapper mapper) { + private static int resolveTypeId(String clsName, MarshallerIdMapper mapper) { int typeId; if (mapper != null) { @@ -245,7 +245,7 @@ class OptimizedMarshallerUtils { int id, ClassLoader ldr, MarshallerContext ctx, - OptimizedMarshallerIdMapper mapper) throws IOException, ClassNotFoundException { + MarshallerIdMapper mapper) throws IOException, ClassNotFoundException { Class cls; try { http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/39228540/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectInputStream.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectInputStream.java b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectInputStream.java index 17082ae..ec84f44 100644 --- a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectInputStream.java +++ b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectInputStream.java @@ -55,7 +55,7 @@ class OptimizedObjectInputStream extends ObjectInputStream { private MarshallerContext ctx; /** */ - private OptimizedMarshallerIdMapper mapper; + private MarshallerIdMapper mapper; /** */ private ClassLoader clsLdr; @@ -92,7 +92,7 @@ class OptimizedObjectInputStream extends ObjectInputStream { void context( ConcurrentMap<Class, OptimizedClassDescriptor> clsMap, MarshallerContext ctx, - OptimizedMarshallerIdMapper mapper, + MarshallerIdMapper mapper, ClassLoader clsLdr) { this.clsMap = clsMap; http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/39228540/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectOutputStream.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectOutputStream.java b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectOutputStream.java index a74db43..cc02c62 100644 --- a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectOutputStream.java +++ b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectOutputStream.java @@ -59,7 +59,7 @@ class OptimizedObjectOutputStream extends ObjectOutputStream { private MarshallerContext ctx; /** */ - private OptimizedMarshallerIdMapper mapper; + private MarshallerIdMapper mapper; /** */ private boolean requireSer; @@ -92,7 +92,7 @@ class OptimizedObjectOutputStream extends ObjectOutputStream { */ void context(ConcurrentMap<Class, OptimizedClassDescriptor> clsMap, MarshallerContext ctx, - OptimizedMarshallerIdMapper mapper, + MarshallerIdMapper mapper, boolean requireSer) { this.clsMap = clsMap; this.ctx = ctx; http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/39228540/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheEntryMemorySizeSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheEntryMemorySizeSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheEntryMemorySizeSelfTest.java index bb4fc9e..3ab9d26 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheEntryMemorySizeSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheEntryMemorySizeSelfTest.java @@ -91,6 +91,10 @@ public class GridCacheEntryMemorySizeSelfTest extends GridCommonAbstractTest { @Override public Class getClass(int id, ClassLoader ldr) { throw new UnsupportedOperationException(); } + + @Override public void setIdMapper(MarshallerIdMapper idMapper) { + throw new UnsupportedOperationException(); + } }); KEY_SIZE = U.toArray(marsh.marshal(1)).length;