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