mirror of
https://github.com/Qortal/qortal.git
synced 2025-02-12 02:05:50 +00:00
Force a bootstrap if the block archive isn't intact on launch
This allows the topOnly setting to be disabled and the node will automatically bootstrap to the archive version. A rebuild isn't attempted if bootstrapping is disabled, in order to reduce risk.
This commit is contained in:
parent
5b028428c4
commit
dc876d9c96
@ -502,13 +502,22 @@ public class BlockChain {
|
|||||||
*/
|
*/
|
||||||
public static void validate() throws DataException {
|
public static void validate() throws DataException {
|
||||||
|
|
||||||
BlockData chainTip;
|
|
||||||
try (final Repository repository = RepositoryManager.getRepository()) {
|
|
||||||
chainTip = repository.getBlockRepository().getLastBlock();
|
|
||||||
}
|
|
||||||
|
|
||||||
boolean isTopOnly = Settings.getInstance().isTopOnly();
|
boolean isTopOnly = Settings.getInstance().isTopOnly();
|
||||||
boolean archiveEnabled = Settings.getInstance().isArchiveEnabled();
|
boolean archiveEnabled = Settings.getInstance().isArchiveEnabled();
|
||||||
|
boolean canBootstrap = Settings.getInstance().getBootstrap();
|
||||||
|
boolean needsArchiveRebuild = false;
|
||||||
|
BlockData chainTip;
|
||||||
|
|
||||||
|
try (final Repository repository = RepositoryManager.getRepository()) {
|
||||||
|
chainTip = repository.getBlockRepository().getLastBlock();
|
||||||
|
|
||||||
|
// Ensure archive is (at least partially) intact, and force a bootstrap if it isn't
|
||||||
|
if (!isTopOnly && archiveEnabled && canBootstrap) {
|
||||||
|
needsArchiveRebuild = (repository.getBlockArchiveRepository().fromHeight(2) == null);
|
||||||
|
LOGGER.info("Couldn't retrieve block 2 from archive. Bootstrapping...");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
boolean hasBlocks = (chainTip != null && chainTip.getHeight() > 1);
|
boolean hasBlocks = (chainTip != null && chainTip.getHeight() > 1);
|
||||||
|
|
||||||
if (isTopOnly && hasBlocks) {
|
if (isTopOnly && hasBlocks) {
|
||||||
@ -516,7 +525,7 @@ public class BlockChain {
|
|||||||
// It's best not to validate it, and there's no real need to
|
// It's best not to validate it, and there's no real need to
|
||||||
} else {
|
} else {
|
||||||
// Check first block is Genesis Block
|
// Check first block is Genesis Block
|
||||||
if (!isGenesisBlockValid()) {
|
if (!isGenesisBlockValid() || needsArchiveRebuild) {
|
||||||
try {
|
try {
|
||||||
rebuildBlockchain();
|
rebuildBlockchain();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user