1 /** 2 * Licensed to the Apache Software Foundation (ASF) under one 3 * or more contributor license agreements. See the NOTICE file 4 * distributed with this work for additional information 5 * regarding copyright ownership. The ASF licenses this file 6 * to you under the Apache License, Version 2.0 (the 7 * "License"); you may not use this file except in compliance 8 * with the License. You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, software 13 * distributed under the License is distributed on an "AS IS" BASIS, 14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 * See the License for the specific language governing permissions and 16 * limitations under the License. 17 */ 18 package org.apache.hadoop.yarn.server.nodemanager.api.protocolrecords.impl.pb; 19 20 import org.apache.hadoop.yarn.api.records.LocalResource; 21 import org.apache.hadoop.yarn.api.records.SerializedException; 22 import org.apache.hadoop.yarn.api.records.URL; 23 import org.apache.hadoop.yarn.api.records.impl.pb.LocalResourcePBImpl; 24 import org.apache.hadoop.yarn.api.records.impl.pb.ProtoBase; 25 import org.apache.hadoop.yarn.api.records.impl.pb.SerializedExceptionPBImpl; 26 import org.apache.hadoop.yarn.api.records.impl.pb.URLPBImpl; 27 import org.apache.hadoop.yarn.proto.YarnProtos.LocalResourceProto; 28 import org.apache.hadoop.yarn.proto.YarnProtos.SerializedExceptionProto; 29 import org.apache.hadoop.yarn.proto.YarnProtos.URLProto; 30 import org.apache.hadoop.yarn.proto.YarnServerNodemanagerServiceProtos.LocalResourceStatusProto; 31 import org.apache.hadoop.yarn.proto.YarnServerNodemanagerServiceProtos.LocalResourceStatusProtoOrBuilder; 32 import org.apache.hadoop.yarn.proto.YarnServerNodemanagerServiceProtos.ResourceStatusTypeProto; 33 import org.apache.hadoop.yarn.server.nodemanager.api.protocolrecords.LocalResourceStatus; 34 import org.apache.hadoop.yarn.server.nodemanager.api.protocolrecords.ResourceStatusType; 35 36 public class LocalResourceStatusPBImpl 37 extends ProtoBase<LocalResourceStatusProto> implements LocalResourceStatus { 38 39 LocalResourceStatusProto proto = 40 LocalResourceStatusProto.getDefaultInstance(); 41 LocalResourceStatusProto.Builder builder = null; 42 boolean viaProto = false; 43 44 private LocalResource resource; 45 private URL localPath; 46 private SerializedException exception; 47 LocalResourceStatusPBImpl()48 public LocalResourceStatusPBImpl() { 49 builder = LocalResourceStatusProto.newBuilder(); 50 } 51 LocalResourceStatusPBImpl(LocalResourceStatusProto proto)52 public LocalResourceStatusPBImpl(LocalResourceStatusProto proto) { 53 this.proto = proto; 54 viaProto = true; 55 } 56 getProto()57 public LocalResourceStatusProto getProto() { 58 mergeLocalToProto(); 59 proto = viaProto ? proto : builder.build(); 60 viaProto = true; 61 return proto; 62 } 63 mergeLocalToBuilder()64 private void mergeLocalToBuilder() { 65 if (this.resource != null && 66 !((LocalResourcePBImpl)this.resource).getProto() 67 .equals(builder.getResource())) { 68 builder.setResource(convertToProtoFormat(this.resource)); 69 } 70 if (this.localPath != null && 71 !((URLPBImpl)this.localPath).getProto() 72 .equals(builder.getLocalPath())) { 73 builder.setLocalPath(convertToProtoFormat(this.localPath)); 74 } 75 if (this.exception != null && 76 !((SerializedExceptionPBImpl)this.exception).getProto() 77 .equals(builder.getException())) { 78 builder.setException(convertToProtoFormat(this.exception)); 79 } 80 } 81 mergeLocalToProto()82 private void mergeLocalToProto() { 83 if (viaProto) 84 maybeInitBuilder(); 85 mergeLocalToBuilder(); 86 proto = builder.build(); 87 viaProto = true; 88 } 89 maybeInitBuilder()90 private void maybeInitBuilder() { 91 if (viaProto || builder == null) { 92 builder = LocalResourceStatusProto.newBuilder(proto); 93 } 94 viaProto = false; 95 } 96 97 @Override getResource()98 public LocalResource getResource() { 99 LocalResourceStatusProtoOrBuilder p = viaProto ? proto : builder; 100 if (this.resource != null) { 101 return this.resource; 102 } 103 if (!p.hasResource()) { 104 return null; 105 } 106 this.resource = convertFromProtoFormat(p.getResource()); 107 return this.resource; 108 } 109 110 @Override getStatus()111 public ResourceStatusType getStatus() { 112 LocalResourceStatusProtoOrBuilder p = viaProto ? proto : builder; 113 if (!p.hasStatus()) { 114 return null; 115 } 116 return convertFromProtoFormat(p.getStatus()); 117 } 118 119 @Override getLocalPath()120 public URL getLocalPath() { 121 LocalResourceStatusProtoOrBuilder p = viaProto ? proto : builder; 122 if (this.localPath != null) { 123 return this.localPath; 124 } 125 if (!p.hasLocalPath()) { 126 return null; 127 } 128 this.localPath = convertFromProtoFormat(p.getLocalPath()); 129 return this.localPath; 130 } 131 132 @Override getLocalSize()133 public long getLocalSize() { 134 LocalResourceStatusProtoOrBuilder p = viaProto ? proto : builder; 135 return (p.getLocalSize()); 136 } 137 138 @Override getException()139 public SerializedException getException() { 140 LocalResourceStatusProtoOrBuilder p = viaProto ? proto : builder; 141 if (this.exception != null) { 142 return this.exception; 143 } 144 if (!p.hasException()) { 145 return null; 146 } 147 this.exception = convertFromProtoFormat(p.getException()); 148 return this.exception; 149 } 150 151 152 @Override setResource(LocalResource resource)153 public void setResource(LocalResource resource) { 154 maybeInitBuilder(); 155 if (resource == null) 156 builder.clearResource(); 157 this.resource = resource; 158 } 159 160 @Override setStatus(ResourceStatusType status)161 public void setStatus(ResourceStatusType status) { 162 maybeInitBuilder(); 163 if (status == null) { 164 builder.clearStatus(); 165 return; 166 } 167 builder.setStatus(convertToProtoFormat(status)); 168 } 169 170 @Override setLocalPath(URL localPath)171 public void setLocalPath(URL localPath) { 172 maybeInitBuilder(); 173 if (localPath == null) 174 builder.clearLocalPath(); 175 this.localPath = localPath; 176 } 177 178 @Override setLocalSize(long size)179 public void setLocalSize(long size) { 180 maybeInitBuilder(); 181 builder.setLocalSize(size); 182 } 183 184 @Override setException(SerializedException exception)185 public void setException(SerializedException exception) { 186 maybeInitBuilder(); 187 if (exception == null) 188 builder.clearException(); 189 this.exception = exception; 190 } 191 convertToProtoFormat(LocalResource rsrc)192 private LocalResourceProto convertToProtoFormat(LocalResource rsrc) { 193 return ((LocalResourcePBImpl)rsrc).getProto(); 194 } 195 convertFromProtoFormat(LocalResourceProto rsrc)196 private LocalResourcePBImpl convertFromProtoFormat(LocalResourceProto rsrc) { 197 return new LocalResourcePBImpl(rsrc); 198 } 199 convertFromProtoFormat(URLProto p)200 private URLPBImpl convertFromProtoFormat(URLProto p) { 201 return new URLPBImpl(p); 202 } 203 convertToProtoFormat(URL t)204 private URLProto convertToProtoFormat(URL t) { 205 return ((URLPBImpl)t).getProto(); 206 } 207 convertToProtoFormat(ResourceStatusType e)208 private ResourceStatusTypeProto convertToProtoFormat(ResourceStatusType e) { 209 return ResourceStatusTypeProto.valueOf(e.name()); 210 } 211 convertFromProtoFormat(ResourceStatusTypeProto e)212 private ResourceStatusType convertFromProtoFormat(ResourceStatusTypeProto e) { 213 return ResourceStatusType.valueOf(e.name()); 214 } 215 convertFromProtoFormat(SerializedExceptionProto p)216 private SerializedExceptionPBImpl convertFromProtoFormat(SerializedExceptionProto p) { 217 return new SerializedExceptionPBImpl(p); 218 } 219 convertToProtoFormat(SerializedException t)220 private SerializedExceptionProto convertToProtoFormat(SerializedException t) { 221 return ((SerializedExceptionPBImpl)t).getProto(); 222 } 223 224 } 225