http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectOutputStream.java ---------------------------------------------------------------------- diff --cc modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectOutputStream.java index 8fd7202,0000000..ff1f043 mode 100644,000000..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 @@@ -1,839 -1,0 +1,839 @@@ +/* + * 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; + +import org.apache.ignite.internal.util.*; +import org.apache.ignite.internal.util.io.*; +import org.apache.ignite.internal.util.typedef.*; +import org.apache.ignite.lang.*; + +import java.io.*; +import java.lang.reflect.*; +import java.util.*; + +import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.*; + +/** + * Optimized object output stream. + */ +class OptimizedObjectOutputStream extends ObjectOutputStream { + /** */ + private static final Collection<String> CONVERTED_ERR = F.asList( + "weblogic/management/ManagementException", + "Externalizable class doesn't have default constructor: class " + - "org.gridgain.grid.kernal.processors.email.GridEmailProcessor$2" ++ "org.apache.ignite.internal.processors.email.IgniteEmailProcessor$2" + ); + + /** */ + private final GridHandleTable handles = new GridHandleTable(10, 3.00f); + + /** */ + private boolean requireSer; + + /** */ + private GridDataOutput out; + + /** */ + private Object curObj; + + /** */ + private List<T2<OptimizedFieldType, Long>> curFields; + + /** */ + private Map<String, IgniteBiTuple<Integer, OptimizedFieldType>> curFieldInfoMap; + + /** */ + private PutFieldImpl curPut; + + + /** + * @throws IOException In case of error. + */ + OptimizedObjectOutputStream() throws IOException { + // No-op. + } + + /** + * @param out Output. + * @throws IOException In case of error. + */ + OptimizedObjectOutputStream(GridDataOutput out) throws IOException { + this.out = out; + } + + /** + * @param requireSer Require {@link Serializable} flag. + */ + void requireSerializable(boolean requireSer) { + this.requireSer = requireSer; + } + + /** + * @return Require {@link Serializable} flag. + */ + boolean requireSerializable() { + return requireSer; + } + + /** + * @param out Output. + */ + public void out(GridDataOutput out) { + this.out = out; + } + + /** + * @return Output. + */ + public GridDataOutput out() { + return out; + } + + /** {@inheritDoc} */ + @Override public void close() throws IOException { + reset(); + } + + /** {@inheritDoc} */ + @Override public void write(byte[] b) throws IOException { + out.write(b); + } + + /** {@inheritDoc} */ + @Override public void write(byte[] b, int off, int len) throws IOException { + out.write(b, off, len); + } + + /** {@inheritDoc} */ + @Override protected void writeObjectOverride(Object obj) throws IOException { + try { + writeObject0(obj); + } + catch (IOException e) { + Throwable t = e; + + do { + if (CONVERTED_ERR.contains(t.getMessage())) + throw new IOException("You are trying to serialize internal classes that are not supposed " + + "to be serialized. Check that all non-serializable fields are transient. Consider using " + + "static inner classes instead of non-static inner classes and anonymous classes.", e); + } + while ((t = t.getCause()) != null); + + throw e; + } + } + + /** + * Writes object to stream. + * + * @param obj Object. + * @throws IOException In case of error. + */ + private void writeObject0(Object obj) throws IOException { + curObj = null; + curFields = null; + curPut = null; + curFieldInfoMap = null; + + if (obj == null) + writeByte(NULL); + else { + Class<?> cls = obj.getClass(); + + OptimizedClassDescriptor desc = classDescriptor(cls, obj); + + if (desc.excluded()) { + writeByte(NULL); + + return; + } + + Object obj0 = desc.replace(obj); + + if (obj0 == null) { + writeByte(NULL); + + return; + } + + int handle = -1; + + if (!desc.isPrimitive() && !desc.isEnum() && !desc.isClass()) + handle = handles.lookup(obj); + + if (obj0 != obj) { + obj = obj0; + + desc = classDescriptor(obj.getClass(), obj); + } + + if (handle >= 0) { + writeByte(HANDLE); + writeInt(handle); + } + else { + writeByte(OBJECT); + + OptimizedClassResolver.writeClass(this, desc); + + desc.write(this, obj); + } + } + } + + /** + * Writes array to this stream. + * + * @param arr Array. + * @throws IOException In case of error. + */ + @SuppressWarnings("ForLoopReplaceableByForEach") + void writeArray(Object[] arr) throws IOException { + int len = arr.length; + + writeInt(len); + + for (int i = 0; i < len; i++) { + Object obj = arr[i]; + + writeObject0(obj); + } + } + + /** + * Writes {@link UUID} to this stream. + * + * @param uuid UUID. + * @throws IOException In case of error. + */ + void writeUuid(UUID uuid) throws IOException { + writeLong(uuid.getMostSignificantBits()); + writeLong(uuid.getLeastSignificantBits()); + } + + /** + * Writes {@link Properties} to this stream. + * + * @param props Properties. + * @param dfltsFieldOff Defaults field offset. + * @throws IOException In case of error. + */ + void writeProperties(Properties props, long dfltsFieldOff) throws IOException { + Properties dflts = (Properties)getObject(props, dfltsFieldOff); + + if (dflts == null) + writeBoolean(true); + else { + writeBoolean(false); + + writeObject0(dflts); + } + + Set<String> names = props.stringPropertyNames(); + + writeInt(names.size()); + + for (String name : names) { + writeUTF(name); + writeUTF(props.getProperty(name)); + } + } + + /** + * Writes externalizable object. + * + * @param obj Object. + * @throws IOException In case of error. + */ + void writeExternalizable(Object obj) throws IOException { + Externalizable extObj = (Externalizable)obj; + + extObj.writeExternal(this); + } + + /** + * Writes serializable object. + * + * @param obj Object. + * @param mtds {@code writeObject} methods. + * @param fields class fields details. + * @throws IOException In case of error. + */ + @SuppressWarnings("ForLoopReplaceableByForEach") + void writeSerializable(Object obj, List<Method> mtds, OptimizedClassDescriptor.Fields fields) + throws IOException { + for (int i = 0; i < mtds.size(); i++) { + Method mtd = mtds.get(i); + + if (mtd != null) { + curObj = obj; + curFields = fields.fieldOffs(i); + curFieldInfoMap = fields.fieldInfoMap(i); + + try { + mtd.invoke(obj, this); + } + catch (IllegalAccessException e) { + throw new IOException(e); + } + catch (InvocationTargetException e) { + throw new IOException(e.getCause()); + } + } + else + writeFields(obj, fields.fieldOffs(i)); + } + } + + /** + * Writes {@link ArrayList}. + * + * @param list List. + * @throws IOException In case of error. + */ + @SuppressWarnings({"ForLoopReplaceableByForEach", "TypeMayBeWeakened"}) + void writeArrayList(ArrayList<?> list) throws IOException { + int size = list.size(); + + writeInt(size); + + for (int i = 0; i < size; i++) + writeObject0(list.get(i)); + } + + /** + * Writes {@link HashMap}. + * + * @param map Map. + * @param loadFactorFieldOff Load factor field offset. + * @param set Whether writing underlying map from {@link HashSet}. + * @throws IOException In case of error. + */ + @SuppressWarnings("TypeMayBeWeakened") + void writeHashMap(HashMap<?, ?> map, long loadFactorFieldOff, boolean set) throws IOException { + int size = map.size(); + + writeInt(size); + writeFloat(getFloat(map, loadFactorFieldOff)); + + for (Map.Entry<?, ?> e : map.entrySet()) { + writeObject0(e.getKey()); + + if (!set) + writeObject0(e.getValue()); + } + } + + /** + * Writes {@link HashSet}. + * + * @param set Set. + * @param mapFieldOff Map field offset. + * @param loadFactorFieldOff Load factor field offset. + * @throws IOException In case of error. + */ + void writeHashSet(HashSet<?> set, long mapFieldOff, long loadFactorFieldOff) throws IOException { + writeHashMap((HashMap<?, ?>)getObject(set, mapFieldOff), loadFactorFieldOff, true); + } + + /** + * Writes {@link LinkedList}. + * + * @param list List. + * @throws IOException In case of error. + */ + @SuppressWarnings("TypeMayBeWeakened") + void writeLinkedList(LinkedList<?> list) throws IOException { + int size = list.size(); + + writeInt(size); + + for (Object obj : list) + writeObject0(obj); + } + + /** + * Writes {@link LinkedHashMap}. + * + * @param map Map. + * @param loadFactorFieldOff Load factor field offset. + * @param accessOrderFieldOff access order field offset. + * @param set Whether writing underlying map from {@link LinkedHashSet}. + * @throws IOException In case of error. + */ + @SuppressWarnings("TypeMayBeWeakened") + void writeLinkedHashMap(LinkedHashMap<?, ?> map, long loadFactorFieldOff, long accessOrderFieldOff, boolean set) + throws IOException { + int size = map.size(); + + writeInt(size); + writeFloat(getFloat(map, loadFactorFieldOff)); + + if (accessOrderFieldOff >= 0) + writeBoolean(getBoolean(map, accessOrderFieldOff)); + else + writeBoolean(false); + + for (Map.Entry<?, ?> e : map.entrySet()) { + writeObject0(e.getKey()); + + if (!set) + writeObject0(e.getValue()); + } + } + + /** + * Writes {@link LinkedHashSet}. + * + * @param set Set. + * @param mapFieldOff Map field offset. + * @param loadFactorFieldOff Load factor field offset. + * @throws IOException In case of error. + */ + void writeLinkedHashSet(LinkedHashSet<?> set, long mapFieldOff, long loadFactorFieldOff) throws IOException { + LinkedHashMap<?, ?> map = (LinkedHashMap<?, ?>)getObject(set, mapFieldOff); + + writeLinkedHashMap(map, loadFactorFieldOff, -1, true); + } + + /** + * Writes {@link Date}. + * + * @param date Date. + * @throws IOException In case of error. + */ + void writeDate(Date date) throws IOException { + writeLong(date.getTime()); + } + + /** + * Writes all non-static and non-transient field values to this stream. + * + * @param obj Object. + * @param fieldOffs Field offsets. + * @throws IOException In case of error. + */ + @SuppressWarnings("ForLoopReplaceableByForEach") + private void writeFields(Object obj, List<T2<OptimizedFieldType, Long>> fieldOffs) throws IOException { + for (int i = 0; i < fieldOffs.size(); i++) { + T2<OptimizedFieldType, Long> t = fieldOffs.get(i); + + switch (t.get1()) { + case BYTE: + writeByte(getByte(obj, t.get2())); + + break; + + case SHORT: + writeShort(getShort(obj, t.get2())); + + break; + + case INT: + writeInt(getInt(obj, t.get2())); + + break; + + case LONG: + writeLong(getLong(obj, t.get2())); + + break; + + case FLOAT: + writeFloat(getFloat(obj, t.get2())); + + break; + + case DOUBLE: + writeDouble(getDouble(obj, t.get2())); + + break; + + case CHAR: + writeChar(getChar(obj, t.get2())); + + break; + + case BOOLEAN: + writeBoolean(getBoolean(obj, t.get2())); + + break; + + case OTHER: + writeObject0(getObject(obj, t.get2())); + } + } + } + + /** + * Writes array of {@code byte}s. + * + * @param arr Array. + * @throws IOException In case of error. + */ + void writeByteArray(byte[] arr) throws IOException { + out.writeByteArray(arr); + } + + /** + * Writes array of {@code short}s. + * + * @param arr Array. + * @throws IOException In case of error. + */ + void writeShortArray(short[] arr) throws IOException { + out.writeShortArray(arr); + } + + /** + * Writes array of {@code int}s. + * + * @param arr Array. + * @throws IOException In case of error. + */ + void writeIntArray(int[] arr) throws IOException { + out.writeIntArray(arr); + } + + /** + * Writes array of {@code long}s. + * + * @param arr Array. + * @throws IOException In case of error. + */ + void writeLongArray(long[] arr) throws IOException { + out.writeLongArray(arr); + } + + /** + * Writes array of {@code float}s. + * + * @param arr Array. + * @throws IOException In case of error. + */ + void writeFloatArray(float[] arr) throws IOException { + out.writeFloatArray(arr); + } + + /** + * Writes array of {@code double}s. + * + * @param arr Array. + * @throws IOException In case of error. + */ + void writeDoubleArray(double[] arr) throws IOException { + out.writeDoubleArray(arr); + } + + /** + * Writes array of {@code char}s. + * + * @param arr Array. + * @throws IOException In case of error. + */ + void writeCharArray(char[] arr) throws IOException { + out.writeCharArray(arr); + } + + /** + * Writes array of {@code boolean}s. + * + * @param arr Array. + * @throws IOException In case of error. + */ + void writeBooleanArray(boolean[] arr) throws IOException { + out.writeBooleanArray(arr); + } + + /** + * Writes {@link String}. + * + * @param str String. + * @throws IOException In case of error. + */ + void writeString(String str) throws IOException { + out.writeUTF(str); + } + + /** {@inheritDoc} */ + @Override public void writeBoolean(boolean v) throws IOException { + out.writeBoolean(v); + } + + /** {@inheritDoc} */ + @Override public void writeByte(int v) throws IOException { + out.writeByte(v); + } + + /** {@inheritDoc} */ + @Override public void writeShort(int v) throws IOException { + out.writeShort(v); + } + + /** {@inheritDoc} */ + @Override public void writeChar(int v) throws IOException { + out.writeChar(v); + } + + /** {@inheritDoc} */ + @Override public void writeInt(int v) throws IOException { + out.writeInt(v); + } + + /** {@inheritDoc} */ + @Override public void writeLong(long v) throws IOException { + out.writeLong(v); + } + + /** {@inheritDoc} */ + @Override public void writeFloat(float v) throws IOException { + out.writeFloat(v); + } + + /** {@inheritDoc} */ + @Override public void writeDouble(double v) throws IOException { + out.writeDouble(v); + } + + /** {@inheritDoc} */ + @Override public void write(int b) throws IOException { + writeByte(b); + } + + /** {@inheritDoc} */ + @Override public void writeBytes(String s) throws IOException { + out.writeBytes(s); + } + + /** {@inheritDoc} */ + @Override public void writeChars(String s) throws IOException { + out.writeChars(s); + } + + /** {@inheritDoc} */ + @Override public void writeUTF(String s) throws IOException { + out.writeUTF(s); + } + + /** {@inheritDoc} */ + @Override public void useProtocolVersion(int ver) throws IOException { + // No-op. + } + + /** {@inheritDoc} */ + @Override public void writeUnshared(Object obj) throws IOException { + writeObject0(obj); + } + + /** {@inheritDoc} */ + @Override public void defaultWriteObject() throws IOException { + if (curObj == null) + throw new NotActiveException("Not in writeObject() call."); + + writeFields(curObj, curFields); + } + + /** {@inheritDoc} */ + @Override public ObjectOutputStream.PutField putFields() throws IOException { + if (curObj == null) + throw new NotActiveException("Not in writeObject() call or fields already written."); + + if (curPut == null) + curPut = new PutFieldImpl(this); + + return curPut; + } + + /** {@inheritDoc} */ + @Override public void writeFields() throws IOException { + if (curObj == null) + throw new NotActiveException("Not in writeObject() call."); + + if (curPut == null) + throw new NotActiveException("putFields() was not called."); + + for (IgniteBiTuple<OptimizedFieldType, Object> t : curPut.objs) { + switch (t.get1()) { + case BYTE: + writeByte((Byte)t.get2()); + + break; + + case SHORT: + writeShort((Short)t.get2()); + + break; + + case INT: + writeInt((Integer)t.get2()); + + break; + + case LONG: + writeLong((Long)t.get2()); + + break; + + case FLOAT: + writeFloat((Float)t.get2()); + + break; + + case DOUBLE: + writeDouble((Double)t.get2()); + + break; + + case CHAR: + writeChar((Character)t.get2()); + + break; + + case BOOLEAN: + writeBoolean((Boolean)t.get2()); + + break; + + case OTHER: + writeObject0(t.get2()); + } + } + } + + /** {@inheritDoc} */ + @Override public void reset() throws IOException { + out.reset(); + handles.clear(); + + curObj = null; + curFields = null; + curPut = null; + curFieldInfoMap = null; + } + + /** {@inheritDoc} */ + @Override public void flush() throws IOException { + // No-op. + } + + /** {@inheritDoc} */ + @Override public void drain() throws IOException { + // No-op. + } + + /** + * Returns objects that were added to handles table. + * Used ONLY for test purposes. + * + * @return Handled objects. + */ + Object[] handledObjects() { + return handles.objects(); + } + + /** + * {@link PutField} implementation. + */ + private static class PutFieldImpl extends PutField { + /** Stream. */ + private final OptimizedObjectOutputStream out; + + /** Field info map. */ + private final Map<String, IgniteBiTuple<Integer, OptimizedFieldType>> fieldInfoMap; + + /** Values. */ + private final IgniteBiTuple<OptimizedFieldType, Object>[] objs; + + /** + * @param out Output stream. + * @throws IOException In case of error. + */ + @SuppressWarnings("unchecked") + private PutFieldImpl(OptimizedObjectOutputStream out) { + this.out = out; + + fieldInfoMap = out.curFieldInfoMap; + + objs = new IgniteBiTuple[fieldInfoMap.size()]; + } + + /** {@inheritDoc} */ + @Override public void put(String name, boolean val) { + value(name, val); + } + + /** {@inheritDoc} */ + @Override public void put(String name, byte val) { + value(name, val); + } + + /** {@inheritDoc} */ + @Override public void put(String name, char val) { + value(name, val); + } + + /** {@inheritDoc} */ + @Override public void put(String name, short val) { + value(name, val); + } + + /** {@inheritDoc} */ + @Override public void put(String name, int val) { + value(name, val); + } + + /** {@inheritDoc} */ + @Override public void put(String name, long val) { + value(name, val); + } + + /** {@inheritDoc} */ + @Override public void put(String name, float val) { + value(name, val); + } + + /** {@inheritDoc} */ + @Override public void put(String name, double val) { + value(name, val); + } + + /** {@inheritDoc} */ + @Override public void put(String name, Object val) { + value(name, val); + } + + /** {@inheritDoc} */ + @Override public void write(ObjectOutput out) throws IOException { + if (out != this.out) + throw new IllegalArgumentException("Wrong stream."); + + this.out.writeFields(); + } + + /** + * @param name Field name. + * @param val Value. + */ + private void value(String name, Object val) { + IgniteBiTuple<Integer, OptimizedFieldType> info = fieldInfoMap.get(name); + + objs[info.get1()] = F.t(info.get2(), val); + } + } +}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/main/java/org/apache/ignite/mxbean/IgniteMXBean.java ---------------------------------------------------------------------- diff --cc modules/core/src/main/java/org/apache/ignite/mxbean/IgniteMXBean.java index e35ad3f,5580d52..408e9e0 --- a/modules/core/src/main/java/org/apache/ignite/mxbean/IgniteMXBean.java +++ b/modules/core/src/main/java/org/apache/ignite/mxbean/IgniteMXBean.java @@@ -42,11 -42,11 +42,11 @@@ public interface IgniteMXBean public String getFullVersion(); /** - * Gets copyright statement for GridGain product. + * Gets copyright statement for Ignite product. * - * @return Copyright statement for GridGain product. + * @return Copyright statement for Ignite product. */ - @MXBeanDescription("Copyright statement for GridGain product.") - @IgniteMXBeanDescription("Copyright statement for Ignite product.") ++ @MXBeanDescription("Copyright statement for Ignite product.") public String getCopyright(); /** @@@ -110,12 -110,12 +110,12 @@@ public String getExecutorServiceFormatted(); /** - * Gets GridGain installation home folder. + * Gets Ignite installation home folder. * - * @return GridGain installation home. + * @return Ignite installation home. */ - @MXBeanDescription("GridGain installation home folder.") - @IgniteMXBeanDescription("Ignite installation home folder.") - public String getIgniteHome(); ++ @MXBeanDescription("Ignite installation home folder.") + public String getGridGainHome(); /** * Gets a formatted instance of MBean server instance. @@@ -150,12 -150,12 +150,12 @@@ /** * Gets {@code toString()} representation of of lifecycle beans configured - * with GridGain. + * with Ignite. * * @return {@code toString()} representation of all lifecycle beans configured - * with GridGain. + * with Ignite. */ - @IgniteMXBeanDescription("String representation of lifecycle beans.") + @MXBeanDescription("String representation of lifecycle beans.") public Collection<String> getLifecycleBeansFormatted(); /** http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/main/java/org/apache/ignite/plugin/segmentation/GridSegmentationPolicy.java ---------------------------------------------------------------------- diff --cc modules/core/src/main/java/org/apache/ignite/plugin/segmentation/GridSegmentationPolicy.java index f1f59b2,00c7e95..c43d00c --- a/modules/core/src/main/java/org/apache/ignite/plugin/segmentation/GridSegmentationPolicy.java +++ b/modules/core/src/main/java/org/apache/ignite/plugin/segmentation/GridSegmentationPolicy.java @@@ -25,8 -25,8 +25,8 @@@ package org.apache.ignite.plugin.segmen public enum GridSegmentationPolicy { /** * When segmentation policy is {@code RESTART_JVM}, all listeners will receive - * {@link org.apache.ignite.events.IgniteEventType#EVT_NODE_SEGMENTED} event and then JVM will be restarted. + * {@link org.apache.ignite.events.EventType#EVT_NODE_SEGMENTED} event and then JVM will be restarted. - * Note, that this will work <b>only</b> if GridGain is started with {@link org.apache.ignite.startup.cmdline.CommandLineStartup} + * Note, that this will work <b>only</b> if Ignite is started with {@link org.apache.ignite.startup.cmdline.CommandLineStartup} * via standard {@code ignite.{sh|bat}} shell script. */ RESTART_JVM, http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/main/java/org/apache/ignite/resources/ServiceResource.java ---------------------------------------------------------------------- diff --cc modules/core/src/main/java/org/apache/ignite/resources/ServiceResource.java index a32bcc8,0000000..7c22728 mode 100644,000000..100644 --- a/modules/core/src/main/java/org/apache/ignite/resources/ServiceResource.java +++ b/modules/core/src/main/java/org/apache/ignite/resources/ServiceResource.java @@@ -1,87 -1,0 +1,87 @@@ +/* + * 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.resources; + +import java.lang.annotation.*; + +/** - * Annotates a field or a setter method for injection of GridGain service(s) by specified service name. ++ * Annotates a field or a setter method for injection of Ignite service(s) by specified service name. + * If more than one service is deployed on a server, then the first available instance will be returned. + * <p> + * Here is how injection would typically happen: + * <pre name="code" class="java"> + * public class MyGridJob implements ComputeJob { + * ... + * // Inject single instance of 'myService'. If there is + * // more than one, first deployed instance will be picked. + * @IgniteServiceResource(serviceName = "myService", proxyInterface = MyService.class) + * private MyService svc; + * ... + * } + * </pre> + * or attach the same annotations to methods: + * <pre name="code" class="java"> + * public class MyGridJob implements ComputeJob { + * ... + * private MyService svc; + * ... + * // Inject all locally deployed instances of 'myService'. + * @IgniteServiceResource(serviceName = "myService") + * public void setMyService(MyService svc) { + * this.svc = svc; + * } + * ... + * } + * </pre> + * <p> + */ +@Documented +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.METHOD, ElementType.FIELD}) +public @interface ServiceResource { + /** + * Service name. + * + * @return Name of the injected services. + */ + public String serviceName(); + + /** + * In case if an instance of the service is not available locally, + * an instance of the service proxy for a remote service instance + * may be returned. If you wish to return only locally deployed + * instance, then leave this property as {@code null}. + * <p> + * For more information about service proxies, see + * {@link org.apache.ignite.IgniteServices#serviceProxy(String, Class, boolean)} documentation. + * + * @return Interface class for remote service proxy. + */ + public Class<?> proxyInterface() default Void.class; + + /** + * Flag indicating if a sticky instance of a service proxy should be returned. + * This flag is only valid if {@link #proxyInterface()} is not {@code null}. + * <p> + * For information about sticky flag, see {@link org.apache.ignite.IgniteServices#serviceProxy(String, Class, boolean)} + * documentation. + * + * @return {@code True} if a sticky instance of a service proxy should be injected. + */ + public boolean proxySticky() default false; +} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/main/java/org/apache/ignite/resources/SpringApplicationContextResource.java ---------------------------------------------------------------------- diff --cc modules/core/src/main/java/org/apache/ignite/resources/SpringApplicationContextResource.java index eee2266,0000000..8b8f9b9 mode 100644,000000..100644 --- a/modules/core/src/main/java/org/apache/ignite/resources/SpringApplicationContextResource.java +++ b/modules/core/src/main/java/org/apache/ignite/resources/SpringApplicationContextResource.java @@@ -1,68 -1,0 +1,68 @@@ +/* + * 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.resources; + +import java.lang.annotation.*; + +/** + * Annotates a field or a setter method for injection of Spring ApplicationContext resource. - * When GridGain starts using Spring configuration, the Application Context for Spring ++ * When Ignite starts using Spring configuration, the Application Context for Spring + * Configuration is injected as this resource. + * method. + * <p> + * Spring Application Context can be injected into instances of following classes: + * <ul> + * <li>{@link org.apache.ignite.compute.ComputeTask}</li> + * <li>{@link org.apache.ignite.compute.ComputeJob}</li> + * <li>{@link org.apache.ignite.spi.IgniteSpi}</li> + * <li>{@link org.apache.ignite.lifecycle.LifecycleBean}</li> + * </ul> + * <p> + * Here is how injection would typically happen: + * <pre name="code" class="java"> + * public class MyGridJob implements ComputeJob { + * ... + * @IgniteSpringApplicationContextResource + * private ApplicationContext springCtx; + * ... + * } + * </pre> + * or + * <pre name="code" class="java"> + * public class MyGridJob implements ComputeJob { + * ... + * private ApplicationContext springCtx; + * ... + * @IgniteSpringApplicationContextResource + * public void setApplicationContext(MBeanServer springCtx) { + * this.springCtx = springCtx; + * } + * ... + * } + * </pre> + * <p> + * <img src="http://www.gridgain.com/images/spring-small.png"> + * <br> + * For information about Spring framework visit <a href="http://www.springframework.org/">www.springframework.org</a> + */ +@Documented +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.METHOD, ElementType.FIELD}) +public @interface SpringApplicationContextResource { + // No-op. +} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/main/java/org/apache/ignite/services/Service.java ---------------------------------------------------------------------- diff --cc modules/core/src/main/java/org/apache/ignite/services/Service.java index b17a0be,0000000..9c57a7c mode 100644,000000..100644 --- a/modules/core/src/main/java/org/apache/ignite/services/Service.java +++ b/modules/core/src/main/java/org/apache/ignite/services/Service.java @@@ -1,123 -1,0 +1,123 @@@ +/* + * 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.services; + +import java.io.*; + +/** + * An instance of grid-managed service. Grid-managed services may be deployed from + * {@link org.apache.ignite.IgniteServices} facade or directly from grid configuration at startup. + * <h1 class="header">Deployment</h1> - * Whenever service is deployed, GridGain will automatically calculate how many ++ * Whenever service is deployed, Ignite will automatically calculate how many + * instances of this service should be deployed on each node within the cluster. - * Whenever service is deployed on a cluster node, GridGain will call ++ * Whenever service is deployed on a cluster node, Ignite will call + * {@link #execute(ServiceContext)} method on that service. It is up to the user + * to control whenever the service should exit from the {@code execute} method. + * For example, user may choose to implement service as follows: + * <pre name="code" class="java"> + * public class MyIgniteService implements Service { + * ... + * // Example of ignite resource injection. All resources are optional. + * // You should inject resources only as needed. + * @IgniteInstanceResource + * private Ignite ignite; + * ... + * @Override public void cancel(ServiceContext ctx) { + * // No-op. + * } + * + * @Override public void execute(ServiceContext ctx) { + * // Loop until service is cancelled. + * while (!ctx.isCancelled()) { + * // Do something. + * ... + * } + * } + * } + * </pre> + * Consecutively, this service can be deployed as follows: + * <pre name="code" class="java"> + * ... + * GridServices svcs = grid.services(); + * + * GridFuture<?> fut = svcs.deployClusterSingleton("mySingleton", new MyGridService()); + * + * // Wait for deployment to complete. + * fut.get(); + * </pre> + * Or from grid configuration on startup: + * <pre name="code" class="java"> + * GridConfiguration gridCfg = new GridConfiguration(); + * + * GridServiceConfiguration svcCfg = new GridServiceConfiguration(); + * + * // Configuration for cluster-singleton service. + * svcCfg.setName("mySingleton"); + * svcCfg.setMaxPerNodeCount(1); + * svcCfg.setTotalCount(1); + * svcCfg.setService(new MyGridService()); + * + * gridCfg.setServiceConfiguration(svcCfg); + * ... - * GridGain.start(gridCfg); ++ * Ignition.start(gridCfg); + * </pre> + * <h1 class="header">Cancellation</h1> + * Services can be cancelled by calling any of the {@code cancel} methods on {@link org.apache.ignite.IgniteServices} API. - * Whenever a deployed service is cancelled, GridGain will automatically call ++ * Whenever a deployed service is cancelled, Ignite will automatically call + * {@link Service#cancel(ServiceContext)} method on that service. + * <p> - * Note that GridGain cannot guarantee that the service exits from {@link Service#execute(ServiceContext)} ++ * Note that Ignite cannot guarantee that the service exits from {@link Service#execute(ServiceContext)} + * method whenever {@link #cancel(ServiceContext)} is called. It is up to the user to + * make sure that the service code properly reacts to cancellations. + */ +public interface Service extends Serializable { + /** - * Cancels this service. GridGain will automatically call this method whenever any of the ++ * Cancels this service. Ignite will automatically call this method whenever any of the + * {@code cancel} methods on {@link org.apache.ignite.IgniteServices} API are called. + * <p> - * Note that GridGain cannot guarantee that the service exits from {@link #execute(ServiceContext)} ++ * Note that Ignite cannot guarantee that the service exits from {@link #execute(ServiceContext)} + * method whenever {@code cancel(GridServiceContext)} method is called. It is up to the user to + * make sure that the service code properly reacts to cancellations. + * + * @param ctx Service execution context. + */ + public void cancel(ServiceContext ctx); + + /** + * Pre-initializes service before execution. This method is guaranteed to be called before + * service deployment is complete (this guarantees that this method will be called + * before method {@link #execute(ServiceContext)} is called). + * + * @param ctx Service execution context. + * @throws Exception If service initialization failed. + */ + public void init(ServiceContext ctx) throws Exception; + + /** + * Starts execution of this service. This method is automatically invoked whenever an instance of the service + * is deployed on a grid node. Note that service is considered deployed even after it exits the {@code execute} + * method and can be cancelled (or undeployed) only by calling any of the {@code cancel} methods on + * {@link org.apache.ignite.IgniteServices} API. Also note that service is not required to exit from {@code execute} method until + * {@link #cancel(ServiceContext)} method was called. + * + * @param ctx Service execution context. + * @throws Exception If service execution failed. Not that service will still remain deployed, until + * {@link org.apache.ignite.IgniteServices#cancel(String)} method will be called. + */ + public void execute(ServiceContext ctx) throws Exception; +} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/main/java/org/apache/ignite/services/ServiceConfiguration.java ---------------------------------------------------------------------- diff --cc modules/core/src/main/java/org/apache/ignite/services/ServiceConfiguration.java index fedcfbf,0000000..04321a2 mode 100644,000000..100644 --- a/modules/core/src/main/java/org/apache/ignite/services/ServiceConfiguration.java +++ b/modules/core/src/main/java/org/apache/ignite/services/ServiceConfiguration.java @@@ -1,305 -1,0 +1,305 @@@ +/* + * 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.services; + +import org.apache.ignite.cluster.*; +import org.apache.ignite.internal.util.tostring.*; +import org.apache.ignite.internal.util.typedef.internal.*; +import org.apache.ignite.lang.*; + +import java.io.*; + +/** + * Managed service configuration. In addition to deploying managed services by + * calling any of the provided {@code deploy(...)} methods, managed services + * can also be automatically deployed on startup by specifying them in {@link org.apache.ignite.configuration.IgniteConfiguration} + * like so: + * <pre name="code" class="java"> + * GridConfiguration gridCfg = new GridConfiguration(); + * + * GridServiceConfiguration svcCfg1 = new GridServiceConfiguration(); + * + * svcCfg1.setName("myClusterSingletonService"); + * svcCfg1.setMaxPerNodeCount(1); + * svcCfg1.setTotalCount(1); + * svcCfg1.setService(new MyClusterSingletonService()); + * + * GridServiceConfiguration svcCfg2 = new GridServiceConfiguration(); + * + * svcCfg2.setName("myNodeSingletonService"); + * svcCfg2.setMaxPerNodeCount(1); + * svcCfg2.setService(new MyNodeSingletonService()); + * + * gridCfg.setServiceConfiguration(svcCfg1, svcCfg2); + * ... - * GridGain.start(gridCfg); ++ * Ignition.start(gridCfg); + * </pre> + * The above configuration can also be specified in a Spring configuration file. + */ +public class ServiceConfiguration implements Serializable { + /** */ + private static final long serialVersionUID = 0L; + + /** Service name. */ + private String name; + + /** Service instance. */ + @GridToStringExclude + private Service svc; + + /** Total count. */ + private int totalCnt; + + /** Max per-node count. */ + private int maxPerNodeCnt; + + /** Cache name. */ + private String cacheName; + + /** Affinity key. */ + private Object affKey; + + /** Node filter. */ + @GridToStringExclude + private IgnitePredicate<ClusterNode> nodeFilter; + + /** + * Gets service name. + * <p> + * This parameter is mandatory when deploying a service. + * + * @return Service name. + */ + public String getName() { + return name; + } + + /** + * Sets service name. + * <p> + * This parameter is mandatory when deploying a service. + * + * @param name Service name. + */ + public void setName(String name) { + this.name = name; + } + + /** + * Gets service instance. + * <p> + * This parameter is mandatory when deploying a service. + * + * @return Service instance. + */ + public Service getService() { + return svc; + } + + /** + * Sets service instance. + * <p> + * This parameter is mandatory when deploying a service. + * + * @param svc Service instance. + */ + public void setService(Service svc) { + this.svc = svc; + } + + /** + * Gets total number of deployed service instances in the cluster, {@code 0} for unlimited. + * <p> + * At least one of {@code getTotalCount()} or {@link #getMaxPerNodeCount()} values must be positive. + * + * @return Total number of deployed service instances in the cluster, {@code 0} for unlimited. + */ + public int getTotalCount() { + return totalCnt; + } + + /** + * Sets total number of deployed service instances in the cluster, {@code 0} for unlimited. + * <p> + * At least one of {@code getTotalCount()} or {@link #getMaxPerNodeCount()} values must be positive. + * + * @param totalCnt Total number of deployed service instances in the cluster, {@code 0} for unlimited. + */ + public void setTotalCount(int totalCnt) { + this.totalCnt = totalCnt; + } + + /** + * Gets maximum number of deployed service instances on each node, {@code 0} for unlimited. + * <p> + * At least one of {@code getMaxPerNodeCount()} or {@link #getTotalCount()} values must be positive. + * + * @return Maximum number of deployed service instances on each node, {@code 0} for unlimited. + */ + public int getMaxPerNodeCount() { + return maxPerNodeCnt; + } + + /** + * Sets maximum number of deployed service instances on each node, {@code 0} for unlimited. + * <p> + * At least one of {@code getMaxPerNodeCount()} or {@link #getTotalCount()} values must be positive. + * + * @param maxPerNodeCnt Maximum number of deployed service instances on each node, {@code 0} for unlimited. + */ + public void setMaxPerNodeCount(int maxPerNodeCnt) { + this.maxPerNodeCnt = maxPerNodeCnt; + } + + /** + * Gets cache name used for key-to-node affinity calculation. + * <p> + * This parameter is optional and is set only when deploying service based on key-affinity. + * + * @return Cache name, possibly {@code null}. + */ + public String getCacheName() { + return cacheName; + } + + /** + * Sets cache name used for key-to-node affinity calculation. + * <p> + * This parameter is optional and is set only when deploying service based on key-affinity. + * + * @param cacheName Cache name, possibly {@code null}. + */ + public void setCacheName(String cacheName) { + this.cacheName = cacheName; + } + + /** + * Gets affinity key used for key-to-node affinity calculation. + * <p> + * This parameter is optional and is set only when deploying service based on key-affinity. + * + * @return Affinity key, possibly {@code null}. + */ + public Object getAffinityKey() { + return affKey; + } + + /** + * Sets affinity key used for key-to-node affinity calculation. + * <p> + * This parameter is optional and is set only when deploying service based on key-affinity. + * + * @param affKey Affinity key, possibly {@code null}. + */ + public void setAffinityKey(Object affKey) { + this.affKey = affKey; + } + + /** + * Gets node filter used to filter nodes on which the service will be deployed. + * <p> + * This parameter is optional. If not provided service may be deployed on any or all + * nodes in the grid, based on configuration. + * + * @return Node filter used to filter nodes on which the service will be deployed, possibly {@code null}. + */ + public IgnitePredicate<ClusterNode> getNodeFilter() { + return nodeFilter; + } + + /** + * Sets node filter used to filter nodes on which the service will be deployed. + * <p> + * This parameter is optional. If not provided service may be deployed on any or all + * nodes in the grid, based on configuration. + * + * @param nodeFilter Node filter used to filter nodes on which the service will be deployed, possibly {@code null}. + */ + public void setNodeFilter(IgnitePredicate<ClusterNode> nodeFilter) { + this.nodeFilter = nodeFilter; + } + + /** {@inheritDoc} */ + @SuppressWarnings({"RedundantIfStatement", "EqualsWhichDoesntCheckParameterClass"}) + @Override public boolean equals(Object o) { + if (!equalsIgnoreNodeFilter(o)) + return false; + + ServiceConfiguration that = (ServiceConfiguration)o; + + if (nodeFilter != null && that.nodeFilter != null) { + if (!nodeFilter.getClass().equals(that.nodeFilter.getClass())) + return false; + } + else if (nodeFilter != null || that.nodeFilter != null) + return false; + + return true; + } + + /** + * Checks if configurations are equal ignoring the node filter. Node filters control on which + * nodes the services are deployed and often can be ignored for equality checks. + * + * @param o Other configuration. + * @return {@code True} if configurations are equal, {@code false} otherwise. + */ + @SuppressWarnings("RedundantIfStatement") + public boolean equalsIgnoreNodeFilter(Object o) { + if (this == o) + return true; + + if (o == null || getClass() != o.getClass()) + return false; + + ServiceConfiguration that = (ServiceConfiguration)o; + + if (maxPerNodeCnt != that.maxPerNodeCnt) + return false; + + if (totalCnt != that.totalCnt) + return false; + + if (affKey != null ? !affKey.equals(that.affKey) : that.affKey != null) + return false; + + if (cacheName != null ? !cacheName.equals(that.cacheName) : that.cacheName != null) + return false; + + if (name != null ? !name.equals(that.name) : that.name != null) + return false; + + if (svc != null ? !svc.getClass().equals(that.svc.getClass()) : that.svc != null) + return false; + + return true; + } + + /** {@inheritDoc} */ + @Override public int hashCode() { + return name == null ? 0 : name.hashCode(); + } + + /** {@inheritDoc} */ + @Override public String toString() { + String svcCls = svc == null ? "" : svc.getClass().getSimpleName(); + String nodeFilterCls = nodeFilter == null ? "" : nodeFilter.getClass().getSimpleName(); + + return S.toString(ServiceConfiguration.class, this, "svcCls", svcCls, "nodeFilterCls", nodeFilterCls); + } +} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/main/java/org/apache/ignite/services/package.html ---------------------------------------------------------------------- diff --cc modules/core/src/main/java/org/apache/ignite/services/package.html index fe62d60,0000000..1cbdc38 mode 100644,000000..100644 --- a/modules/core/src/main/java/org/apache/ignite/services/package.html +++ b/modules/core/src/main/java/org/apache/ignite/services/package.html @@@ -1,23 -1,0 +1,23 @@@ +<!-- + 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. - --> ++--> + +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<body> + Contains main <b>Managed Services APIs.</b> +</body> +</html> http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiAdapter.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiManagementMBean.java ---------------------------------------------------------------------- diff --cc modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiManagementMBean.java index a311cd40,f58aae8..59a2d12 --- a/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiManagementMBean.java +++ b/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiManagementMBean.java @@@ -60,12 -60,12 +60,12 @@@ public interface IgniteSpiManagementMBe public long getUpTime(); /** - * Gets Gridgain installation home folder (i.e. ${IGNITE_HOME}); + * Gets Ignite installation home folder (i.e. ${IGNITE_HOME}); * - * @return Gridgain installation home folder. + * @return Ignite installation home folder. */ - @MXBeanDescription("Gridgain installation home folder.") - @IgniteMXBeanDescription("Ignite installation home folder.") - public String getIgniteHome(); ++ @MXBeanDescription("Ignite installation home folder.") + public String getGridGainHome(); /** * Gets ID of the local node. http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/main/java/org/apache/ignite/spi/authentication/noop/NoopAuthenticationSpi.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/main/java/org/apache/ignite/spi/checkpoint/cache/CacheCheckpointSpi.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/main/java/org/apache/ignite/spi/checkpoint/jdbc/JdbcCheckpointSpi.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/main/java/org/apache/ignite/spi/checkpoint/sharedfs/SharedFsCheckpointSpi.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/main/java/org/apache/ignite/spi/collision/fifoqueue/FifoQueueCollisionSpi.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/main/java/org/apache/ignite/spi/collision/jobstealing/JobStealingCollisionSpi.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/main/java/org/apache/ignite/spi/collision/priorityqueue/PriorityQueueCollisionSpi.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/main/java/org/apache/ignite/spi/discovery/DiscoverySpi.java ---------------------------------------------------------------------- diff --cc modules/core/src/main/java/org/apache/ignite/spi/discovery/DiscoverySpi.java index e3d9ec9,b80eef1..168ae52 --- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/DiscoverySpi.java +++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/DiscoverySpi.java @@@ -84,10 -84,10 +84,10 @@@ public interface DiscoverySpi extends I /** * Sets a listener for discovery events. Refer to - * {@link org.apache.ignite.events.IgniteDiscoveryEvent} for a set of all possible + * {@link org.apache.ignite.events.DiscoveryEvent} for a set of all possible * discovery events. * <p> - * Note that as of GridGain 3.0.2 this method is called <b>before</b> + * Note that as of Ignite 3.0.2 this method is called <b>before</b> * method {@link #spiStart(String)} is called. This is done to * avoid potential window when SPI is started but the listener is * not registered yet. http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiAdapter.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/TcpDiscoveryJdbcIpFinder.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/main/java/org/apache/ignite/spi/eventstorage/EventStorageSpi.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/main/java/org/apache/ignite/spi/eventstorage/memory/MemoryEventStorageSpi.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/main/java/org/apache/ignite/spi/failover/always/AlwaysFailoverSpi.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/main/java/org/apache/ignite/spi/failover/jobstealing/JobStealingFailoverSpi.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/main/java/org/apache/ignite/spi/failover/never/NeverFailoverSpi.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/main/java/org/apache/ignite/spi/loadbalancing/LoadBalancingSpi.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/main/java/org/apache/ignite/spi/loadbalancing/adaptive/AdaptiveLoadBalancingSpi.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/main/java/org/apache/ignite/spi/loadbalancing/roundrobin/RoundRobinLoadBalancingSpi.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/main/java/org/apache/ignite/spi/loadbalancing/weightedrandom/WeightedRandomLoadBalancingSpi.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/main/java/org/apache/ignite/spi/securesession/noop/NoopSecureSessionSpi.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/main/java/org/apache/ignite/spi/swapspace/file/FileSwapSpaceSpi.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/main/java/org/apache/ignite/startup/cmdline/CommandLineStartup.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/main/java/org/apache/ignite/transactions/IgniteTx.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/config/benchmark/spring-cache-client-benchmark-1.xml ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/config/benchmark/spring-cache-client-benchmark-2.xml ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/config/benchmark/spring-cache-client-benchmark-3.xml ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/config/discovery-stress.xml ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/config/example-cache.xml ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/config/ggfs-loopback.xml ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/config/ggfs-shmem.xml ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/config/hadoop/core-site-loopback-secondary.xml ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/config/hadoop/core-site-loopback.xml ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/config/hadoop/core-site-secondary.xml ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/config/hadoop/core-site.xml ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/config/io-manager-benchmark.xml ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/config/jobs-load-base.xml ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/config/load/cache-benchmark.xml ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/config/load/cache-client-benchmark.xml ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/config/load/dsi-49-server-production.xml ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/config/load/dsi-load-base.xml ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/config/load/dsi-load-client.xml ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/config/load/dsi-load-server.xml ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/config/spring-cache-load.xml ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/config/spring-cache-put-remove-load.xml ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/config/spring-cache-swap.xml ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/config/spring-cache-teststore.xml ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/config/spring-multicache.xml ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/config/spring-start-nodes-attr.xml ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/config/spring-start-nodes.xml ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/config/websession/spring-cache-1.xml ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/config/websession/spring-cache-2.xml ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/config/websession/spring-cache-3.xml ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/java/org/apache/ignite/internal/GridAffinityP2PSelfTest.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/java/org/apache/ignite/internal/GridFailoverTaskWithPredicateSelfTest.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/java/org/apache/ignite/internal/GridTaskCancelSingleNodeSelfTest.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/GridIoManagerSelfTest.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractFailoverSelfTest.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractFullApiSelfTest.java ---------------------------------------------------------------------- diff --cc modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractFullApiSelfTest.java index 5e60363,620c4d5..6818801 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractFullApiSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractFullApiSelfTest.java @@@ -3770,85 -2498,53 +2498,53 @@@ public abstract class GridCacheAbstract * @throws Exception In case of error. */ @SuppressWarnings("BusyWait") - public void testLockFilteredEntry() throws Exception { + public void testLockUnlock() throws Exception { if (lockingEnabled()) { - cache().put("key1", 1); - cache().put("key2", 100); - - for (int i = 0; i < gridCount(); i++) { - assert !cache(i).entry("key1").isLocked(); - assert !cache(i).entry("key2").isLocked(); - } - - cache().projection(F.<CacheEntry<String, Integer>>alwaysFalse()).entry("key1").lock(0); - cache().projection(F.<CacheEntry<String, Integer>>alwaysTrue()).entry("key2").lock(0); - - boolean passed = false; - - for (int i = 0; i < gridCount(); i++) { - assert !cache(i).entry("key1").isLocked(); - - if (cache(i).entry("key2").isLocked()) - passed = true; - } - - assert passed; - - cache().unlockAll(F.asList("key1", "key2"), F.<CacheEntry<String, Integer>>alwaysTrue()); + final CountDownLatch lockCnt = new CountDownLatch(1); + final CountDownLatch unlockCnt = new CountDownLatch(1); - for (int i = 0; i < 100; i++) { - boolean sleep = false; - grid(0).events().localListen(new IgnitePredicate<IgniteEvent>() { - @Override public boolean apply(IgniteEvent evt) { ++ grid(0).events().localListen(new IgnitePredicate<Event>() { ++ @Override public boolean apply(Event evt) { + switch (evt.type()) { + case EVT_CACHE_OBJECT_LOCKED: + lockCnt.countDown(); - for (int j = 0; j < gridCount(); j++) { - if (cache(j).entry("key1").isLocked() || cache(j).entry("key2").isLocked()) { - sleep = true; + break; + case EVT_CACHE_OBJECT_UNLOCKED: + unlockCnt.countDown(); - break; + break; } + + return true; } + }, EVT_CACHE_OBJECT_LOCKED, EVT_CACHE_OBJECT_UNLOCKED); - if (sleep) - Thread.sleep(10); - else - break; - } + IgniteCache<String, Integer> cache = jcache(); - for (int i = 0; i < gridCount(); i++) { - assert !cache(i).entry("key1").isLocked(); - assert !cache(i).entry("key2").isLocked(); - } - } - } + String key = primaryKeysForCache(cache, 1).get(0); - /** - * @throws Exception In case of error. - */ - @SuppressWarnings("BusyWait") - public void testUnlockFilteredEntry() throws Exception { - if (lockingEnabled()) { - cache().put("key1", 1); - cache().put("key2", 100); + cache.put(key, 1); - CacheEntry<String, Integer> e1 = cache().entry("key1"); - CacheEntry<String, Integer> e2 = cache().entry("key2"); + assert !cache.isLocalLocked(key, false); - assert e1 != null; - assert e2 != null; + Lock lock = cache.lock(key); - assert !e1.isLocked(); - assert !e2.isLocked(); + lock.lock(); - e1.lock(0); - e2.lock(0); + try { + lockCnt.await(); - assert e1.isLocked(); - assert e2.isLocked(); + assert cache.isLocalLocked(key, false); + } + finally { + lock.unlock(); + } - e1.unlock(F.<CacheEntry<String, Integer>>alwaysFalse()); - e2.unlock(F.<CacheEntry<String, Integer>>alwaysTrue()); + unlockCnt.await(); for (int i = 0; i < 100; i++) - if (e2.isLocked()) + if (cache.isLocalLocked(key, false)) Thread.sleep(10); else break; http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractSelfTest.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAffinityApiSelfTest.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAsyncOperationsLimitSelfTest.java ---------------------------------------------------------------------- diff --cc modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAsyncOperationsLimitSelfTest.java index d134597,3555060..da5bf61 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAsyncOperationsLimitSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAsyncOperationsLimitSelfTest.java @@@ -17,10 -17,11 +17,11 @@@ package org.apache.ignite.internal.processors.cache; -import org.apache.ignite.*; -import org.apache.ignite.cache.*; +import org.apache.ignite.configuration.*; +import org.apache.ignite.internal.*; import org.apache.ignite.internal.util.*; import org.apache.ignite.internal.util.typedef.*; + import org.apache.ignite.lang.*; import java.util.concurrent.atomic.*; http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheConcurrentTxMultiNodeTest.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheP2PUndeploySelfTest.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheQueryInternalKeysSelfTest.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheSwapReloadSelfTest.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheValueConsistencyAbstractSelfTest.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/GridCacheEntrySetIterationPreloadingSelfTest.java ---------------------------------------------------------------------- diff --cc modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/GridCacheEntrySetIterationPreloadingSelfTest.java index 326c462,6d429d8..6433e0a --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/GridCacheEntrySetIterationPreloadingSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/GridCacheEntrySetIterationPreloadingSelfTest.java @@@ -17,10 -17,11 +17,12 @@@ package org.apache.ignite.internal.processors.cache.distributed; + import org.apache.ignite.*; import org.apache.ignite.cache.*; +import org.apache.ignite.configuration.*; import org.apache.ignite.internal.processors.cache.*; + import javax.cache.*; import java.util.*; /** http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/GridCacheEventAbstractTest.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridCacheAtomicFullApiSelfTest.java ---------------------------------------------------------------------- diff --cc modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridCacheAtomicFullApiSelfTest.java index f9293c6,52e75f1..0b4f048 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridCacheAtomicFullApiSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridCacheAtomicFullApiSelfTest.java @@@ -17,10 -17,9 +17,10 @@@ package org.apache.ignite.internal.processors.cache.distributed.dht; + import com.google.common.collect.*; import org.apache.ignite.cache.*; +import org.apache.ignite.configuration.*; import org.apache.ignite.internal.processors.cache.distributed.near.*; - import org.apache.ignite.internal.util.typedef.*; import org.apache.ignite.testframework.*; import java.util.*; http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridCacheColocatedDebugTest.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridCacheDhtPreloadDelayedSelfTest.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCacheAffinityFunctionExcludeNeighborsAbstractSelfTest.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCacheAtomicClientOnlyMultiNodeFullApiSelfTest.java ---------------------------------------------------------------------- diff --cc modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCacheAtomicClientOnlyMultiNodeFullApiSelfTest.java index c3b2c70,27903da..5bf323f --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCacheAtomicClientOnlyMultiNodeFullApiSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCacheAtomicClientOnlyMultiNodeFullApiSelfTest.java @@@ -17,8 -17,9 +17,10 @@@ package org.apache.ignite.internal.processors.cache.distributed.near; + import com.google.common.collect.*; + import org.apache.ignite.*; import org.apache.ignite.cache.*; +import org.apache.ignite.configuration.*; import org.apache.ignite.events.*; import org.apache.ignite.internal.util.typedef.*; import org.apache.ignite.internal.util.typedef.internal.*; http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCacheAtomicNearOnlyMultiNodeFullApiSelfTest.java ---------------------------------------------------------------------- diff --cc modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCacheAtomicNearOnlyMultiNodeFullApiSelfTest.java index afb7e3f,ced64ac..528e0c8 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCacheAtomicNearOnlyMultiNodeFullApiSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCacheAtomicNearOnlyMultiNodeFullApiSelfTest.java @@@ -17,9 -17,8 +17,10 @@@ package org.apache.ignite.internal.processors.cache.distributed.near; + import org.apache.ignite.*; import org.apache.ignite.cache.*; +import org.apache.ignite.configuration.*; +import org.apache.ignite.internal.util.typedef.*; import javax.cache.expiry.*; import java.util.*; http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCacheNearOnlyMultiNodeFullApiSelfTest.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCachePartitionedExplicitLockNodeFailureSelfTest.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCachePartitionedFullApiSelfTest.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCachePartitionedMultiNodeFullApiSelfTest.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/GridCacheDistributedEvictionsSelfTest.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/expiry/IgniteCacheExpiryPolicyAbstractTest.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/integration/IgniteCacheLoadAllAbstractTest.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/integration/IgniteCacheStoreSessionAbstractTest.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalFullApiSelfTest.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/java/org/apache/ignite/internal/processors/continuous/GridEventConsumeSelfTest.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/java/org/apache/ignite/internal/processors/dataload/GridDataLoaderProcessorSelfTest.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b08492a5/modules/core/src/test/java/org/apache/ignite/internal/util/GridStartupWithSpecifiedWorkDirectorySelfTest.java ----------------------------------------------------------------------