Skip to content

Commit

Permalink
chore: 11765 Migrate Merkle state classes to swirlds-platform-core
Browse files Browse the repository at this point in the history
…module (#12570)

Signed-off-by: Ivan Malygin <ivan@swirldslabs.com>
Signed-off-by: Jendrik Johannes <jendrik.johannes@gmail.com>
Co-authored-by: Jendrik Johannes <jendrik.johannes@gmail.com>
  • Loading branch information
imalygin and jjohannes committed May 13, 2024
1 parent 1722fef commit 5e74db5
Show file tree
Hide file tree
Showing 350 changed files with 3,788 additions and 1,347 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,11 @@ sourceSets.all {
// Remove 'classes' tasks from 'build' group to keep it cleaned up
tasks.named(classesTaskName) { group = null }

configurations.getByName(compileClasspathConfigurationName) { extendsFrom(internal.get()) }
configurations.getByName(compileClasspathConfigurationName) {
extendsFrom(internal.get())
@Suppress("UnstableApiUsage")
shouldResolveConsistentlyWith(configurations.getByName(runtimeClasspathConfigurationName))
}
configurations.getByName(runtimeClasspathConfigurationName) { extendsFrom(internal.get()) }

dependencies {
Expand Down
3 changes: 1 addition & 2 deletions hedera-dependency-versions/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -101,8 +101,7 @@ moduleInfo {
version("org.hyperledger.besu.evm", besuVersion)
version("org.hyperledger.besu.nativelib.secp256k1", besuNativeVersion)
version("org.json", "20231013")
version("org.junit.jupiter.api", "5.9.1")
version("org.junit.platform.engine", "1.9.1")
version("org.junit.jupiter.api", "5.10.1")
version("org.junitpioneer", "2.0.1")
version("org.mockito", mockitoVersion)
version("org.mockito.junit.jupiter", mockitoVersion)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,18 +29,18 @@
import com.hedera.node.app.service.mono.state.virtual.ContractKey;
import com.hedera.node.app.service.mono.utils.NonAtomicReference;
import com.hedera.node.app.spi.state.StateDefinition;
import com.hedera.node.app.spi.state.WritableKVState;
import com.hedera.node.app.spi.state.WritableKVStateBase;
import com.hedera.node.app.state.merkle.StateMetadata;
import com.hedera.node.app.state.merkle.memory.InMemoryKey;
import com.hedera.node.app.state.merkle.memory.InMemoryValue;
import com.hedera.node.app.state.merkle.memory.InMemoryWritableKVState;
import com.hedera.services.cli.signedstate.DumpStateCommand.EmitSummary;
import com.hedera.services.cli.signedstate.DumpStateCommand.WithMigration;
import com.hedera.services.cli.signedstate.DumpStateCommand.WithSlots;
import com.hedera.services.cli.signedstate.DumpStateCommand.WithValidation;
import com.hedera.services.cli.signedstate.SignedStateCommand.Verbosity;
import com.swirlds.merkle.map.MerkleMap;
import com.swirlds.platform.state.merkle.memory.InMemoryKey;
import com.swirlds.platform.state.merkle.memory.InMemoryValue;
import com.swirlds.platform.state.merkle.memory.InMemoryWritableKVState;
import com.swirlds.platform.state.spi.WritableKVStateBase;
import com.swirlds.state.spi.WritableKVState;
import edu.umd.cs.findbugs.annotations.NonNull;
import edu.umd.cs.findbugs.annotations.Nullable;
import java.io.FileNotFoundException;
Expand Down Expand Up @@ -272,8 +272,12 @@ WritableKVState<SlotKey, SlotValue> getMigratedContractStore() {
final var contractMerkleMap =
new NonAtomicReference<MerkleMap<InMemoryKey<SlotKey>, InMemoryValue<SlotKey, SlotValue>>>(
new MerkleMap<>(expectedNumberOfSlots));
final var toStore = new NonAtomicReference<WritableKVState<SlotKey, SlotValue>>(
new InMemoryWritableKVState<>(contractStoreSchemaMetadata, contractMerkleMap.get()));
final var toStore = new NonAtomicReference<WritableKVState<SlotKey, SlotValue>>(new InMemoryWritableKVState<>(
contractStoreStateDefinition.stateKey(),
contractStoreSchemaMetadata.inMemoryValueClassId(),
contractStoreStateDefinition.keyCodec(),
contractStoreStateDefinition.valueCodec(),
contractMerkleMap.get()));

final var flushCounter = new AtomicInteger();

Expand All @@ -283,7 +287,12 @@ WritableKVState<SlotKey, SlotValue> getMigratedContractStore() {
// Copy the underlying map, which does the flush
contractMerkleMap.set(contractMerkleMap.get().copy());
// Create a new store to go on with
toStore.set(new InMemoryWritableKVState<>(contractStoreSchemaMetadata, contractMerkleMap.get()));
toStore.set(new InMemoryWritableKVState<>(
contractStoreStateDefinition.stateKey(),
contractStoreSchemaMetadata.inMemoryValueClassId(),
contractStoreStateDefinition.keyCodec(),
contractStoreStateDefinition.valueCodec(),
contractMerkleMap.get()));

flushCounter.incrementAndGet();

Expand Down
1 change: 1 addition & 0 deletions hedera-node/cli-clients/src/main/java/module-info.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
requires com.swirlds.config.extensions;
requires com.swirlds.fchashmap;
requires com.swirlds.merkle;
requires com.swirlds.state.api;
requires com.swirlds.virtualmap;
requires io.github.classgraph;
requires org.apache.commons.lang3;
Expand Down
1 change: 1 addition & 0 deletions hedera-node/hedera-app-spi/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ description = "Hedera Application - SPI"

testModuleInfo {
requires("com.hedera.node.app.spi")
requires("com.swirlds.platform.core.test.fixtures")
requires("org.apache.commons.lang3")
requires("org.assertj.core")
requires("org.junit.jupiter.api")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@
package com.hedera.node.app.spi.api;

import com.hedera.node.app.spi.metrics.StoreMetricsService;
import com.hedera.node.app.spi.state.WritableStates;
import com.swirlds.config.api.Configuration;
import com.swirlds.state.spi.WritableStates;
import edu.umd.cs.findbugs.annotations.NonNull;

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

package com.hedera.node.app.spi.metrics;

import com.swirlds.state.spi.metrics.StoreMetrics;
import edu.umd.cs.findbugs.annotations.NonNull;

public interface StoreMetricsService {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
package com.hedera.node.app.spi.state;

import com.hedera.node.app.spi.workflows.HandleContext.SavepointStack;
import com.swirlds.state.spi.WritableStates;

/**
* A {@link WritableStates} implementation at the "bottom" of a {@link SavepointStack}; i.e., an
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@

package com.hedera.node.app.spi.state;

import com.swirlds.state.spi.ReadableKVState;
import com.swirlds.state.spi.ReadableQueueState;
import com.swirlds.state.spi.ReadableSingletonState;
import com.swirlds.state.spi.ReadableStates;
import edu.umd.cs.findbugs.annotations.NonNull;
import java.util.Collections;
import java.util.Objects;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@

package com.hedera.node.app.spi.state;

import com.swirlds.state.spi.WritableKVState;
import com.swirlds.state.spi.WritableQueueState;
import com.swirlds.state.spi.WritableSingletonState;
import com.swirlds.state.spi.WritableStates;
import edu.umd.cs.findbugs.annotations.NonNull;
import java.util.Collections;
import java.util.Objects;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@

package com.hedera.node.app.spi.state;

import com.swirlds.state.spi.ReadableKVState;
import com.swirlds.state.spi.ReadableQueueState;
import com.swirlds.state.spi.ReadableSingletonState;
import com.swirlds.state.spi.ReadableStates;
import edu.umd.cs.findbugs.annotations.NonNull;
import java.util.Objects;
import java.util.Set;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@

package com.hedera.node.app.spi.state;

import com.swirlds.state.spi.WritableKVState;
import com.swirlds.state.spi.WritableQueueState;
import com.swirlds.state.spi.WritableSingletonState;
import com.swirlds.state.spi.WritableStates;
import edu.umd.cs.findbugs.annotations.NonNull;
import java.util.Objects;
import java.util.Set;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@
import com.hedera.node.app.spi.info.NetworkInfo;
import com.hedera.node.app.spi.workflows.record.GenesisRecordsBuilder;
import com.swirlds.config.api.Configuration;
import com.swirlds.state.spi.ReadableStates;
import com.swirlds.state.spi.WritableStates;
import edu.umd.cs.findbugs.annotations.NonNull;
import edu.umd.cs.findbugs.annotations.Nullable;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@

import com.hedera.hapi.node.base.SemanticVersion;
import com.hedera.pbj.runtime.Codec;
import com.swirlds.state.spi.ReadableKVState;
import com.swirlds.state.spi.ReadableStates;
import edu.umd.cs.findbugs.annotations.NonNull;
import java.util.Collections;
import java.util.Objects;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,14 +25,6 @@
* {@link Service} to register all of its {@link Schema}s.
*/
public interface SchemaRegistry {
/**
* Register the given {@link Schema}. {@link Schema}s do not need to be registered in order.
*
* @param schema The {@link Schema} to register.
* @return a reference to this registry instance
*/
SchemaRegistry register(@NonNull Schema schema);

/**
* Register the given array of {@link Schema}s.
*
Expand All @@ -47,6 +39,14 @@ default SchemaRegistry registerAll(@NonNull Schema... schemas) {
return this;
}

/**
* Register the given {@link Schema}. {@link Schema}s do not need to be registered in order.
*
* @param schema The {@link Schema} to register.
* @return a reference to this registry instance
*/
SchemaRegistry register(@NonNull Schema schema);

/**
* Register the given array of {@link Schema}s.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
package com.hedera.node.app.spi.state;

import com.hedera.pbj.runtime.Codec;
import com.swirlds.state.spi.ReadableKVState;
import edu.umd.cs.findbugs.annotations.NonNull;
import edu.umd.cs.findbugs.annotations.Nullable;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@

package com.hedera.node.app.spi.state;

import com.swirlds.platform.state.spi.ReadableKVStateBase;
import com.swirlds.state.spi.ReadableKVState;
import edu.umd.cs.findbugs.annotations.NonNull;
import java.util.Iterator;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,9 @@

package com.hedera.node.app.spi.state;

import com.hedera.node.app.spi.metrics.StoreMetrics;
import com.swirlds.platform.state.spi.WritableKVStateBase;
import com.swirlds.state.spi.WritableKVState;
import com.swirlds.state.spi.metrics.StoreMetrics;
import edu.umd.cs.findbugs.annotations.NonNull;
import java.util.Iterator;
import java.util.Objects;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@

package com.hedera.node.app.spi.state;

import com.swirlds.platform.state.spi.WritableQueueStateBase;
import com.swirlds.state.spi.WritableQueueState;
import edu.umd.cs.findbugs.annotations.NonNull;
import java.util.Iterator;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@

package com.hedera.node.app.spi.state;

import com.swirlds.platform.state.spi.WritableSingletonStateBase;
import com.swirlds.state.spi.WritableSingletonState;
import edu.umd.cs.findbugs.annotations.NonNull;

/**
Expand Down
4 changes: 3 additions & 1 deletion hedera-node/hedera-app-spi/src/main/java/module-info.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,14 @@
requires transitive com.hedera.node.hapi;
requires transitive com.hedera.pbj.runtime;
requires transitive com.swirlds.config.api;
requires transitive com.swirlds.platform.core;
requires transitive com.swirlds.state.api;
requires static com.github.spotbugs.annotations;

exports com.hedera.node.app.spi;
exports com.hedera.node.app.spi.fees;
exports com.hedera.node.app.spi.api;
exports com.hedera.node.app.spi.info;
exports com.hedera.node.app.spi.state;
exports com.hedera.node.app.spi.key;
exports com.hedera.node.app.spi.numbers;
exports com.hedera.node.app.spi.workflows;
Expand All @@ -18,5 +19,6 @@
exports com.hedera.node.app.spi.validation;
exports com.hedera.node.app.spi.workflows.record;
exports com.hedera.node.app.spi.authorization;
exports com.hedera.node.app.spi.state;
exports com.hedera.node.app.spi.metrics;
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@
import com.hedera.hapi.node.base.KeyList;
import com.hedera.hapi.node.base.ThresholdKey;
import com.hedera.hapi.node.base.Timestamp;
import com.hedera.node.app.spi.fixtures.TestBase;
import com.hedera.pbj.runtime.io.buffer.Bytes;
import com.swirlds.platform.test.fixtures.state.TestBase;
import edu.umd.cs.findbugs.annotations.NonNull;
import java.time.Instant;
import java.util.stream.Stream;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy;

import com.swirlds.platform.test.fixtures.state.StateTestBase;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy;

import com.swirlds.platform.test.fixtures.state.StateTestBase;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,10 @@
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy;

import com.hedera.node.app.spi.fixtures.state.MapReadableStates;
import com.swirlds.platform.test.fixtures.state.MapReadableStates;
import com.swirlds.platform.test.fixtures.state.StateTestBase;
import com.swirlds.state.spi.ReadableStates;
import edu.umd.cs.findbugs.annotations.NonNull;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
Expand Down Expand Up @@ -136,6 +139,17 @@ void nonNullSingletonKey() {
void nonNullQueueKey() {
assertThatThrownBy(() -> states.getQueue(UNKNOWN_KEY)).isInstanceOf(IllegalArgumentException.class);
}

@NonNull
protected MapReadableStates allReadableStates() {
return MapReadableStates.builder()
.state(readableFruitState())
.state(readableCountryState())
.state(readableAnimalState())
.state(readableSTEAMState())
.state(readableSpaceState())
.build();
}
}

@Nested
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@
import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy;

import com.hedera.node.app.spi.fixtures.state.MapWritableStates;
import com.swirlds.platform.test.fixtures.state.StateTestBase;
import com.swirlds.state.spi.WritableStates;
import edu.umd.cs.findbugs.annotations.NonNull;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
Expand Down Expand Up @@ -124,6 +127,17 @@ void nonNullKey() {
void nonNullSingletonKey() {
assertThatThrownBy(() -> states.getSingleton(UNKNOWN_KEY)).isInstanceOf(IllegalArgumentException.class);
}

@NonNull
protected MapWritableStates allWritableStates() {
return MapWritableStates.builder()
.state(writableAnimalState())
.state(writableCountryState())
.state(writableAnimalState())
.state(writableSTEAMState())
.state(writableSpaceState())
.build();
}
}

@Nested
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import com.hedera.hapi.node.base.SemanticVersion;
import com.hedera.node.app.spi.fixtures.state.MapWritableStates;
import com.hedera.node.app.spi.fixtures.state.TestSchema;
import com.swirlds.platform.test.fixtures.state.StateTestBase;
import java.util.ArrayList;
import java.util.Collections;
import org.junit.jupiter.api.Disabled;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@

package com.hedera.node.app.spi.state;

import com.swirlds.platform.state.spi.ReadableKVStateBase;
import com.swirlds.platform.state.spi.ReadableKVStateBaseTest;
import java.util.Map;

/**
Expand Down

0 comments on commit 5e74db5

Please sign in to comment.