0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018 package org.apache.spark.network.shuffle.protocol;
0019
0020 import java.util.Arrays;
0021 import java.util.Objects;
0022
0023 import io.netty.buffer.ByteBuf;
0024 import org.apache.commons.lang3.builder.ToStringBuilder;
0025 import org.apache.commons.lang3.builder.ToStringStyle;
0026
0027 import org.apache.spark.network.protocol.Encoders;
0028
0029
0030 import static org.apache.spark.network.shuffle.protocol.BlockTransferMessage.Type;
0031
0032
0033
0034 public class UploadBlock extends BlockTransferMessage {
0035 public final String appId;
0036 public final String execId;
0037 public final String blockId;
0038
0039
0040 public final byte[] metadata;
0041 public final byte[] blockData;
0042
0043
0044
0045
0046
0047 public UploadBlock(
0048 String appId,
0049 String execId,
0050 String blockId,
0051 byte[] metadata,
0052 byte[] blockData) {
0053 this.appId = appId;
0054 this.execId = execId;
0055 this.blockId = blockId;
0056 this.metadata = metadata;
0057 this.blockData = blockData;
0058 }
0059
0060 @Override
0061 protected Type type() { return Type.UPLOAD_BLOCK; }
0062
0063 @Override
0064 public int hashCode() {
0065 int objectsHashCode = Objects.hash(appId, execId, blockId);
0066 return (objectsHashCode * 41 + Arrays.hashCode(metadata)) * 41 + Arrays.hashCode(blockData);
0067 }
0068
0069 @Override
0070 public String toString() {
0071 return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE)
0072 .append("appId", appId)
0073 .append("execId", execId)
0074 .append("blockId", blockId)
0075 .append("metadata size", metadata.length)
0076 .append("block size", blockData.length)
0077 .toString();
0078 }
0079
0080 @Override
0081 public boolean equals(Object other) {
0082 if (other != null && other instanceof UploadBlock) {
0083 UploadBlock o = (UploadBlock) other;
0084 return Objects.equals(appId, o.appId)
0085 && Objects.equals(execId, o.execId)
0086 && Objects.equals(blockId, o.blockId)
0087 && Arrays.equals(metadata, o.metadata)
0088 && Arrays.equals(blockData, o.blockData);
0089 }
0090 return false;
0091 }
0092
0093 @Override
0094 public int encodedLength() {
0095 return Encoders.Strings.encodedLength(appId)
0096 + Encoders.Strings.encodedLength(execId)
0097 + Encoders.Strings.encodedLength(blockId)
0098 + Encoders.ByteArrays.encodedLength(metadata)
0099 + Encoders.ByteArrays.encodedLength(blockData);
0100 }
0101
0102 @Override
0103 public void encode(ByteBuf buf) {
0104 Encoders.Strings.encode(buf, appId);
0105 Encoders.Strings.encode(buf, execId);
0106 Encoders.Strings.encode(buf, blockId);
0107 Encoders.ByteArrays.encode(buf, metadata);
0108 Encoders.ByteArrays.encode(buf, blockData);
0109 }
0110
0111 public static UploadBlock decode(ByteBuf buf) {
0112 String appId = Encoders.Strings.decode(buf);
0113 String execId = Encoders.Strings.decode(buf);
0114 String blockId = Encoders.Strings.decode(buf);
0115 byte[] metadata = Encoders.ByteArrays.decode(buf);
0116 byte[] blockData = Encoders.ByteArrays.decode(buf);
0117 return new UploadBlock(appId, execId, blockId, metadata, blockData);
0118 }
0119 }