1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.hadoop.hbase;
19
20 import com.google.protobuf.ByteString;
21 import com.google.protobuf.InvalidProtocolBufferException;
22 import org.apache.hadoop.classification.InterfaceAudience;
23 import org.apache.hadoop.hbase.exceptions.DeserializationException;
24 import org.apache.hadoop.hbase.executor.EventType;
25 import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
26 import org.apache.hadoop.hbase.protobuf.generated.ZooKeeperProtos;
27 import org.apache.hadoop.hbase.util.Bytes;
28
29
30
31
32
33
34
35
36 @InterfaceAudience.Private
37 public class RegionTransition {
38 private final ZooKeeperProtos.RegionTransition rt;
39
40
41
42
43 private RegionTransition() {
44 this(null);
45 }
46
47 private RegionTransition(final ZooKeeperProtos.RegionTransition rt) {
48 this.rt = rt;
49 }
50
51 public EventType getEventType() {
52 return EventType.get(this.rt.getEventTypeCode());
53 }
54
55 public ServerName getServerName() {
56 return ProtobufUtil.toServerName(this.rt.getServerName());
57 }
58
59 public long getCreateTime() {
60 return this.rt.getCreateTime();
61 }
62
63
64
65
66 public byte [] getRegionName() {
67 return this.rt.getRegionName().toByteArray();
68 }
69
70 public byte [] getPayload() {
71 return this.rt.getPayload().toByteArray();
72 }
73
74 @Override
75 public String toString() {
76 byte [] payload = getPayload();
77 return "region=" + Bytes.toStringBinary(getRegionName()) + ", state=" + getEventType() +
78 ", servername=" + getServerName() + ", createTime=" + this.getCreateTime() +
79 ", payload.length=" + (payload == null? 0: payload.length);
80 }
81
82
83
84
85
86
87
88 public static RegionTransition createRegionTransition(final EventType type,
89 final byte [] regionName, final ServerName sn) {
90 return createRegionTransition(type, regionName, sn, null);
91 }
92
93
94
95
96
97
98
99
100 public static RegionTransition createRegionTransition(final EventType type,
101 final byte [] regionName, final ServerName sn, final byte [] payload) {
102 org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ServerName pbsn =
103 org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ServerName.newBuilder().
104 setHostName(sn.getHostname()).setPort(sn.getPort()).setStartCode(sn.getStartcode()).build();
105 ZooKeeperProtos.RegionTransition.Builder builder = ZooKeeperProtos.RegionTransition.newBuilder().
106 setEventTypeCode(type.getCode()).setRegionName(ByteString.copyFrom(regionName)).
107 setServerName(pbsn);
108 builder.setCreateTime(System.currentTimeMillis());
109 if (payload != null) builder.setPayload(ByteString.copyFrom(payload));
110 return new RegionTransition(builder.build());
111 }
112
113
114
115
116
117
118
119 public static RegionTransition parseFrom(final byte [] data) throws DeserializationException {
120 ProtobufUtil.expectPBMagicPrefix(data);
121 try {
122 int prefixLen = ProtobufUtil.lengthOfPBMagic();
123 ZooKeeperProtos.RegionTransition rt = ZooKeeperProtos.RegionTransition.newBuilder().
124 mergeFrom(data, prefixLen, data.length - prefixLen).build();
125 return new RegionTransition(rt);
126 } catch (InvalidProtocolBufferException e) {
127 throw new DeserializationException(e);
128 }
129 }
130
131
132
133
134
135 public byte [] toByteArray() {
136 return ProtobufUtil.prependPBMagic(this.rt.toByteArray());
137 }
138 }