|
1 | 1 | package org.tron.core.net; |
2 | 2 |
|
| 3 | +import static org.tron.core.net.message.MessageTypes.INVENTORY; |
| 4 | +import static org.tron.core.net.message.MessageTypes.TRX; |
| 5 | + |
3 | 6 | import java.util.HashSet; |
4 | 7 | import java.util.Set; |
5 | 8 | import java.util.concurrent.atomic.AtomicInteger; |
|
11 | 14 | import org.tron.common.prometheus.MetricKeys; |
12 | 15 | import org.tron.common.prometheus.Metrics; |
13 | 16 | import org.tron.consensus.pbft.message.PbftMessage; |
| 17 | +import org.tron.core.config.args.Args; |
14 | 18 | import org.tron.core.exception.P2pException; |
15 | 19 | import org.tron.core.net.message.MessageTypes; |
16 | 20 | import org.tron.core.net.message.PbftMessageFactory; |
17 | 21 | import org.tron.core.net.message.TronMessage; |
18 | 22 | import org.tron.core.net.message.TronMessageFactory; |
| 23 | +import org.tron.core.net.message.adv.InventoryMessage; |
19 | 24 | import org.tron.core.net.message.base.DisconnectMessage; |
20 | 25 | import org.tron.core.net.message.handshake.HelloMessage; |
21 | 26 | import org.tron.core.net.messagehandler.BlockMsgHandler; |
@@ -84,6 +89,8 @@ public class P2pEventHandlerImpl extends P2pEventHandler { |
84 | 89 |
|
85 | 90 | private byte MESSAGE_MAX_TYPE = 127; |
86 | 91 |
|
| 92 | + private int maxCountIn10s = Args.getInstance().getMaxTps() * 10; |
| 93 | + |
87 | 94 | public P2pEventHandlerImpl() { |
88 | 95 | Set<Byte> set = new HashSet<>(); |
89 | 96 | for (byte i = 0; i < MESSAGE_MAX_TYPE; i++) { |
@@ -140,10 +147,27 @@ private void processMessage(PeerConnection peer, byte[] data) { |
140 | 147 | try { |
141 | 148 | msg = TronMessageFactory.create(data); |
142 | 149 | type = msg.getType(); |
| 150 | + |
| 151 | + if (INVENTORY.equals(type)) { |
| 152 | + InventoryMessage message = (InventoryMessage) msg; |
| 153 | + Protocol.Inventory.InventoryType inventoryType = message.getInventoryType(); |
| 154 | + int count = peer.getPeerStatistics().messageStatistics.tronInTrxInventoryElement |
| 155 | + .getCount(10); |
| 156 | + if (inventoryType.equals(Protocol.Inventory.InventoryType.TRX) && count > maxCountIn10s) { |
| 157 | + logger.warn("Drop inventory from Peer {}, cur:{}, max:{}", |
| 158 | + peer.getInetAddress(), count, maxCountIn10s); |
| 159 | + if (Args.getInstance().isOpenPrintLog()) { |
| 160 | + logger.warn("[overload]Drop tx list is: {}", ((InventoryMessage) msg).getHashList()); |
| 161 | + } |
| 162 | + return; |
| 163 | + } |
| 164 | + } |
| 165 | + |
143 | 166 | peer.getPeerStatistics().messageStatistics.addTcpInMessage(msg); |
144 | 167 | if (PeerConnection.needToLog(msg)) { |
145 | 168 | logger.info("Receive message from peer: {}, {}", peer.getInetSocketAddress(), msg); |
146 | 169 | } |
| 170 | + |
147 | 171 | switch (type) { |
148 | 172 | case P2P_PING: |
149 | 173 | case P2P_PONG: |
|
0 commit comments