diff --git a/community/bolt/src/main/java/org/neo4j/bolt/v1/runtime/BoltFactoryImpl.java b/community/bolt/src/main/java/org/neo4j/bolt/v1/runtime/BoltFactoryImpl.java index f230f417fcdb3..3f18c4ef05116 100644 --- a/community/bolt/src/main/java/org/neo4j/bolt/v1/runtime/BoltFactoryImpl.java +++ b/community/bolt/src/main/java/org/neo4j/bolt/v1/runtime/BoltFactoryImpl.java @@ -21,7 +21,6 @@ import java.time.Clock; import java.time.Duration; -import java.util.function.Supplier; import org.neo4j.bolt.security.auth.Authentication; import org.neo4j.graphdb.DependencyResolver; @@ -33,7 +32,6 @@ import org.neo4j.kernel.impl.core.ThreadToStatementContextBridge; import org.neo4j.kernel.impl.logging.LogService; import org.neo4j.kernel.impl.query.QueryExecutionEngine; -import org.neo4j.kernel.impl.transaction.log.TransactionIdStore; import org.neo4j.kernel.internal.GraphDatabaseAPI; import org.neo4j.kernel.lifecycle.LifecycleAdapter; import org.neo4j.udc.UsageData; @@ -94,7 +92,7 @@ public BoltStateMachine newMachine( BoltConnectionDescriptor connectionDescripto private TransactionStateMachine.SPI createTxSpi( Clock clock ) { - long bookmarkReadyTimeout = config.get( GraphDatabaseSettings.bookmark_ready_timeout ); + long bookmarkReadyTimeout = config.get( GraphDatabaseSettings.bookmark_ready_timeout ).toMillis(); Duration txAwaitDuration = Duration.ofMillis( bookmarkReadyTimeout ); return new TransactionStateMachineSPI( gds, txBridge, queryExecutionEngine, diff --git a/community/kernel/src/main/java/org/neo4j/graphdb/factory/GraphDatabaseSettings.java b/community/kernel/src/main/java/org/neo4j/graphdb/factory/GraphDatabaseSettings.java index e2c785f7c10c6..61a1a1e317c91 100644 --- a/community/kernel/src/main/java/org/neo4j/graphdb/factory/GraphDatabaseSettings.java +++ b/community/kernel/src/main/java/org/neo4j/graphdb/factory/GraphDatabaseSettings.java @@ -20,8 +20,8 @@ package org.neo4j.graphdb.factory; import java.io.File; +import java.time.Duration; import java.util.List; -import java.util.concurrent.TimeUnit; import org.neo4j.configuration.Description; import org.neo4j.configuration.Internal; @@ -215,7 +215,7 @@ public class GraphDatabaseSettings implements LoadableConfig "unsupported.cypher.idp_solver_duration_threshold", LONG, "1000", min( 10L ) ); @Description("The minimum lifetime of a query plan before a query is considered for replanning") - public static Setting cypher_min_replan_interval = setting( "cypher.min_replan_interval", DURATION, "10s" ); + public static Setting cypher_min_replan_interval = setting( "cypher.min_replan_interval", DURATION, "10s" ); @Description( "Determines if Cypher will allow using file URLs when loading data using `LOAD CSV`. Setting this " + "value to `false` will cause Neo4j to fail `LOAD CSV` clauses that load data from the file system." ) @@ -237,7 +237,7 @@ public class GraphDatabaseSettings implements LoadableConfig @Description( "The maximum amount of time to wait for the database to become available, when " + "starting a new transaction." ) @Internal - public static final Setting transaction_start_timeout = + public static final Setting transaction_start_timeout = setting( "unsupported.dbms.transaction_start_timeout", DURATION, "1s" ); @Internal @@ -247,15 +247,16 @@ public class GraphDatabaseSettings implements LoadableConfig public static final Setting execution_guard_enabled = setting("unsupported.dbms.executiontime_limit.enabled", BOOLEAN, FALSE ); @Description("The maximum time interval of a transaction within which it should be completed.") - public static final Setting transaction_timeout = setting( "dbms.transaction.timeout", DURATION, String.valueOf( UNSPECIFIED_TIMEOUT ) ); + public static final Setting transaction_timeout = setting( "dbms.transaction.timeout", DURATION, String + .valueOf( UNSPECIFIED_TIMEOUT ) ); @Description( "The maximum time interval within which lock should be acquired." ) - public static final Setting lock_acquisition_timeout = setting( "dbms.lock.acquisition.timeout", DURATION, + public static final Setting lock_acquisition_timeout = setting( "dbms.lock.acquisition.timeout", DURATION, String.valueOf( UNSPECIFIED_TIMEOUT ) ); @Description( "The maximum amount of time to wait for running transactions to complete before allowing " + "initiated database shutdown to continue" ) - public static final Setting shutdown_transaction_end_timeout = + public static final Setting shutdown_transaction_end_timeout = setting( "dbms.shutdown_transaction_end_timeout", DURATION, "10s" ); @Description("Location of the database plugin directory. Compiled Java JAR files that contain database " + @@ -276,11 +277,11 @@ public class GraphDatabaseSettings implements LoadableConfig @Description( "Maximum time to wait for active transaction completion when rotating counts store" ) @Internal - public static final Setting counts_store_rotation_timeout = + public static final Setting counts_store_rotation_timeout = setting( "unsupported.dbms.counts_store_rotation_timeout", DURATION, "10m" ); @Description( "Minimum time interval after last rotation of the debug log before it may be rotated again." ) - public static final Setting store_internal_log_rotation_delay = + public static final Setting store_internal_log_rotation_delay = setting("dbms.logs.debug.rotation.delay", DURATION, "300s" ); @Description( "Maximum number of history files for the debug log." ) @@ -304,7 +305,7 @@ public class GraphDatabaseSettings implements LoadableConfig "of a crash. On the other hand, a longer check-point interval can also reduce the I/O load that " + "the database places on the system, as each check-point implies a flushing and forcing of all the " + "store files." ) - public static final Setting check_point_interval_time = setting( "dbms.checkpoint.interval.time", DURATION, "15m" ); + public static final Setting check_point_interval_time = setting( "dbms.checkpoint.interval.time", DURATION, "15m" ); @Description( "Limit the number of IOs the background checkpoint process will consume per second. " + "This setting is advisory, is ignored in Neo4j Community Edition, and is followed to " + @@ -458,13 +459,13 @@ public class GraphDatabaseSettings implements LoadableConfig @SuppressWarnings( "unused" ) @Description("Amount of time in ms the GC monitor thread will wait before taking another measurement.") @Internal - public static final Setting gc_monitor_interval = MonitorGc.Configuration.gc_monitor_wait_time; + public static final Setting gc_monitor_interval = MonitorGc.Configuration.gc_monitor_wait_time; @SuppressWarnings( "unused" ) @Description("The amount of time in ms the monitor thread has to be blocked before logging a message it was " + "blocked.") @Internal - public static final Setting gc_monitor_block_threshold = MonitorGc.Configuration.gc_monitor_threshold; + public static final Setting gc_monitor_block_threshold = MonitorGc.Configuration.gc_monitor_threshold; @Description( "Relationship count threshold for considering a node to be dense" ) public static final Setting dense_node_threshold = setting( "dbms.relationship_grouping_threshold", INTEGER, "50", min(1) ); @@ -498,7 +499,7 @@ public class GraphDatabaseSettings implements LoadableConfig @Description("If the execution of query takes more time than this threshold, the query is logged - " + "provided query logging is enabled. Defaults to 0 seconds, that is all queries are logged.") - public static final Setting log_queries_threshold = setting("dbms.logs.query.threshold", DURATION, "0s"); + public static final Setting log_queries_threshold = setting("dbms.logs.query.threshold", DURATION, "0s"); @Description( "The file size in bytes at which the query log will auto-rotate. If set to zero then no rotation " + "will occur. Accepts a binary suffix `k`, `m` or `g`." ) @@ -592,9 +593,9 @@ public enum LabelIndex public static final BoltConnectorValidator boltValidator = new BoltConnectorValidator(); @Description( "The maximum amount of time to wait for the database state represented by the bookmark." ) - public static final Setting bookmark_ready_timeout = setting( + public static final Setting bookmark_ready_timeout = setting( "dbms.transaction.bookmark_ready_timeout", DURATION, "30s", - min( TimeUnit.SECONDS.toMillis( 1 ) ) ); + min( Duration.ofSeconds( 1 ) ) ); // Needed to validate config, accessed via reflection @SuppressWarnings( "unused" ) diff --git a/community/kernel/src/main/java/org/neo4j/kernel/NeoStoreDataSource.java b/community/kernel/src/main/java/org/neo4j/kernel/NeoStoreDataSource.java index ab733e58b47da..991d4e8e7b180 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/NeoStoreDataSource.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/NeoStoreDataSource.java @@ -651,7 +651,7 @@ private NeoStoreTransactionLogModule buildTransactionLogs( final CountCommittedTransactionThreshold countCommittedTransactionThreshold = new CountCommittedTransactionThreshold( txThreshold ); - long timeMillisThreshold = config.get( GraphDatabaseSettings.check_point_interval_time ); + long timeMillisThreshold = config.get( GraphDatabaseSettings.check_point_interval_time ).toMillis(); TimeCheckPointThreshold timeCheckPointThreshold = new TimeCheckPointThreshold( timeMillisThreshold, clock ); CheckPointThreshold threshold = diff --git a/community/kernel/src/main/java/org/neo4j/kernel/configuration/Settings.java b/community/kernel/src/main/java/org/neo4j/kernel/configuration/Settings.java index 852bb4707f06f..b6996b5b30969 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/configuration/Settings.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/configuration/Settings.java @@ -24,6 +24,7 @@ import java.io.File; import java.net.URI; import java.net.URISyntaxException; +import java.time.Duration; import java.util.ArrayList; import java.util.Arrays; import java.util.EnumSet; @@ -499,12 +500,12 @@ public String toString() } }; - public static final Function DURATION = new Function() + public static final Function DURATION = new Function() { @Override - public Long apply( String value ) + public Duration apply( String value ) { - return TimeUtil.parseTimeMillis.apply( value ); + return Duration.ofMillis( TimeUtil.parseTimeMillis.apply( value ) ); } @Override diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/Kernel.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/Kernel.java index ef04173ee4289..4a2888b0c9f5b 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/Kernel.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/Kernel.java @@ -74,7 +74,7 @@ public Kernel( KernelTransactions transactionFactory, TransactionHooks hooks, Da this.health = health; this.transactionMonitor = transactionMonitor; this.procedures = procedures; - this.defaultTransactionTimeout = config.get( GraphDatabaseSettings.transaction_timeout ); + this.defaultTransactionTimeout = config.get( GraphDatabaseSettings.transaction_timeout ).toMillis(); } @Override diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/cache/MonitorGc.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/cache/MonitorGc.java index 07d1263ef0ace..e072e97237280 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/cache/MonitorGc.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/cache/MonitorGc.java @@ -19,6 +19,8 @@ */ package org.neo4j.kernel.impl.cache; +import java.time.Duration; + import org.neo4j.graphdb.config.Setting; import org.neo4j.kernel.configuration.Config; import org.neo4j.kernel.lifecycle.Lifecycle; @@ -31,8 +33,10 @@ public class MonitorGc implements Lifecycle { public static class Configuration { - public static final Setting gc_monitor_wait_time = setting( "unsupported.dbms.gc_monitor_wait_time", DURATION, "100ms" ); - public static final Setting gc_monitor_threshold = setting("unsupported.dbms.gc_monitor_threshold", DURATION, "200ms" ); + public static final Setting gc_monitor_wait_time = setting( "unsupported.dbms.gc_monitor_wait_time", + DURATION, "100ms" ); + public static final Setting gc_monitor_threshold = setting("unsupported.dbms.gc_monitor_threshold", + DURATION, "200ms" ); } private final Config config; @@ -53,8 +57,8 @@ public void init() throws Throwable @Override public void start() throws Throwable { - monitorGc = new MeasureDoNothing( "neo4j.PauseMonitor", log, config.get( Configuration.gc_monitor_wait_time ), - config.get( Configuration.gc_monitor_threshold ) ); + monitorGc = new MeasureDoNothing( "neo4j.PauseMonitor", log, config.get( Configuration.gc_monitor_wait_time ).toMillis(), + config.get( Configuration.gc_monitor_threshold ).toMillis() ); monitorGc.start(); } diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/factory/CommunityEditionModule.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/factory/CommunityEditionModule.java index 4acd049d465b3..5e2fc25b265cc 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/factory/CommunityEditionModule.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/factory/CommunityEditionModule.java @@ -121,7 +121,7 @@ public CommunityEditionModule( PlatformModule platformModule ) schemaWriteGuard = createSchemaWriteGuard(); - transactionStartTimeout = config.get( GraphDatabaseSettings.transaction_start_timeout ); + transactionStartTimeout = config.get( GraphDatabaseSettings.transaction_start_timeout ).toMillis(); constraintSemantics = createSchemaRuleVerifier(); diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/factory/DataSourceModule.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/factory/DataSourceModule.java index cb94b616610d0..a29899ab21465 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/factory/DataSourceModule.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/factory/DataSourceModule.java @@ -228,7 +228,7 @@ public DataSourceModule( final PlatformModule platformModule, EditionModule edit life.add( nodeManager ); life.add( new DatabaseAvailability( platformModule.availabilityGuard, platformModule.transactionMonitor, - config.get( GraphDatabaseSettings.shutdown_transaction_end_timeout ) ) ); + config.get( GraphDatabaseSettings.shutdown_transaction_end_timeout ).toMillis() ) ); life.add( new StartupWaiter( platformModule.availabilityGuard, editionModule.transactionStartTimeout ) ); diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/factory/GraphDatabaseFacade.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/factory/GraphDatabaseFacade.java index c0b64173ed5f9..5a49b14e82cc1 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/factory/GraphDatabaseFacade.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/factory/GraphDatabaseFacade.java @@ -225,7 +225,7 @@ public final void init( SPI spi ) public void init( SPI spi, Guard guard, ThreadToStatementContextBridge txBridge, Config config ) { this.spi = spi; - this.defaultTransactionTimeout = config.get( GraphDatabaseSettings.transaction_timeout ); + this.defaultTransactionTimeout = config.get( GraphDatabaseSettings.transaction_timeout ).toMillis(); Supplier statementSupplier = spi::currentStatement; Supplier transactionSupplier = spi::currentTransaction; diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/factory/PlatformModule.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/factory/PlatformModule.java index f9872e20603dd..d64798c715486 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/factory/PlatformModule.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/factory/PlatformModule.java @@ -237,7 +237,7 @@ protected FileSystemAbstraction createFileSystemAbstraction() protected LogService createLogService( LogProvider userLogProvider ) { long internalLogRotationThreshold = config.get( GraphDatabaseSettings.store_internal_log_rotation_threshold ); - long internalLogRotationDelay = config.get( GraphDatabaseSettings.store_internal_log_rotation_delay ); + long internalLogRotationDelay = config.get( GraphDatabaseSettings.store_internal_log_rotation_delay ).toMillis(); int internalLogMaxArchives = config.get( GraphDatabaseSettings.store_internal_log_max_archives ); final StoreLogService.Builder builder = diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/locking/community/LockManagerImpl.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/locking/community/LockManagerImpl.java index db75fc0e85843..906989d416c14 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/locking/community/LockManagerImpl.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/locking/community/LockManagerImpl.java @@ -47,7 +47,7 @@ public LockManagerImpl( RagManager ragManager, Config config, Clock clock ) { this.ragManager = ragManager; this.clock = clock; - this.lockAcquisitionTimeoutMillis = config.get( GraphDatabaseSettings.lock_acquisition_timeout ); + this.lockAcquisitionTimeoutMillis = config.get( GraphDatabaseSettings.lock_acquisition_timeout ).toMillis(); } public boolean getReadLock( LockTracer tracer, LockResource resource, Object tx ) diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/store/counts/CountsTracker.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/store/counts/CountsTracker.java index ddb8c6538f617..d3aaa3d418326 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/store/counts/CountsTracker.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/store/counts/CountsTracker.java @@ -123,7 +123,7 @@ public void rotationFailed( File source, File target, Headers headers, Exception headers.get( FileVersion.FILE_VERSION ).txId, target, source ), e ); } }, new RotationTimerFactory( clock, - config.get( counts_store_rotation_timeout ) ), 16, 16, HEADER_FIELDS ); + config.get( counts_store_rotation_timeout ).toMillis() ), 16, 16, HEADER_FIELDS ); } public CountsTracker setInitializer( final DataInitializer initializer ) diff --git a/community/kernel/src/test/java/org/neo4j/graphdb/factory/GraphDatabaseSettingsTest.java b/community/kernel/src/test/java/org/neo4j/graphdb/factory/GraphDatabaseSettingsTest.java index 0aa92f66e58d4..6e54681de60cb 100644 --- a/community/kernel/src/test/java/org/neo4j/graphdb/factory/GraphDatabaseSettingsTest.java +++ b/community/kernel/src/test/java/org/neo4j/graphdb/factory/GraphDatabaseSettingsTest.java @@ -19,6 +19,8 @@ */ package org.neo4j.graphdb.factory; +import org.junit.Test; + import java.lang.reflect.Field; import java.util.HashMap; import java.util.List; @@ -26,8 +28,6 @@ import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; -import org.junit.Test; - import org.neo4j.graphdb.config.InvalidSettingException; import org.neo4j.graphdb.config.Setting; import org.neo4j.helpers.AdvertisedSocketAddress; @@ -316,7 +316,7 @@ public void shouldBeAbleToOverrideHttpListenAddressWithJustOneParameter() throws public void hasDefaultBookmarkAwaitTimeout() { Config config = Config.defaults(); - long bookmarkReadyTimeoutMs = config.get( GraphDatabaseSettings.bookmark_ready_timeout ); + long bookmarkReadyTimeoutMs = config.get( GraphDatabaseSettings.bookmark_ready_timeout ).toMillis(); assertEquals( TimeUnit.SECONDS.toMillis( 30 ), bookmarkReadyTimeoutMs ); } diff --git a/community/kernel/src/test/java/org/neo4j/kernel/builtinprocs/BuiltInDbmsProceduresIT.java b/community/kernel/src/test/java/org/neo4j/kernel/builtinprocs/BuiltInDbmsProceduresIT.java index 84e5c03c92087..2bc2a525f12bd 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/builtinprocs/BuiltInDbmsProceduresIT.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/builtinprocs/BuiltInDbmsProceduresIT.java @@ -19,12 +19,13 @@ */ package org.neo4j.kernel.builtinprocs; +import org.junit.Test; + import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; -import org.junit.Test; - import org.neo4j.collection.RawIterator; import org.neo4j.graphdb.factory.GraphDatabaseSettings; import org.neo4j.kernel.api.exceptions.ProcedureException; @@ -86,4 +87,22 @@ public void listConfigWithASpecificConfigName() throws Exception "cypher., etc). This is currently false by default but will be true by default in 4.0.", "false" }, config.get( 0 ) ); } + + @Test + public void durationAlwaysListedWithUnit() throws Exception + { + // When + RawIterator stream = + dbmsOperations().procedureCallDbms( procedureName( "dbms", "listConfig" ), + Collections.singletonList( GraphDatabaseSettings.transaction_timeout.name() ).toArray(), + SecurityContext.AUTH_DISABLED ); + + // Then + List config = asList( stream ); + + assertEquals( 1, config.size() ); + assertArrayEquals( new Object[]{ "dbms.transaction.timeout", + "The maximum time interval of a transaction within which it should be completed.", + "0s" }, config.get( 0 ) ); + } } diff --git a/community/kernel/src/test/java/org/neo4j/kernel/configuration/SettingsTest.java b/community/kernel/src/test/java/org/neo4j/kernel/configuration/SettingsTest.java index 25e375b2f0e7c..e4be71be728b7 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/configuration/SettingsTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/configuration/SettingsTest.java @@ -23,6 +23,7 @@ import java.io.File; import java.net.URI; +import java.time.Duration; import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -254,21 +255,21 @@ public void testMatches() public void testDurationWithBrokenDefault() { // Notice that the default value is less that the minimum - Setting setting = setting( "foo.bar", DURATION, "1s", min( DURATION.apply( "3s" ) ) ); + Setting setting = setting( "foo.bar", DURATION, "1s", min( DURATION.apply( "3s" ) ) ); setting.apply( map( stringMap() ) ); } @Test( expected = InvalidSettingException.class ) public void testDurationWithValueNotWithinConstraint() { - Setting setting = setting( "foo.bar", DURATION, "3s", min( DURATION.apply( "3s" ) ) ); + Setting setting = setting( "foo.bar", DURATION, "3s", min( DURATION.apply( "3s" ) ) ); setting.apply( map( stringMap( "foo.bar", "2s" ) ) ); } @Test public void testDuration() { - Setting setting = setting( "foo.bar", DURATION, "3s", min( DURATION.apply( "3s" ) ) ); + Setting setting = setting( "foo.bar", DURATION, "3s", min( DURATION.apply( "3s" ) ) ); assertThat( setting.apply( map( stringMap( "foo.bar", "4s" ) ) ), equalTo( 4000L ) ); } diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/KernelTransactionTestBase.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/KernelTransactionTestBase.java index 54ae36c993b95..8500eff405e13 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/KernelTransactionTestBase.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/KernelTransactionTestBase.java @@ -84,7 +84,7 @@ public class KernelTransactionTestBase protected final Pool txPool = mock( Pool.class ); protected final StatementOperationContainer operationContainer = mock( StatementOperationContainer.class ); - private final long defaultTransactionTimeoutMillis = GraphDatabaseSettings.transaction_timeout.from( Config.defaults() ); + private final long defaultTransactionTimeoutMillis = GraphDatabaseSettings.transaction_timeout.from( Config.defaults() ).toMillis(); @Before public void before() throws Exception diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/factory/GraphDatabaseFacadeTest.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/factory/GraphDatabaseFacadeTest.java index 607119eb78f57..66d7b6b33ea55 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/factory/GraphDatabaseFacadeTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/factory/GraphDatabaseFacadeTest.java @@ -81,7 +81,7 @@ public void beginTransaction() { graphDatabaseFacade.beginTx(); - long timeout = Config.embeddedDefaults().get( GraphDatabaseSettings.transaction_timeout ); + long timeout = Config.embeddedDefaults().get( GraphDatabaseSettings.transaction_timeout ).toMillis(); verify( spi ).beginTransaction( KernelTransaction.Type.explicit, AUTH_DISABLED, timeout ); } @@ -109,7 +109,7 @@ public void executeQueryStartDefaultTransaction() graphDatabaseFacade.execute( "create (n)" ); graphDatabaseFacade.execute( "create (n)", new HashMap<>() ); - long timeout = Config.embeddedDefaults().get( GraphDatabaseSettings.transaction_timeout ); + long timeout = Config.embeddedDefaults().get( GraphDatabaseSettings.transaction_timeout ).toMillis(); verify( spi, times( 2 ) ).beginTransaction( KernelTransaction.Type.implicit, AUTH_DISABLED, timeout ); } } diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/store/counts/CountsTrackerTest.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/store/counts/CountsTrackerTest.java index 034edd24dcbf1..c50d3247400f5 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/store/counts/CountsTrackerTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/store/counts/CountsTrackerTest.java @@ -372,7 +372,7 @@ public void shouldNotEndUpInBrokenStateAfterRotationFailure() throws Exception { tx.incrementNodeCount( labelId, 1 ); // now at 2 } - clock.forward( Config.empty().get( GraphDatabaseSettings.counts_store_rotation_timeout ) * 2, MILLISECONDS ); + clock.forward( Config.empty().get( GraphDatabaseSettings.counts_store_rotation_timeout ).toMillis() * 2, MILLISECONDS ); try { rotation.get(); diff --git a/community/server/src/main/java/org/neo4j/server/AbstractNeoServer.java b/community/server/src/main/java/org/neo4j/server/AbstractNeoServer.java index 106548dbf5174..669bb1bcf56d4 100644 --- a/community/server/src/main/java/org/neo4j/server/AbstractNeoServer.java +++ b/community/server/src/main/java/org/neo4j/server/AbstractNeoServer.java @@ -265,7 +265,7 @@ private TransactionFacade createTransactionalActions() */ private long getTransactionTimeoutMillis() { - final long timeout = config.get( ServerSettings.transaction_idle_timeout ); + final long timeout = config.get( ServerSettings.transaction_idle_timeout ).toMillis(); return Math.max( timeout, MINIMUM_TIMEOUT + ROUNDING_SECOND ); } diff --git a/community/server/src/main/java/org/neo4j/server/configuration/ServerSettings.java b/community/server/src/main/java/org/neo4j/server/configuration/ServerSettings.java index 8845ec6b418f9..6cee398e9f1a6 100644 --- a/community/server/src/main/java/org/neo4j/server/configuration/ServerSettings.java +++ b/community/server/src/main/java/org/neo4j/server/configuration/ServerSettings.java @@ -21,6 +21,7 @@ import java.io.File; import java.net.URI; +import java.time.Duration; import java.util.ArrayList; import java.util.List; import java.util.function.Function; @@ -78,7 +79,8 @@ public class ServerSettings implements LoadableConfig "Please use dbms.transaction.timeout instead." ) @Internal @Deprecated - public static final Setting webserver_limit_execution_time = setting( "unsupported.dbms.executiontime_limit.time", DURATION, NO_DEFAULT ); + public static final Setting webserver_limit_execution_time = setting( "unsupported.dbms" + + ".executiontime_limit.time", DURATION, NO_DEFAULT ); @Internal public static final Setting> console_module_engines = setting( @@ -174,7 +176,8 @@ private ThirdPartyJaxRsPackage createThirdPartyJaxRsPackage( String packageAndMo public static final Setting lib_directory = pathSetting( "dbms.directories.lib", "lib" ); @Description("Timeout for idle transactions in the REST endpoint.") - public static final Setting transaction_idle_timeout = setting( "dbms.rest.transaction.idle_timeout", DURATION, "60s" ); + public static final Setting transaction_idle_timeout = setting( "dbms.rest.transaction.idle_timeout", + DURATION, "60s" ); @SuppressWarnings("unused") // accessed from the browser @Description( "Commands to be run when Neo4j Browser successfully connects to this server. Separate multiple commands with semi-colon." ) diff --git a/community/server/src/test/java/org/neo4j/server/integration/ServerConfigIT.java b/community/server/src/test/java/org/neo4j/server/integration/ServerConfigIT.java index 84fb845a58605..9dbb07b68ad2d 100644 --- a/community/server/src/test/java/org/neo4j/server/integration/ServerConfigIT.java +++ b/community/server/src/test/java/org/neo4j/server/integration/ServerConfigIT.java @@ -19,17 +19,16 @@ */ package org.neo4j.server.integration; -import java.io.File; - import org.junit.After; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; +import java.io.File; import javax.management.ObjectName; -import org.neo4j.kernel.configuration.Settings; import org.neo4j.jmx.impl.ConfigurationBean; +import org.neo4j.kernel.configuration.Settings; import org.neo4j.server.CommunityNeoServer; import org.neo4j.server.configuration.ServerSettings; import org.neo4j.server.helpers.CommunityServerBuilder; @@ -42,6 +41,7 @@ import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.equalTo; import static org.junit.Assert.fail; +import static org.neo4j.graphdb.factory.GraphDatabaseSettings.transaction_timeout; import static org.neo4j.jmx.JmxUtils.getAttribute; import static org.neo4j.jmx.JmxUtils.getObjectName; @@ -52,6 +52,23 @@ public class ServerConfigIT extends ExclusiveServerTestBase private CommunityNeoServer server; + @Test + public void durationsAlwaysHaveUnitsInJMX() throws Throwable + { + // Given + server = CommunityServerBuilder.server() + .withProperty( transaction_timeout.name(), "10" ) + .build(); + + // When + server.start(); + + // Then + ObjectName name = getObjectName( server.getDatabase().getGraph(), ConfigurationBean.CONFIGURATION_MBEAN_NAME ); + String attr = getAttribute( name, transaction_timeout.name() ); + assertThat( attr, equalTo( "10s" ) ); + } + @Test public void serverConfigShouldBeVisibleInJMX() throws Throwable { diff --git a/enterprise/causal-clustering/src/main/java/org/neo4j/causalclustering/core/CausalClusteringSettings.java b/enterprise/causal-clustering/src/main/java/org/neo4j/causalclustering/core/CausalClusteringSettings.java index 83127d8f804fc..60e856291d5ef 100644 --- a/enterprise/causal-clustering/src/main/java/org/neo4j/causalclustering/core/CausalClusteringSettings.java +++ b/enterprise/causal-clustering/src/main/java/org/neo4j/causalclustering/core/CausalClusteringSettings.java @@ -19,6 +19,7 @@ */ package org.neo4j.causalclustering.core; +import java.time.Duration; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -36,9 +37,6 @@ import org.neo4j.helpers.ListenSocketAddress; import org.neo4j.kernel.configuration.Settings; -import static java.util.Collections.emptyMap; - -import static org.neo4j.helpers.collection.MapUtil.stringMap; import static org.neo4j.kernel.configuration.Settings.ADVERTISED_SOCKET_ADDRESS; import static org.neo4j.kernel.configuration.Settings.BOOLEAN; import static org.neo4j.kernel.configuration.Settings.BYTES; @@ -59,11 +57,11 @@ public class CausalClusteringSettings implements LoadableConfig { @Description( "Time out for a new member to catch up" ) - public static final Setting join_catch_up_timeout = + public static final Setting join_catch_up_timeout = setting( "causal_clustering.join_catch_up_timeout", DURATION, "10m" ); @Description( "The time limit within which a new leader election will occur if no messages are received." ) - public static final Setting leader_election_timeout = + public static final Setting leader_election_timeout = setting( "causal_clustering.leader_election_timeout", DURATION, "7s" ); @Description( "Prevents the current instance from volunteering to become Raft leader. Defaults to false, and " + @@ -184,7 +182,7 @@ public class CausalClusteringSettings implements LoadableConfig setting( "causal_clustering.raft_log_reader_pool_size", INTEGER, "8" ); @Description( "RAFT log pruning frequency" ) - public static final Setting raft_log_pruning_frequency = + public static final Setting raft_log_pruning_frequency = setting( "causal_clustering.raft_log_pruning_frequency", DURATION, "10m" ); @Description( "Enable or disable the dump of all network messages pertaining to the RAFT protocol" ) @@ -192,16 +190,16 @@ public class CausalClusteringSettings implements LoadableConfig setting( "causal_clustering.raft_messages_log_enable", BOOLEAN, FALSE); @Description( "Interval of pulling updates from cores." ) - public static final Setting pull_interval = setting( "causal_clustering.pull_interval", DURATION, "1s" ); + public static final Setting pull_interval = setting( "causal_clustering.pull_interval", DURATION, "1s" ); @Description( "The catch up protocol times out if the given duration elapses with not network activity. " + "Every message received by the client from the server extends the time out duration." ) @Internal - public static final Setting catch_up_client_inactivity_timeout = + public static final Setting catch_up_client_inactivity_timeout = setting( "causal_clustering.catch_up_client_inactivity_timeout", DURATION, "5s" ); @Description( "Throttle limit for logging unknown cluster member address" ) - public static final Setting unknown_address_logging_throttle = + public static final Setting unknown_address_logging_throttle = setting( "causal_clustering.unknown_address_logging_throttle", DURATION, "10000ms" ); @Description( "Maximum transaction batch size for read replicas when applying transactions pulled from core " + @@ -211,12 +209,12 @@ public class CausalClusteringSettings implements LoadableConfig setting( "causal_clustering.read_replica_transaction_applier_batch_size", INTEGER, "64" ); @Description( "Time To Live before read replica is considered unavailable" ) - public static final Setting read_replica_time_to_live = - setting( "causal_clustering.read_replica_time_to_live", DURATION, "1m", min( 60_000L ) ); + public static final Setting read_replica_time_to_live = + setting( "causal_clustering.read_replica_time_to_live", DURATION, "1m", min( Duration.ofSeconds( 60 ) ) ); @Description( "How long drivers should cache the data from the `dbms.cluster.routing.getServers()` procedure." ) - public static final Setting cluster_routing_ttl = - setting( "causal_clustering.cluster_routing_ttl", DURATION, "5m", min( 1_000L ) ); + public static final Setting cluster_routing_ttl = + setting( "causal_clustering.cluster_routing_ttl", DURATION, "5m", min( Duration.ofSeconds( 1 ) ) ); @Description( "Configure if the `dbms.cluster.routing.getServers()` procedure should include followers as read " + "endpoints or return only read replicas. Note: if there are no read replicas in the cluster, followers " + @@ -316,8 +314,8 @@ public class CausalClusteringSettings implements LoadableConfig setting( "causal_clustering.relationship_group_id_allocation_size", INTEGER, "1024" ); @Description( "Time between scanning the cluster to refresh current server's view of topology" ) - public static final Setting cluster_topology_refresh = - setting( "causal_clustering.cluster_topology_refresh", DURATION, "5s", min( 1_000L ) ); + public static final Setting cluster_topology_refresh = + setting( "causal_clustering.cluster_topology_refresh", DURATION, "5s", min( Duration.ofSeconds( 1 ) ) ); @Description( "An ordered list in descending preference of the strategy which read replicas use to choose " + "upstream database server from which to pull transactional updates." ) diff --git a/enterprise/causal-clustering/src/main/java/org/neo4j/causalclustering/core/EnterpriseCoreEditionModule.java b/enterprise/causal-clustering/src/main/java/org/neo4j/causalclustering/core/EnterpriseCoreEditionModule.java index e1aa04d3fcf70..7ad15b47bea63 100644 --- a/enterprise/causal-clustering/src/main/java/org/neo4j/causalclustering/core/EnterpriseCoreEditionModule.java +++ b/enterprise/causal-clustering/src/main/java/org/neo4j/causalclustering/core/EnterpriseCoreEditionModule.java @@ -30,7 +30,6 @@ import org.neo4j.causalclustering.catchup.storecopy.LocalDatabase; import org.neo4j.causalclustering.catchup.storecopy.StoreFiles; import org.neo4j.causalclustering.core.consensus.ConsensusModule; -import org.neo4j.causalclustering.core.consensus.RaftMachine; import org.neo4j.causalclustering.core.consensus.RaftMessages; import org.neo4j.causalclustering.core.consensus.roles.Role; import org.neo4j.causalclustering.core.server.CoreServerModule; @@ -65,7 +64,6 @@ import org.neo4j.io.fs.FileSystemAbstraction; import org.neo4j.io.pagecache.PageCache; import org.neo4j.kernel.DatabaseAvailability; -import org.neo4j.kernel.NeoStoreDataSource; import org.neo4j.kernel.api.bolt.BoltConnectionTracker; import org.neo4j.kernel.api.exceptions.KernelException; import org.neo4j.kernel.configuration.Config; @@ -192,7 +190,7 @@ public void registerEditionSpecificProcedures( Procedures procedures ) throws Ke platformModule, clusterStateDirectory.get() ); topologyService = clusteringModule.topologyService(); - long logThresholdMillis = config.get( CausalClusteringSettings.unknown_address_logging_throttle ); + long logThresholdMillis = config.get( CausalClusteringSettings.unknown_address_logging_throttle ).toMillis(); int maxQueueSize = config.get( CausalClusteringSettings.outgoing_queue_size ); final SenderService raftSender = new SenderService( @@ -278,7 +276,7 @@ private void editionInvariants( PlatformModule platformModule, Dependencies depe schemaWriteGuard = createSchemaWriteGuard(); - transactionStartTimeout = config.get( GraphDatabaseSettings.transaction_start_timeout ); + transactionStartTimeout = config.get( GraphDatabaseSettings.transaction_start_timeout ).toMillis(); constraintSemantics = new EnterpriseConstraintSemantics(); diff --git a/enterprise/causal-clustering/src/main/java/org/neo4j/causalclustering/core/consensus/ConsensusModule.java b/enterprise/causal-clustering/src/main/java/org/neo4j/causalclustering/core/consensus/ConsensusModule.java index 3331ec19f4ed5..c12ccc5b3e534 100644 --- a/enterprise/causal-clustering/src/main/java/org/neo4j/causalclustering/core/consensus/ConsensusModule.java +++ b/enterprise/causal-clustering/src/main/java/org/neo4j/causalclustering/core/consensus/ConsensusModule.java @@ -112,7 +112,7 @@ public ConsensusModule( MemberId myself, final PlatformModule platformModule, new RaftMembershipState.Marshal(), config.get( CausalClusteringSettings.raft_membership_state_size ), logProvider ) ); - long electionTimeout = config.get( CausalClusteringSettings.leader_election_timeout ); + long electionTimeout = config.get( CausalClusteringSettings.leader_election_timeout ).toMillis(); long heartbeatInterval = electionTimeout / 3; Integer expectedClusterSize = config.get( CausalClusteringSettings.expected_core_cluster_size ); @@ -122,7 +122,7 @@ public ConsensusModule( MemberId myself, final PlatformModule platformModule, SendToMyself leaderOnlyReplicator = new SendToMyself( myself, outbound ); raftMembershipManager = new RaftMembershipManager( leaderOnlyReplicator, memberSetBuilder, raftLog, logProvider, - expectedClusterSize, electionTimeout, systemClock(), config.get( join_catch_up_timeout ), + expectedClusterSize, electionTimeout, systemClock(), config.get( join_catch_up_timeout ).toMillis(), raftMembershipStorage ); life.add( raftMembershipManager ); diff --git a/enterprise/causal-clustering/src/main/java/org/neo4j/causalclustering/core/server/CoreServerModule.java b/enterprise/causal-clustering/src/main/java/org/neo4j/causalclustering/core/server/CoreServerModule.java index 416429a7ec9e6..3f991833796fa 100644 --- a/enterprise/causal-clustering/src/main/java/org/neo4j/causalclustering/core/server/CoreServerModule.java +++ b/enterprise/causal-clustering/src/main/java/org/neo4j/causalclustering/core/server/CoreServerModule.java @@ -117,7 +117,7 @@ public CoreServerModule( IdentityModule identityModule, final PlatformModule pla LoggingInbound loggingRaftInbound = new LoggingInbound<>( raftServer, messageLogger, identityModule.myself() ); - long inactivityTimeoutMillis = config.get( CausalClusteringSettings.catch_up_client_inactivity_timeout ); + long inactivityTimeoutMillis = config.get( CausalClusteringSettings.catch_up_client_inactivity_timeout ).toMillis(); CatchUpClient catchUpClient = life .add( new CatchUpClient( clusteringModule.topologyService(), logProvider, Clocks.systemClock(), inactivityTimeoutMillis, monitors ) ); @@ -189,7 +189,7 @@ private OnlineBackupKernelExtension pickBackupExtension( NeoStoreDataSource data dependencies.satisfyDependency( raftLogPruner ); life.add( new PruningScheduler( raftLogPruner, jobScheduler, - config.get( CausalClusteringSettings.raft_log_pruning_frequency ), logProvider ) ); + config.get( CausalClusteringSettings.raft_log_pruning_frequency ).toMillis(), logProvider ) ); int queueSize = config.get( CausalClusteringSettings.raft_in_queue_size ); int maxBatch = config.get( CausalClusteringSettings.raft_in_queue_max_batch ); @@ -197,11 +197,11 @@ private OnlineBackupKernelExtension pickBackupExtension( NeoStoreDataSource data BatchingMessageHandler batchingMessageHandler = new BatchingMessageHandler( messageHandler, queueSize, maxBatch, logProvider ); - long electionTimeout = config.get( CausalClusteringSettings.leader_election_timeout ); + long electionTimeout = config.get( CausalClusteringSettings.leader_election_timeout ).toMillis(); MembershipWaiter membershipWaiter = new MembershipWaiter( identityModule.myself(), jobScheduler, dbHealthSupplier, electionTimeout * 4, logProvider ); - long joinCatchupTimeout = config.get( CausalClusteringSettings.join_catch_up_timeout ); + long joinCatchupTimeout = config.get( CausalClusteringSettings.join_catch_up_timeout ).toMillis(); membershipWaiterLifecycle = new MembershipWaiterLifecycle( membershipWaiter, joinCatchupTimeout, consensusModule.raftMachine(), logProvider ); diff --git a/enterprise/causal-clustering/src/main/java/org/neo4j/causalclustering/discovery/HazelcastClient.java b/enterprise/causal-clustering/src/main/java/org/neo4j/causalclustering/discovery/HazelcastClient.java index c2338ea707753..ee20bf0a84a12 100644 --- a/enterprise/causal-clustering/src/main/java/org/neo4j/causalclustering/discovery/HazelcastClient.java +++ b/enterprise/causal-clustering/src/main/java/org/neo4j/causalclustering/discovery/HazelcastClient.java @@ -74,8 +74,8 @@ class HazelcastClient extends LifecycleAdapter implements TopologyService this.scheduler = new RobustJobSchedulerWrapper( scheduler, log ); this.connectorAddresses = ClientConnectorAddresses.extractFromConfig( config ); this.transactionSource = config.get( CausalClusteringSettings.transaction_advertised_address ); - this.timeToLive = config.get( CausalClusteringSettings.read_replica_time_to_live ); - this.refreshPeriod = config.get( CausalClusteringSettings.cluster_topology_refresh ); + this.timeToLive = config.get( CausalClusteringSettings.read_replica_time_to_live ).toMillis(); + this.refreshPeriod = config.get( CausalClusteringSettings.cluster_topology_refresh ).toMillis(); this.myself = myself; this.groups = config.get( CausalClusteringSettings.server_groups ); } diff --git a/enterprise/causal-clustering/src/main/java/org/neo4j/causalclustering/discovery/HazelcastCoreTopologyService.java b/enterprise/causal-clustering/src/main/java/org/neo4j/causalclustering/discovery/HazelcastCoreTopologyService.java index 800d437cbedf3..a1775b21dd6a0 100644 --- a/enterprise/causal-clustering/src/main/java/org/neo4j/causalclustering/discovery/HazelcastCoreTopologyService.java +++ b/enterprise/causal-clustering/src/main/java/org/neo4j/causalclustering/discovery/HazelcastCoreTopologyService.java @@ -19,12 +19,6 @@ */ package org.neo4j.causalclustering.discovery; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.concurrent.TimeUnit; - import com.hazelcast.config.InterfacesConfig; import com.hazelcast.config.JoinConfig; import com.hazelcast.config.MemberAttributeConfig; @@ -37,6 +31,12 @@ import com.hazelcast.core.MembershipEvent; import com.hazelcast.core.MembershipListener; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.concurrent.TimeUnit; + import org.neo4j.causalclustering.core.CausalClusteringSettings; import org.neo4j.causalclustering.helper.RobustJobSchedulerWrapper; import org.neo4j.causalclustering.identity.ClusterId; @@ -92,7 +92,7 @@ class HazelcastCoreTopologyService extends LifecycleAdapter implements CoreTopol this.log = logProvider.getLog( getClass() ); this.scheduler = new RobustJobSchedulerWrapper( jobScheduler, log ); this.userLog = userLogProvider.getLog( getClass() ); - this.refreshPeriod = config.get( CausalClusteringSettings.cluster_topology_refresh ); + this.refreshPeriod = config.get( CausalClusteringSettings.cluster_topology_refresh ).toMillis(); } @Override @@ -202,7 +202,7 @@ private HazelcastInstance createHazelcastInstance() networkConfig.setPortAutoIncrement( false ); // We'll use election_timeout as a base value to calculate HC timeouts. We multiply by 1.5 - Long electionTimeoutMillis = config.get( CausalClusteringSettings.leader_election_timeout ); + Long electionTimeoutMillis = config.get( CausalClusteringSettings.leader_election_timeout ).toMillis(); Long baseHazelcastTimeoutMillis = ( 3 * electionTimeoutMillis ) / 2; /* * Some HC settings require the value in seconds. Adding the divider and subtracting 1 is equivalent to the diff --git a/enterprise/causal-clustering/src/main/java/org/neo4j/causalclustering/load_balancing/plugins/server_policies/ServerPoliciesPlugin.java b/enterprise/causal-clustering/src/main/java/org/neo4j/causalclustering/load_balancing/plugins/server_policies/ServerPoliciesPlugin.java index 1e4fe26eada3b..578fac029aaa4 100644 --- a/enterprise/causal-clustering/src/main/java/org/neo4j/causalclustering/load_balancing/plugins/server_policies/ServerPoliciesPlugin.java +++ b/enterprise/causal-clustering/src/main/java/org/neo4j/causalclustering/load_balancing/plugins/server_policies/ServerPoliciesPlugin.java @@ -84,7 +84,7 @@ public void init( TopologyService topologyService, LeaderLocator leaderLocator, { this.topologyService = topologyService; this.leaderLocator = leaderLocator; - this.timeToLive = config.get( CausalClusteringSettings.cluster_routing_ttl ); + this.timeToLive = config.get( CausalClusteringSettings.cluster_routing_ttl ).toMillis(); this.allowReadsOnFollowers = config.get( CausalClusteringSettings.cluster_allow_reads_on_followers ); this.policies = load( config, PLUGIN_NAME, logProvider.getLog( getClass() ) ); } diff --git a/enterprise/causal-clustering/src/main/java/org/neo4j/causalclustering/load_balancing/procedure/GetServersProcedureForSingleDC.java b/enterprise/causal-clustering/src/main/java/org/neo4j/causalclustering/load_balancing/procedure/GetServersProcedureForSingleDC.java index f7cda7b959617..19c5eecb9bb14 100644 --- a/enterprise/causal-clustering/src/main/java/org/neo4j/causalclustering/load_balancing/procedure/GetServersProcedureForSingleDC.java +++ b/enterprise/causal-clustering/src/main/java/org/neo4j/causalclustering/load_balancing/procedure/GetServersProcedureForSingleDC.java @@ -22,7 +22,6 @@ import java.util.Collection; import java.util.Collections; import java.util.List; -import java.util.Map; import java.util.Optional; import java.util.stream.Stream; @@ -33,7 +32,6 @@ import org.neo4j.causalclustering.discovery.TopologyService; import org.neo4j.causalclustering.identity.MemberId; import org.neo4j.causalclustering.load_balancing.Endpoint; -import org.neo4j.causalclustering.load_balancing.LoadBalancingProcessor; import org.neo4j.causalclustering.load_balancing.LoadBalancingResult; import org.neo4j.collection.RawIterator; import org.neo4j.helpers.AdvertisedSocketAddress; @@ -54,9 +52,7 @@ import static org.neo4j.causalclustering.load_balancing.procedure.ParameterNames.CONTEXT; import static org.neo4j.causalclustering.load_balancing.procedure.ParameterNames.SERVERS; import static org.neo4j.causalclustering.load_balancing.procedure.ParameterNames.TTL; -import static org.neo4j.causalclustering.load_balancing.procedure.ProcedureNames.GET_SERVERS_V1; import static org.neo4j.causalclustering.load_balancing.procedure.ProcedureNames.GET_SERVERS_V2; -import static org.neo4j.kernel.api.proc.ProcedureSignature.procedureSignature; /** * Returns endpoints and their capabilities. @@ -106,7 +102,7 @@ public RawIterator apply( Context ctx, Object[] inp return RawIterator.of( ResultFormatV1.build( new LoadBalancingResult( routeEndpoints, writeEndpoints, readEndpoints, - config.get( CausalClusteringSettings.cluster_routing_ttl ) ) ) ); + config.get( CausalClusteringSettings.cluster_routing_ttl ).toMillis() ) ) ); } private Optional leaderBoltAddress() diff --git a/enterprise/causal-clustering/src/main/java/org/neo4j/causalclustering/load_balancing/procedure/LegacyGetServersProcedure.java b/enterprise/causal-clustering/src/main/java/org/neo4j/causalclustering/load_balancing/procedure/LegacyGetServersProcedure.java index a1519ef72a5ce..f45a0ddbe0034 100644 --- a/enterprise/causal-clustering/src/main/java/org/neo4j/causalclustering/load_balancing/procedure/LegacyGetServersProcedure.java +++ b/enterprise/causal-clustering/src/main/java/org/neo4j/causalclustering/load_balancing/procedure/LegacyGetServersProcedure.java @@ -97,7 +97,7 @@ public RawIterator apply( Context ctx, Object[] inp return RawIterator.of( ResultFormatV1.build( new LoadBalancingResult( routeEndpoints, writeEndpoints, readEndpoints, - config.get( CausalClusteringSettings.cluster_routing_ttl ) ) ) ); + config.get( CausalClusteringSettings.cluster_routing_ttl ).toMillis() ) ) ); } private Optional leaderBoltAddress() diff --git a/enterprise/causal-clustering/src/main/java/org/neo4j/causalclustering/readreplica/EnterpriseReadReplicaEditionModule.java b/enterprise/causal-clustering/src/main/java/org/neo4j/causalclustering/readreplica/EnterpriseReadReplicaEditionModule.java index 5a800c868f516..fa46f0dfc9c8b 100644 --- a/enterprise/causal-clustering/src/main/java/org/neo4j/causalclustering/readreplica/EnterpriseReadReplicaEditionModule.java +++ b/enterprise/causal-clustering/src/main/java/org/neo4j/causalclustering/readreplica/EnterpriseReadReplicaEditionModule.java @@ -160,7 +160,7 @@ public class EnterpriseReadReplicaEditionModule extends EditionModule { }; - transactionStartTimeout = config.get( GraphDatabaseSettings.transaction_start_timeout ); + transactionStartTimeout = config.get( GraphDatabaseSettings.transaction_start_timeout ).toMillis(); constraintSemantics = new EnterpriseConstraintSemantics(); @@ -181,7 +181,7 @@ public class EnterpriseReadReplicaEditionModule extends EditionModule life.add( dependencies.satisfyDependency( topologyService ) ); - long inactivityTimeoutMillis = config.get( CausalClusteringSettings.catch_up_client_inactivity_timeout ); + long inactivityTimeoutMillis = config.get( CausalClusteringSettings.catch_up_client_inactivity_timeout ).toMillis(); CatchUpClient catchUpClient = life.add( new CatchUpClient( topologyService, logProvider, Clocks.systemClock(), inactivityTimeoutMillis, monitors ) ); @@ -270,7 +270,7 @@ private OnlineBackupKernelExtension pickBackupExtension( NeoStoreDataSource data CatchupPollingProcess catchupProcess = new CatchupPollingProcess( logProvider, localDatabase, servicesToStopOnStoreCopy, catchUpClient, upstreamDatabaseStrategySelector, catchupTimeoutService, - config.get( CausalClusteringSettings.pull_interval ), batchingTxApplier, + config.get( CausalClusteringSettings.pull_interval ).toMillis(), batchingTxApplier, platformModule.monitors, storeCopyProcess, databaseHealthSupplier ); dependencies.satisfyDependencies( catchupProcess ); diff --git a/enterprise/causal-clustering/src/test/java/org/neo4j/causalclustering/load_balancing/procedure/GetServersProcedureV1Test.java b/enterprise/causal-clustering/src/test/java/org/neo4j/causalclustering/load_balancing/procedure/GetServersProcedureV1Test.java index f550ae0b55641..c83e6b21703ef 100644 --- a/enterprise/causal-clustering/src/test/java/org/neo4j/causalclustering/load_balancing/procedure/GetServersProcedureV1Test.java +++ b/enterprise/causal-clustering/src/test/java/org/neo4j/causalclustering/load_balancing/procedure/GetServersProcedureV1Test.java @@ -361,7 +361,7 @@ public void shouldReturnNoWriteEndpointsIfThereIsNoAddressForTheLeader() throws private ClusterView run( LegacyGetServersProcedure proc ) throws ProcedureException { final Object[] rows = asList( proc.apply( null, new Object[0] ) ).get( 0 ); - assertEquals( config.get( cluster_routing_ttl ) / 1000, /* ttl */(long) rows[0] ); + assertEquals( config.get( cluster_routing_ttl ).getSeconds(), /* ttl */(long) rows[0] ); return ClusterView.parse( (List>) rows[1] ); } diff --git a/enterprise/cluster/src/main/java/org/neo4j/cluster/ClusterSettings.java b/enterprise/cluster/src/main/java/org/neo4j/cluster/ClusterSettings.java index 02496ef6cae21..733e0c3d8e451 100644 --- a/enterprise/cluster/src/main/java/org/neo4j/cluster/ClusterSettings.java +++ b/enterprise/cluster/src/main/java/org/neo4j/cluster/ClusterSettings.java @@ -19,6 +19,7 @@ */ package org.neo4j.cluster; +import java.time.Duration; import java.util.List; import java.util.function.Function; @@ -115,10 +116,10 @@ public enum Mode @Description( "Default timeout used for clustering timeouts. Override specific timeout settings with proper" + " values if necessary. This value is the default value for the ha.heartbeat_interval," + " ha.paxos_timeout and ha.learn_timeout settings." ) - public static final Setting default_timeout = setting( "ha.default_timeout", DURATION, "5s" ); + public static final Setting default_timeout = setting( "ha.default_timeout", DURATION, "5s" ); @Description( "How often heartbeat messages should be sent. Defaults to ha.default_timeout." ) - public static final Setting heartbeat_interval = setting( "ha.heartbeat_interval", DURATION, + public static final Setting heartbeat_interval = setting( "ha.heartbeat_interval", DURATION, default_timeout ); @Description( "How long to wait for heartbeats from other instances before marking them as suspects for failure. " + @@ -127,7 +128,7 @@ public enum Mode "stable masters but also will result in longer waits before a failover in case of master failure. This " + "value should not be set to less than twice the ha.heartbeat_interval value otherwise there is a high " + "risk of frequent master switches and possibly branched data occurrence." ) - public static final Setting heartbeat_timeout = setting( "ha.heartbeat_timeout", DURATION, "40s" ); + public static final Setting heartbeat_timeout = setting( "ha.heartbeat_timeout", DURATION, "40s" ); /* * ha.join_timeout @@ -135,17 +136,17 @@ public enum Mode */ @Description( "Timeout for broadcasting values in cluster. Must consider end-to-end duration of Paxos algorithm." + " This value is the default value for the ha.join_timeout and ha.leave_timeout settings." ) - public static final Setting broadcast_timeout = setting( "ha.broadcast_timeout", DURATION, "30s" ); + public static final Setting broadcast_timeout = setting( "ha.broadcast_timeout", DURATION, "30s" ); @Description( "Timeout for joining a cluster. Defaults to ha.broadcast_timeout. " + "Note that if the timeout expires during cluster formation, the operator may have to restart the instance or instances." ) - public static final Setting join_timeout = setting( "ha.join_timeout", DURATION, broadcast_timeout ); + public static final Setting join_timeout = setting( "ha.join_timeout", DURATION, broadcast_timeout ); @Description( "Timeout for waiting for configuration from an existing cluster member during cluster join." ) - public static final Setting configuration_timeout = setting( "ha.configuration_timeout", DURATION, "1s" ); + public static final Setting configuration_timeout = setting( "ha.configuration_timeout", DURATION, "1s" ); @Description( "Timeout for waiting for cluster leave to finish. Defaults to ha.broadcast_timeout." ) - public static final Setting leave_timeout = setting( "ha.leave_timeout", DURATION, broadcast_timeout ); + public static final Setting leave_timeout = setting( "ha.leave_timeout", DURATION, broadcast_timeout ); /* * ha.phase1_timeout @@ -156,23 +157,23 @@ public enum Mode "ha.phase2_timeout and ha.election_timeout settings. If it is not given a value it " + "defaults to ha.default_timeout and will implicitly change if ha.default_timeout changes. This is an " + "advanced parameter which should only be changed if specifically advised by Neo4j Professional Services." ) - public static final Setting paxos_timeout = setting( "ha.paxos_timeout", DURATION, default_timeout ); + public static final Setting paxos_timeout = setting( "ha.paxos_timeout", DURATION, default_timeout ); @Description( "Timeout for Paxos phase 1. If it is not given a value it defaults to ha.paxos_timeout and will " + "implicitly change if ha.paxos_timeout changes. This is an advanced parameter which should only be " + "changed if specifically advised by Neo4j Professional Services. " ) - public static final Setting phase1_timeout = setting( "ha.phase1_timeout", DURATION, paxos_timeout ); + public static final Setting phase1_timeout = setting( "ha.phase1_timeout", DURATION, paxos_timeout ); @Description( "Timeout for Paxos phase 2. If it is not given a value it defaults to ha.paxos_timeout and will " + "implicitly change if ha.paxos_timeout changes. This is an advanced parameter which should only be " + "changed if specifically advised by Neo4j Professional Services. " ) - public static final Setting phase2_timeout = setting( "ha.phase2_timeout", DURATION, paxos_timeout ); + public static final Setting phase2_timeout = setting( "ha.phase2_timeout", DURATION, paxos_timeout ); @Description( "Timeout for learning values. Defaults to ha.default_timeout." ) - public static final Setting learn_timeout = setting( "ha.learn_timeout", DURATION, default_timeout ); + public static final Setting learn_timeout = setting( "ha.learn_timeout", DURATION, default_timeout ); @Description( "Timeout for waiting for other members to finish a role election. Defaults to ha.paxos_timeout." ) - public static final Setting election_timeout = setting( "ha.election_timeout", DURATION, paxos_timeout ); + public static final Setting election_timeout = setting( "ha.election_timeout", DURATION, paxos_timeout ); @Internal public static final Setting instance_name = setting("unsupported.ha.instance_name", STRING, (String) null); diff --git a/enterprise/cluster/src/main/java/org/neo4j/cluster/client/ClusterClientModule.java b/enterprise/cluster/src/main/java/org/neo4j/cluster/client/ClusterClientModule.java index 0d5ae4afa2841..9f88ab79093b4 100644 --- a/enterprise/cluster/src/main/java/org/neo4j/cluster/client/ClusterClientModule.java +++ b/enterprise/cluster/src/main/java/org/neo4j/cluster/client/ClusterClientModule.java @@ -86,17 +86,17 @@ public ClusterClientModule( LifeSupport life, Dependencies dependencies, final M InternalLoggerFactory.setDefaultFactory( new NettyLoggerFactory( logging ) ); TimeoutStrategy timeoutStrategy = new MessageTimeoutStrategy( - new FixedTimeoutStrategy( config.get( ClusterSettings.default_timeout ) ) ) - .timeout( HeartbeatMessage.sendHeartbeat, config.get( ClusterSettings.heartbeat_interval ) ) - .timeout( HeartbeatMessage.timed_out, config.get( ClusterSettings.heartbeat_timeout ) ) - .timeout( AtomicBroadcastMessage.broadcastTimeout, config.get( ClusterSettings.broadcast_timeout ) ) - .timeout( LearnerMessage.learnTimedout, config.get( ClusterSettings.learn_timeout ) ) - .timeout( ProposerMessage.phase1Timeout, config.get( ClusterSettings.phase1_timeout ) ) - .timeout( ProposerMessage.phase2Timeout, config.get( ClusterSettings.phase2_timeout ) ) - .timeout( ClusterMessage.joiningTimeout, config.get( ClusterSettings.join_timeout ) ) - .timeout( ClusterMessage.configurationTimeout, config.get( ClusterSettings.configuration_timeout ) ) - .timeout( ClusterMessage.leaveTimedout, config.get( ClusterSettings.leave_timeout ) ) - .timeout( ElectionMessage.electionTimeout, config.get( ClusterSettings.election_timeout ) ); + new FixedTimeoutStrategy( config.get( ClusterSettings.default_timeout ).toMillis() ) ) + .timeout( HeartbeatMessage.sendHeartbeat, config.get( ClusterSettings.heartbeat_interval ).toMillis() ) + .timeout( HeartbeatMessage.timed_out, config.get( ClusterSettings.heartbeat_timeout ).toMillis() ) + .timeout( AtomicBroadcastMessage.broadcastTimeout, config.get( ClusterSettings.broadcast_timeout ).toMillis() ) + .timeout( LearnerMessage.learnTimedout, config.get( ClusterSettings.learn_timeout ).toMillis() ) + .timeout( ProposerMessage.phase1Timeout, config.get( ClusterSettings.phase1_timeout ).toMillis() ) + .timeout( ProposerMessage.phase2Timeout, config.get( ClusterSettings.phase2_timeout ).toMillis() ) + .timeout( ClusterMessage.joiningTimeout, config.get( ClusterSettings.join_timeout ).toMillis() ) + .timeout( ClusterMessage.configurationTimeout, config.get( ClusterSettings.configuration_timeout ).toMillis() ) + .timeout( ClusterMessage.leaveTimedout, config.get( ClusterSettings.leave_timeout ).toMillis() ) + .timeout( ElectionMessage.electionTimeout, config.get( ClusterSettings.election_timeout ).toMillis() ); MultiPaxosServerFactory protocolServerFactory = new MultiPaxosServerFactory( new ClusterConfiguration( config.get( ClusterSettings.cluster_name ), logging ), @@ -213,7 +213,7 @@ public boolean isAllowedToCreateCluster() @Override public long getClusterJoinTimeout() { - return config.get( ClusterSettings.join_timeout ); + return config.get( ClusterSettings.join_timeout ).toMillis(); } }, server, logService ) ); diff --git a/enterprise/ha/src/main/java/org/neo4j/kernel/ha/HaSettings.java b/enterprise/ha/src/main/java/org/neo4j/kernel/ha/HaSettings.java index 89b3f6eb73372..a8e356f5cfa24 100644 --- a/enterprise/ha/src/main/java/org/neo4j/kernel/ha/HaSettings.java +++ b/enterprise/ha/src/main/java/org/neo4j/kernel/ha/HaSettings.java @@ -19,6 +19,8 @@ */ package org.neo4j.kernel.ha; +import java.time.Duration; + import org.neo4j.configuration.Description; import org.neo4j.configuration.LoadableConfig; import org.neo4j.graphdb.config.Setting; @@ -50,18 +52,18 @@ public class HaSettings implements LoadableConfig public static final ConfigurationMigrator migrator = new EnterpriseConfigurationMigrator(); @Description( "How long a slave will wait for response from master before giving up." ) - public static final Setting read_timeout = setting( "ha.slave_read_timeout", DURATION, "20s" ); + public static final Setting read_timeout = setting( "ha.slave_read_timeout", DURATION, "20s" ); @Description( "Timeout for request threads waiting for instance to become master or slave." ) - public static final Setting state_switch_timeout = setting( "ha.role_switch_timeout", DURATION, "120s" ); + public static final Setting state_switch_timeout = setting( "ha.role_switch_timeout", DURATION, "120s" ); @Description( "Timeout for waiting for internal conditions during state switch, like for transactions " + "to complete, before switching to master or slave." ) - public static final Setting internal_state_switch_timeout = + public static final Setting internal_state_switch_timeout = setting( "ha.internal_role_switch_timeout", DURATION, "10s" ); @Description( "Timeout for taking remote (write) locks on slaves. Defaults to ha.slave_read_timeout." ) - public static final Setting lock_read_timeout = setting( "ha.slave_lock_timeout", DURATION, read_timeout ); + public static final Setting lock_read_timeout = setting( "ha.slave_lock_timeout", DURATION, read_timeout ); @Description( "Maximum number of connections a slave can have to the master." ) public static final Setting max_concurrent_channels_per_slave = @@ -88,7 +90,7 @@ public class HaSettings implements LoadableConfig public static final Setting com_chunk_size = setting( "ha.data_chunk_size", BYTES, "2M", min( 1024L ) ); @Description( "Interval of pulling updates from master." ) - public static final Setting pull_interval = setting( "ha.pull_interval", DURATION, "0s" ); + public static final Setting pull_interval = setting( "ha.pull_interval", DURATION, "0s" ); @Description( "The amount of slaves the master will ask to replicate a committed transaction. " ) public static final Setting tx_push_factor = setting( "ha.tx_push_factor", INTEGER, "1", min( 0 ) ); @@ -112,7 +114,8 @@ public class HaSettings implements LoadableConfig "applying received transaction stream, to make sure they do not read potentially " + "inconsistent/reused records." ) @Internal - public static final Setting id_reuse_safe_zone_time = setting( "unsupported.dbms.id_reuse_safe_zone", Settings.DURATION, "1h" ); + public static final Setting id_reuse_safe_zone_time = setting( "unsupported.dbms.id_reuse_safe_zone", + Settings.DURATION, "1h" ); public enum BranchedDataCopyingStrategy { diff --git a/enterprise/ha/src/main/java/org/neo4j/kernel/ha/cluster/SwitchToSlave.java b/enterprise/ha/src/main/java/org/neo4j/kernel/ha/cluster/SwitchToSlave.java index 80b1792240760..b0dcfd23bd103 100644 --- a/enterprise/ha/src/main/java/org/neo4j/kernel/ha/cluster/SwitchToSlave.java +++ b/enterprise/ha/src/main/java/org/neo4j/kernel/ha/cluster/SwitchToSlave.java @@ -180,7 +180,7 @@ public URI switchToSlave( LifeSupport haCommunicationLife, URI me, URI masterUri // Wait a short while for current transactions to stop first, just to be nice. // We can't wait forever since switching to our designated role is quite important. Clock clock = Clocks.systemClock(); - long deadline = clock.millis() + config.get( HaSettings.internal_state_switch_timeout ); + long deadline = clock.millis() + config.get( HaSettings.internal_state_switch_timeout ).toMillis(); while ( transactionCounters.getNumberOfActiveTransactions() > 0 && clock.millis() < deadline ) { parkNanos( MILLISECONDS.toNanos( 10 ) ); diff --git a/enterprise/ha/src/main/java/org/neo4j/kernel/ha/com/master/ConversationManager.java b/enterprise/ha/src/main/java/org/neo4j/kernel/ha/com/master/ConversationManager.java index d024ee4cf3477..a85622bce3f41 100644 --- a/enterprise/ha/src/main/java/org/neo4j/kernel/ha/com/master/ConversationManager.java +++ b/enterprise/ha/src/main/java/org/neo4j/kernel/ha/com/master/ConversationManager.java @@ -153,7 +153,7 @@ public Conversation acquire() protected TimedRepository createConversationStore() { return new TimedRepository<>( getConversationFactory(), getConversationReaper(), - config.get( lock_read_timeout ) + lockTimeoutAddition, Clocks.systemClock() ); + config.get( lock_read_timeout ).toMillis() + lockTimeoutAddition, Clocks.systemClock() ); } protected Consumer getConversationReaper() diff --git a/enterprise/ha/src/main/java/org/neo4j/kernel/ha/com/master/SlaveClient.java b/enterprise/ha/src/main/java/org/neo4j/kernel/ha/com/master/SlaveClient.java index 4d60d9816edc3..06ee1b9bc625b 100644 --- a/enterprise/ha/src/main/java/org/neo4j/kernel/ha/com/master/SlaveClient.java +++ b/enterprise/ha/src/main/java/org/neo4j/kernel/ha/com/master/SlaveClient.java @@ -54,7 +54,7 @@ public SlaveClient( InstanceId machineId, String destinationHostNameOrIp, int de LogEntryReader entryReader ) { super( destinationHostNameOrIp, destinationPort, originHostNameOrIp, logProvider, storeId, - Protocol.DEFAULT_FRAME_LENGTH, HaSettings.read_timeout.apply( from -> null ), maxConcurrentChannels, + Protocol.DEFAULT_FRAME_LENGTH, HaSettings.read_timeout.apply( from -> null ).toMillis(), maxConcurrentChannels, chunkSize, NO_OP_RESPONSE_UNPACKER, byteCounterMonitor, requestMonitor, entryReader ); this.machineId = machineId; } diff --git a/enterprise/ha/src/main/java/org/neo4j/kernel/ha/factory/HighlyAvailableEditionModule.java b/enterprise/ha/src/main/java/org/neo4j/kernel/ha/factory/HighlyAvailableEditionModule.java index f5b200e15bec4..d7e99d9ea0487 100644 --- a/enterprise/ha/src/main/java/org/neo4j/kernel/ha/factory/HighlyAvailableEditionModule.java +++ b/enterprise/ha/src/main/java/org/neo4j/kernel/ha/factory/HighlyAvailableEditionModule.java @@ -230,14 +230,14 @@ public HighlyAvailableEditionModule( final PlatformModule platformModule ) serverId.toIntegerIndex(), dependencies.provideDependency( TransactionIdStore.class ) ) ); - final long idReuseSafeZone = config.get( HaSettings.id_reuse_safe_zone_time ); + final long idReuseSafeZone = config.get( HaSettings.id_reuse_safe_zone_time ).toMillis(); TransactionCommittingResponseUnpacker responseUnpacker = dependencies.satisfyDependency( new TransactionCommittingResponseUnpacker( dependencies, config.get( HaSettings.pull_apply_batch_size ), idReuseSafeZone ) ); Supplier kernelProvider = dependencies.provideDependency( KernelAPI.class ); - transactionStartTimeout = config.get( HaSettings.state_switch_timeout ); + transactionStartTimeout = config.get( HaSettings.state_switch_timeout ).toMillis(); DelegateInvocationHandler clusterEventsDelegateInvocationHandler = new DelegateInvocationHandler<>( ClusterMemberEvents.class ); @@ -383,8 +383,8 @@ public void elected( String role, InstanceId instanceId, URI electedMember ) MasterClientResolver masterClientResolver = new MasterClientResolver( logging.getInternalLogProvider(), responseUnpacker, invalidEpochHandler, - config.get( HaSettings.read_timeout ).intValue(), - config.get( HaSettings.lock_read_timeout ).intValue(), + (int) config.get( HaSettings.read_timeout ).toMillis(), + (int) config.get( HaSettings.lock_read_timeout ).toMillis(), config.get( HaSettings.max_concurrent_channels_per_slave ), config.get( HaSettings.com_chunk_size ).intValue(), logEntryReader ); @@ -399,7 +399,7 @@ public void elected( String role, InstanceId instanceId, URI electedMember ) PullerFactory pullerFactory = new PullerFactory( requestContextFactory, master, lastUpdateTime, logging.getInternalLogProvider(), serverId, invalidEpochHandler, - config.get( HaSettings.pull_interval ), platformModule.jobScheduler, + config.get( HaSettings.pull_interval ).toMillis(), platformModule.jobScheduler, dependencies, platformModule.availabilityGuard, memberStateMachine, monitors ); dependencies.satisfyDependency( paxosLife.add( pullerFactory.createObligationFulfiller( updatePullerProxy ) ) ); @@ -863,7 +863,7 @@ private Server.Configuration commonConfig( final Config config ) @Override public long getOldChannelThreshold() { - return config.get( HaSettings.lock_read_timeout ); + return config.get( HaSettings.lock_read_timeout ).toMillis(); } @Override diff --git a/enterprise/ha/src/test/java/org/neo4j/kernel/ha/SlaveUpdatePullerTest.java b/enterprise/ha/src/test/java/org/neo4j/kernel/ha/SlaveUpdatePullerTest.java index 47df4dc2a3e5a..635f1afc3a59c 100644 --- a/enterprise/ha/src/test/java/org/neo4j/kernel/ha/SlaveUpdatePullerTest.java +++ b/enterprise/ha/src/test/java/org/neo4j/kernel/ha/SlaveUpdatePullerTest.java @@ -28,6 +28,7 @@ import org.mockito.stubbing.Answer; import org.mockito.stubbing.OngoingStubbing; +import java.time.Duration; import java.util.concurrent.atomic.AtomicInteger; import org.neo4j.cluster.ClusterSettings; @@ -88,7 +89,7 @@ public class SlaveUpdatePullerTest public void setUp() throws Throwable { when( requestContextFactory.newRequestContext() ).thenReturn( new RequestContext( 42, 42, 42, 42, 42 ) ); - when( config.get( HaSettings.pull_interval ) ).thenReturn( 1000L ); + when( config.get( HaSettings.pull_interval ) ).thenReturn( Duration.ofSeconds( 1 ) ); when( config.get( ClusterSettings.server_id ) ).thenReturn( instanceId ); when( availabilityGuard.isAvailable( anyLong() ) ).thenReturn( true ); jobScheduler.init(); diff --git a/enterprise/ha/src/test/java/org/neo4j/kernel/ha/com/master/ConversationManagerTest.java b/enterprise/ha/src/test/java/org/neo4j/kernel/ha/com/master/ConversationManagerTest.java index 074e368cced8b..abf7c4cbc926d 100644 --- a/enterprise/ha/src/test/java/org/neo4j/kernel/ha/com/master/ConversationManagerTest.java +++ b/enterprise/ha/src/test/java/org/neo4j/kernel/ha/com/master/ConversationManagerTest.java @@ -25,6 +25,8 @@ import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; +import java.time.Duration; + import org.neo4j.com.RequestContext; import org.neo4j.kernel.configuration.Config; import org.neo4j.kernel.ha.HaSettings; @@ -54,7 +56,7 @@ public class ConversationManagerTest public void testStart() throws Exception { JobScheduler.JobHandle reaperJobHandle = mock( JobScheduler.JobHandle.class ); - when( config.get( HaSettings.lock_read_timeout ) ).thenReturn( 1L ); + when( config.get( HaSettings.lock_read_timeout ) ).thenReturn( Duration.ofMillis( 1 ) ); when( conversationSPI.scheduleRecurringJob( any( JobScheduler.Group.class ), any( Long.class ), any( Runnable.class ) ) ).thenReturn( reaperJobHandle ); conversationManager = getConversationManager(); @@ -70,7 +72,7 @@ public void testStart() throws Exception public void testStop() throws Exception { JobScheduler.JobHandle reaperJobHandle = mock( JobScheduler.JobHandle.class ); - when( config.get( HaSettings.lock_read_timeout ) ).thenReturn( 1L ); + when( config.get( HaSettings.lock_read_timeout ) ).thenReturn( Duration.ofMillis( 1 ) ); when( conversationSPI.scheduleRecurringJob( any( JobScheduler.Group.class ), any( Long.class ), any( Runnable.class ) ) ).thenReturn( reaperJobHandle ); conversationManager = getConversationManager(); @@ -86,7 +88,7 @@ public void testStop() throws Exception public void testConversationWorkflow() throws Exception { JobScheduler.JobHandle reaperJobHandle = mock( JobScheduler.JobHandle.class ); - when( config.get( HaSettings.lock_read_timeout ) ).thenReturn( 1L ); + when( config.get( HaSettings.lock_read_timeout ) ).thenReturn( Duration.ofMillis( 1 ) ); when( conversationSPI.scheduleRecurringJob( any( JobScheduler.Group.class ), any( Long.class ), any( Runnable.class ) ) ).thenReturn( reaperJobHandle ); RequestContext requestContext = getRequestContext(); diff --git a/enterprise/kernel/src/main/java/org/neo4j/kernel/impl/enterprise/lock/forseti/ForsetiLockManager.java b/enterprise/kernel/src/main/java/org/neo4j/kernel/impl/enterprise/lock/forseti/ForsetiLockManager.java index 5728d2c41e775..6c96751a417c7 100644 --- a/enterprise/kernel/src/main/java/org/neo4j/kernel/impl/enterprise/lock/forseti/ForsetiLockManager.java +++ b/enterprise/kernel/src/main/java/org/neo4j/kernel/impl/enterprise/lock/forseti/ForsetiLockManager.java @@ -285,7 +285,7 @@ protected ForsetiClient create() { id = clientIds.getAndIncrement(); } - long lockAcquisitionTimeoutMillis = config.get( GraphDatabaseSettings.lock_acquisition_timeout ); + long lockAcquisitionTimeoutMillis = config.get( GraphDatabaseSettings.lock_acquisition_timeout ).toMillis(); ForsetiClient client = new ForsetiClient( id, lockMaps, waitStrategies, this, deadlockResolutionStrategy, clientsById::get, lockAcquisitionTimeoutMillis, clock ); clientsById.put( id, client ); diff --git a/enterprise/metrics/src/main/java/org/neo4j/metrics/MetricsSettings.java b/enterprise/metrics/src/main/java/org/neo4j/metrics/MetricsSettings.java index 5e0bb3dfdc89e..b5ba6e32a3dce 100644 --- a/enterprise/metrics/src/main/java/org/neo4j/metrics/MetricsSettings.java +++ b/enterprise/metrics/src/main/java/org/neo4j/metrics/MetricsSettings.java @@ -20,6 +20,7 @@ package org.neo4j.metrics; import java.io.File; +import java.time.Duration; import org.neo4j.configuration.Description; import org.neo4j.configuration.LoadableConfig; @@ -107,7 +108,7 @@ public class MetricsSettings implements LoadableConfig @Description( "The reporting interval for the CSV files. That is, how often new rows with numbers are appended to " + "the CSV files." ) - public static Setting csvInterval = setting( "metrics.csv.interval", Settings.DURATION, "3s" ); + public static Setting csvInterval = setting( "metrics.csv.interval", Settings.DURATION, "3s" ); // Graphite settings @Description( "Set to `true` to enable exporting metrics to Graphite." ) @@ -115,5 +116,5 @@ public class MetricsSettings implements LoadableConfig @Description( "The hostname or IP address of the Graphite server" ) public static Setting graphiteServer = setting( "metrics.graphite.server", Settings.HOSTNAME_PORT, ":2003" ); @Description( "The reporting interval for Graphite. That is, how often to send updated metrics to Graphite." ) - public static Setting graphiteInterval = setting( "metrics.graphite.interval", Settings.DURATION, "3s" ); + public static Setting graphiteInterval = setting( "metrics.graphite.interval", Settings.DURATION, "3s" ); } diff --git a/enterprise/metrics/src/main/java/org/neo4j/metrics/output/CsvOutput.java b/enterprise/metrics/src/main/java/org/neo4j/metrics/output/CsvOutput.java index 359ecdeb8ef89..f97607ea4fdd2 100644 --- a/enterprise/metrics/src/main/java/org/neo4j/metrics/output/CsvOutput.java +++ b/enterprise/metrics/src/main/java/org/neo4j/metrics/output/CsvOutput.java @@ -19,11 +19,6 @@ */ package org.neo4j.metrics.output; -import java.io.File; -import java.io.IOException; -import java.util.SortedMap; -import java.util.concurrent.TimeUnit; - import com.codahale.metrics.Counter; import com.codahale.metrics.CsvReporter; import com.codahale.metrics.Gauge; @@ -34,6 +29,11 @@ import com.codahale.metrics.ScheduledReporter; import com.codahale.metrics.Timer; +import java.io.File; +import java.io.IOException; +import java.util.SortedMap; +import java.util.concurrent.TimeUnit; + import org.neo4j.kernel.configuration.Config; import org.neo4j.kernel.impl.spi.KernelContext; import org.neo4j.kernel.lifecycle.Lifecycle; @@ -81,7 +81,7 @@ public void init() @Override public void start() { - csvReporter.start( config.get( csvInterval ), TimeUnit.MILLISECONDS ); + csvReporter.start( config.get( csvInterval ).toMillis(), TimeUnit.MILLISECONDS ); logger.info( "Sending metrics to CSV file at " + outputPath ); } diff --git a/enterprise/metrics/src/main/java/org/neo4j/metrics/output/EventReporterBuilder.java b/enterprise/metrics/src/main/java/org/neo4j/metrics/output/EventReporterBuilder.java index 7efea3edb1481..1c4d4cca09672 100644 --- a/enterprise/metrics/src/main/java/org/neo4j/metrics/output/EventReporterBuilder.java +++ b/enterprise/metrics/src/main/java/org/neo4j/metrics/output/EventReporterBuilder.java @@ -66,7 +66,7 @@ public CompositeEventReporter build() if ( config.get( graphiteEnabled ) ) { HostnamePort server = config.get( graphiteServer ); - long period = config.get( graphiteInterval ); + long period = config.get( graphiteInterval ).toMillis(); GraphiteOutput graphiteOutput = new GraphiteOutput( server, period, registry, logger, prefix ); reporter.add( graphiteOutput ); life.add( graphiteOutput ); diff --git a/enterprise/pom.xml b/enterprise/pom.xml index c14df1847a53b..7bb273bb61db2 100644 --- a/enterprise/pom.xml +++ b/enterprise/pom.xml @@ -44,7 +44,6 @@ auth-plugin-api deferred-locks ha - cypher @@ -68,4 +67,3 @@ terms of the relevant Commercial Agreement. - diff --git a/enterprise/query-logging/src/main/java/org/neo4j/kernel/impl/query/QueryLoggerKernelExtension.java b/enterprise/query-logging/src/main/java/org/neo4j/kernel/impl/query/QueryLoggerKernelExtension.java index 182b08bc6e729..58e61249612a2 100644 --- a/enterprise/query-logging/src/main/java/org/neo4j/kernel/impl/query/QueryLoggerKernelExtension.java +++ b/enterprise/query-logging/src/main/java/org/neo4j/kernel/impl/query/QueryLoggerKernelExtension.java @@ -39,7 +39,6 @@ import org.neo4j.logging.Log; import org.neo4j.logging.RotatingFileOutputStreamSupplier; -import static java.lang.String.format; import static org.neo4j.io.file.Files.createOrOpenAsOuputStream; @Service.Implementation( KernelExtensionFactory.class ) @@ -86,7 +85,7 @@ public Lifecycle newInstance( @SuppressWarnings( "unused" ) KernelContext contex @Override public void init() throws Throwable { - Long thresholdMillis = config.get( GraphDatabaseSettings.log_queries_threshold ); + Long thresholdMillis = config.get( GraphDatabaseSettings.log_queries_threshold ).toMillis(); Long rotationThreshold = config.get( GraphDatabaseSettings.log_queries_rotation_threshold ); int maxArchives = config.get( GraphDatabaseSettings.log_queries_max_archives ); EnumSet flags = EnumSet.noneOf( QueryLogEntryContent.class ); diff --git a/enterprise/security/src/main/java/org/neo4j/server/security/enterprise/auth/EnterpriseSecurityModule.java b/enterprise/security/src/main/java/org/neo4j/server/security/enterprise/auth/EnterpriseSecurityModule.java index 34daa99b16e9b..3001d6342882c 100644 --- a/enterprise/security/src/main/java/org/neo4j/server/security/enterprise/auth/EnterpriseSecurityModule.java +++ b/enterprise/security/src/main/java/org/neo4j/server/security/enterprise/auth/EnterpriseSecurityModule.java @@ -215,7 +215,7 @@ private static AuthenticationStrategy createAuthenticationStrategy( Config confi private static CacheManager createCacheManager( Config config ) { - long ttl = config.get( SecuritySettings.auth_cache_ttl ); + long ttl = config.get( SecuritySettings.auth_cache_ttl ).toMillis(); int maxCapacity = config.get( SecuritySettings.auth_cache_max_capacity ); return new ShiroCaffeineCache.Manager( Ticker.systemTicker(), ttl, maxCapacity ); } diff --git a/enterprise/security/src/main/java/org/neo4j/server/security/enterprise/auth/LdapRealm.java b/enterprise/security/src/main/java/org/neo4j/server/security/enterprise/auth/LdapRealm.java index 8538fa19eacfb..c26b55a92db49 100644 --- a/enterprise/security/src/main/java/org/neo4j/server/security/enterprise/auth/LdapRealm.java +++ b/enterprise/security/src/main/java/org/neo4j/server/security/enterprise/auth/LdapRealm.java @@ -430,8 +430,8 @@ private void configureRealm( Config config ) { JndiLdapContextFactory contextFactory = new JndiLdapContextFactory(); Map environment = contextFactory.getEnvironment(); - Long connectionTimeoutMillis = config.get( SecuritySettings.ldap_connection_timeout ); - Long readTimeoutMillis = config.get( SecuritySettings.ldap_read_timeout ); + Long connectionTimeoutMillis = config.get( SecuritySettings.ldap_connection_timeout ).toMillis(); + Long readTimeoutMillis = config.get( SecuritySettings.ldap_read_timeout ).toMillis(); environment.put( JNDI_LDAP_CONNECT_TIMEOUT, connectionTimeoutMillis.toString() ); environment.put( JNDI_LDAP_READ_TIMEOUT, readTimeoutMillis.toString() ); contextFactory.setEnvironment( environment ); diff --git a/enterprise/security/src/main/java/org/neo4j/server/security/enterprise/configuration/SecuritySettings.java b/enterprise/security/src/main/java/org/neo4j/server/security/enterprise/configuration/SecuritySettings.java index e5ddf0c435a61..9a2a1cc15f932 100644 --- a/enterprise/security/src/main/java/org/neo4j/server/security/enterprise/configuration/SecuritySettings.java +++ b/enterprise/security/src/main/java/org/neo4j/server/security/enterprise/configuration/SecuritySettings.java @@ -20,6 +20,7 @@ package org.neo4j.server.security.enterprise.configuration; import java.io.File; +import java.time.Duration; import java.util.Arrays; import java.util.List; @@ -143,12 +144,12 @@ public class SecuritySettings implements LoadableConfig @Description( "The timeout for establishing an LDAP connection. If a connection with the LDAP server cannot be " + "established within the given time the attempt is aborted. " + "A value of 0 means to use the network protocol's (i.e., TCP's) timeout value." ) - public static Setting ldap_connection_timeout = + public static Setting ldap_connection_timeout = setting( "dbms.security.ldap.connection_timeout", DURATION, "30s" ); @Description( "The timeout for an LDAP read request (i.e. search). If the LDAP server does not respond within " + "the given time the request will be aborted. A value of 0 means wait for a response indefinitely." ) - public static Setting ldap_read_timeout = + public static Setting ldap_read_timeout = setting( "dbms.security.ldap.read_timeout", DURATION, "30s" ); //----------------------------------------------------- @@ -258,7 +259,7 @@ public class SecuritySettings implements LoadableConfig "external auth providers (LDAP or plugin). Setting the TTL to 0 will disable auth caching. " + "Disabling caching while using the LDAP auth provider requires the use of an LDAP system account " + "for resolving authorization information." ) - public static final Setting auth_cache_ttl = + public static final Setting auth_cache_ttl = setting( "dbms.security.auth_cache_ttl", DURATION, "10m" ); @Description( "The maximum capacity for authentication and authorization caches (respectively)." ) @@ -291,7 +292,7 @@ public class SecuritySettings implements LoadableConfig setting( "dbms.logs.security.rotation.size", BYTES, "20m", min(0L), max( Long.MAX_VALUE ) ); @Description( "Minimum time interval after last rotation of the security log before it may be rotated again." ) - public static final Setting store_security_log_rotation_delay = + public static final Setting store_security_log_rotation_delay = setting( "dbms.logs.security.rotation.delay", DURATION, "300s" ); @Description( "Maximum number of history files for the security log." ) diff --git a/enterprise/security/src/main/java/org/neo4j/server/security/enterprise/log/SecurityLog.java b/enterprise/security/src/main/java/org/neo4j/server/security/enterprise/log/SecurityLog.java index 56ed72b210766..7c723c0eb53fa 100644 --- a/enterprise/security/src/main/java/org/neo4j/server/security/enterprise/log/SecurityLog.java +++ b/enterprise/security/src/main/java/org/neo4j/server/security/enterprise/log/SecurityLog.java @@ -49,7 +49,7 @@ public SecurityLog( Config config, FileSystemAbstraction fileSystem, Executor ex rotatingSupplier = new RotatingFileOutputStreamSupplier( fileSystem, logFile, config.get( SecuritySettings.store_security_log_rotation_threshold ), - config.get( SecuritySettings.store_security_log_rotation_delay ), + config.get( SecuritySettings.store_security_log_rotation_delay ).toMillis(), config.get( SecuritySettings.store_security_log_max_archives ), executor ); FormattedLog formattedLog = builder.toOutputStream( rotatingSupplier ); diff --git a/enterprise/security/src/test/java/org/neo4j/server/security/enterprise/auth/EnterpriseSecurityModuleTest.java b/enterprise/security/src/test/java/org/neo4j/server/security/enterprise/auth/EnterpriseSecurityModuleTest.java index d4d28b29d2f03..8290157516949 100644 --- a/enterprise/security/src/test/java/org/neo4j/server/security/enterprise/auth/EnterpriseSecurityModuleTest.java +++ b/enterprise/security/src/test/java/org/neo4j/server/security/enterprise/auth/EnterpriseSecurityModuleTest.java @@ -24,6 +24,7 @@ import org.junit.Test; import org.junit.rules.ExpectedException; +import java.time.Duration; import java.util.Arrays; import org.neo4j.graphdb.factory.GraphDatabaseSettings; @@ -160,7 +161,7 @@ public void setup() Log mockLog = mock( Log.class ); when( mockLogProvider.getLog( anyString() ) ).thenReturn( mockLog ); when( mockLog.isDebugEnabled() ).thenReturn( true ); - when( config.get( SecuritySettings.auth_cache_ttl ) ).thenReturn( 0L ); + when( config.get( SecuritySettings.auth_cache_ttl ) ).thenReturn( Duration.ZERO ); when( config.get( SecuritySettings.auth_cache_max_capacity ) ).thenReturn( 10 ); when( config.get( SecuritySettings.security_log_successful_authentication ) ).thenReturn( false ); when( config.get( GraphDatabaseSettings.auth_max_failed_attempts ) ).thenReturn( 3 ); diff --git a/enterprise/security/src/test/java/org/neo4j/server/security/enterprise/auth/LdapRealmTest.java b/enterprise/security/src/test/java/org/neo4j/server/security/enterprise/auth/LdapRealmTest.java index 12e23ba2e12d7..dde15fa02cc00 100644 --- a/enterprise/security/src/test/java/org/neo4j/server/security/enterprise/auth/LdapRealmTest.java +++ b/enterprise/security/src/test/java/org/neo4j/server/security/enterprise/auth/LdapRealmTest.java @@ -22,7 +22,6 @@ import org.apache.shiro.authc.AuthenticationInfo; import org.apache.shiro.authc.AuthenticationToken; import org.apache.shiro.authc.SimpleAuthenticationInfo; -import org.apache.shiro.authz.AuthorizationException; import org.apache.shiro.authz.AuthorizationInfo; import org.apache.shiro.authz.SimpleAuthorizationInfo; import org.apache.shiro.realm.ldap.JndiLdapContextFactory; @@ -35,6 +34,7 @@ import org.junit.rules.ExpectedException; import org.mockito.internal.matchers.Any; +import java.time.Duration; import java.util.Collections; import java.util.Set; import java.util.TreeSet; @@ -87,8 +87,8 @@ public void setUp() when( config.get( SecuritySettings.ldap_authentication_enabled ) ).thenReturn( true ); when( config.get( SecuritySettings.ldap_authorization_enabled ) ).thenReturn( true ); when( config.get( SecuritySettings.ldap_authentication_cache_enabled ) ).thenReturn( false ); - when( config.get( SecuritySettings.ldap_connection_timeout ) ).thenReturn( 1000L ); - when( config.get( SecuritySettings.ldap_read_timeout ) ).thenReturn( 1000L ); + when( config.get( SecuritySettings.ldap_connection_timeout ) ).thenReturn( Duration.ofSeconds( 1 ) ); + when( config.get( SecuritySettings.ldap_read_timeout ) ).thenReturn( Duration.ofSeconds( 1 ) ); when( config.get( SecuritySettings.ldap_authorization_connection_pooling ) ).thenReturn( true ); } diff --git a/enterprise/server-enterprise/src/main/java/org/neo4j/server/enterprise/EnterpriseServerSettings.java b/enterprise/server-enterprise/src/main/java/org/neo4j/server/enterprise/EnterpriseServerSettings.java index 0742631636ab6..8fa9c563d7048 100644 --- a/enterprise/server-enterprise/src/main/java/org/neo4j/server/enterprise/EnterpriseServerSettings.java +++ b/enterprise/server-enterprise/src/main/java/org/neo4j/server/enterprise/EnterpriseServerSettings.java @@ -19,6 +19,8 @@ */ package org.neo4j.server.enterprise; +import java.time.Duration; + import org.neo4j.configuration.Description; import org.neo4j.configuration.LoadableConfig; import org.neo4j.graphdb.config.Setting; @@ -35,7 +37,8 @@ public class EnterpriseServerSettings implements LoadableConfig @SuppressWarnings("unused") // accessed from the browser @Description( "Configure the Neo4j Browser to time out logged in users after this idle period. " + "Setting this to 0 indicates no limit." ) - public static final Setting browser_credentialTimeout = setting( "browser.credential_timeout", DURATION, "0" ); + public static final Setting browser_credentialTimeout = setting( "browser.credential_timeout", DURATION, + "0" ); @SuppressWarnings("unused") // accessed from the browser @Description( "Configure the Neo4j Browser to store or not store user credentials." )