Skip to content

Commit 732e7bc

Browse files
authored
fix(API): get now witness count (#6451)
* add GetPaginatedNowWitnessList into SolidityNodeHttpApiService * add isSolidityRequest check for MaintenanceUnavailableException * add unit tests
1 parent e0d167f commit 732e7bc

File tree

3 files changed

+25
-1
lines changed

3 files changed

+25
-1
lines changed

framework/src/main/java/org/tron/core/Wallet.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,7 @@
174174
import org.tron.core.db.Manager;
175175
import org.tron.core.db.TransactionContext;
176176
import org.tron.core.db2.core.Chainbase;
177+
import org.tron.core.db2.core.Chainbase.Cursor;
177178
import org.tron.core.exception.AccountResourceInsufficientException;
178179
import org.tron.core.exception.BadItemException;
179180
import org.tron.core.exception.ContractExeException;
@@ -784,8 +785,11 @@ public WitnessList getPaginatedNowWitnessList(long offset, long limit) throws
784785
In the maintenance period, the VoteStores will be cleared.
785786
To avoid the race condition of VoteStores deleted but Witness vote counts not updated,
786787
return retry error.
788+
Only apply to requests that rely on the latest block,
789+
which means the normal fullnode requests with HEAD cursor.
787790
*/
788-
if (chainBaseManager.getDynamicPropertiesStore().getStateFlag() == 1) {
791+
boolean isMaintenance = chainBaseManager.getDynamicPropertiesStore().getStateFlag() == 1;
792+
if (isMaintenance && !Args.getInstance().isSolidityNode() && getCursor() == Cursor.HEAD) {
789793
String message =
790794
"Service temporarily unavailable during maintenance period. Please try again later.";
791795
throw new MaintenanceUnavailableException(message);

framework/src/main/java/org/tron/core/services/http/solidity/SolidityNodeHttpApiService.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import org.tron.core.services.http.GetNodeInfoServlet;
4545
import org.tron.core.services.http.GetNowBlockServlet;
4646
import org.tron.core.services.http.GetPaginatedAssetIssueListServlet;
47+
import org.tron.core.services.http.GetPaginatedNowWitnessListServlet;
4748
import org.tron.core.services.http.GetRewardServlet;
4849
import org.tron.core.services.http.GetTransactionCountByBlockNumServlet;
4950
import org.tron.core.services.http.GetTransactionInfoByBlockNumServlet;
@@ -92,6 +93,8 @@ public class SolidityNodeHttpApiService extends HttpService {
9293
@Autowired
9394
private ListWitnessesServlet listWitnessesServlet;
9495
@Autowired
96+
private GetPaginatedNowWitnessListServlet getPaginatedNowWitnessListServlet;
97+
@Autowired
9598
private GetAssetIssueListServlet getAssetIssueListServlet;
9699
@Autowired
97100
private GetPaginatedAssetIssueListServlet getPaginatedAssetIssueListServlet;
@@ -174,6 +177,8 @@ protected void addServlet(ServletContextHandler context) {
174177
// same as FullNode
175178
context.addServlet(new ServletHolder(getAccountServlet), "/walletsolidity/getaccount");
176179
context.addServlet(new ServletHolder(listWitnessesServlet), "/walletsolidity/listwitnesses");
180+
context.addServlet(new ServletHolder(getPaginatedNowWitnessListServlet),
181+
"/walletsolidity/getpaginatednowwitnesslist");
177182
context.addServlet(new ServletHolder(getAssetIssueListServlet),
178183
"/walletsolidity/getassetissuelist");
179184
context.addServlet(new ServletHolder(getPaginatedAssetIssueListServlet),

framework/src/test/java/org/tron/core/WalletTest.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@
7171
import org.tron.core.capsule.VotesCapsule;
7272
import org.tron.core.capsule.WitnessCapsule;
7373
import org.tron.core.config.args.Args;
74+
import org.tron.core.db2.core.Chainbase;
7475
import org.tron.core.exception.ContractExeException;
7576
import org.tron.core.exception.ContractValidateException;
7677
import org.tron.core.exception.MaintenanceUnavailableException;
@@ -867,6 +868,20 @@ public void testGetPaginatedNowWitnessList_Error() {
867868
Assert.assertTrue("Should throw MaintenanceClearingException",
868869
e instanceof MaintenanceUnavailableException);
869870
}
871+
872+
try {
873+
Args.getInstance().setSolidityNode(true);
874+
wallet.getPaginatedNowWitnessList(0, 10);
875+
Args.getInstance().setSolidityNode(false);
876+
877+
dbManager.setCursor(Chainbase.Cursor.SOLIDITY);
878+
wallet.getPaginatedNowWitnessList(0, 10);
879+
dbManager.setCursor(Chainbase.Cursor.HEAD);
880+
} catch (Exception e) {
881+
Assert.assertFalse("Should not throw MaintenanceClearingException",
882+
e instanceof MaintenanceUnavailableException);
883+
}
884+
870885
dbManager.getChainBaseManager().getDynamicPropertiesStore().saveStateFlag(0);
871886
}
872887

0 commit comments

Comments
 (0)