Skip to content

Commit 5d4bd72

Browse files
authored
refactor: 22141 Make PlatformStateFacade a utility class (#22143)
Signed-off-by: Ivan Malygin <[email protected]>
1 parent f528763 commit 5d4bd72

File tree

103 files changed

+637
-1001
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

103 files changed

+637
-1001
lines changed

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

Lines changed: 8 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@
1515
import static com.hedera.node.config.types.StreamMode.BLOCKS;
1616
import static com.hedera.node.config.types.StreamMode.RECORDS;
1717
import static com.swirlds.platform.state.service.PlatformStateService.PLATFORM_STATE_SERVICE;
18+
import static com.swirlds.platform.state.service.PlatformStateUtils.creationSemanticVersionOf;
19+
import static com.swirlds.platform.state.service.PlatformStateUtils.freezeTimeOf;
20+
import static com.swirlds.platform.state.service.PlatformStateUtils.lastFrozenTimeOf;
1821
import static com.swirlds.platform.state.service.schemas.V0540PlatformStateSchema.PLATFORM_STATE_STATE_ID;
1922
import static com.swirlds.platform.system.InitTrigger.GENESIS;
2023
import static com.swirlds.platform.system.InitTrigger.RECONNECT;
@@ -114,7 +117,6 @@
114117
import com.swirlds.platform.listeners.ReconnectCompleteNotification;
115118
import com.swirlds.platform.listeners.StateWriteToDiskCompleteListener;
116119
import com.swirlds.platform.state.ConsensusStateEventHandler;
117-
import com.swirlds.platform.state.service.PlatformStateFacade;
118120
import com.swirlds.platform.state.service.PlatformStateService;
119121
import com.swirlds.platform.system.InitTrigger;
120122
import com.swirlds.platform.system.Platform;
@@ -279,12 +281,6 @@ public final class Hedera implements SwirldMain<MerkleNodeState>, AppContext.Gos
279281
*/
280282
private final BlockStreamService blockStreamService;
281283

282-
/**
283-
* The platform state facade singleton, kept as a field here to avoid constructing twice`
284-
* (once in constructor to register schemas, again inside Dagger component).
285-
*/
286-
private final PlatformStateFacade platformStateFacade;
287-
288284
/**
289285
* The block hash signer factory.
290286
*/
@@ -438,7 +434,6 @@ BlockHashSigner apply(
438434
* @param historyServiceFactory the factory for the history service
439435
* @param blockHashSignerFactory the factory for the block hash signer
440436
* @param metrics the metrics object to use for reporting
441-
* @param platformStateFacade the facade object to access platform state
442437
* @param baseSupplier the base supplier to create a new state with
443438
*/
444439
public Hedera(
@@ -451,7 +446,6 @@ public Hedera(
451446
@NonNull final HistoryServiceFactory historyServiceFactory,
452447
@NonNull final BlockHashSignerFactory blockHashSignerFactory,
453448
@NonNull final Metrics metrics,
454-
@NonNull final PlatformStateFacade platformStateFacade,
455449
@NonNull final Supplier<MerkleNodeState> baseSupplier) {
456450
requireNonNull(registryFactory);
457451
requireNonNull(constructableRegistry);
@@ -462,7 +456,6 @@ public Hedera(
462456
this.startupNetworksFactory = requireNonNull(startupNetworksFactory);
463457
this.blockHashSignerFactory = requireNonNull(blockHashSignerFactory);
464458
this.storeMetricsService = new StoreMetricsServiceImpl(metrics);
465-
this.platformStateFacade = requireNonNull(platformStateFacade);
466459
logger.info(
467460
"""
468461
@@ -553,10 +546,7 @@ public Hedera(
553546
new NetworkServiceImpl(),
554547
new AddressBookServiceImpl(),
555548
new RosterServiceImpl(
556-
this::canAdoptRoster,
557-
this::onAdoptRoster,
558-
() -> requireNonNull(initState),
559-
platformStateFacade),
549+
this::canAdoptRoster, this::onAdoptRoster, () -> requireNonNull(initState)),
560550
PLATFORM_STATE_SERVICE)
561551
.forEach(servicesRegistry::register);
562552
consensusStateEventHandler = new ConsensusStateEventHandlerImpl(this);
@@ -713,7 +703,7 @@ public void initializeStatesApi(
713703
requireNonNull(platformConfig);
714704
this.configProvider = new ConfigProviderImpl(trigger == GENESIS, metrics);
715705
this.genesisNetworkSupplier = () -> startupNetworks().genesisNetworkOrThrow(platformConfig);
716-
final var deserializedVersion = platformStateFacade.creationSemanticVersionOf(state);
706+
final var deserializedVersion = creationSemanticVersionOf(state);
717707
logger.info(
718708
"Initializing Hedera state version {} in {} mode with trigger {} and previous version {}",
719709
version,
@@ -743,8 +733,8 @@ public void initializeStatesApi(
743733
}
744734
logger.info(
745735
"Platform state includes freeze time={} and last frozen={}",
746-
platformStateFacade.freezeTimeOf(state),
747-
platformStateFacade.lastFrozenTimeOf(state));
736+
freezeTimeOf(state),
737+
lastFrozenTimeOf(state));
748738
}
749739

750740
/**
@@ -831,8 +821,7 @@ private void migrateSchemas(
831821
platformConfig,
832822
startupNetworks,
833823
storeMetricsService,
834-
configProvider,
835-
platformStateFacade);
824+
configProvider);
836825
this.initState = null;
837826
migrationStateChanges = new ArrayList<>(migrationChanges);
838827
immediateStateChangeListener.reset(null);
@@ -1272,7 +1261,6 @@ private void initializeDagger(@NonNull final State state, @NonNull final InitTri
12721261
.historyService(historyService)
12731262
.blockHashSigner(blockHashSigner)
12741263
.appContext(appContext)
1275-
.platformStateFacade(platformStateFacade)
12761264
.build();
12771265
// Initialize infrastructure for fees, exchange rates, and throttles from the working state
12781266
daggerApp.initializer().initialize(state, streamMode);

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

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,6 @@
6161
import com.swirlds.metrics.api.Metrics;
6262
import com.swirlds.platform.listeners.ReconnectCompleteListener;
6363
import com.swirlds.platform.listeners.StateWriteToDiskCompleteListener;
64-
import com.swirlds.platform.state.service.PlatformStateFacade;
6564
import com.swirlds.platform.system.InitTrigger;
6665
import com.swirlds.platform.system.Platform;
6766
import com.swirlds.platform.system.state.notifications.AsyncFatalIssListener;
@@ -244,9 +243,6 @@ interface Builder {
244243
@BindsInstance
245244
Builder startupNetworks(StartupNetworks startupNetworks);
246245

247-
@BindsInstance
248-
Builder platformStateFacade(PlatformStateFacade platformStateFacade);
249-
250246
@BindsInstance
251247
Builder appContext(AppContext appContext);
252248

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

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,6 @@
6262
import com.swirlds.platform.config.legacy.LegacyConfigProperties;
6363
import com.swirlds.platform.config.legacy.LegacyConfigPropertiesLoader;
6464
import com.swirlds.platform.state.ConsensusStateEventHandler;
65-
import com.swirlds.platform.state.service.PlatformStateFacade;
6665
import com.swirlds.platform.state.signed.HashedReservedSignedState;
6766
import com.swirlds.platform.state.signed.ReservedSignedState;
6867
import com.swirlds.platform.system.InitTrigger;
@@ -308,8 +307,7 @@ public static void main(final String... args) throws Exception {
308307
setupGlobalMetrics(platformConfig);
309308
final var time = Time.getCurrent();
310309
metrics = getMetricsProvider().createPlatformMetrics(selfId);
311-
final PlatformStateFacade platformStateFacade = new PlatformStateFacade();
312-
hedera = newHedera(platformStateFacade, platformConfig, metrics, time);
310+
hedera = newHedera(platformConfig, metrics, time);
313311
final var version = hedera.getSemanticVersion();
314312
final AtomicReference<Network> genesisNetwork = new AtomicReference<>();
315313
logger.info("Starting node {} with version {}", selfId, version);
@@ -344,7 +342,6 @@ public static void main(final String... args) throws Exception {
344342
Hedera.APP_NAME,
345343
Hedera.SWIRLD_NAME,
346344
selfId,
347-
platformStateFacade,
348345
platformContext,
349346
hedera.stateRootFromVirtualMap(metrics));
350347
final ReservedSignedState initialState = reservedState.state();
@@ -380,7 +377,6 @@ public static void main(final String... args) throws Exception {
380377
// Otherwise derive if from the node's id in state or
381378
.orElseGet(() -> canonicalEventStreamLoc(selfId.id(), state)),
382379
rosterHistory,
383-
platformStateFacade,
384380
hedera.stateRootFromVirtualMap(metrics))
385381
.withPlatformContext(platformContext)
386382
.withConfiguration(platformConfig)
@@ -445,18 +441,13 @@ private static String canonicalEventStreamLoc(@NonNull final AccountID accountId
445441
/**
446442
* Creates a canonical {@link Hedera} instance for the given node id and metrics.
447443
*
448-
* @param platformStateFacade an object to access the platform state
449444
* @param configuration the platform configuration instance to use when creating the new instance of state
450445
* @param metrics the platform metric instance to use when creating the new instance of state
451446
* @param time the time instance to use when creating the new instance of state
452447
* @return the {@link Hedera} instance
453448
*/
454449
public static Hedera newHedera(
455-
@NonNull final PlatformStateFacade platformStateFacade,
456-
@NonNull final Configuration configuration,
457-
@NonNull final Metrics metrics,
458-
@NonNull final Time time) {
459-
requireNonNull(platformStateFacade);
450+
@NonNull final Configuration configuration, @NonNull final Metrics metrics, @NonNull final Time time) {
460451
requireNonNull(configuration);
461452
requireNonNull(metrics);
462453
requireNonNull(time);
@@ -476,7 +467,6 @@ public static Hedera newHedera(
476467
metrics, ForkJoinPool.commonPool(), appContext, new HistoryLibraryImpl(), bootstrapConfig),
477468
TssBlockHashSigner::new,
478469
metrics,
479-
platformStateFacade,
480470
() -> new VirtualMapState(configuration, metrics));
481471
}
482472

hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/BlockStreamManagerImpl.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import static com.hedera.node.app.records.BlockRecordService.EPOCH;
2222
import static com.hedera.node.app.records.impl.BlockRecordInfoUtils.HASH_SIZE;
2323
import static com.hedera.node.app.workflows.handle.HandleWorkflow.ALERT_MESSAGE;
24+
import static com.swirlds.platform.state.service.PlatformStateUtils.creationSemanticVersionOf;
2425
import static java.util.Objects.requireNonNull;
2526
import static org.hiero.consensus.model.quiescence.QuiescenceCommand.QUIESCE;
2627

@@ -69,7 +70,6 @@
6970
import com.swirlds.config.api.Configuration;
7071
import com.swirlds.metrics.api.Counter;
7172
import com.swirlds.metrics.api.Metrics;
72-
import com.swirlds.platform.state.service.PlatformStateFacade;
7373
import com.swirlds.platform.state.service.PlatformStateService;
7474
import com.swirlds.platform.state.service.ReadablePlatformStateStore;
7575
import com.swirlds.platform.state.service.schemas.V0540PlatformStateSchema;
@@ -140,7 +140,6 @@ public class BlockStreamManagerImpl implements BlockStreamManager {
140140
private final ConfigProvider configProvider;
141141
private final Supplier<BlockItemWriter> writerSupplier;
142142
private final BoundaryStateChangeListener boundaryStateChangeListener;
143-
private final PlatformStateFacade platformStateFacade;
144143

145144
private final Lifecycle lifecycle;
146145
private final BlockHashManager blockHashManager;
@@ -252,7 +251,6 @@ public BlockStreamManagerImpl(
252251
@NonNull final QuiescenceController quiescenceController,
253252
@NonNull final InitialStateHash initialStateHash,
254253
@NonNull final SemanticVersion version,
255-
@NonNull final PlatformStateFacade platformStateFacade,
256254
@NonNull final Lifecycle lifecycle,
257255
@NonNull final QuiescedHeartbeat quiescedHeartbeat,
258256
@NonNull final Metrics metrics) {
@@ -263,7 +261,6 @@ public BlockStreamManagerImpl(
263261
this.writerSupplier = requireNonNull(writerSupplier);
264262
this.executor = (ForkJoinPool) requireNonNull(executor);
265263
this.boundaryStateChangeListener = requireNonNull(boundaryStateChangeListener);
266-
this.platformStateFacade = requireNonNull(platformStateFacade);
267264
this.lifecycle = requireNonNull(lifecycle);
268265
this.configProvider = requireNonNull(configProvider);
269266
this.quiescedHeartbeat = requireNonNull(quiescedHeartbeat);
@@ -419,7 +416,7 @@ public void startRound(@NonNull final Round round, @NonNull final State state) {
419416
final var header = BlockHeader.newBuilder()
420417
.number(blockNumber)
421418
.hashAlgorithm(SHA2_384)
422-
.softwareVersion(platformStateFacade.creationSemanticVersionOf(state))
419+
.softwareVersion(creationSemanticVersionOf(state))
423420
.blockTimestamp(blockTimestamp)
424421
.hapiProtoVersion(hapiVersion);
425422
worker.addItem(BlockItem.newBuilder().blockHeader(header).build());
@@ -712,8 +709,7 @@ public boolean endRound(@NonNull final State state, final long roundNum) {
712709
"Writing network info to disk @ {} (REASON = {})",
713710
exportPath.toAbsolutePath(),
714711
diskNetworkExport);
715-
DiskStartupNetworks.writeNetworkInfo(
716-
state, exportPath, EnumSet.allOf(InfoType.class), platformStateFacade);
712+
DiskStartupNetworks.writeNetworkInfo(state, exportPath, EnumSet.allOf(InfoType.class));
717713
}
718714

719715
// Clear the eventIndexInBlock map for the next block

hedera-node/hedera-app/src/main/java/com/hedera/node/app/info/DiskStartupNetworks.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
import static com.hedera.hapi.util.HapiUtils.parseAccountFromLegacy;
55
import static com.swirlds.platform.builder.PlatformBuildConstants.DEFAULT_CONFIG_FILE_NAME;
6+
import static com.swirlds.platform.state.service.PlatformStateUtils.roundOf;
67
import static java.util.Objects.requireNonNull;
78
import static org.hiero.consensus.roster.RosterRetriever.buildRoster;
89

@@ -26,7 +27,6 @@
2627
import com.swirlds.platform.config.AddressBookConfig;
2728
import com.swirlds.platform.config.legacy.LegacyConfigPropertiesLoader;
2829
import com.swirlds.platform.crypto.CryptoStatic;
29-
import com.swirlds.platform.state.service.PlatformStateFacade;
3030
import com.swirlds.state.State;
3131
import edu.umd.cs.findbugs.annotations.NonNull;
3232
import java.io.IOException;
@@ -187,15 +187,12 @@ public Network migrationNetworkOrThrow(@NonNull final Configuration platformConf
187187
* @param path the path to write the JSON network information to.
188188
*/
189189
public static void writeNetworkInfo(
190-
@NonNull final State state,
191-
@NonNull final Path path,
192-
@NonNull final Set<InfoType> infoTypes,
193-
@NonNull PlatformStateFacade platformStateFacade) {
190+
@NonNull final State state, @NonNull final Path path, @NonNull final Set<InfoType> infoTypes) {
194191
requireNonNull(state);
195192
final var entityIdStore = new ReadableEntityIdStoreImpl(state.getReadableStates(EntityIdService.NAME));
196193
final var nodeStore =
197194
new ReadableNodeStoreImpl(state.getReadableStates(AddressBookService.NAME), entityIdStore);
198-
final long round = platformStateFacade.roundOf(state);
195+
final long round = roundOf(state);
199196
Optional.ofNullable(RosterRetriever.retrieveActive(state, round)).ifPresent(activeRoster -> {
200197
final var network = Network.newBuilder();
201198
final List<NodeMetadata> nodeMetadata = new ArrayList<>();

hedera-node/hedera-app/src/main/java/com/hedera/node/app/services/OrderedServiceMigrator.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import com.hedera.node.app.spi.migrate.StartupNetworks;
1212
import com.hedera.node.app.state.merkle.MerkleSchemaRegistry;
1313
import com.swirlds.config.api.Configuration;
14-
import com.swirlds.platform.state.service.PlatformStateFacade;
1514
import com.swirlds.state.MerkleNodeState;
1615
import com.swirlds.state.lifecycle.SchemaRegistry;
1716
import com.swirlds.state.lifecycle.Service;
@@ -50,7 +49,6 @@ public class OrderedServiceMigrator implements ServiceMigrator {
5049
* @param startupNetworks The startup networks to use for the migrations
5150
* @param storeMetricsService The store metrics service to use for the migrations
5251
* @param configProvider The config provider to use for the migrations
53-
* @param platformStateFacade The facade class to access platform state
5452
* @return The list of state changes that occurred during the migrations
5553
*/
5654
@Override
@@ -63,8 +61,7 @@ public List<StateChanges.Builder> doMigrations(
6361
@NonNull final Configuration platformConfig,
6462
@NonNull final StartupNetworks startupNetworks,
6563
@NonNull final StoreMetricsServiceImpl storeMetricsService,
66-
@NonNull final ConfigProviderImpl configProvider,
67-
@NonNull final PlatformStateFacade platformStateFacade) {
64+
@NonNull final ConfigProviderImpl configProvider) {
6865
requireNonNull(state);
6966
requireNonNull(currentVersion);
7067
requireNonNull(appConfig);
@@ -87,8 +84,7 @@ public List<StateChanges.Builder> doMigrations(
8784
platformConfig,
8885
sharedValues,
8986
migrationStateChanges,
90-
startupNetworks,
91-
platformStateFacade);
87+
startupNetworks);
9288
});
9389
return migrationStateChanges.getStateChanges();
9490
}

hedera-node/hedera-app/src/main/java/com/hedera/node/app/services/ServiceMigrator.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import com.hedera.node.app.metrics.StoreMetricsServiceImpl;
88
import com.hedera.node.app.spi.migrate.StartupNetworks;
99
import com.swirlds.config.api.Configuration;
10-
import com.swirlds.platform.state.service.PlatformStateFacade;
1110
import com.swirlds.state.MerkleNodeState;
1211
import com.swirlds.state.State;
1312
import edu.umd.cs.findbugs.annotations.NonNull;
@@ -32,7 +31,6 @@ public interface ServiceMigrator {
3231
* @param startupNetworks The startup networks to use for the migrations
3332
* @param storeMetricsService The store metrics service to use for the migrations
3433
* @param configProvider The config provider to use for the migrations
35-
* @param platformStateFacade The facade object to access platform state properties
3634
* @return The list of builders for state changes that occurred during the migrations
3735
*/
3836
List<StateChanges.Builder> doMigrations(
@@ -44,6 +42,5 @@ List<StateChanges.Builder> doMigrations(
4442
@NonNull Configuration platformConfig,
4543
@NonNull StartupNetworks startupNetworks,
4644
@NonNull StoreMetricsServiceImpl storeMetricsService,
47-
@NonNull ConfigProviderImpl configProvider,
48-
@NonNull PlatformStateFacade platformStateFacade);
45+
@NonNull ConfigProviderImpl configProvider);
4946
}

0 commit comments

Comments
 (0)