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 import org.apache.hadoop.mapreduce.v2.api.records.JobId; 22 import org.apache.hadoop.mapreduce.v2.api.records.TaskId; 23 import org.apache.hadoop.mapreduce.v2.api.records.TaskType; 24 import org.apache.hadoop.mapreduce.v2.proto.MRProtos.JobIdProto; 25 import org.apache.hadoop.mapreduce.v2.proto.MRProtos.TaskIdProto; 26 import org.apache.hadoop.mapreduce.v2.proto.MRProtos.TaskIdProtoOrBuilder; 27 import org.apache.hadoop.mapreduce.v2.proto.MRProtos.TaskTypeProto; 28 import org.apache.hadoop.mapreduce.v2.util.MRProtoUtils; 29 30 public class TaskIdPBImpl extends TaskId { 31 TaskIdProto proto = TaskIdProto.getDefaultInstance(); 32 TaskIdProto.Builder builder = null; 33 boolean viaProto = false; 34 35 private JobId jobId = null; 36 TaskIdPBImpl()37 public TaskIdPBImpl() { 38 builder = TaskIdProto.newBuilder(proto); 39 } 40 TaskIdPBImpl(TaskIdProto proto)41 public TaskIdPBImpl(TaskIdProto proto) { 42 this.proto = proto; 43 viaProto = true; 44 } 45 getProto()46 public synchronized TaskIdProto getProto() { 47 mergeLocalToProto(); 48 proto = viaProto ? proto : builder.build(); 49 viaProto = true; 50 return proto; 51 } 52 mergeLocalToBuilder()53 private synchronized void mergeLocalToBuilder() { 54 if (this.jobId != null 55 && !((JobIdPBImpl) this.jobId).getProto().equals(builder.getJobId())) { 56 builder.setJobId(convertToProtoFormat(this.jobId)); 57 } 58 } 59 mergeLocalToProto()60 private synchronized void mergeLocalToProto() { 61 if (viaProto) 62 maybeInitBuilder(); 63 mergeLocalToBuilder(); 64 proto = builder.build(); 65 viaProto = true; 66 } 67 maybeInitBuilder()68 private synchronized void maybeInitBuilder() { 69 if (viaProto || builder == null) { 70 builder = TaskIdProto.newBuilder(proto); 71 } 72 viaProto = false; 73 } 74 75 @Override getId()76 public synchronized int getId() { 77 TaskIdProtoOrBuilder p = viaProto ? proto : builder; 78 return (p.getId()); 79 } 80 81 @Override setId(int id)82 public synchronized void setId(int id) { 83 maybeInitBuilder(); 84 builder.setId((id)); 85 } 86 87 @Override getJobId()88 public synchronized JobId getJobId() { 89 TaskIdProtoOrBuilder p = viaProto ? proto : builder; 90 if (this.jobId != null) { 91 return this.jobId; 92 } 93 if (!p.hasJobId()) { 94 return null; 95 } 96 jobId = convertFromProtoFormat(p.getJobId()); 97 return jobId; 98 } 99 100 @Override setJobId(JobId jobId)101 public synchronized void setJobId(JobId jobId) { 102 maybeInitBuilder(); 103 if (jobId == null) 104 builder.clearJobId(); 105 this.jobId = jobId; 106 } 107 108 @Override getTaskType()109 public synchronized TaskType getTaskType() { 110 TaskIdProtoOrBuilder p = viaProto ? proto : builder; 111 if (!p.hasTaskType()) { 112 return null; 113 } 114 return convertFromProtoFormat(p.getTaskType()); 115 } 116 117 @Override setTaskType(TaskType taskType)118 public synchronized void setTaskType(TaskType taskType) { 119 maybeInitBuilder(); 120 if (taskType == null) { 121 builder.clearTaskType(); 122 return; 123 } 124 builder.setTaskType(convertToProtoFormat(taskType)); 125 } 126 convertFromProtoFormat(JobIdProto p)127 private JobIdPBImpl convertFromProtoFormat(JobIdProto p) { 128 return new JobIdPBImpl(p); 129 } 130 convertToProtoFormat(JobId t)131 private JobIdProto convertToProtoFormat(JobId t) { 132 return ((JobIdPBImpl)t).getProto(); 133 } 134 convertToProtoFormat(TaskType e)135 private TaskTypeProto convertToProtoFormat(TaskType e) { 136 return MRProtoUtils.convertToProtoFormat(e); 137 } 138 convertFromProtoFormat(TaskTypeProto e)139 private TaskType convertFromProtoFormat(TaskTypeProto e) { 140 return MRProtoUtils.convertFromProtoFormat(e); 141 } 142 }