forked from oceanbase/obkv-table-client-java
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathObTablePacketEncoder.java
More file actions
84 lines (69 loc) · 2.9 KB
/
ObTablePacketEncoder.java
File metadata and controls
84 lines (69 loc) · 2.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
/*-
* #%L
* OBKV Table Client Framework
* %%
* Copyright (C) 2021 OceanBase
* %%
* OBKV Table Client Framework is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
* #L%
*/
package com.alipay.oceanbase.rpc.bolt.protocol;
import com.alipay.oceanbase.rpc.bolt.transport.ObTableTimeTrace;
import com.alipay.oceanbase.rpc.util.Serialization;
import com.alipay.oceanbase.rpc.util.TableClientLoggerFactory;
import com.alipay.remoting.CommandEncoder;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import org.slf4j.Logger;
import java.io.Serializable;
import static com.alipay.oceanbase.rpc.util.TableClientLoggerFactory.LCD;
public class ObTablePacketEncoder implements CommandEncoder {
private static final Logger logger = TableClientLoggerFactory
.getLogger(ObTablePacketEncoder.class);
/*
* Encode.
*/
@Override
public void encode(ChannelHandlerContext ctx, Serializable msg, ByteBuf out) throws Exception {
try {
if (msg instanceof ObTablePacket) {
/*
* 4bytes 4bytes 4bytes 4bytes
* -----------------------------------
* | flag | dlen | chid | reserved |
* -----------------------------------
*/
ObTablePacket cmd = (ObTablePacket) msg;
// Record when EventLoop starts encoding (reflects queue wait time)
ObTableTimeTrace timeTrace = cmd.getTimeTrace();
if (timeTrace != null) {
timeTrace.markNettyEncodeStart();
}
// 1. header
out.writeBytes(ObTableProtocol.MAGIC_HEADER_FLAG);
out.writeBytes(Serialization.encodeI32(cmd.getPacketContent().length));
out.writeBytes(Serialization.encodeI32(cmd.getId()));
out.writeBytes(ObTableProtocol.RESERVED);
// 2. payload
out.writeBytes(cmd.getPacketContent());
// Record when encoding is complete
if (timeTrace != null) {
timeTrace.markNettyEncodeEnd();
}
} else {
String warnMsg = "msg type [" + msg.getClass() + "] is not subclass of ObCommand";
logger.warn(warnMsg);
}
} catch (Exception e) {
logger.error(LCD.convert("01-00003"), e);
throw e;
}
}
}