Skip to content

Commit bfa5e30

Browse files
fix: Log active config *after* initializing props and permissions facilities (hiero-ledger#19568)
Signed-off-by: Michael Tinker <michael.tinker@swirldslabs.com>
1 parent f7723a7 commit bfa5e30

File tree

6 files changed

+39
-19
lines changed

6 files changed

+39
-19
lines changed

hedera-node/hedera-app/src/main/java/com/hedera/node/app/Hedera.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -665,7 +665,6 @@ public void initializeStatesApi(
665665
}
666666
try {
667667
migrateSchemas(state, deserializedVersion, trigger, metrics, platformConfig);
668-
logConfiguration();
669668
} catch (final Throwable t) {
670669
logger.fatal("Critical failure during schema migration", t);
671670
throw new IllegalStateException("Critical failure during migration", t);
@@ -1176,7 +1175,8 @@ private void initializeDagger(@NonNull final State state, @NonNull final InitTri
11761175
.platformStateFacade(platformStateFacade)
11771176
.build();
11781177
// Initialize infrastructure for fees, exchange rates, and throttles from the working state
1179-
daggerApp.initializer().accept(state);
1178+
daggerApp.initializer().initialize(state, streamMode);
1179+
logConfiguration();
11801180
notifications.register(PlatformStatusChangeListener.class, this);
11811181
notifications.register(ReconnectCompleteListener.class, daggerApp.reconnectListener());
11821182
notifications.register(StateWriteToDiskCompleteListener.class, daggerApp.stateWriteToDiskListener());

hedera-node/hedera-app/src/main/java/com/hedera/node/app/HederaInjectionComponent.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@
5858
import com.swirlds.platform.system.InitTrigger;
5959
import com.swirlds.platform.system.Platform;
6060
import com.swirlds.platform.system.state.notifications.AsyncFatalIssListener;
61-
import com.swirlds.state.State;
6261
import com.swirlds.state.lifecycle.StartupNetworks;
6362
import com.swirlds.state.lifecycle.info.NetworkInfo;
6463
import com.swirlds.state.lifecycle.info.NodeInfo;
@@ -69,7 +68,6 @@
6968
import java.time.InstantSource;
7069
import java.util.List;
7170
import java.util.concurrent.atomic.AtomicBoolean;
72-
import java.util.function.Consumer;
7371
import java.util.function.Supplier;
7472
import javax.inject.Provider;
7573
import javax.inject.Singleton;
@@ -100,7 +98,7 @@ public interface HederaInjectionComponent {
10098

10199
WorkingStateAccessor workingStateAccessor();
102100

103-
Consumer<State> initializer();
101+
FacilityInitModule.FacilityInitializer initializer();
104102

105103
RecordCache recordCache();
106104

hedera-node/hedera-app/src/main/java/com/hedera/node/app/workflows/FacilityInitModule.java

Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,20 @@
22
package com.hedera.node.app.workflows;
33

44
import static com.hedera.hapi.node.base.ResponseCodeEnum.SUCCESS;
5+
import static com.hedera.node.app.blocks.schemas.V0560BlockStreamSchema.BLOCK_STREAM_INFO_KEY;
56
import static com.hedera.node.app.records.BlockRecordService.EPOCH;
67
import static com.hedera.node.app.records.schemas.V0490BlockRecordSchema.BLOCK_INFO_STATE_KEY;
78
import static com.hedera.node.app.util.FileUtilities.createFileID;
89
import static com.hedera.node.app.util.FileUtilities.getFileContent;
910
import static com.hedera.node.app.util.FileUtilities.observePropertiesAndPermissions;
11+
import static com.hedera.node.config.types.StreamMode.RECORDS;
1012
import static java.util.Objects.requireNonNull;
1113

1214
import com.hedera.hapi.node.base.FileID;
1315
import com.hedera.hapi.node.state.blockrecords.BlockInfo;
16+
import com.hedera.hapi.node.state.blockstream.BlockStreamInfo;
1417
import com.hedera.hapi.node.state.file.File;
18+
import com.hedera.node.app.blocks.BlockStreamService;
1519
import com.hedera.node.app.config.BootstrapConfigProviderImpl;
1620
import com.hedera.node.app.config.ConfigProviderImpl;
1721
import com.hedera.node.app.fees.ExchangeRateManager;
@@ -25,6 +29,7 @@
2529
import com.hedera.node.config.ConfigProvider;
2630
import com.hedera.node.config.data.FilesConfig;
2731
import com.hedera.node.config.data.HederaConfig;
32+
import com.hedera.node.config.types.StreamMode;
2833
import com.hedera.pbj.runtime.io.buffer.Bytes;
2934
import com.swirlds.state.State;
3035
import dagger.Binds;
@@ -33,7 +38,6 @@
3338
import edu.umd.cs.findbugs.annotations.NonNull;
3439
import edu.umd.cs.findbugs.annotations.Nullable;
3540
import java.util.Optional;
36-
import java.util.function.Consumer;
3741
import javax.inject.Singleton;
3842
import org.apache.logging.log4j.LogManager;
3943
import org.apache.logging.log4j.Logger;
@@ -46,6 +50,11 @@
4650
public interface FacilityInitModule {
4751
Logger log = LogManager.getLogger(FacilityInitModule.class);
4852

53+
@FunctionalInterface
54+
interface FacilityInitializer {
55+
void initialize(@NonNull State state, @NonNull StreamMode streamMode);
56+
}
57+
4958
@Binds
5059
@Singleton
5160
ConfigProvider bindConfigProvider(@NonNull ConfigProviderImpl configProvider);
@@ -61,16 +70,18 @@ public interface FacilityInitModule {
6170
*/
6271
@Provides
6372
@Singleton
64-
static Consumer<State> initFacilities(
73+
static FacilityInitializer initFacilities(
6574
@NonNull final FeeManager feeManager,
6675
@NonNull final FileServiceImpl fileService,
6776
@NonNull final ConfigProviderImpl configProvider,
6877
@NonNull final BootstrapConfigProviderImpl bootstrapConfigProvider,
6978
@NonNull final ExchangeRateManager exchangeRateManager,
7079
@NonNull final ThrottleServiceManager throttleServiceManager,
7180
@NonNull final WorkingStateAccessor workingStateAccessor) {
72-
return state -> {
73-
if (hasHandledGenesisTxn(state)) {
81+
return (state, streamMode) -> {
82+
requireNonNull(state);
83+
requireNonNull(streamMode);
84+
if (hasHandledGenesisTxn(state, streamMode)) {
7485
initializeExchangeRateManager(state, configProvider, exchangeRateManager);
7586
initializeFeeManager(state, configProvider, feeManager);
7687
observePropertiesAndPermissions(state, configProvider.getConfiguration(), (properties, permissions) -> {
@@ -121,13 +132,22 @@ private static void initializeFeeManager(
121132
}
122133
}
123134

124-
private static boolean hasHandledGenesisTxn(@NonNull final State state) {
125-
final var blockInfo = state.getReadableStates(BlockRecordService.NAME)
126-
.<BlockInfo>getSingleton(BLOCK_INFO_STATE_KEY)
127-
.get();
128-
return !EPOCH.equals(Optional.ofNullable(blockInfo)
129-
.map(BlockInfo::consTimeOfLastHandledTxn)
130-
.orElse(EPOCH));
135+
private static boolean hasHandledGenesisTxn(@NonNull final State state, @NonNull final StreamMode streamMode) {
136+
if (streamMode == RECORDS) {
137+
final var blockInfo = state.getReadableStates(BlockRecordService.NAME)
138+
.<BlockInfo>getSingleton(BLOCK_INFO_STATE_KEY)
139+
.get();
140+
return !EPOCH.equals(Optional.ofNullable(blockInfo)
141+
.map(BlockInfo::consTimeOfLastHandledTxn)
142+
.orElse(EPOCH));
143+
} else {
144+
final var blockStreamInfo = state.getReadableStates(BlockStreamService.NAME)
145+
.<BlockStreamInfo>getSingleton(BLOCK_STREAM_INFO_KEY)
146+
.get();
147+
return !EPOCH.equals(Optional.ofNullable(blockStreamInfo)
148+
.map(BlockStreamInfo::lastHandleTime)
149+
.orElse(EPOCH));
150+
}
131151
}
132152

133153
private static @Nullable File getFileFromStorage(

hedera-node/hedera-app/src/main/java/com/hedera/node/app/workflows/standalone/ExecutorComponent.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
import com.swirlds.state.State;
3232
import dagger.BindsInstance;
3333
import dagger.Component;
34-
import java.util.function.Consumer;
3534
import javax.inject.Singleton;
3635

3736
/**
@@ -95,7 +94,7 @@ interface Builder {
9594
ExecutorComponent build();
9695
}
9796

98-
Consumer<State> initializer();
97+
FacilityInitModule.FacilityInitializer initializer();
9998

10099
AppFeeCharging appFeeCharging();
101100

hedera-node/hedera-app/src/main/java/com/hedera/node/app/workflows/standalone/TransactionExecutors.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import com.hedera.node.app.throttle.ThrottleAccumulator;
2828
import com.hedera.node.config.data.BlockStreamConfig;
2929
import com.hedera.node.config.data.HederaConfig;
30+
import com.hedera.node.config.types.StreamMode;
3031
import com.hedera.pbj.runtime.io.buffer.Bytes;
3132
import com.swirlds.common.metrics.noop.NoOpMetrics;
3233
import com.swirlds.metrics.api.Metrics;
@@ -215,7 +216,7 @@ private TransactionExecutor newExecutor(
215216
final var executor = newExecutorComponent(
216217
state, properties, tracerBinding, customOps, softwareVersionFactory, entityIdFactory);
217218
executor.stateNetworkInfo().initFrom(state);
218-
executor.initializer().accept(state);
219+
executor.initializer().initialize(state, StreamMode.BOTH);
219220
final var exchangeRateManager = executor.exchangeRateManager();
220221
return (transactionBody, consensusNow, operationTracers) -> {
221222
final var dispatch = executor.standaloneDispatchFactory().newDispatch(state, transactionBody, consensusNow);

hedera-node/hedera-app/src/test/java/com/hedera/node/app/workflows/standalone/TransactionExecutorsTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import com.hedera.hapi.node.state.token.Account;
3838
import com.hedera.hapi.node.transaction.ThrottleDefinitions;
3939
import com.hedera.hapi.node.transaction.TransactionBody;
40+
import com.hedera.node.app.blocks.BlockStreamService;
4041
import com.hedera.node.app.config.BootstrapConfigProviderImpl;
4142
import com.hedera.node.app.config.ConfigProviderImpl;
4243
import com.hedera.node.app.fees.FeeService;
@@ -500,6 +501,7 @@ private void registerServices(
500501
new UtilServiceImpl(appContext, (signedTxn, config) -> null),
501502
new RecordCacheService(),
502503
new BlockRecordService(),
504+
new BlockStreamService(),
503505
new FeeService(),
504506
new CongestionThrottleService(),
505507
new NetworkServiceImpl(),

0 commit comments

Comments
 (0)