Skip to content

Commit 0a9c357

Browse files
authored
Merge pull request #1538 from tronprotocol/fastPop
fast pop
2 parents e41acc6 + a6b1b57 commit 0a9c357

File tree

4 files changed

+29
-15
lines changed

4 files changed

+29
-15
lines changed

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

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package org.tron.core.db;
22

3+
import static org.tron.core.db2.core.SnapshotManager.simpleDecode;
4+
5+
import com.google.common.collect.Maps;
36
import java.util.ArrayList;
47
import java.util.Arrays;
58
import java.util.Deque;
@@ -12,8 +15,6 @@
1215
import java.util.Set;
1316
import java.util.concurrent.atomic.AtomicInteger;
1417
import java.util.stream.Collectors;
15-
16-
import com.google.common.collect.Maps;
1718
import lombok.AllArgsConstructor;
1819
import lombok.EqualsAndHashCode;
1920
import lombok.Getter;
@@ -27,13 +28,9 @@
2728
import org.tron.core.config.args.Args;
2829
import org.tron.core.db2.common.IRevokingDB;
2930
import org.tron.core.db2.core.ISession;
30-
import org.tron.core.db2.core.RevokingDBWithCachingNewValue;
3131
import org.tron.core.db2.core.RevokingDBWithCachingOldValue;
32-
import org.tron.core.db2.core.SnapshotManager;
3332
import org.tron.core.exception.RevokingStoreIllegalStateException;
3433

35-
import static org.tron.core.db2.core.SnapshotManager.simpleDecode;
36-
3734
@Slf4j
3835
@Getter // only for unit test
3936
public abstract class AbstractRevokingStore implements RevokingDatabase {
@@ -247,6 +244,15 @@ public synchronized void commit() {
247244

248245
@Override
249246
public synchronized void pop() {
247+
prune(writeOptions);
248+
}
249+
250+
@Override
251+
public synchronized void fastPop() {
252+
prune(new WriteOptions());
253+
}
254+
255+
private synchronized void prune(WriteOptions options) {
250256
if (activeDialog != 0) {
251257
throw new RevokingStoreIllegalStateException("activeDialog has to be equal 0");
252258
}
@@ -259,9 +265,9 @@ public synchronized void pop() {
259265

260266
try {
261267
RevokingState state = stack.peekLast();
262-
state.oldValues.forEach((k, v) -> k.database.putData(k.key, v, writeOptions));
263-
state.newIds.forEach(e -> e.database.deleteData(e.key, writeOptions));
264-
state.removed.forEach((k, v) -> k.database.putData(k.key, v, writeOptions));
268+
state.oldValues.forEach((k, v) -> k.database.putData(k.key, v, options));
269+
state.newIds.forEach(e -> e.database.deleteData(e.key, options));
270+
state.removed.forEach((k, v) -> k.database.putData(k.key, v, options));
265271
stack.pollLast();
266272
} finally {
267273
disabled = false;

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

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -590,7 +590,7 @@ public synchronized void eraseBlock() {
590590
getDynamicPropertiesStore().getLatestBlockHeaderHash());
591591
logger.info("begin to erase block:" + oldHeadBlock);
592592
khaosDb.pop();
593-
revokingStore.pop();
593+
revokingStore.fastPop();
594594
logger.info("end to erase block:" + oldHeadBlock);
595595
popedTransactions.addAll(oldHeadBlock.getTransactions());
596596

@@ -1025,13 +1025,17 @@ public synchronized BlockCapsule generateBlock(
10251025
UnLinkedBlockException, ValidateScheduleException, AccountResourceInsufficientException {
10261026

10271027
//check that the first block after the maintenance period has just been processed
1028-
if (lastHeadBlockIsMaintenanceBefore != lastHeadBlockIsMaintenance()) {
1028+
// if (lastHeadBlockIsMaintenanceBefore != lastHeadBlockIsMaintenance()) {
10291029
if (!witnessController.validateWitnessSchedule(witnessCapsule.getAddress(), when)) {
10301030
logger.info("It's not my turn, "
10311031
+ "and the first block after the maintenance period has just been processed");
1032+
1033+
logger.info("when:{},lastHeadBlockIsMaintenanceBefore:{},lastHeadBlockIsMaintenanceAfter:{}",
1034+
when, lastHeadBlockIsMaintenanceBefore,lastHeadBlockIsMaintenance() );
1035+
10321036
return null;
10331037
}
1034-
}
1038+
// }
10351039

10361040
final long timestamp = this.dynamicPropertiesStore.getLatestBlockHeaderTimestamp();
10371041
final long number = this.dynamicPropertiesStore.getLatestBlockHeaderNumber();

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

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

3-
import org.tron.core.db.AbstractRevokingStore.Dialog;
4-
import org.tron.core.db.AbstractRevokingStore.RevokingState;
5-
import org.tron.core.db.AbstractRevokingStore.RevokingTuple;
63
import org.tron.core.db2.common.IRevokingDB;
74
import org.tron.core.db2.core.ISession;
85
import org.tron.core.exception.RevokingStoreIllegalStateException;
@@ -23,6 +20,8 @@ public interface RevokingDatabase {
2320

2421
void pop() throws RevokingStoreIllegalStateException;
2522

23+
void fastPop() throws RevokingStoreIllegalStateException;
24+
2625
void enable();
2726

2827
int size();

src/main/java/org/tron/core/db2/core/SnapshotManager.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,11 @@ public synchronized void pop() {
131131
}
132132
}
133133

134+
@Override
135+
public void fastPop() throws RevokingStoreIllegalStateException {
136+
pop();
137+
}
138+
134139
public synchronized void enable() {
135140
disabled = false;
136141
}

0 commit comments

Comments
 (0)