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
10 * http://www.apache.org/licenses/LICENSE-2.0
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.
19 package org
.apache
.hadoop
.hbase
;
21 import java
.io
.IOException
;
22 import java
.util
.UUID
;
24 import org
.apache
.yetus
.audience
.InterfaceAudience
;
25 import org
.apache
.hadoop
.hbase
.exceptions
.DeserializationException
;
26 import org
.apache
.hadoop
.hbase
.shaded
.protobuf
.ProtobufUtil
;
27 import org
.apache
.hadoop
.hbase
.shaded
.protobuf
.generated
.ClusterIdProtos
;
28 import org
.apache
.hadoop
.hbase
.util
.Bytes
;
31 * The identifier for this cluster.
32 * It is serialized to the filesystem and up into zookeeper. This is a container for the id.
33 * Also knows how to serialize and deserialize the cluster id.
35 @InterfaceAudience.Private
36 public class ClusterId
{
37 private final String id
;
40 * New ClusterID. Generates a uniqueid.
43 this(UUID
.randomUUID().toString());
46 public ClusterId(final String uuid
) {
51 * @return The clusterid serialized using pb w/ pb magic prefix
53 public byte [] toByteArray() {
54 return ProtobufUtil
.prependPBMagic(convert().toByteArray());
58 * @param bytes A pb serialized {@link ClusterId} instance with pb magic prefix
59 * @return An instance of {@link ClusterId} made from <code>bytes</code>
60 * @throws DeserializationException
63 public static ClusterId
parseFrom(final byte [] bytes
) throws DeserializationException
{
64 if (ProtobufUtil
.isPBMagicPrefix(bytes
)) {
65 int pblen
= ProtobufUtil
.lengthOfPBMagic();
66 ClusterIdProtos
.ClusterId
.Builder builder
= ClusterIdProtos
.ClusterId
.newBuilder();
67 ClusterIdProtos
.ClusterId cid
= null;
69 ProtobufUtil
.mergeFrom(builder
, bytes
, pblen
, bytes
.length
- pblen
);
70 cid
= builder
.build();
71 } catch (IOException e
) {
72 throw new DeserializationException(e
);
76 // Presume it was written out this way, the old way.
77 return new ClusterId(Bytes
.toString(bytes
));
82 * @return A pb instance to represent this instance.
84 public ClusterIdProtos
.ClusterId
convert() {
85 ClusterIdProtos
.ClusterId
.Builder builder
= ClusterIdProtos
.ClusterId
.newBuilder();
86 return builder
.setClusterId(this.id
).build();
91 * @return A {@link ClusterId} made from the passed in <code>cid</code>
93 public static ClusterId
convert(final ClusterIdProtos
.ClusterId cid
) {
94 return new ClusterId(cid
.getClusterId());
98 * @see java.lang.Object#toString()
101 public String
toString() {