Skip to content

Commit 1d5469a

Browse files
committed
add switch for index in SolidityNode
1 parent ecf806f commit 1d5469a

File tree

7 files changed

+51
-5
lines changed

7 files changed

+51
-5
lines changed

src/main/java/org/tron/core/config/DefaultConfig.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.tron.core.config;
22

3+
import org.apache.commons.lang3.BooleanUtils;
34
import org.slf4j.Logger;
45
import org.slf4j.LoggerFactory;
56
import org.springframework.beans.factory.annotation.Autowire;
@@ -32,10 +33,11 @@ public DefaultConfig() {
3233

3334
@Bean
3435
public IndexHelper indexHelper() {
35-
if (!Args.getInstance().isSolidityNode()) {
36-
return null;
36+
if (Args.getInstance().isSolidityNode()
37+
&& BooleanUtils.toBoolean(Args.getInstance().getStorage().getIndexSwitch())) {
38+
return new IndexHelper();
3739
}
38-
return new IndexHelper();
40+
return null;
3941
}
4042

4143
@Bean

src/main/java/org/tron/core/config/args/Args.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,9 @@ public class Args {
110110
@Parameter(names = {"--storage-index-directory"}, description = "Storage index directory")
111111
private String storageIndexDirectory = "";
112112

113+
@Parameter(names = {"--storage-index-switch"}, description = "Storage index switch.(on or off)")
114+
private String storageIndexSwitch = "";
115+
113116
@Getter
114117
private Storage storage;
115118

@@ -338,6 +341,7 @@ public static void clearParam() {
338341
INSTANCE.privateKey = "";
339342
INSTANCE.storageDbDirectory = "";
340343
INSTANCE.storageIndexDirectory = "";
344+
INSTANCE.storageIndexSwitch = "";
341345

342346
// FIXME: INSTANCE.storage maybe null ?
343347
if (INSTANCE.storage != null) {
@@ -482,6 +486,10 @@ public static void setParam(final String[] args, final String confFileName) {
482486
.filter(StringUtils::isNotEmpty)
483487
.orElse(Storage.getIndexDirectoryFromConfig(config)));
484488

489+
INSTANCE.storage.setIndexSwitch(Optional.ofNullable(INSTANCE.storageIndexSwitch)
490+
.filter(StringUtils::isNotEmpty)
491+
.orElse(Storage.getIndexSwitchFromConfig(config)));
492+
485493
INSTANCE.storage.setPropertyMapFromConfig(config);
486494

487495
INSTANCE.seedNode = new SeedNode();

src/main/java/org/tron/core/config/args/Storage.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import com.typesafe.config.Config;
1919
import com.typesafe.config.ConfigObject;
2020

21+
import org.apache.commons.lang3.StringUtils;
2122
import org.iq80.leveldb.CompressionType;
2223
import org.iq80.leveldb.Options;
2324

@@ -46,6 +47,7 @@ public class Storage {
4647
private static final String DB_DIRECTORY_CONFIG_KEY = "storage.db.directory";
4748
private static final String DB_VERSION_CONFIG_KEY = "storage.db.version";
4849
private static final String INDEX_DIRECTORY_CONFIG_KEY = "storage.index.directory";
50+
private static final String INDEX_SWITCH_CONFIG_KEY = "storage.index.switch";
4951
private static final String PROPERTIES_CONFIG_KEY = "storage.properties";
5052

5153
private static final String NAME_CONFIG_KEY = "name";
@@ -65,6 +67,7 @@ public class Storage {
6567
private static final int DEFAULT_DB_VERSION = 1;
6668
private static final String DEFAULT_DB_DIRECTORY = "database";
6769
private static final String DEFAULT_INDEX_DIRECTORY = "index";
70+
private static final String DEFAULT_INDEX_SWTICH = "on";
6871

6972
/**
7073
* Default values of db options:
@@ -99,6 +102,10 @@ public class Storage {
99102
@Setter
100103
private String indexDirectory;
101104

105+
@Getter
106+
@Setter
107+
private String indexSwitch;
108+
102109
/**
103110
* Other custom database configurations
104111
*/
@@ -130,6 +137,12 @@ public static String getIndexDirectoryFromConfig(final Config config) {
130137
config.getString(INDEX_DIRECTORY_CONFIG_KEY) : DEFAULT_INDEX_DIRECTORY;
131138
}
132139

140+
public static String getIndexSwitchFromConfig(final Config config) {
141+
return config.hasPath(INDEX_SWITCH_CONFIG_KEY)
142+
&& StringUtils.isNotEmpty(config.getString(INDEX_SWITCH_CONFIG_KEY)) ?
143+
config.getString(INDEX_SWITCH_CONFIG_KEY) : DEFAULT_INDEX_SWTICH;
144+
}
145+
133146
/**
134147
* Set propertyMap of Storage object from Config
135148
*

src/main/java/org/tron/core/db/Manager.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -606,7 +606,13 @@ public void pushVerifiedBlock(BlockCapsule block) throws ContractValidateExcepti
606606
VMIllegalException, TooBigTransactionResultException, UnLinkedBlockException,
607607
NonCommonBlockException, BadNumberBlockException, BadBlockException {
608608
block.generatedByMyself = true;
609+
long start = System.currentTimeMillis();
609610
pushBlock(block);
611+
logger.info("push block cost:{}ms, blockNum:{}, blockHash:{}, trx count:{}",
612+
System.currentTimeMillis() - start,
613+
block.getNum(),
614+
block.getBlockId(),
615+
block.getTransactions().size());
610616
}
611617

612618
private void applyBlock(BlockCapsule block) throws ContractValidateException,

src/main/java/org/tron/core/db/TransactionStore.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,9 @@ public TransactionCapsule get(byte[] key) throws BadItemException {
3838
/**
3939
* get total transaction.
4040
*/
41+
@Deprecated
4142
public long getTotalTransactions() {
42-
return Streams.stream(iterator()).count();
43+
return 0; //Streams.stream(iterator()).count();
4344
}
4445

4546
@Override

src/main/java/org/tron/core/db/api/IndexHelper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public class IndexHelper {
3535
@Resource
3636
private Index.Iface<AssetIssueContract> assetIssueIndex;
3737

38-
@PostConstruct
38+
//@PostConstruct
3939
public void init() {
4040
transactionIndex.fill();
4141
//blockIndex.fill();

src/main/java/org/tron/program/SolidityNode.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import java.util.concurrent.ScheduledExecutorService;
66
import java.util.concurrent.TimeUnit;
77
import lombok.extern.slf4j.Slf4j;
8+
import org.apache.commons.lang3.BooleanUtils;
89
import org.slf4j.Logger;
910
import org.slf4j.LoggerFactory;
1011
import org.springframework.context.ApplicationContext;
@@ -163,6 +164,18 @@ private void syncSolidityBlock() throws BadBlockException {
163164
logger.info("Sync with trust node completed!!!");
164165
}
165166

167+
private void resolveCompatibilityIssueIfUsingFullNodeDatabase() {
168+
long lastSolidityBlockNum = dbManager.getDynamicPropertiesStore().getLatestSolidifiedBlockNum();
169+
long headBlockNum = dbManager.getHeadBlockNum();
170+
logger.info("headBlockNum:{}, solidityBlockNum:{}, diff:{}",
171+
headBlockNum, lastSolidityBlockNum, headBlockNum - lastSolidityBlockNum);
172+
if (lastSolidityBlockNum < headBlockNum) {
173+
logger.info("use fullnode database, headBlockNum:{}, solidityBlockNum:{}, diff:{}",
174+
headBlockNum, lastSolidityBlockNum, headBlockNum - lastSolidityBlockNum);
175+
dbManager.getDynamicPropertiesStore().saveLatestSolidifiedBlockNum(headBlockNum);
176+
}
177+
}
178+
166179
private void start(Args cfgArgs) {
167180
syncExecutor.scheduleWithFixedDelay(() -> {
168181
try {
@@ -184,6 +197,8 @@ public static void main(String[] args) throws InterruptedException {
184197
Args.setParam(args, Constant.TESTNET_CONF);
185198
Args cfgArgs = Args.getInstance();
186199

200+
logger.info("index switch is {}",
201+
BooleanUtils.toStringOnOff(BooleanUtils.toBoolean(cfgArgs.getStorage().getIndexSwitch())));
187202
ch.qos.logback.classic.Logger root = (ch.qos.logback.classic.Logger)LoggerFactory
188203
.getLogger(Logger.ROOT_LOGGER_NAME);
189204
root.setLevel(Level.toLevel(cfgArgs.getLogLevel()));
@@ -224,6 +239,7 @@ public static void main(String[] args) throws InterruptedException {
224239

225240
SolidityNode node = new SolidityNode();
226241
node.setDbManager(appT.getDbManager());
242+
node.resolveCompatibilityIssueIfUsingFullNodeDatabase();
227243
node.start(cfgArgs);
228244

229245
rpcApiService.blockUntilShutdown();

0 commit comments

Comments
 (0)