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 
19 package org.apache.hadoop.mapreduce.v2.api.records.impl.pb;
20 
21 
22 import java.util.ArrayList;
23 import java.util.List;
24 
25 import org.apache.hadoop.mapreduce.v2.api.records.AMInfo;
26 import org.apache.hadoop.mapreduce.v2.api.records.JobId;
27 import org.apache.hadoop.mapreduce.v2.api.records.JobReport;
28 import org.apache.hadoop.mapreduce.v2.api.records.JobState;
29 import org.apache.hadoop.mapreduce.v2.proto.MRProtos.AMInfoProto;
30 import org.apache.hadoop.mapreduce.v2.proto.MRProtos.JobIdProto;
31 import org.apache.hadoop.mapreduce.v2.proto.MRProtos.JobReportProto;
32 import org.apache.hadoop.mapreduce.v2.proto.MRProtos.JobReportProtoOrBuilder;
33 import org.apache.hadoop.mapreduce.v2.proto.MRProtos.JobStateProto;
34 import org.apache.hadoop.mapreduce.v2.util.MRProtoUtils;
35 import org.apache.hadoop.yarn.api.records.impl.pb.ProtoBase;
36 
37 
38 
39 public class JobReportPBImpl extends ProtoBase<JobReportProto> implements
40     JobReport {
41   JobReportProto proto = JobReportProto.getDefaultInstance();
42   JobReportProto.Builder builder = null;
43   boolean viaProto = false;
44 
45   private JobId jobId = null;
46   private List<AMInfo> amInfos = null;
47 
48 
JobReportPBImpl()49   public JobReportPBImpl() {
50     builder = JobReportProto.newBuilder();
51   }
52 
JobReportPBImpl(JobReportProto proto)53   public JobReportPBImpl(JobReportProto proto) {
54     this.proto = proto;
55     viaProto = true;
56   }
57 
getProto()58   public synchronized JobReportProto getProto() {
59       mergeLocalToProto();
60     proto = viaProto ? proto : builder.build();
61     viaProto = true;
62     return proto;
63   }
64 
mergeLocalToBuilder()65   private synchronized void mergeLocalToBuilder() {
66     if (this.jobId != null) {
67       builder.setJobId(convertToProtoFormat(this.jobId));
68     }
69     if (this.amInfos != null) {
70       addAMInfosToProto();
71     }
72   }
73 
mergeLocalToProto()74   private synchronized void mergeLocalToProto() {
75     if (viaProto)
76       maybeInitBuilder();
77     mergeLocalToBuilder();
78     proto = builder.build();
79     viaProto = true;
80   }
81 
maybeInitBuilder()82   private synchronized void maybeInitBuilder() {
83     if (viaProto || builder == null) {
84       builder = JobReportProto.newBuilder(proto);
85     }
86     viaProto = false;
87   }
88 
89 
90   @Override
getJobId()91   public synchronized JobId getJobId() {
92     JobReportProtoOrBuilder p = viaProto ? proto : builder;
93     if (this.jobId != null) {
94       return this.jobId;
95     }
96     if (!p.hasJobId()) {
97       return null;
98     }
99     this.jobId = convertFromProtoFormat(p.getJobId());
100     return this.jobId;
101   }
102 
103   @Override
setJobId(JobId jobId)104   public synchronized void setJobId(JobId jobId) {
105     maybeInitBuilder();
106     if (jobId == null)
107       builder.clearJobId();
108     this.jobId = jobId;
109   }
110   @Override
getJobState()111   public synchronized JobState getJobState() {
112     JobReportProtoOrBuilder p = viaProto ? proto : builder;
113     if (!p.hasJobState()) {
114       return null;
115     }
116     return convertFromProtoFormat(p.getJobState());
117   }
118 
119   @Override
setJobState(JobState jobState)120   public synchronized void setJobState(JobState jobState) {
121     maybeInitBuilder();
122     if (jobState == null) {
123       builder.clearJobState();
124       return;
125     }
126     builder.setJobState(convertToProtoFormat(jobState));
127   }
128   @Override
getMapProgress()129   public synchronized float getMapProgress() {
130     JobReportProtoOrBuilder p = viaProto ? proto : builder;
131     return (p.getMapProgress());
132   }
133 
134   @Override
setMapProgress(float mapProgress)135   public synchronized void setMapProgress(float mapProgress) {
136     maybeInitBuilder();
137     builder.setMapProgress((mapProgress));
138   }
139   @Override
getReduceProgress()140   public synchronized float getReduceProgress() {
141     JobReportProtoOrBuilder p = viaProto ? proto : builder;
142     return (p.getReduceProgress());
143   }
144 
145   @Override
setReduceProgress(float reduceProgress)146   public synchronized void setReduceProgress(float reduceProgress) {
147     maybeInitBuilder();
148     builder.setReduceProgress((reduceProgress));
149   }
150   @Override
getCleanupProgress()151   public synchronized float getCleanupProgress() {
152     JobReportProtoOrBuilder p = viaProto ? proto : builder;
153     return (p.getCleanupProgress());
154   }
155 
156   @Override
setCleanupProgress(float cleanupProgress)157   public synchronized void setCleanupProgress(float cleanupProgress) {
158     maybeInitBuilder();
159     builder.setCleanupProgress((cleanupProgress));
160   }
161   @Override
getSetupProgress()162   public synchronized float getSetupProgress() {
163     JobReportProtoOrBuilder p = viaProto ? proto : builder;
164     return (p.getSetupProgress());
165   }
166 
167   @Override
setSetupProgress(float setupProgress)168   public synchronized void setSetupProgress(float setupProgress) {
169     maybeInitBuilder();
170     builder.setSetupProgress((setupProgress));
171   }
172 
173   @Override
getSubmitTime()174   public synchronized long getSubmitTime() {
175     JobReportProtoOrBuilder p = viaProto ? proto : builder;
176     return (p.getSubmitTime());
177   }
178 
179   @Override
setSubmitTime(long submitTime)180   public synchronized void setSubmitTime(long submitTime) {
181     maybeInitBuilder();
182     builder.setSubmitTime((submitTime));
183   }
184 
185   @Override
getStartTime()186   public synchronized long getStartTime() {
187     JobReportProtoOrBuilder p = viaProto ? proto : builder;
188     return (p.getStartTime());
189   }
190 
191   @Override
setStartTime(long startTime)192   public synchronized void setStartTime(long startTime) {
193     maybeInitBuilder();
194     builder.setStartTime((startTime));
195   }
196   @Override
getFinishTime()197   public synchronized long getFinishTime() {
198     JobReportProtoOrBuilder p = viaProto ? proto : builder;
199     return (p.getFinishTime());
200   }
201 
202   @Override
setFinishTime(long finishTime)203   public synchronized void setFinishTime(long finishTime) {
204     maybeInitBuilder();
205     builder.setFinishTime((finishTime));
206   }
207 
208   @Override
getUser()209   public synchronized String getUser() {
210     JobReportProtoOrBuilder p = viaProto ? proto : builder;
211     return (p.getUser());
212   }
213 
214   @Override
setUser(String user)215   public synchronized void setUser(String user) {
216     maybeInitBuilder();
217     builder.setUser((user));
218   }
219 
220   @Override
getJobName()221   public synchronized String getJobName() {
222     JobReportProtoOrBuilder p = viaProto ? proto : builder;
223     return (p.getJobName());
224   }
225 
226   @Override
setJobName(String jobName)227   public synchronized void setJobName(String jobName) {
228     maybeInitBuilder();
229     builder.setJobName((jobName));
230   }
231 
232   @Override
getTrackingUrl()233   public synchronized String getTrackingUrl() {
234     JobReportProtoOrBuilder p = viaProto ? proto : builder;
235     return (p.getTrackingUrl());
236   }
237 
238   @Override
setTrackingUrl(String trackingUrl)239   public synchronized void setTrackingUrl(String trackingUrl) {
240     maybeInitBuilder();
241     builder.setTrackingUrl(trackingUrl);
242   }
243 
244   @Override
getDiagnostics()245   public synchronized String getDiagnostics() {
246     JobReportProtoOrBuilder p = viaProto ? proto : builder;
247     return p.getDiagnostics();
248   }
249 
250   @Override
setDiagnostics(String diagnostics)251   public synchronized void setDiagnostics(String diagnostics) {
252     maybeInitBuilder();
253     builder.setDiagnostics(diagnostics);
254   }
255 
256   @Override
getJobFile()257   public synchronized String getJobFile() {
258     JobReportProtoOrBuilder p = viaProto ? proto : builder;
259     return p.getJobFile();
260   }
261 
262   @Override
setJobFile(String jobFile)263   public synchronized void setJobFile(String jobFile) {
264     maybeInitBuilder();
265     builder.setJobFile(jobFile);
266   }
267 
268   @Override
getAMInfos()269   public synchronized List<AMInfo> getAMInfos() {
270     initAMInfos();
271     return this.amInfos;
272   }
273 
274   @Override
setAMInfos(List<AMInfo> amInfos)275   public synchronized void setAMInfos(List<AMInfo> amInfos) {
276     maybeInitBuilder();
277     if (amInfos == null) {
278       this.builder.clearAmInfos();
279       this.amInfos = null;
280       return;
281     }
282     initAMInfos();
283     this.amInfos.clear();
284     this.amInfos.addAll(amInfos);
285   }
286 
287 
initAMInfos()288   private synchronized void initAMInfos() {
289     if (this.amInfos != null) {
290       return;
291     }
292     JobReportProtoOrBuilder p = viaProto ? proto : builder;
293     List<AMInfoProto> list = p.getAmInfosList();
294 
295     this.amInfos = new ArrayList<AMInfo>();
296 
297     for (AMInfoProto amInfoProto : list) {
298       this.amInfos.add(convertFromProtoFormat(amInfoProto));
299     }
300   }
301 
addAMInfosToProto()302   private synchronized void addAMInfosToProto() {
303     maybeInitBuilder();
304     builder.clearAmInfos();
305     if (this.amInfos == null)
306       return;
307     for (AMInfo amInfo : this.amInfos) {
308       builder.addAmInfos(convertToProtoFormat(amInfo));
309     }
310   }
311 
convertFromProtoFormat(AMInfoProto p)312   private AMInfoPBImpl convertFromProtoFormat(AMInfoProto p) {
313     return new AMInfoPBImpl(p);
314   }
315 
convertToProtoFormat(AMInfo t)316   private AMInfoProto convertToProtoFormat(AMInfo t) {
317     return ((AMInfoPBImpl)t).getProto();
318   }
319 
convertFromProtoFormat(JobIdProto p)320   private JobIdPBImpl convertFromProtoFormat(JobIdProto p) {
321     return new JobIdPBImpl(p);
322   }
323 
convertToProtoFormat(JobId t)324   private JobIdProto convertToProtoFormat(JobId t) {
325     return ((JobIdPBImpl)t).getProto();
326   }
327 
convertToProtoFormat(JobState e)328   private JobStateProto convertToProtoFormat(JobState e) {
329     return MRProtoUtils.convertToProtoFormat(e);
330   }
331 
convertFromProtoFormat(JobStateProto e)332   private JobState convertFromProtoFormat(JobStateProto e) {
333     return MRProtoUtils.convertFromProtoFormat(e);
334   }
335 
336   @Override
isUber()337   public synchronized boolean isUber() {
338     JobReportProtoOrBuilder p = viaProto ? proto : builder;
339     return p.getIsUber();
340   }
341 
342   @Override
setIsUber(boolean isUber)343   public synchronized void setIsUber(boolean isUber) {
344     maybeInitBuilder();
345     builder.setIsUber(isUber);
346   }
347 }
348