Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GraalVM implementation #305

Draft
wants to merge 15 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@
import com.bloxbean.cardano.yaci.store.events.internal.CommitEvent;
import com.bloxbean.cardano.yaci.store.events.internal.ReadyForBalanceAggregationEvent;
import com.bloxbean.cardano.yaci.store.utxo.domain.AddressUtxoEvent;
import jakarta.annotation.PostConstruct;
import lombok.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Qualifier;
Expand Down Expand Up @@ -89,9 +88,10 @@ public AccountBalanceProcessor(AccountBalanceStorage accountBalanceStorage,
this.parallelExecutor = parallelExecutor;
this.transactionManager = transactionManager;
this.metricCollectorService = metricCollectorService;

init();
}

@PostConstruct
void init() {
transactionTemplate = new TransactionTemplate(transactionManager);
transactionTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@
import com.bloxbean.cardano.yaci.store.common.service.CursorService;
import com.bloxbean.cardano.yaci.store.core.service.EraService;
import com.bloxbean.cardano.yaci.store.events.EpochChangeEvent;
import jakarta.annotation.PostConstruct;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.jooq.DSLContext;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
Expand All @@ -27,7 +25,6 @@
havingValue = "true",
matchIfMissing = false
)
@RequiredArgsConstructor
@Slf4j
public class BalancePruningService {
private final CursorService cursorService;
Expand All @@ -40,7 +37,17 @@ public class BalancePruningService {

private AtomicBoolean isPruning = new AtomicBoolean(false);

@PostConstruct
public BalancePruningService(CursorService cursorService, EraService eraService, AccountStoreProperties accountStoreProperties,
DSLContext dslContext, PlatformTransactionManager transactionManager) {
this.cursorService = cursorService;
this.eraService = eraService;
this.accountStoreProperties = accountStoreProperties;
this.dslContext = dslContext;
this.transactionManager = transactionManager;

init();
}

public void init() {
log.info("<< Balance Pruning Service Enabled >>");
transactionTemplate = new TransactionTemplate(transactionManager);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,22 @@
import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.Gauge;
import io.micrometer.core.instrument.MeterRegistry;
import jakarta.annotation.PostConstruct;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.concurrent.atomic.AtomicLong;

@Service
@RequiredArgsConstructor
public class MetricCollectorService {
private final MeterRegistry meterRegistry;
private Counter negativeBalanceAddressCounter;
private Counter negativeBalanceStakeAddressCounter;
private AtomicLong lastAccountBalanceProcessedBlock;

@PostConstruct
public MetricCollectorService(MeterRegistry meterRegistry) {
this.meterRegistry = meterRegistry;
init();
}

private void init() {
setupMetrics();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,7 @@
import com.bloxbean.cardano.yaci.store.common.model.Order;
import com.bloxbean.cardano.yaci.store.common.util.ListUtil;
import com.bloxbean.cardano.yaci.store.events.internal.CommitEvent;
import jakarta.annotation.PostConstruct;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.jooq.DSLContext;
import org.springframework.beans.factory.annotation.Value;
Expand All @@ -37,7 +35,6 @@
import static com.bloxbean.cardano.yaci.store.account.jooq.Tables.ADDRESS_BALANCE;
import static com.bloxbean.cardano.yaci.store.account.jooq.Tables.STAKE_ADDRESS_BALANCE;

@RequiredArgsConstructor
@Slf4j
public class AccountBalanceStorageImpl implements AccountBalanceStorage {
private final AddressBalanceRepository addressBalanceRepository;
Expand All @@ -54,8 +51,18 @@ public class AccountBalanceStorageImpl implements AccountBalanceStorage {
private Map<Pair<String, String>, Long> addressBalanceKeysToDeleteCache = new ConcurrentHashMap<>();
private Map<String, Long> stakeBalanceKeysToDeleteCache = new ConcurrentHashMap<>();

@PostConstruct
public void postConstruct() {
public AccountBalanceStorageImpl(AddressBalanceRepository addressBalanceRepository, StakeBalanceRepository stakeBalanceRepository,
DSLContext dsl, StoreProperties storeProperties, AccountStoreProperties accountStoreProperties) {
this.addressBalanceRepository = addressBalanceRepository;
this.stakeBalanceRepository = stakeBalanceRepository;
this.dsl = dsl;
this.storeProperties = storeProperties;
this.accountStoreProperties = accountStoreProperties;

init();
}

public void init() {
this.dsl.settings().setBatchSize(storeProperties.getJooqWriteBatchSize());
}

Expand Down
2 changes: 1 addition & 1 deletion applications/admin/build.gradle
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
plugins {
id 'org.springframework.boot' version '3.2.2'
id 'org.springframework.boot' version "${springBootVersion}"
}

dependencies {
Expand Down
2 changes: 1 addition & 1 deletion applications/aggregation-app/build.gradle
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
plugins {
id 'org.springframework.boot' version '3.2.2'
id 'org.springframework.boot' version "${springBootVersion}"
}

dependencies {
Expand Down
45 changes: 44 additions & 1 deletion applications/all/build.gradle
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
import org.gradle.internal.os.OperatingSystem

plugins {
id 'org.springframework.boot' version '3.2.2'
id 'org.springframework.boot' version "${springBootVersion}"
id 'org.graalvm.buildtools.native' version "${graalvmBuildToolVersion}"
}

dependencies {
Expand Down Expand Up @@ -31,3 +34,43 @@ dependencies {

}

graalvmNative {
binaries {
main {
imageName = 'yaci-store-all'
buildArgs = ['-H:+ReportExceptionStackTraces', '-H:Class=com.bloxbean.cardano.yaci.store.app.YaciStoreApplication']
sharedLibrary = false

def os = OperatingSystem.current()
def vendor = System.getProperty('java.vendor')
def version = System.getProperty('java.version')
def vmName = System.getProperty('java.vm.name')

// Check for Oracle GraalVM
if (vendor.contains("Oracle") && !vmName.contains("Community")) {
// Oracle GraalVM detected, set GC to G1 for Linux systems
if (os.isLinux()) {
buildArgs.add('--gc=G1')
println "Oracle GraalVM detected, setting GC to G1"
} else {
//use default
println "Oracle GraalVM detected, setting GC to default"
}
}

// Check for Liberica NIK
else if (vendor.contains("BellSoft") || vendor.contains("Liberica")) {
// Liberica NIK detected, set GC to parallel for all environments
buildArgs.add('--gc=parallel')
println "Liberica NIK detected, setting GC to parallel"
}
}
}

}

java {
toolchain {
languageVersion = JavaLanguageVersion.of(21)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
[
{
"name" : "io.netty.channel.kqueue.KQueueStaticallyReferencedJniMethods"
},
{
"name" : "io.netty.channel.kqueue.Native"
},
{
"name" : "io.netty.channel.kqueue.BsdSocket"
}
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
Args = --initialize-at-run-time=io.netty.channel.epoll.Epoll \
--initialize-at-run-time=io.netty.channel.epoll.Native \
--initialize-at-run-time=io.netty.channel.epoll.EpollEventLoop \
--initialize-at-run-time=io.netty.channel.epoll.EpollEventArray \
--initialize-at-run-time=io.netty.channel.DefaultFileRegion \
--initialize-at-run-time=io.netty.channel.kqueue.KQueueEventArray \
--initialize-at-run-time=io.netty.channel.kqueue.KQueueEventLoop \
--initialize-at-run-time=io.netty.channel.kqueue.Native \
--initialize-at-run-time=io.netty.channel.unix.Errors \
--initialize-at-run-time=io.netty.channel.unix.IovArray \
--initialize-at-run-time=io.netty.channel.unix.Limits \
--initialize-at-run-time=io.netty.util.internal.logging.Log4JLogger \
--initialize-at-run-time=io.netty.channel.kqueue.KQueue \
--initialize-at-run-time=io.netty.handler.ssl.BouncyCastleAlpnSslUtils
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
Args = --static --libc=musl --initialize-at-run-time=io.netty.channel.epoll.Epoll \
--initialize-at-run-time=io.netty.channel.epoll.Native \
--initialize-at-run-time=io.netty.channel.epoll.EpollEventLoop \
--initialize-at-run-time=io.netty.channel.epoll.EpollEventArray \
--initialize-at-run-time=io.netty.channel.DefaultFileRegion \
--initialize-at-run-time=io.netty.channel.kqueue.KQueueEventArray \
--initialize-at-run-time=io.netty.channel.kqueue.KQueueEventLoop \
--initialize-at-run-time=io.netty.channel.kqueue.Native \
--initialize-at-run-time=io.netty.channel.unix.Errors \
--initialize-at-run-time=io.netty.channel.unix.IovArray \
--initialize-at-run-time=io.netty.channel.unix.Limits \
--initialize-at-run-time=io.netty.util.internal.logging.Log4JLogger \
--initialize-at-run-time=io.netty.channel.kqueue.KQueue \
--initialize-at-run-time=io.netty.handler.ssl.BouncyCastleAlpnSslUtils
Loading