Skip to content

Commit b11b628

Browse files
authored
feat: Reduce services-hedera's usage of PlatformContext (#13652)
1 parent bc59304 commit b11b628

File tree

5 files changed

+21
-32
lines changed

5 files changed

+21
-32
lines changed

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,8 @@ public final class Hedera implements SwirldMain {
189189
*/
190190
private PlatformStatus platformStatus = STARTING_UP;
191191

192+
private Metrics metrics;
193+
192194
/*==================================================================================================================
193195
*
194196
* Hedera Object Construction.
@@ -319,7 +321,7 @@ public void onStateInitialized(
319321
throw new IllegalStateException("Platform should never change once set");
320322
}
321323
this.platform = requireNonNull(platform);
322-
final var metrics = platform.getContext().getMetrics();
324+
this.metrics = platform.getContext().getMetrics();
323325
this.configProvider = new ConfigProviderImpl(trigger == GENESIS, metrics);
324326
logger.info(
325327
"Initializing Hedera state version {} in {} mode with trigger {} and previous version {}",
@@ -678,6 +680,7 @@ private void initializeDagger(
678680
.currentPlatformStatus(new CurrentPlatformStatusImpl(platform))
679681
.servicesRegistry(servicesRegistry)
680682
.instantSource(InstantSource.system())
683+
.metrics(metrics)
681684
.build();
682685
daggerApp.workingStateAccessor().setHederaState(state);
683686
daggerApp.platformStateAccessor().setPlatformState(platformState);

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
import com.hedera.node.app.workflows.query.QueryWorkflow;
4848
import com.hedera.node.config.ConfigProvider;
4949
import com.swirlds.common.crypto.Cryptography;
50+
import com.swirlds.metrics.api.Metrics;
5051
import com.swirlds.platform.listeners.ReconnectCompleteListener;
5152
import com.swirlds.platform.listeners.StateWriteToDiskCompleteListener;
5253
import com.swirlds.platform.system.InitTrigger;
@@ -157,6 +158,9 @@ interface Builder {
157158
@BindsInstance
158159
Builder softwareVersion(SoftwareVersion softwareVersion);
159160

161+
@BindsInstance
162+
Builder metrics(Metrics metrics);
163+
160164
HederaInjectionComponent build();
161165
}
162166
}

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

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,10 @@
3232
import com.hedera.node.app.services.OrderedServiceMigrator;
3333
import com.hedera.node.app.services.ServicesRegistryImpl;
3434
import com.hedera.node.app.state.merkle.MerkleHederaState;
35+
import com.swirlds.base.time.Time;
3536
import com.swirlds.common.constructable.ConstructableRegistry;
3637
import com.swirlds.common.constructable.RuntimeConstructable;
38+
import com.swirlds.common.crypto.CryptographyFactory;
3739
import com.swirlds.common.io.utility.FileUtils;
3840
import com.swirlds.common.platform.NodeId;
3941
import com.swirlds.config.api.Configuration;
@@ -174,10 +176,15 @@ public static void main(final String... args) throws Exception {
174176
final SoftwareVersion version = hedera.getSoftwareVersion();
175177
logger.info("Starting node {} with version {}", selfId, version);
176178

177-
final PlatformBuilder builder =
179+
final PlatformBuilder platformBuilder =
178180
PlatformBuilder.create(Hedera.APP_NAME, Hedera.SWIRLD_NAME, version, hedera::newState, selfId);
179181

180-
builder.withConfiguration(buildConfiguration());
182+
// Add additional configuration to the platform
183+
final Configuration configuration = buildConfiguration();
184+
platformBuilder.withConfiguration(configuration);
185+
186+
platformBuilder.withCryptography(CryptographyFactory.create());
187+
platformBuilder.withTime(Time.getCurrent());
181188

182189
// IMPORTANT: A surface-level reading of this method will undersell the centrality
183190
// of the Hedera instance. It is actually omnipresent throughout both the startup
@@ -202,7 +209,7 @@ public static void main(final String... args) throws Exception {
202209
// whose object graph roots include the Ingest, PreHandle, Handle, and Query workflows;
203210
// as well as other infrastructure components that need to be initialized or accessed
204211
// at specific points in the Swirlds application lifecycle.
205-
final Platform platform = builder.build();
212+
final Platform platform = platformBuilder.build();
206213
hedera.init(platform, selfId);
207214
platform.start();
208215
hedera.run();

hedera-node/hedera-app/src/main/java/com/hedera/node/app/metrics/MetricsInjectionModule.java

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,21 +18,13 @@
1818

1919
import com.hedera.node.app.spi.metrics.StoreMetricsService;
2020
import com.swirlds.metrics.api.Metrics;
21-
import com.swirlds.platform.system.Platform;
2221
import dagger.Binds;
2322
import dagger.Module;
24-
import dagger.Provides;
2523
import edu.umd.cs.findbugs.annotations.NonNull;
26-
import javax.inject.Singleton;
2724

2825
/** A Dagger module for providing dependencies based on {@link Metrics}. */
2926
@Module
3027
public interface MetricsInjectionModule {
31-
@Provides
32-
@Singleton
33-
static Metrics provideMetrics(@NonNull final Platform platform) {
34-
return platform.getContext().getMetrics();
35-
}
3628

3729
@Binds
3830
StoreMetricsService bindStoreMetricsService(@NonNull StoreMetricsServiceImpl storeMetricsService);

hedera-node/hedera-app/src/test/java/com/hedera/node/app/components/IngestComponentTest.java

Lines changed: 3 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,14 @@
1717
package com.hedera.node.app.components;
1818

1919
import static org.junit.jupiter.api.Assertions.assertNotNull;
20-
import static org.mockito.BDDMockito.given;
2120
import static org.mockito.Mockito.lenient;
2221
import static org.mockito.Mockito.mock;
23-
import static org.mockito.Mockito.when;
2422

2523
import com.hedera.hapi.node.base.AccountID;
2624
import com.hedera.hapi.node.base.SemanticVersion;
2725
import com.hedera.node.app.DaggerHederaInjectionComponent;
2826
import com.hedera.node.app.HederaInjectionComponent;
2927
import com.hedera.node.app.config.ConfigProviderImpl;
30-
import com.hedera.node.app.fees.congestion.ThrottleMultiplier;
31-
import com.hedera.node.app.fees.congestion.UtilizationScaledThrottleMultiplier;
3228
import com.hedera.node.app.fixtures.state.FakeHederaState;
3329
import com.hedera.node.app.info.SelfNodeInfoImpl;
3430
import com.hedera.node.app.services.ServicesRegistry;
@@ -38,6 +34,7 @@
3834
import com.hedera.pbj.runtime.io.buffer.Bytes;
3935
import com.swirlds.common.context.PlatformContext;
4036
import com.swirlds.common.crypto.CryptographyHolder;
37+
import com.swirlds.common.metrics.noop.NoOpMetrics;
4138
import com.swirlds.config.api.Configuration;
4239
import com.swirlds.metrics.api.Metrics;
4340
import com.swirlds.platform.system.InitTrigger;
@@ -58,26 +55,14 @@ class IngestComponentTest {
5855
@Mock
5956
private Platform platform;
6057

61-
@Mock
62-
private PlatformContext platformContext;
63-
64-
@Mock
65-
private Metrics metrics;
66-
67-
@Mock
68-
UtilizationScaledThrottleMultiplier genericFeeMultiplier;
69-
70-
@Mock
71-
ThrottleMultiplier gasFeeMultiplier;
72-
7358
private HederaInjectionComponent app;
7459

7560
@BeforeEach
7661
void setUp() {
7762
final Configuration configuration = HederaTestConfigBuilder.createConfig();
7863
final PlatformContext platformContext = mock(PlatformContext.class);
64+
final Metrics metrics = new NoOpMetrics();
7965
lenient().when(platformContext.getConfiguration()).thenReturn(configuration);
80-
when(platform.getContext()).thenReturn(platformContext);
8166

8267
final var selfNodeInfo = new SelfNodeInfoImpl(
8368
1L,
@@ -108,6 +93,7 @@ void setUp() {
10893
.servicesRegistry(mock(ServicesRegistry.class))
10994
.instantSource(InstantSource.system())
11095
.softwareVersion(mock(HederaSoftwareVersion.class))
96+
.metrics(metrics)
11197
.build();
11298

11399
final var state = new FakeHederaState();
@@ -117,9 +103,6 @@ void setUp() {
117103

118104
@Test
119105
void objectGraphRootsAreAvailable() {
120-
given(platform.getContext()).willReturn(platformContext);
121-
given(platformContext.getMetrics()).willReturn(metrics);
122-
123106
final IngestInjectionComponent subject =
124107
app.ingestComponentFactory().get().create();
125108

0 commit comments

Comments
 (0)