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