| /* |
| * 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.processors.datastreamer; |
| |
| import java.nio.ByteBuffer; |
| import java.util.Collection; |
| import java.util.Map; |
| import java.util.UUID; |
| import org.apache.ignite.configuration.DeploymentMode; |
| import org.apache.ignite.internal.GridDirectCollection; |
| import org.apache.ignite.internal.GridDirectMap; |
| import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion; |
| import org.apache.ignite.internal.util.tostring.GridToStringInclude; |
| import org.apache.ignite.internal.util.typedef.internal.S; |
| import org.apache.ignite.lang.IgniteUuid; |
| import org.apache.ignite.plugin.extensions.communication.Message; |
| import org.apache.ignite.plugin.extensions.communication.MessageCollectionItemType; |
| import org.apache.ignite.plugin.extensions.communication.MessageReader; |
| import org.apache.ignite.plugin.extensions.communication.MessageWriter; |
| import org.jetbrains.annotations.NotNull; |
| import org.jetbrains.annotations.Nullable; |
| |
| /** |
| * |
| */ |
| public class DataStreamerRequest implements Message { |
| /** */ |
| private static final long serialVersionUID = 0L; |
| |
| /** */ |
| private long reqId; |
| |
| /** */ |
| private byte[] resTopicBytes; |
| |
| /** Cache name. */ |
| private String cacheName; |
| |
| /** */ |
| private byte[] updaterBytes; |
| |
| /** Entries to update. */ |
| @GridDirectCollection(DataStreamerEntry.class) |
| private Collection<DataStreamerEntry> entries; |
| |
| /** {@code True} to ignore deployment ownership. */ |
| private boolean ignoreDepOwnership; |
| |
| /** */ |
| private boolean skipStore; |
| |
| /** Keep binary flag. */ |
| private boolean keepBinary; |
| |
| /** */ |
| private DeploymentMode depMode; |
| |
| /** */ |
| private String sampleClsName; |
| |
| /** */ |
| private String userVer; |
| |
| /** Node class loader participants. */ |
| @GridToStringInclude |
| @GridDirectMap(keyType = UUID.class, valueType = IgniteUuid.class) |
| private Map<UUID, IgniteUuid> ldrParticipants; |
| |
| /** */ |
| private IgniteUuid clsLdrId; |
| |
| /** */ |
| private boolean forceLocDep; |
| |
| /** Topology version. */ |
| private AffinityTopologyVersion topVer; |
| |
| /** */ |
| private int partId; |
| |
| /** |
| * {@code Externalizable} support. |
| */ |
| public DataStreamerRequest() { |
| // No-op. |
| } |
| |
| /** |
| * @param reqId Request ID. |
| * @param resTopicBytes Response topic. |
| * @param cacheName Cache name. |
| * @param updaterBytes Cache receiver. |
| * @param entries Entries to put. |
| * @param ignoreDepOwnership Ignore ownership. |
| * @param skipStore Skip store flag. |
| * @param keepBinary Keep binary flag. |
| * @param depMode Deployment mode. |
| * @param sampleClsName Sample class name. |
| * @param userVer User version. |
| * @param ldrParticipants Loader participants. |
| * @param clsLdrId Class loader ID. |
| * @param forceLocDep Force local deployment. |
| * @param topVer Topology version. |
| * @param partId Partition ID. |
| */ |
| public DataStreamerRequest( |
| long reqId, |
| byte[] resTopicBytes, |
| @Nullable String cacheName, |
| byte[] updaterBytes, |
| Collection<DataStreamerEntry> entries, |
| boolean ignoreDepOwnership, |
| boolean skipStore, |
| boolean keepBinary, |
| DeploymentMode depMode, |
| String sampleClsName, |
| String userVer, |
| Map<UUID, IgniteUuid> ldrParticipants, |
| IgniteUuid clsLdrId, |
| boolean forceLocDep, |
| @NotNull AffinityTopologyVersion topVer, |
| int partId |
| ) { |
| assert topVer != null; |
| |
| this.reqId = reqId; |
| this.resTopicBytes = resTopicBytes; |
| this.cacheName = cacheName; |
| this.updaterBytes = updaterBytes; |
| this.entries = entries; |
| this.ignoreDepOwnership = ignoreDepOwnership; |
| this.skipStore = skipStore; |
| this.keepBinary = keepBinary; |
| this.depMode = depMode; |
| this.sampleClsName = sampleClsName; |
| this.userVer = userVer; |
| this.ldrParticipants = ldrParticipants; |
| this.clsLdrId = clsLdrId; |
| this.forceLocDep = forceLocDep; |
| this.topVer = topVer; |
| this.partId = partId; |
| } |
| |
| /** |
| * @return Request ID. |
| */ |
| public long requestId() { |
| return reqId; |
| } |
| |
| /** |
| * @return Response topic. |
| */ |
| public byte[] responseTopicBytes() { |
| return resTopicBytes; |
| } |
| |
| /** |
| * @return Cache name. |
| */ |
| public String cacheName() { |
| return cacheName; |
| } |
| |
| /** |
| * @return Updater. |
| */ |
| public byte[] updaterBytes() { |
| return updaterBytes; |
| } |
| |
| /** |
| * @return Entries to update. |
| */ |
| public Collection<DataStreamerEntry> entries() { |
| return entries; |
| } |
| |
| /** |
| * @return {@code True} to ignore ownership. |
| */ |
| public boolean ignoreDeploymentOwnership() { |
| return ignoreDepOwnership; |
| } |
| |
| /** |
| * @return Skip store flag. |
| */ |
| public boolean skipStore() { |
| return skipStore; |
| } |
| |
| /** |
| * @return Keep binary flag. |
| */ |
| public boolean keepBinary() { |
| return keepBinary; |
| } |
| |
| /** |
| * @return Deployment mode. |
| */ |
| public DeploymentMode deploymentMode() { |
| return depMode; |
| } |
| |
| /** |
| * @return Sample class name. |
| */ |
| public String sampleClassName() { |
| return sampleClsName; |
| } |
| |
| /** |
| * @return User version. |
| */ |
| public String userVersion() { |
| return userVer; |
| } |
| |
| /** |
| * @return Participants. |
| */ |
| public Map<UUID, IgniteUuid> participants() { |
| return ldrParticipants; |
| } |
| |
| /** |
| * @return Class loader ID. |
| */ |
| public IgniteUuid classLoaderId() { |
| return clsLdrId; |
| } |
| |
| /** |
| * @return {@code True} to force local deployment. |
| */ |
| public boolean forceLocalDeployment() { |
| return forceLocDep; |
| } |
| |
| /** |
| * @return Topology version. |
| */ |
| public AffinityTopologyVersion topologyVersion() { |
| return topVer; |
| } |
| |
| /** |
| * @return Partition ID. |
| */ |
| public int partition() { |
| return partId; |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public void onAckReceived() { |
| // No-op. |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public String toString() { |
| return S.toString(DataStreamerRequest.class, this); |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public boolean writeTo(ByteBuffer buf, MessageWriter writer) { |
| writer.setBuffer(buf); |
| |
| if (!writer.isHeaderWritten()) { |
| if (!writer.writeHeader(directType(), fieldsCount())) |
| return false; |
| |
| writer.onHeaderWritten(); |
| } |
| |
| switch (writer.state()) { |
| case 0: |
| if (!writer.writeString("cacheName", cacheName)) |
| return false; |
| |
| writer.incrementState(); |
| |
| case 1: |
| if (!writer.writeIgniteUuid("clsLdrId", clsLdrId)) |
| return false; |
| |
| writer.incrementState(); |
| |
| case 2: |
| if (!writer.writeByte("depMode", depMode != null ? (byte)depMode.ordinal() : -1)) |
| return false; |
| |
| writer.incrementState(); |
| |
| case 3: |
| if (!writer.writeCollection("entries", entries, MessageCollectionItemType.MSG)) |
| return false; |
| |
| writer.incrementState(); |
| |
| case 4: |
| if (!writer.writeBoolean("forceLocDep", forceLocDep)) |
| return false; |
| |
| writer.incrementState(); |
| |
| case 5: |
| if (!writer.writeBoolean("ignoreDepOwnership", ignoreDepOwnership)) |
| return false; |
| |
| writer.incrementState(); |
| |
| case 6: |
| if (!writer.writeBoolean("keepBinary", keepBinary)) |
| return false; |
| |
| writer.incrementState(); |
| |
| case 7: |
| if (!writer.writeMap("ldrParticipants", ldrParticipants, MessageCollectionItemType.UUID, MessageCollectionItemType.IGNITE_UUID)) |
| return false; |
| |
| writer.incrementState(); |
| |
| case 8: |
| if (!writer.writeInt("partId", partId)) |
| return false; |
| |
| writer.incrementState(); |
| |
| case 9: |
| if (!writer.writeLong("reqId", reqId)) |
| return false; |
| |
| writer.incrementState(); |
| |
| case 10: |
| if (!writer.writeByteArray("resTopicBytes", resTopicBytes)) |
| return false; |
| |
| writer.incrementState(); |
| |
| case 11: |
| if (!writer.writeString("sampleClsName", sampleClsName)) |
| return false; |
| |
| writer.incrementState(); |
| |
| case 12: |
| if (!writer.writeBoolean("skipStore", skipStore)) |
| return false; |
| |
| writer.incrementState(); |
| |
| case 13: |
| if (!writer.writeMessage("topVer", topVer)) |
| return false; |
| |
| writer.incrementState(); |
| |
| case 14: |
| if (!writer.writeByteArray("updaterBytes", updaterBytes)) |
| return false; |
| |
| writer.incrementState(); |
| |
| case 15: |
| if (!writer.writeString("userVer", userVer)) |
| return false; |
| |
| writer.incrementState(); |
| |
| } |
| |
| return true; |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public boolean readFrom(ByteBuffer buf, MessageReader reader) { |
| reader.setBuffer(buf); |
| |
| if (!reader.beforeMessageRead()) |
| return false; |
| |
| switch (reader.state()) { |
| case 0: |
| cacheName = reader.readString("cacheName"); |
| |
| if (!reader.isLastRead()) |
| return false; |
| |
| reader.incrementState(); |
| |
| case 1: |
| clsLdrId = reader.readIgniteUuid("clsLdrId"); |
| |
| if (!reader.isLastRead()) |
| return false; |
| |
| reader.incrementState(); |
| |
| case 2: |
| byte depModeOrd; |
| |
| depModeOrd = reader.readByte("depMode"); |
| |
| if (!reader.isLastRead()) |
| return false; |
| |
| depMode = DeploymentMode.fromOrdinal(depModeOrd); |
| |
| reader.incrementState(); |
| |
| case 3: |
| entries = reader.readCollection("entries", MessageCollectionItemType.MSG); |
| |
| if (!reader.isLastRead()) |
| return false; |
| |
| reader.incrementState(); |
| |
| case 4: |
| forceLocDep = reader.readBoolean("forceLocDep"); |
| |
| if (!reader.isLastRead()) |
| return false; |
| |
| reader.incrementState(); |
| |
| case 5: |
| ignoreDepOwnership = reader.readBoolean("ignoreDepOwnership"); |
| |
| if (!reader.isLastRead()) |
| return false; |
| |
| reader.incrementState(); |
| |
| case 6: |
| keepBinary = reader.readBoolean("keepBinary"); |
| |
| if (!reader.isLastRead()) |
| return false; |
| |
| reader.incrementState(); |
| |
| case 7: |
| ldrParticipants = reader.readMap("ldrParticipants", MessageCollectionItemType.UUID, MessageCollectionItemType.IGNITE_UUID, false); |
| |
| if (!reader.isLastRead()) |
| return false; |
| |
| reader.incrementState(); |
| |
| case 8: |
| partId = reader.readInt("partId"); |
| |
| if (!reader.isLastRead()) |
| return false; |
| |
| reader.incrementState(); |
| |
| case 9: |
| reqId = reader.readLong("reqId"); |
| |
| if (!reader.isLastRead()) |
| return false; |
| |
| reader.incrementState(); |
| |
| case 10: |
| resTopicBytes = reader.readByteArray("resTopicBytes"); |
| |
| if (!reader.isLastRead()) |
| return false; |
| |
| reader.incrementState(); |
| |
| case 11: |
| sampleClsName = reader.readString("sampleClsName"); |
| |
| if (!reader.isLastRead()) |
| return false; |
| |
| reader.incrementState(); |
| |
| case 12: |
| skipStore = reader.readBoolean("skipStore"); |
| |
| if (!reader.isLastRead()) |
| return false; |
| |
| reader.incrementState(); |
| |
| case 13: |
| topVer = reader.readMessage("topVer"); |
| |
| if (!reader.isLastRead()) |
| return false; |
| |
| reader.incrementState(); |
| |
| case 14: |
| updaterBytes = reader.readByteArray("updaterBytes"); |
| |
| if (!reader.isLastRead()) |
| return false; |
| |
| reader.incrementState(); |
| |
| case 15: |
| userVer = reader.readString("userVer"); |
| |
| if (!reader.isLastRead()) |
| return false; |
| |
| reader.incrementState(); |
| |
| } |
| |
| return reader.afterMessageRead(DataStreamerRequest.class); |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public short directType() { |
| return 62; |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public byte fieldsCount() { |
| return 16; |
| } |
| } |