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 }