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.giraph.zk; 20 21 import javax.annotation.concurrent.Immutable; 22 23 import static com.google.common.base.Preconditions.checkArgument; 24 import static com.google.common.base.Preconditions.checkNotNull; 25 26 /** 27 * This name is used by each worker as a file to let the ZooKeeper 28 * servers know that they can shutdown. 29 */ 30 @Immutable 31 public class ComputationDoneName { 32 /** Will end the name (easy to detect if this is a name match) */ 33 private static final String COMPUTATION_DONE_SUFFIX = 34 ".COMPUTATION_DONE"; 35 /** Unique worker id */ 36 private final int workerId; 37 /** Name as a string */ 38 private final String name; 39 40 /** 41 * Constructor. 42 * 43 * @param workerId Unique worker id 44 */ 45 public ComputationDoneName(int workerId) { 46 this.workerId = workerId; 47 this.name = Integer.toString(workerId) + COMPUTATION_DONE_SUFFIX; 48 } 49 50 public int getWorkerId() { 51 return workerId; 52 } 53 54 public String getName() { 55 return name; 56 } 57 58 /** 59 * Create this object from a name (if possible). If the name is not 60 * able to be parsed this will throw various runtime exceptions. 61 * 62 * @param name Name to parse 63 * @return ComputationDoneName object that represents this name 64 */ 65 public static final ComputationDoneName fromName(String name) { 66 checkNotNull(name, "name is null"); 67 checkArgument(name.endsWith(COMPUTATION_DONE_SUFFIX), 68 "Name %s is not a valid ComputationDoneName", name); 69 70 return new ComputationDoneName( 71 Integer.parseInt(name.replace(COMPUTATION_DONE_SUFFIX, ""))); 72 } 73 74 /** 75 * Is this string a ComputationDoneName? 76 * 77 * @param name Name to check 78 * @return True if matches the format of a ComputationDoneName, 79 * false otherwise 80 */ 81 public static final boolean isName(String name) { 82 return name.endsWith(COMPUTATION_DONE_SUFFIX); 83 } 84 }