diff --git a/chain/build.gradle b/chain/build.gradle index 5923f3bdd..6ee0b27e3 100644 --- a/chain/build.gradle +++ b/chain/build.gradle @@ -6,7 +6,7 @@ dependencies { implementation project(':db:core') implementation project(':pow:core') api project(':ssz') - implementation project(':util') + implementation project(':util:core') implementation 'com.google.guava:guava' implementation 'io.projectreactor:reactor-core' diff --git a/consensus/build.gradle b/consensus/build.gradle index 641584600..4c6ef3dcf 100644 --- a/consensus/build.gradle +++ b/consensus/build.gradle @@ -3,7 +3,7 @@ dependencies { implementation project(':core') implementation project(':crypto') implementation project(':ssz') - implementation project(':util') + implementation project(':util:core') implementation 'com.google.guava:guava' diff --git a/core/build.gradle b/core/build.gradle index a2172e03a..0870db841 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -1,5 +1,5 @@ dependencies { - implementation project(':types') + api project(':types') implementation project(':crypto') implementation project(':ssz') diff --git a/pow/core/build.gradle b/pow/core/build.gradle index 39dc5ec10..9ad1c071f 100644 --- a/pow/core/build.gradle +++ b/pow/core/build.gradle @@ -3,7 +3,7 @@ dependencies { implementation project(':core') implementation project(':consensus') implementation project(':ssz') - implementation project(':util') + implementation project(':util:core') implementation project(':crypto') implementation 'io.projectreactor:reactor-core' diff --git a/pow/ethereumj/build.gradle b/pow/ethereumj/build.gradle index 01c4f9373..cc1f6d05c 100644 --- a/pow/ethereumj/build.gradle +++ b/pow/ethereumj/build.gradle @@ -9,7 +9,7 @@ dependencies { implementation project(':types') implementation project(':core') implementation project(':consensus') - implementation project(':util') + implementation project(':util:core') implementation ("org.ethereum:ethereumj-core") { changing = true diff --git a/pow/validator/build.gradle b/pow/validator/build.gradle index 5faf0b323..7892fe230 100644 --- a/pow/validator/build.gradle +++ b/pow/validator/build.gradle @@ -7,7 +7,7 @@ dependencies { implementation project(':chain') implementation project(':consensus') implementation project(':validator') - implementation project(':util') + implementation project(':util:core') implementation project(':db:core') implementation 'io.projectreactor:reactor-core' diff --git a/settings.gradle b/settings.gradle index b83a97b7d..abc6f420e 100644 --- a/settings.gradle +++ b/settings.gradle @@ -38,7 +38,9 @@ include 'test' // Strict types definition include 'types' // Standalone utils without any relation to Ethereum 2.0 -include 'util' +include 'util:core' +// Eth2.0 time utilities +include 'util:time' // Validator services include 'validator' // Wire API mock diff --git a/ssz/build.gradle b/ssz/build.gradle index 37cd933ed..5aea1e8a9 100644 --- a/ssz/build.gradle +++ b/ssz/build.gradle @@ -1,9 +1,9 @@ apply plugin: 'java-library' dependencies { - implementation project(':types') - implementation project(':util') api 'net.consensys.cava:cava-ssz' + implementation project(':types') + implementation project(':util:core') implementation 'net.consensys.cava:cava-units' testImplementation 'junit:junit' diff --git a/start/benchmaker/build.gradle b/start/benchmaker/build.gradle index b0205a2a9..db8eaac0b 100644 --- a/start/benchmaker/build.gradle +++ b/start/benchmaker/build.gradle @@ -10,7 +10,7 @@ application { dependencies { implementation project(':types') implementation project(':wire') - implementation project(':util') + implementation project(':util:core') implementation project(':start:common') implementation project(':start:config') implementation project(':crypto') diff --git a/start/common/build.gradle b/start/common/build.gradle index e83a85628..9d175e8d0 100644 --- a/start/common/build.gradle +++ b/start/common/build.gradle @@ -9,7 +9,7 @@ dependencies { implementation project(':ssz') implementation project(':validator') implementation project(':wire') - implementation project(':util') + implementation project(':util:core') implementation 'com.google.guava:guava' implementation 'io.projectreactor:reactor-core' diff --git a/start/config/build.gradle b/start/config/build.gradle index e00e4c370..c539f6d99 100644 --- a/start/config/build.gradle +++ b/start/config/build.gradle @@ -3,7 +3,7 @@ dependencies { implementation project(':consensus') implementation project(':crypto') implementation project(':types') - implementation project(':util') + implementation project(':util:core') implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-yaml' implementation 'com.fasterxml.jackson.core:jackson-databind' diff --git a/start/node/build.gradle b/start/node/build.gradle index d6eb5edca..beeadb1b0 100644 --- a/start/node/build.gradle +++ b/start/node/build.gradle @@ -10,7 +10,7 @@ application { dependencies { implementation project(':types') implementation project(':wire') - implementation project(':util') + implementation project(':util:core') implementation project(':start:common') implementation project(':start:config') implementation project(':crypto') diff --git a/start/simulator/build.gradle b/start/simulator/build.gradle index 94ee39982..d88a14773 100644 --- a/start/simulator/build.gradle +++ b/start/simulator/build.gradle @@ -16,7 +16,7 @@ createScript(project, 'org.ethereum.beacon.simulator.Simulator', 'simulator') dependencies { implementation project(':types') implementation project(':wire') - implementation project(':util') + implementation project(':util:core') implementation project(':start:common') implementation project(':start:config') implementation project(':crypto') diff --git a/test/build.gradle b/test/build.gradle index 38f6ca927..f4ae0cc19 100644 --- a/test/build.gradle +++ b/test/build.gradle @@ -11,7 +11,7 @@ dependencies { testImplementation project(':db:core') testImplementation project(':chain') testImplementation project(':start:simulator') - testImplementation project(':util') + testImplementation project(':util:core') testImplementation project(':pow:core') } diff --git a/util/build.gradle b/util/build.gradle index 8549263fa..e69de29bb 100644 --- a/util/build.gradle +++ b/util/build.gradle @@ -1,5 +0,0 @@ -dependencies { - implementation 'io.projectreactor:reactor-core' - implementation 'com.google.guava:guava' - implementation 'commons-beanutils:commons-beanutils' -} diff --git a/util/core/build.gradle b/util/core/build.gradle new file mode 100644 index 000000000..8549263fa --- /dev/null +++ b/util/core/build.gradle @@ -0,0 +1,5 @@ +dependencies { + implementation 'io.projectreactor:reactor-core' + implementation 'com.google.guava:guava' + implementation 'commons-beanutils:commons-beanutils' +} diff --git a/util/src/main/java/org/ethereum/beacon/schedulers/AbstractSchedulers.java b/util/core/src/main/java/org/ethereum/beacon/schedulers/AbstractSchedulers.java similarity index 100% rename from util/src/main/java/org/ethereum/beacon/schedulers/AbstractSchedulers.java rename to util/core/src/main/java/org/ethereum/beacon/schedulers/AbstractSchedulers.java diff --git a/util/src/main/java/org/ethereum/beacon/schedulers/ControlledExecutorService.java b/util/core/src/main/java/org/ethereum/beacon/schedulers/ControlledExecutorService.java similarity index 100% rename from util/src/main/java/org/ethereum/beacon/schedulers/ControlledExecutorService.java rename to util/core/src/main/java/org/ethereum/beacon/schedulers/ControlledExecutorService.java diff --git a/util/src/main/java/org/ethereum/beacon/schedulers/ControlledExecutorServiceImpl.java b/util/core/src/main/java/org/ethereum/beacon/schedulers/ControlledExecutorServiceImpl.java similarity index 100% rename from util/src/main/java/org/ethereum/beacon/schedulers/ControlledExecutorServiceImpl.java rename to util/core/src/main/java/org/ethereum/beacon/schedulers/ControlledExecutorServiceImpl.java diff --git a/util/src/main/java/org/ethereum/beacon/schedulers/ControlledSchedulers.java b/util/core/src/main/java/org/ethereum/beacon/schedulers/ControlledSchedulers.java similarity index 100% rename from util/src/main/java/org/ethereum/beacon/schedulers/ControlledSchedulers.java rename to util/core/src/main/java/org/ethereum/beacon/schedulers/ControlledSchedulers.java diff --git a/util/src/main/java/org/ethereum/beacon/schedulers/ControlledSchedulersImpl.java b/util/core/src/main/java/org/ethereum/beacon/schedulers/ControlledSchedulersImpl.java similarity index 100% rename from util/src/main/java/org/ethereum/beacon/schedulers/ControlledSchedulersImpl.java rename to util/core/src/main/java/org/ethereum/beacon/schedulers/ControlledSchedulersImpl.java diff --git a/util/src/main/java/org/ethereum/beacon/schedulers/DefaultSchedulers.java b/util/core/src/main/java/org/ethereum/beacon/schedulers/DefaultSchedulers.java similarity index 100% rename from util/src/main/java/org/ethereum/beacon/schedulers/DefaultSchedulers.java rename to util/core/src/main/java/org/ethereum/beacon/schedulers/DefaultSchedulers.java diff --git a/util/src/main/java/org/ethereum/beacon/schedulers/DelegatingReactorScheduler.java b/util/core/src/main/java/org/ethereum/beacon/schedulers/DelegatingReactorScheduler.java similarity index 100% rename from util/src/main/java/org/ethereum/beacon/schedulers/DelegatingReactorScheduler.java rename to util/core/src/main/java/org/ethereum/beacon/schedulers/DelegatingReactorScheduler.java diff --git a/util/src/main/java/org/ethereum/beacon/schedulers/ErrorHandlingScheduler.java b/util/core/src/main/java/org/ethereum/beacon/schedulers/ErrorHandlingScheduler.java similarity index 100% rename from util/src/main/java/org/ethereum/beacon/schedulers/ErrorHandlingScheduler.java rename to util/core/src/main/java/org/ethereum/beacon/schedulers/ErrorHandlingScheduler.java diff --git a/util/src/main/java/org/ethereum/beacon/schedulers/ExecutorScheduler.java b/util/core/src/main/java/org/ethereum/beacon/schedulers/ExecutorScheduler.java similarity index 100% rename from util/src/main/java/org/ethereum/beacon/schedulers/ExecutorScheduler.java rename to util/core/src/main/java/org/ethereum/beacon/schedulers/ExecutorScheduler.java diff --git a/util/src/main/java/org/ethereum/beacon/schedulers/LatestExecutor.java b/util/core/src/main/java/org/ethereum/beacon/schedulers/LatestExecutor.java similarity index 100% rename from util/src/main/java/org/ethereum/beacon/schedulers/LatestExecutor.java rename to util/core/src/main/java/org/ethereum/beacon/schedulers/LatestExecutor.java diff --git a/util/src/main/java/org/ethereum/beacon/schedulers/LoggerMDCExecutor.java b/util/core/src/main/java/org/ethereum/beacon/schedulers/LoggerMDCExecutor.java similarity index 100% rename from util/src/main/java/org/ethereum/beacon/schedulers/LoggerMDCExecutor.java rename to util/core/src/main/java/org/ethereum/beacon/schedulers/LoggerMDCExecutor.java diff --git a/util/src/main/java/org/ethereum/beacon/schedulers/RunnableEx.java b/util/core/src/main/java/org/ethereum/beacon/schedulers/RunnableEx.java similarity index 100% rename from util/src/main/java/org/ethereum/beacon/schedulers/RunnableEx.java rename to util/core/src/main/java/org/ethereum/beacon/schedulers/RunnableEx.java diff --git a/util/src/main/java/org/ethereum/beacon/schedulers/Scheduler.java b/util/core/src/main/java/org/ethereum/beacon/schedulers/Scheduler.java similarity index 100% rename from util/src/main/java/org/ethereum/beacon/schedulers/Scheduler.java rename to util/core/src/main/java/org/ethereum/beacon/schedulers/Scheduler.java diff --git a/util/src/main/java/org/ethereum/beacon/schedulers/Schedulers.java b/util/core/src/main/java/org/ethereum/beacon/schedulers/Schedulers.java similarity index 100% rename from util/src/main/java/org/ethereum/beacon/schedulers/Schedulers.java rename to util/core/src/main/java/org/ethereum/beacon/schedulers/Schedulers.java diff --git a/util/src/main/java/org/ethereum/beacon/schedulers/TimeController.java b/util/core/src/main/java/org/ethereum/beacon/schedulers/TimeController.java similarity index 100% rename from util/src/main/java/org/ethereum/beacon/schedulers/TimeController.java rename to util/core/src/main/java/org/ethereum/beacon/schedulers/TimeController.java diff --git a/util/src/main/java/org/ethereum/beacon/schedulers/TimeControllerImpl.java b/util/core/src/main/java/org/ethereum/beacon/schedulers/TimeControllerImpl.java similarity index 100% rename from util/src/main/java/org/ethereum/beacon/schedulers/TimeControllerImpl.java rename to util/core/src/main/java/org/ethereum/beacon/schedulers/TimeControllerImpl.java diff --git a/util/src/main/java/org/ethereum/beacon/stream/RxUtil.java b/util/core/src/main/java/org/ethereum/beacon/stream/RxUtil.java similarity index 100% rename from util/src/main/java/org/ethereum/beacon/stream/RxUtil.java rename to util/core/src/main/java/org/ethereum/beacon/stream/RxUtil.java diff --git a/util/src/main/java/org/ethereum/beacon/stream/SimpleProcessor.java b/util/core/src/main/java/org/ethereum/beacon/stream/SimpleProcessor.java similarity index 100% rename from util/src/main/java/org/ethereum/beacon/stream/SimpleProcessor.java rename to util/core/src/main/java/org/ethereum/beacon/stream/SimpleProcessor.java diff --git a/util/src/main/java/org/ethereum/beacon/util/ConsumerList.java b/util/core/src/main/java/org/ethereum/beacon/util/ConsumerList.java similarity index 100% rename from util/src/main/java/org/ethereum/beacon/util/ConsumerList.java rename to util/core/src/main/java/org/ethereum/beacon/util/ConsumerList.java diff --git a/util/src/main/java/org/ethereum/beacon/util/Objects.java b/util/core/src/main/java/org/ethereum/beacon/util/Objects.java similarity index 100% rename from util/src/main/java/org/ethereum/beacon/util/Objects.java rename to util/core/src/main/java/org/ethereum/beacon/util/Objects.java diff --git a/util/src/main/java/org/ethereum/beacon/util/Utils.java b/util/core/src/main/java/org/ethereum/beacon/util/Utils.java similarity index 100% rename from util/src/main/java/org/ethereum/beacon/util/Utils.java rename to util/core/src/main/java/org/ethereum/beacon/util/Utils.java diff --git a/util/src/main/java/org/ethereum/beacon/util/cache/Cache.java b/util/core/src/main/java/org/ethereum/beacon/util/cache/Cache.java similarity index 100% rename from util/src/main/java/org/ethereum/beacon/util/cache/Cache.java rename to util/core/src/main/java/org/ethereum/beacon/util/cache/Cache.java diff --git a/util/src/main/java/org/ethereum/beacon/util/cache/CacheFactory.java b/util/core/src/main/java/org/ethereum/beacon/util/cache/CacheFactory.java similarity index 100% rename from util/src/main/java/org/ethereum/beacon/util/cache/CacheFactory.java rename to util/core/src/main/java/org/ethereum/beacon/util/cache/CacheFactory.java diff --git a/util/src/main/java/org/ethereum/beacon/util/cache/DebugCacheFactory.java b/util/core/src/main/java/org/ethereum/beacon/util/cache/DebugCacheFactory.java similarity index 100% rename from util/src/main/java/org/ethereum/beacon/util/cache/DebugCacheFactory.java rename to util/core/src/main/java/org/ethereum/beacon/util/cache/DebugCacheFactory.java diff --git a/util/src/main/java/org/ethereum/beacon/util/cache/LRUCache.java b/util/core/src/main/java/org/ethereum/beacon/util/cache/LRUCache.java similarity index 100% rename from util/src/main/java/org/ethereum/beacon/util/cache/LRUCache.java rename to util/core/src/main/java/org/ethereum/beacon/util/cache/LRUCache.java diff --git a/util/src/main/java/org/ethereum/beacon/util/cache/MockCache.java b/util/core/src/main/java/org/ethereum/beacon/util/cache/MockCache.java similarity index 100% rename from util/src/main/java/org/ethereum/beacon/util/cache/MockCache.java rename to util/core/src/main/java/org/ethereum/beacon/util/cache/MockCache.java diff --git a/util/src/main/java/org/ethereum/beacon/util/cache/NoCacheFactory.java b/util/core/src/main/java/org/ethereum/beacon/util/cache/NoCacheFactory.java similarity index 100% rename from util/src/main/java/org/ethereum/beacon/util/cache/NoCacheFactory.java rename to util/core/src/main/java/org/ethereum/beacon/util/cache/NoCacheFactory.java diff --git a/util/src/main/java/org/ethereum/beacon/util/cache/RegularCacheFactory.java b/util/core/src/main/java/org/ethereum/beacon/util/cache/RegularCacheFactory.java similarity index 100% rename from util/src/main/java/org/ethereum/beacon/util/cache/RegularCacheFactory.java rename to util/core/src/main/java/org/ethereum/beacon/util/cache/RegularCacheFactory.java diff --git a/util/src/main/java/org/ethereum/beacon/util/stats/MeasurementsCollector.java b/util/core/src/main/java/org/ethereum/beacon/util/stats/MeasurementsCollector.java similarity index 100% rename from util/src/main/java/org/ethereum/beacon/util/stats/MeasurementsCollector.java rename to util/core/src/main/java/org/ethereum/beacon/util/stats/MeasurementsCollector.java diff --git a/util/src/main/java/org/ethereum/beacon/util/stats/TimeCollector.java b/util/core/src/main/java/org/ethereum/beacon/util/stats/TimeCollector.java similarity index 100% rename from util/src/main/java/org/ethereum/beacon/util/stats/TimeCollector.java rename to util/core/src/main/java/org/ethereum/beacon/util/stats/TimeCollector.java diff --git a/util/src/test/java/org/ethereum/beacon/schedulers/ControlledExecutorServiceTest.java b/util/core/src/test/java/org/ethereum/beacon/schedulers/ControlledExecutorServiceTest.java similarity index 100% rename from util/src/test/java/org/ethereum/beacon/schedulers/ControlledExecutorServiceTest.java rename to util/core/src/test/java/org/ethereum/beacon/schedulers/ControlledExecutorServiceTest.java diff --git a/util/src/test/java/org/ethereum/beacon/schedulers/ControlledSchedulersTest.java b/util/core/src/test/java/org/ethereum/beacon/schedulers/ControlledSchedulersTest.java similarity index 100% rename from util/src/test/java/org/ethereum/beacon/schedulers/ControlledSchedulersTest.java rename to util/core/src/test/java/org/ethereum/beacon/schedulers/ControlledSchedulersTest.java diff --git a/util/src/test/java/org/ethereum/beacon/schedulers/LatestExecutorTest.java b/util/core/src/test/java/org/ethereum/beacon/schedulers/LatestExecutorTest.java similarity index 100% rename from util/src/test/java/org/ethereum/beacon/schedulers/LatestExecutorTest.java rename to util/core/src/test/java/org/ethereum/beacon/schedulers/LatestExecutorTest.java diff --git a/util/src/test/java/org/ethereum/beacon/util/ConsumerListTest.java b/util/core/src/test/java/org/ethereum/beacon/util/ConsumerListTest.java similarity index 100% rename from util/src/test/java/org/ethereum/beacon/util/ConsumerListTest.java rename to util/core/src/test/java/org/ethereum/beacon/util/ConsumerListTest.java diff --git a/util/time/build.gradle b/util/time/build.gradle new file mode 100644 index 000000000..a1d59802a --- /dev/null +++ b/util/time/build.gradle @@ -0,0 +1,12 @@ +dependencies { + implementation project(':util:core') + implementation project(':core') + + implementation 'io.projectreactor:reactor-core' + implementation 'commons-net:commons-net' + implementation 'org.apache.logging.log4j:log4j-core' + + testImplementation project(':consensus') + testImplementation project(':ssz') + testImplementation 'junit:junit' +} diff --git a/util/time/src/main/java/org/ethereum/beacon/time/NetworkFirstStrategy.java b/util/time/src/main/java/org/ethereum/beacon/time/NetworkFirstStrategy.java new file mode 100644 index 000000000..312599525 --- /dev/null +++ b/util/time/src/main/java/org/ethereum/beacon/time/NetworkFirstStrategy.java @@ -0,0 +1,60 @@ +package org.ethereum.beacon.time; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.ethereum.beacon.core.types.Time; +import org.ethereum.beacon.schedulers.Scheduler; +import org.ethereum.beacon.stream.SimpleProcessor; +import org.ethereum.beacon.time.provider.NetworkTime; +import org.ethereum.beacon.time.provider.StatisticsTime; +import org.reactivestreams.Publisher; +import reactor.core.publisher.Flux; + +import java.util.concurrent.atomic.AtomicLong; + +/** + * Strategy which prioritize {@link NetworkTime} but if the delta between {@link NetworkTime} and + * {@link StatisticsTime} goes above allowedDelta, it uses {@link StatisticsTime} as time provider. + */ +public class NetworkFirstStrategy implements TimeStrategy { + private final SimpleProcessor