From 65f7fb61c6d68824b0ace714aaf73bd774cf72ba Mon Sep 17 00:00:00 2001 From: Dmitrii Shmatko Date: Tue, 2 Jul 2019 18:34:14 +0300 Subject: [PATCH 01/10] util: time providers added --- chain/build.gradle | 2 +- consensus/build.gradle | 2 +- core/build.gradle | 2 +- pow/core/build.gradle | 2 +- pow/ethereumj/build.gradle | 2 +- pow/validator/build.gradle | 2 +- settings.gradle | 4 +- ssz/build.gradle | 2 +- start/benchmaker/build.gradle | 2 +- start/common/build.gradle | 2 +- start/config/build.gradle | 2 +- start/node/build.gradle | 2 +- start/simulator/build.gradle | 2 +- test/build.gradle | 2 +- util/build.gradle | 5 - util/core/build.gradle | 5 + .../beacon/schedulers/AbstractSchedulers.java | 0 .../schedulers/ControlledExecutorService.java | 0 .../ControlledExecutorServiceImpl.java | 0 .../schedulers/ControlledSchedulers.java | 0 .../schedulers/ControlledSchedulersImpl.java | 0 .../beacon/schedulers/DefaultSchedulers.java | 0 .../DelegatingReactorScheduler.java | 0 .../schedulers/ErrorHandlingScheduler.java | 0 .../beacon/schedulers/ExecutorScheduler.java | 0 .../beacon/schedulers/LatestExecutor.java | 0 .../beacon/schedulers/LoggerMDCExecutor.java | 0 .../beacon/schedulers/RunnableEx.java | 0 .../ethereum/beacon/schedulers/Scheduler.java | 0 .../beacon/schedulers/Schedulers.java | 0 .../beacon/schedulers/TimeController.java | 0 .../beacon/schedulers/TimeControllerImpl.java | 0 .../org/ethereum/beacon/stream/RxUtil.java | 0 .../beacon/stream/SimpleProcessor.java | 0 .../ethereum/beacon/util/ConsumerList.java | 0 .../org/ethereum/beacon/util/Objects.java | 0 .../java/org/ethereum/beacon/util/Utils.java | 0 .../org/ethereum/beacon/util/cache/Cache.java | 0 .../beacon/util/cache/CacheFactory.java | 0 .../beacon/util/cache/DebugCacheFactory.java | 0 .../ethereum/beacon/util/cache/LRUCache.java | 0 .../ethereum/beacon/util/cache/MockCache.java | 0 .../beacon/util/cache/NoCacheFactory.java | 0 .../util/cache/RegularCacheFactory.java | 0 .../util/stats/MeasurementsCollector.java | 0 .../beacon/util/stats/TimeCollector.java | 0 .../ControlledExecutorServiceTest.java | 0 .../schedulers/ControlledSchedulersTest.java | 0 .../beacon/schedulers/LatestExecutorTest.java | 0 .../beacon/util/ConsumerListTest.java | 0 util/time/build.gradle | 9 + .../org/ethereum/beacon/time/NetworkTime.java | 91 +++++++++ .../ethereum/beacon/time/StatisticsTime.java | 116 ++++++++++++ .../org/ethereum/beacon/time/SystemTime.java | 49 +++++ .../ethereum/beacon/time/TimeProvider.java | 11 ++ .../ethereum/beacon/time/NetworkTimeTest.java | 172 ++++++++++++++++++ .../beacon/time/TimeProviderTest.java | 133 ++++++++++++++ validator/build.gradle | 2 +- versions.gradle | 1 + wire/build.gradle | 2 +- 60 files changed, 605 insertions(+), 21 deletions(-) create mode 100644 util/core/build.gradle rename util/{ => core}/src/main/java/org/ethereum/beacon/schedulers/AbstractSchedulers.java (100%) rename util/{ => core}/src/main/java/org/ethereum/beacon/schedulers/ControlledExecutorService.java (100%) rename util/{ => core}/src/main/java/org/ethereum/beacon/schedulers/ControlledExecutorServiceImpl.java (100%) rename util/{ => core}/src/main/java/org/ethereum/beacon/schedulers/ControlledSchedulers.java (100%) rename util/{ => core}/src/main/java/org/ethereum/beacon/schedulers/ControlledSchedulersImpl.java (100%) rename util/{ => core}/src/main/java/org/ethereum/beacon/schedulers/DefaultSchedulers.java (100%) rename util/{ => core}/src/main/java/org/ethereum/beacon/schedulers/DelegatingReactorScheduler.java (100%) rename util/{ => core}/src/main/java/org/ethereum/beacon/schedulers/ErrorHandlingScheduler.java (100%) rename util/{ => core}/src/main/java/org/ethereum/beacon/schedulers/ExecutorScheduler.java (100%) rename util/{ => core}/src/main/java/org/ethereum/beacon/schedulers/LatestExecutor.java (100%) rename util/{ => core}/src/main/java/org/ethereum/beacon/schedulers/LoggerMDCExecutor.java (100%) rename util/{ => core}/src/main/java/org/ethereum/beacon/schedulers/RunnableEx.java (100%) rename util/{ => core}/src/main/java/org/ethereum/beacon/schedulers/Scheduler.java (100%) rename util/{ => core}/src/main/java/org/ethereum/beacon/schedulers/Schedulers.java (100%) rename util/{ => core}/src/main/java/org/ethereum/beacon/schedulers/TimeController.java (100%) rename util/{ => core}/src/main/java/org/ethereum/beacon/schedulers/TimeControllerImpl.java (100%) rename util/{ => core}/src/main/java/org/ethereum/beacon/stream/RxUtil.java (100%) rename util/{ => core}/src/main/java/org/ethereum/beacon/stream/SimpleProcessor.java (100%) rename util/{ => core}/src/main/java/org/ethereum/beacon/util/ConsumerList.java (100%) rename util/{ => core}/src/main/java/org/ethereum/beacon/util/Objects.java (100%) rename util/{ => core}/src/main/java/org/ethereum/beacon/util/Utils.java (100%) rename util/{ => core}/src/main/java/org/ethereum/beacon/util/cache/Cache.java (100%) rename util/{ => core}/src/main/java/org/ethereum/beacon/util/cache/CacheFactory.java (100%) rename util/{ => core}/src/main/java/org/ethereum/beacon/util/cache/DebugCacheFactory.java (100%) rename util/{ => core}/src/main/java/org/ethereum/beacon/util/cache/LRUCache.java (100%) rename util/{ => core}/src/main/java/org/ethereum/beacon/util/cache/MockCache.java (100%) rename util/{ => core}/src/main/java/org/ethereum/beacon/util/cache/NoCacheFactory.java (100%) rename util/{ => core}/src/main/java/org/ethereum/beacon/util/cache/RegularCacheFactory.java (100%) rename util/{ => core}/src/main/java/org/ethereum/beacon/util/stats/MeasurementsCollector.java (100%) rename util/{ => core}/src/main/java/org/ethereum/beacon/util/stats/TimeCollector.java (100%) rename util/{ => core}/src/test/java/org/ethereum/beacon/schedulers/ControlledExecutorServiceTest.java (100%) rename util/{ => core}/src/test/java/org/ethereum/beacon/schedulers/ControlledSchedulersTest.java (100%) rename util/{ => core}/src/test/java/org/ethereum/beacon/schedulers/LatestExecutorTest.java (100%) rename util/{ => core}/src/test/java/org/ethereum/beacon/util/ConsumerListTest.java (100%) create mode 100644 util/time/build.gradle create mode 100644 util/time/src/main/java/org/ethereum/beacon/time/NetworkTime.java create mode 100644 util/time/src/main/java/org/ethereum/beacon/time/StatisticsTime.java create mode 100644 util/time/src/main/java/org/ethereum/beacon/time/SystemTime.java create mode 100644 util/time/src/main/java/org/ethereum/beacon/time/TimeProvider.java create mode 100644 util/time/src/test/java/org/ethereum/beacon/time/NetworkTimeTest.java create mode 100644 util/time/src/test/java/org/ethereum/beacon/time/TimeProviderTest.java 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 ae8d2f28e..e4e1986ac 100644 --- a/ssz/build.gradle +++ b/ssz/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'java-library' dependencies { implementation project(':types') - implementation project(':util') + implementation project(':util:core') implementation 'net.consensys.cava:cava-ssz' implementation 'net.consensys.cava:cava-units' 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..59cc3bbb3 --- /dev/null +++ b/util/time/build.gradle @@ -0,0 +1,9 @@ +dependencies { + implementation project(':util:core') + implementation project(':core') + + implementation 'io.projectreactor:reactor-core' + implementation 'commons-net:commons-net' + + testImplementation 'junit:junit' +} diff --git a/util/time/src/main/java/org/ethereum/beacon/time/NetworkTime.java b/util/time/src/main/java/org/ethereum/beacon/time/NetworkTime.java new file mode 100644 index 000000000..6de60eed8 --- /dev/null +++ b/util/time/src/main/java/org/ethereum/beacon/time/NetworkTime.java @@ -0,0 +1,91 @@ +package org.ethereum.beacon.time; + +import org.apache.commons.net.ntp.NTPUDPClient; +import org.apache.commons.net.ntp.TimeInfo; +import org.ethereum.beacon.core.types.Time; +import org.ethereum.beacon.schedulers.Scheduler; +import org.ethereum.beacon.stream.SimpleProcessor; +import org.reactivestreams.Publisher; + +import java.net.InetAddress; +import java.time.Duration; +import java.time.Instant; +import java.time.temporal.ChronoField; +import java.util.concurrent.atomic.AtomicLong; + +/** + * Time provider using NTP servers to correct time every defined period + */ +public class NetworkTime implements TimeProvider { + private static final int MILLIS_IN_SEC = 1000; + private final SimpleProcessor