Skip to content

Commit f798601

Browse files
committed
add performa test for ObTableLsOperationRequest encode
1 parent 9dc35b9 commit f798601

File tree

1 file changed

+190
-0
lines changed

1 file changed

+190
-0
lines changed
Lines changed: 190 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,190 @@
1+
/*-
2+
* #%L
3+
* OBKV Table Client Framework
4+
* %%
5+
* Copyright (C) 2021 OceanBase
6+
* %%
7+
* OBKV Table Client Framework is licensed under Mulan PSL v2.
8+
* You can use this software according to the terms and conditions of the Mulan PSL v2.
9+
* You may obtain a copy of Mulan PSL v2 at:
10+
* http://license.coscl.org.cn/MulanPSL2
11+
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
12+
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
13+
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
14+
* See the Mulan PSL v2 for more details.
15+
* #L%
16+
*/
17+
package com.alipay.oceanbase.rpc.protocol.payload.impl.execute;
18+
19+
import com.alipay.oceanbase.rpc.protocol.payload.impl.ObObj;
20+
import com.alipay.oceanbase.rpc.protocol.payload.impl.ObRowKey;
21+
import com.alipay.oceanbase.rpc.protocol.payload.impl.execute.query.ObHTableFilter;
22+
import com.alipay.oceanbase.rpc.protocol.payload.impl.execute.query.ObNewRange;
23+
import com.alipay.oceanbase.rpc.protocol.payload.impl.execute.query.ObScanOrder;
24+
import com.alipay.oceanbase.rpc.table.ObKVParams;
25+
import com.alipay.oceanbase.rpc.util.ObBytesString;
26+
import org.junit.Test;
27+
28+
import java.util.ArrayList;
29+
import java.util.List;
30+
import java.util.Random;
31+
32+
import static com.alipay.oceanbase.rpc.protocol.payload.impl.execute.ObTableOperationType.SCAN;
33+
import static com.alipay.oceanbase.rpc.table.ObKVParamsBase.paramType.HBase;
34+
35+
public class ObTableLsOperationRequestTest {
36+
private int lsOpReqSize = 100;
37+
private int tabletOpSize = 10;
38+
private int singleOpSize = 100;
39+
private static final Random random = new Random();
40+
41+
@Test
42+
public void testEncodePerformance() {
43+
ObTableLSOpRequest[] lsReq = new ObTableLSOpRequest[lsOpReqSize];
44+
for (int i = 0; i < lsOpReqSize; i++) {
45+
lsReq[i] = buildLsOp();
46+
}
47+
long startTime = System.nanoTime();
48+
for (int i = 0; i < lsOpReqSize; i++) {
49+
lsReq[i].encode();
50+
}
51+
long endTime = System.nanoTime();
52+
long duration = endTime - startTime;
53+
System.out.println("each request encode took: " + (duration / lsOpReqSize) +" nanoseconds in average");
54+
}
55+
private ObTableLSOpRequest buildLsOp() {
56+
ObTableLSOpRequest lsOpReq = new ObTableLSOpRequest();
57+
lsOpReq.setCredential(new ObBytesString(generateRandomString(100).getBytes()));
58+
lsOpReq.setConsistencyLevel(ObTableConsistencyLevel.EVENTUAL);
59+
ObTableLSOperation lsOp = new ObTableLSOperation();
60+
lsOp.setLsId(1001);
61+
lsOp.setTableName(generateRandomString(10));
62+
lsOpReq.setLsOperation(lsOp);
63+
lsOpReq.setTableId(50001);
64+
lsOpReq.setEntityType(ObTableEntityType.HKV);
65+
lsOpReq.setTimeout(10000);
66+
lsOp.setNeedAllProp(true);
67+
lsOp.setReturnOneResult(false);
68+
for (int i = 0; i < tabletOpSize; i++) {
69+
lsOp.addTabletOperation(buildTabletOp());
70+
}
71+
lsOp.prepare();
72+
return lsOpReq;
73+
}
74+
75+
private ObTableTabletOp buildTabletOp() {
76+
ObTableTabletOp tabletOp = new ObTableTabletOp();
77+
tabletOp.setTabletId(random.nextLong());
78+
List<ObTableSingleOp> singleOperations = new ArrayList<>();
79+
for (int i = 0; i < singleOpSize; i++) {
80+
singleOperations.add(budilSingleOp());
81+
}
82+
tabletOp.setSingleOperations(singleOperations);
83+
tabletOp.setIsSameType(random.nextBoolean());
84+
tabletOp.setIsSamePropertiesNames(random.nextBoolean());
85+
tabletOp.setIsReadOnly(random.nextBoolean());
86+
return tabletOp;
87+
}
88+
89+
private ObTableSingleOp budilSingleOp() {
90+
ObTableSingleOp singleOp = new ObTableSingleOp();
91+
singleOp.setSingleOpType(SCAN);
92+
ObTableSingleOpQuery query = buildSingleOpQuery();
93+
singleOp.setQuery(query);
94+
List<ObTableSingleOpEntity> entities = new ArrayList<>();
95+
entities.add(buildSingleOpEntity());
96+
singleOp.setEntities(entities);
97+
singleOp.setIsCheckNoExists(random.nextBoolean());
98+
singleOp.setIsRollbackWhenCheckFailed(random.nextBoolean());
99+
return singleOp;
100+
}
101+
102+
private ObTableSingleOpQuery buildSingleOpQuery() {
103+
String indexName = generateRandomString(10);
104+
105+
List<ObNewRange> keyRanges = new ArrayList<>();
106+
keyRanges.add(buildRandomRange());
107+
108+
List<String> selectColumns = new ArrayList<>();
109+
selectColumns.add("K");
110+
selectColumns.add("Q");
111+
selectColumns.add("T");
112+
selectColumns.add("V");
113+
114+
ObScanOrder scanOrder = ObScanOrder.Forward;
115+
116+
boolean isHbaseQuery = random.nextBoolean();
117+
118+
ObHTableFilter obHTableFilter = new ObHTableFilter();
119+
ObKVParams obKVParams = new ObKVParams();
120+
obKVParams.setObParamsBase(obKVParams.getObParams(HBase));
121+
122+
String filterString = generateRandomString(20);
123+
124+
return ObTableSingleOpQuery.getInstance(
125+
indexName,
126+
keyRanges,
127+
selectColumns,
128+
scanOrder,
129+
isHbaseQuery,
130+
obHTableFilter,
131+
obKVParams,
132+
filterString
133+
);
134+
}
135+
136+
private ObTableSingleOpEntity buildSingleOpEntity() {
137+
String[] rowKeyNames = {"K", "Q", "T"};
138+
Object[] rowKey = {
139+
generateRandomString(10),
140+
generateRandomString(10),
141+
generateRandomString(10)
142+
};
143+
144+
String[] propertiesNames = {"V"};
145+
Object[] propertiesValues = { generateRandomString(20) };
146+
147+
return ObTableSingleOpEntity.getInstance(
148+
rowKeyNames,
149+
rowKey,
150+
propertiesNames,
151+
propertiesValues
152+
);
153+
}
154+
155+
public static String generateRandomString(int length) {
156+
Random random = new Random();
157+
StringBuilder sb = new StringBuilder(length);
158+
159+
for (int i = 0; i < length; i++) {
160+
// 生成一个随机字符(ASCII 码范围:32-126,包含字母、数字和符号)
161+
char randomChar = (char) (random.nextInt(95) + 32);
162+
sb.append(randomChar);
163+
}
164+
165+
return sb.toString();
166+
}
167+
168+
private static ObNewRange buildRandomRange() {
169+
ObNewRange range = new ObNewRange();
170+
171+
List<ObObj> startKey = new ArrayList<>();
172+
startKey.add(ObObj.getInstance(generateRandomString(10)));
173+
startKey.add(ObObj.getInstance(generateRandomString(10)));
174+
startKey.add(ObObj.getInstance(generateRandomString(10)));
175+
176+
List<ObObj> endKey = new ArrayList<>();
177+
endKey.add(ObObj.getInstance(generateRandomString(10)));
178+
endKey.add(ObObj.getInstance(generateRandomString(10)));
179+
endKey.add(ObObj.getInstance(generateRandomString(10)));
180+
181+
ObRowKey startRk = new ObRowKey();
182+
startRk.setObjs(startKey);
183+
range.setStartKey(startRk);
184+
ObRowKey endRk = new ObRowKey();
185+
endRk.setObjs(endKey);
186+
range.setEndKey(endRk);
187+
188+
return range;
189+
}
190+
}

0 commit comments

Comments
 (0)