| /* |
| * 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.internal; |
| |
| import java.io.Externalizable; |
| import java.io.IOException; |
| import java.io.ObjectInput; |
| import java.io.ObjectOutput; |
| import java.io.Serializable; |
| import java.nio.charset.Charset; |
| import java.util.UUID; |
| import org.apache.ignite.internal.util.typedef.internal.S; |
| import org.apache.ignite.internal.util.typedef.internal.U; |
| import org.apache.ignite.lang.IgniteUuid; |
| import org.jetbrains.annotations.Nullable; |
| |
| /** |
| * Communication topic. |
| */ |
| public enum GridTopic { |
| /** */ |
| TOPIC_JOB, |
| |
| /** */ |
| TOPIC_JOB_SIBLINGS, |
| |
| /** */ |
| TOPIC_TASK, |
| |
| /** */ |
| TOPIC_CHECKPOINT, |
| |
| /** */ |
| TOPIC_JOB_CANCEL, |
| |
| /** */ |
| TOPIC_TASK_CANCEL, |
| |
| /** */ |
| TOPIC_CLASSLOAD, |
| |
| /** */ |
| TOPIC_EVENT, |
| |
| /** Cache topic. */ |
| TOPIC_CACHE, |
| |
| /** */ |
| TOPIC_COMM_USER, |
| |
| /** */ |
| TOPIC_REST, |
| |
| /** */ |
| TOPIC_REPLICATION, |
| |
| /** */ |
| TOPIC_IGFS, |
| |
| /** */ |
| TOPIC_DATASTREAM, |
| |
| /** */ |
| TOPIC_STREAM, |
| |
| /** */ |
| TOPIC_CONTINUOUS, |
| |
| /** |
| * @deprecated Should be removed in Apache Ignite 3.0. |
| */ |
| @Deprecated |
| TOPIC_MONGO, |
| |
| /** */ |
| TOPIC_TIME_SYNC, |
| |
| /** */ |
| TOPIC_HADOOP, |
| |
| /** */ |
| TOPIC_QUERY, |
| |
| /** */ |
| TOPIC_TX, |
| |
| /** */ |
| TOPIC_SNAPSHOT, |
| |
| /** */ |
| TOPIC_IO_TEST, |
| |
| /** */ |
| TOPIC_MAPPING_MARSH, |
| |
| /** */ |
| TOPIC_HADOOP_MSG, |
| |
| /** */ |
| TOPIC_METADATA_REQ, |
| |
| /** */ |
| TOPIC_SCHEMA, |
| |
| /** */ |
| TOPIC_INTERNAL_DIAGNOSTIC, |
| |
| /** */ |
| TOPIC_WAL, |
| |
| /** */ |
| TOPIC_METRICS, |
| |
| /** */ |
| TOPIC_AUTH, |
| |
| /** */ |
| TOPIC_EXCHANGE, |
| |
| /** */ |
| TOPIC_CACHE_COORDINATOR, |
| |
| /** */ |
| TOPIC_GEN_ENC_KEY; |
| |
| /** Enum values. */ |
| private static final GridTopic[] VALS = values(); |
| |
| /** Default charset to work with strings. */ |
| private static final Charset DFLT_CHARSET = Charset.forName("UTF-8"); |
| |
| /** |
| * Efficiently gets enumerated value from its ordinal. |
| * |
| * @param ord Ordinal value. |
| * @return Enumerated value. |
| */ |
| @Nullable public static GridTopic fromOrdinal(int ord) { |
| return ord >= 0 && ord < VALS.length ? VALS[ord] : null; |
| } |
| |
| /** |
| * @param id Topic ID. |
| * @return Grid message topic with specified ID. |
| */ |
| public Object topic(IgniteUuid id) { |
| return new T1(this, id); |
| } |
| |
| /** |
| * @param id1 ID1. |
| * @param id2 ID2. |
| * @return Grid message topic with specified IDs. |
| */ |
| public Object topic(IgniteUuid id1, UUID id2) { |
| return new T2(this, id1, id2); |
| } |
| |
| /** |
| * @param id1 ID1. |
| * @param id2 ID2. |
| * @return Grid message topic with specified IDs. |
| */ |
| public Object topic(IgniteUuid id1, long id2) { |
| return new T8(this, id1, id2); |
| } |
| |
| /** |
| * NOTE: The method should be used only for cases when there is no any other non-string identifier(s) |
| * to use to differentiate topics. |
| * |
| * @param id Topic ID. |
| * @return Grid message topic with specified ID. |
| */ |
| public Object topic(String id) { |
| return new T3(this, UUID.nameUUIDFromBytes(id.getBytes(DFLT_CHARSET))); |
| } |
| |
| /** |
| * @param id1 ID1. |
| * @param id2 ID2. |
| * @return Grid message topic with specified IDs. |
| */ |
| public Object topic(String id1, long id2) { |
| return new T6(this, UUID.nameUUIDFromBytes(id1.getBytes(DFLT_CHARSET)), id2); |
| } |
| |
| /** |
| * @param id1 ID1. |
| * @param id2 ID2. |
| * @param id3 ID3. |
| * @return Grid message topic with specified IDs. |
| */ |
| public Object topic(String id1, int id2, long id3) { |
| return new T5(this, UUID.nameUUIDFromBytes(id1.getBytes(DFLT_CHARSET)), id2, id3); |
| } |
| |
| /** |
| * @param id1 ID1. |
| * @param id2 ID2. |
| * @param id3 ID3. |
| * @return Grid message topic with specified IDs. |
| */ |
| public Object topic(String id1, UUID id2, long id3) { |
| return new T4(this, UUID.nameUUIDFromBytes(id1.getBytes(DFLT_CHARSET)), id2, id3); |
| } |
| |
| /** |
| * @param id1 ID1. |
| * @param id2 ID2. |
| * @param id3 ID3. |
| * @param id4 ID4. |
| * @return Grid message topic with specified IDs. |
| */ |
| public Object topic(String id1, UUID id2, int id3, long id4) { |
| return new T7(this, UUID.nameUUIDFromBytes(id1.getBytes(DFLT_CHARSET)), id2, id3, id4); |
| } |
| |
| /** |
| * |
| */ |
| private static class T1 implements Externalizable { |
| /** */ |
| private static final long serialVersionUID = 0L; |
| |
| /** */ |
| private GridTopic topic; |
| |
| /** */ |
| private IgniteUuid id; |
| |
| /** |
| * No-arg constructor needed for {@link Serializable}. |
| */ |
| public T1() { |
| // No-op. |
| } |
| |
| /** |
| * @param topic Topic. |
| * @param id ID. |
| */ |
| private T1(GridTopic topic, IgniteUuid id) { |
| this.topic = topic; |
| this.id = id; |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public int hashCode() { |
| return topic.ordinal() + id.hashCode(); |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public boolean equals(Object obj) { |
| if (obj.getClass() == T1.class) { |
| T1 that = (T1)obj; |
| |
| return topic == that.topic && id.equals(that.id); |
| } |
| |
| return false; |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public void writeExternal(ObjectOutput out) throws IOException { |
| out.writeByte(topic.ordinal()); |
| U.writeGridUuid(out, id); |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { |
| topic = fromOrdinal(in.readByte()); |
| id = U.readGridUuid(in); |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public String toString() { |
| return S.toString(T1.class, this); |
| } |
| } |
| |
| /** |
| * |
| */ |
| private static class T2 implements Externalizable { |
| /** */ |
| private static final long serialVersionUID = 0L; |
| |
| /** */ |
| private GridTopic topic; |
| |
| /** */ |
| private IgniteUuid id1; |
| |
| /** */ |
| private UUID id2; |
| |
| /** |
| * No-arg constructor needed for {@link Serializable}. |
| */ |
| public T2() { |
| // No-op. |
| } |
| |
| /** |
| * @param topic Topic. |
| * @param id1 ID1. |
| * @param id2 ID2. |
| */ |
| private T2(GridTopic topic, IgniteUuid id1, UUID id2) { |
| this.topic = topic; |
| this.id1 = id1; |
| this.id2 = id2; |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public int hashCode() { |
| return topic.ordinal() + id1.hashCode() + id2.hashCode(); |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public boolean equals(Object obj) { |
| if (obj.getClass() == T2.class) { |
| T2 that = (T2)obj; |
| |
| return topic == that.topic && id1.equals(that.id1) && id2.equals(that.id2); |
| } |
| |
| return false; |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public void writeExternal(ObjectOutput out) throws IOException { |
| out.writeByte(topic.ordinal()); |
| U.writeGridUuid(out, id1); |
| U.writeUuid(out, id2); |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { |
| topic = fromOrdinal(in.readByte()); |
| id1 = U.readGridUuid(in); |
| id2 = U.readUuid(in); |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public String toString() { |
| return S.toString(T2.class, this); |
| } |
| } |
| |
| /** |
| * |
| */ |
| private static class T3 implements Externalizable { |
| /** */ |
| private static final long serialVersionUID = 0L; |
| |
| /** */ |
| private GridTopic topic; |
| |
| /** */ |
| private UUID id1; |
| |
| /** |
| * No-arg constructor needed for {@link Serializable}. |
| */ |
| public T3() { |
| // No-op. |
| } |
| |
| /** |
| * @param topic Topic. |
| * @param id1 ID1. |
| */ |
| private T3(GridTopic topic, UUID id1) { |
| this.topic = topic; |
| this.id1 = id1; |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public int hashCode() { |
| return topic.ordinal() + id1.hashCode(); |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public boolean equals(Object obj) { |
| if (obj.getClass() == T3.class) { |
| T3 that = (T3)obj; |
| |
| return topic == that.topic && id1.equals(that.id1); |
| } |
| |
| return false; |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public void writeExternal(ObjectOutput out) throws IOException { |
| out.writeByte(topic.ordinal()); |
| U.writeUuid(out, id1); |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { |
| topic = fromOrdinal(in.readByte()); |
| id1 = U.readUuid(in); |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public String toString() { |
| return S.toString(T3.class, this); |
| } |
| } |
| |
| /** |
| * |
| */ |
| private static class T4 implements Externalizable { |
| /** */ |
| private static final long serialVersionUID = 0L; |
| |
| /** */ |
| private GridTopic topic; |
| |
| /** */ |
| private UUID id1; |
| |
| /** */ |
| private UUID id2; |
| |
| /** */ |
| private long id3; |
| |
| /** |
| * No-arg constructor needed for {@link Serializable}. |
| */ |
| public T4() { |
| // No-op. |
| } |
| |
| /** |
| * @param topic Topic. |
| * @param id1 ID1. |
| * @param id2 ID2. |
| * @param id3 ID3. |
| */ |
| private T4(GridTopic topic, UUID id1, UUID id2, long id3) { |
| this.topic = topic; |
| this.id1 = id1; |
| this.id2 = id2; |
| this.id3 = id3; |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public int hashCode() { |
| return topic.ordinal() + id1.hashCode() + id2.hashCode() + (int)(id3 ^ (id3 >>> 32)); |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public boolean equals(Object obj) { |
| if (obj.getClass() == T4.class) { |
| T4 that = (T4)obj; |
| |
| return topic == that.topic && id1.equals(that.id1) && id2.equals(that.id2) && id3 == that.id3; |
| } |
| |
| return false; |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public void writeExternal(ObjectOutput out) throws IOException { |
| out.writeByte(topic.ordinal()); |
| U.writeUuid(out, id1); |
| U.writeUuid(out, id2); |
| out.writeLong(id3); |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { |
| topic = fromOrdinal(in.readByte()); |
| id1 = U.readUuid(in); |
| id2 = U.readUuid(in); |
| id3 = in.readLong(); |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public String toString() { |
| return S.toString(T4.class, this); |
| } |
| } |
| |
| /** |
| * |
| */ |
| private static class T5 implements Externalizable { |
| /** */ |
| private static final long serialVersionUID = 0L; |
| |
| /** */ |
| private GridTopic topic; |
| |
| /** */ |
| private UUID id1; |
| |
| /** */ |
| private int id2; |
| |
| /** */ |
| private long id3; |
| |
| /** |
| * No-arg constructor needed for {@link Serializable}. |
| */ |
| public T5() { |
| // No-op. |
| } |
| |
| /** |
| * @param topic Topic. |
| * @param id1 ID1. |
| * @param id2 ID2. |
| * @param id3 ID3. |
| */ |
| private T5(GridTopic topic, UUID id1, int id2, long id3) { |
| this.topic = topic; |
| this.id1 = id1; |
| this.id2 = id2; |
| this.id3 = id3; |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public int hashCode() { |
| return topic.ordinal() + id1.hashCode() + id2 + (int)(id3 ^ (id3 >>> 32)); |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public boolean equals(Object obj) { |
| if (obj.getClass() == T5.class) { |
| T5 that = (T5)obj; |
| |
| return topic == that.topic && id1.equals(that.id1) && id2 == that.id2 && id3 == that.id3; |
| } |
| |
| return false; |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public void writeExternal(ObjectOutput out) throws IOException { |
| out.writeByte(topic.ordinal()); |
| U.writeUuid(out, id1); |
| out.writeInt(id2); |
| out.writeLong(id3); |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { |
| topic = fromOrdinal(in.readByte()); |
| id1 = U.readUuid(in); |
| id2 = in.readInt(); |
| id3 = in.readLong(); |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public String toString() { |
| return S.toString(T5.class, this); |
| } |
| } |
| |
| /** |
| * |
| */ |
| private static class T6 implements Externalizable { |
| /** */ |
| private static final long serialVersionUID = 0L; |
| |
| /** */ |
| private GridTopic topic; |
| |
| /** */ |
| private UUID id1; |
| |
| /** */ |
| private long id2; |
| |
| /** |
| * No-arg constructor needed for {@link Serializable}. |
| */ |
| public T6() { |
| // No-op. |
| } |
| |
| /** |
| * @param topic Topic. |
| * @param id1 ID 1. |
| * @param id2 ID 2. |
| */ |
| private T6(GridTopic topic, UUID id1, long id2) { |
| this.topic = topic; |
| this.id1 = id1; |
| this.id2 = id2; |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public int hashCode() { |
| return topic.ordinal() + id1.hashCode () + (int)(id2 ^ (id2 >>> 32)); |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public boolean equals(Object obj) { |
| if (obj.getClass() == T6.class) { |
| T6 that = (T6)obj; |
| |
| return topic == that.topic && id1.equals(that.id1) && id2 == that.id2; |
| } |
| |
| return false; |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public void writeExternal(ObjectOutput out) throws IOException { |
| out.writeByte(topic.ordinal()); |
| U.writeUuid(out, id1); |
| out.writeLong(id2); |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { |
| topic = fromOrdinal(in.readByte()); |
| id1 = U.readUuid(in); |
| id2 = in.readLong(); |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public String toString() { |
| return S.toString(T6.class, this); |
| } |
| } |
| |
| /** |
| * |
| */ |
| private static class T7 implements Externalizable { |
| /** */ |
| private static final long serialVersionUID = 0L; |
| |
| /** */ |
| private GridTopic topic; |
| |
| /** */ |
| private UUID id1; |
| |
| /** */ |
| private UUID id2; |
| |
| /** */ |
| private int id3; |
| |
| /** */ |
| private long id4; |
| |
| /** |
| * No-arg constructor needed for {@link Serializable}. |
| */ |
| public T7() { |
| // No-op. |
| } |
| |
| /** |
| * @param topic Topic. |
| * @param id1 ID1. |
| * @param id2 ID2. |
| * @param id3 ID3. |
| * @param id4 ID4. |
| */ |
| private T7(GridTopic topic, UUID id1, UUID id2, int id3, long id4) { |
| this.topic = topic; |
| this.id1 = id1; |
| this.id2 = id2; |
| this.id3 = id3; |
| this.id4 = id4; |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public int hashCode() { |
| return topic.ordinal() + id1.hashCode() + id2.hashCode() + id3 + (int)(id4 ^ (id4 >>> 32)); |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public boolean equals(Object obj) { |
| if (obj.getClass() == T7.class) { |
| T7 that = (T7)obj; |
| |
| return topic == that.topic && id1.equals(that.id1) && id2.equals(that.id2) && id3 == that.id3 && |
| id4 == that.id4; |
| } |
| |
| return false; |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public void writeExternal(ObjectOutput out) throws IOException { |
| out.writeByte(topic.ordinal()); |
| U.writeUuid(out, id1); |
| U.writeUuid(out, id2); |
| out.writeInt(id3); |
| out.writeLong(id4); |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { |
| topic = fromOrdinal(in.readByte()); |
| id1 = U.readUuid(in); |
| id2 = U.readUuid(in); |
| id3 = in.readInt(); |
| id4 = in.readLong(); |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public String toString() { |
| return S.toString(T7.class, this); |
| } |
| } |
| |
| /** |
| * |
| */ |
| private static class T8 implements Externalizable { |
| /** */ |
| private static final long serialVersionUID = 0L; |
| |
| /** */ |
| private GridTopic topic; |
| |
| /** */ |
| private IgniteUuid id1; |
| |
| /** */ |
| private long id2; |
| |
| /** |
| * No-arg constructor needed for {@link Serializable}. |
| */ |
| public T8() { |
| // No-op. |
| } |
| |
| /** |
| * @param topic Topic. |
| * @param id1 ID1. |
| * @param id2 ID2. |
| */ |
| private T8(GridTopic topic, IgniteUuid id1, long id2) { |
| this.topic = topic; |
| this.id1 = id1; |
| this.id2 = id2; |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public int hashCode() { |
| return topic.ordinal() + id1.hashCode() + (int)(id2 ^ (id2 >>> 32)); |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public boolean equals(Object obj) { |
| if (obj.getClass() == T8.class) { |
| T8 that = (T8)obj; |
| |
| return topic == that.topic && id1.equals(that.id1) && id2 == that.id2; |
| } |
| |
| return false; |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public void writeExternal(ObjectOutput out) throws IOException { |
| out.writeByte(topic.ordinal()); |
| U.writeGridUuid(out, id1); |
| out.writeLong(id2); |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { |
| topic = fromOrdinal(in.readByte()); |
| id1 = U.readGridUuid(in); |
| id2 = in.readLong(); |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public String toString() { |
| return S.toString(T8.class, this); |
| } |
| } |
| } |