Skip to content

Commit 9b80f91

Browse files
committed
Add SR set change and empty block detection
1 parent 7e5bbbd commit 9b80f91

4 files changed

Lines changed: 49 additions & 0 deletions

File tree

common/src/main/java/org/tron/common/prometheus/MetricKeys.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ public static class Counter {
1414
public static final String TXS = "tron:txs";
1515
public static final String MINER = "tron:miner";
1616
public static final String BLOCK_FORK = "tron:block_fork";
17+
public static final String BLOCK_EMPTY = "tron:block_empty";
18+
public static final String SR_SET_CHANGE = "tron:sr_set_change";
1719
public static final String P2P_ERROR = "tron:p2p_error";
1820
public static final String P2P_DISCONNECT = "tron:p2p_disconnect";
1921
public static final String INTERNAL_SERVICE_FAIL = "tron:internal_service_fail";

common/src/main/java/org/tron/common/prometheus/MetricLabels.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ public static class Counter {
3131
public static final String TXS_FAIL_SIG = "sig";
3232
public static final String TXS_FAIL_TAPOS = "tapos";
3333
public static final String TXS_FAIL_DUP = "dup";
34+
public static final String SR_ADD = "add";
35+
public static final String SR_REMOVE = "remove";
3436

3537
private Counter() {
3638
throw new IllegalStateException("Counter");

common/src/main/java/org/tron/common/prometheus/MetricsCounter.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ class MetricsCounter {
1414
init(MetricKeys.Counter.TXS, "tron txs info .", "type", "detail");
1515
init(MetricKeys.Counter.MINER, "tron miner info .", "miner", "type");
1616
init(MetricKeys.Counter.BLOCK_FORK, "tron block fork info .", "type");
17+
init(MetricKeys.Counter.BLOCK_EMPTY, "tron empty block count .", "miner");
18+
init(MetricKeys.Counter.SR_SET_CHANGE, "tron sr set change .", "action", "witness");
1719
init(MetricKeys.Counter.P2P_ERROR, "tron p2p error info .", "type");
1820
init(MetricKeys.Counter.P2P_DISCONNECT, "tron p2p disconnect .", "type");
1921
init(MetricKeys.Counter.INTERNAL_SERVICE_FAIL, "internal Service fail.",

framework/src/main/java/org/tron/core/metrics/blockchain/BlockChainMetricManager.java

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,13 @@
33
import com.codahale.metrics.Counter;
44
import com.google.protobuf.ByteString;
55
import java.util.ArrayList;
6+
import java.util.HashSet;
67
import java.util.List;
78
import java.util.Map;
9+
import java.util.Set;
810
import java.util.SortedMap;
911
import java.util.concurrent.ConcurrentHashMap;
12+
import java.util.stream.Collectors;
1013
import lombok.Getter;
1114
import lombok.Setter;
1215
import org.bouncycastle.util.encoders.Hex;
@@ -42,6 +45,7 @@ public class BlockChainMetricManager {
4245
private long failProcessBlockNum = 0;
4346
@Setter
4447
private String failProcessBlockReason = "";
48+
private final Set<String> lastActiveWitnesses = ConcurrentHashMap.newKeySet();
4549

4650
public BlockChainInfo getBlockChainInfo() {
4751
BlockChainInfo blockChainInfo = new BlockChainInfo();
@@ -168,6 +172,45 @@ public void applyBlock(BlockCapsule block) {
168172
MetricsUtil.meterMark(MetricsKey.BLOCKCHAIN_TPS, block.getTransactions().size());
169173
Metrics.counterInc(MetricKeys.Counter.TXS, block.getTransactions().size(),
170174
MetricLabels.Counter.TXS_SUCCESS, MetricLabels.Counter.TXS_SUCCESS);
175+
} else {
176+
// Empty block
177+
Metrics.counterInc(MetricKeys.Counter.BLOCK_EMPTY, 1,
178+
StringUtil.encode58Check(address));
179+
}
180+
181+
// SR set change detection
182+
Set<String> currentWitnesses = chainBaseManager.getWitnessScheduleStore().getActiveWitnesses()
183+
.stream()
184+
.map(w -> Hex.toHexString(w.toByteArray()))
185+
.collect(Collectors.toSet());
186+
recordSrSetChange(currentWitnesses);
187+
}
188+
189+
private void recordSrSetChange(Set<String> currentWitnesses) {
190+
if (currentWitnesses.isEmpty()) {
191+
return;
192+
}
193+
if (lastActiveWitnesses.isEmpty()) {
194+
lastActiveWitnesses.addAll(currentWitnesses);
195+
return;
196+
}
197+
Set<String> added = new HashSet<>(currentWitnesses);
198+
added.removeAll(lastActiveWitnesses);
199+
200+
Set<String> removed = new HashSet<>(lastActiveWitnesses);
201+
removed.removeAll(currentWitnesses);
202+
203+
for (String address : added) {
204+
Metrics.counterInc(MetricKeys.Counter.SR_SET_CHANGE, 1,
205+
MetricLabels.Counter.SR_ADD, StringUtil.encode58Check(Hex.decode(address)));
206+
}
207+
for (String address : removed) {
208+
Metrics.counterInc(MetricKeys.Counter.SR_SET_CHANGE, 1,
209+
MetricLabels.Counter.SR_REMOVE, StringUtil.encode58Check(Hex.decode(address)));
210+
}
211+
if (!added.isEmpty() || !removed.isEmpty()) {
212+
lastActiveWitnesses.clear();
213+
lastActiveWitnesses.addAll(currentWitnesses);
171214
}
172215
}
173216

0 commit comments

Comments
 (0)