Skip to content

Commit

Permalink
Remove of old fake clock.
Browse files Browse the repository at this point in the history
Introduce clock that capable to provide nanoseconds.
  • Loading branch information
MishaDemianenko committed Aug 25, 2016
1 parent 673dd15 commit abae927
Show file tree
Hide file tree
Showing 63 changed files with 292 additions and 289 deletions.
23 changes: 19 additions & 4 deletions community/common/src/main/java/org/neo4j/time/FakeClock.java
Expand Up @@ -28,9 +28,18 @@
/**
* A {@link java.time.Clock} that is manually controlled.
*/
public class FakeClock extends Clock
public class FakeClock extends SystemNanoClock
{
private long millis = 0;
private long nanos = 0;

public FakeClock()
{
}

public FakeClock( long delta, TimeUnit unit )
{
forward( delta, unit );
}

@Override
public ZoneId getZone()
Expand All @@ -47,12 +56,18 @@ public Clock withZone( ZoneId zone )
@Override
public Instant instant()
{
return Instant.ofEpochMilli( millis );
return Instant.ofEpochMilli( TimeUnit.NANOSECONDS.toMillis( nanos ) );
}

@Override
public long nanos()
{
return nanos;
}

public FakeClock forward( long delta, TimeUnit unit )
{
millis += unit.toMillis( delta );
nanos += unit.toNanos( delta );
return this;
}
}
58 changes: 58 additions & 0 deletions community/common/src/main/java/org/neo4j/time/SystemNanoClock.java
@@ -0,0 +1,58 @@
/*
* Copyright (c) 2002-2016 "Neo Technology,"
* Network Engine for Objects in Lund AB [http://neotechnology.com]
*
* This file is part of Neo4j.
*
* Neo4j is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.neo4j.time;

import java.time.Clock;
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZoneOffset;

public class SystemNanoClock extends Clock
{
public static final SystemNanoClock INSTANCE = new SystemNanoClock();

protected SystemNanoClock()
{
// please use shared instance
}

@Override
public ZoneId getZone()
{
return ZoneOffset.UTC;
}

@Override
public Clock withZone( ZoneId zone )
{
throw new UnsupportedOperationException( "Zone update is not supported." );
}

@Override
public Instant instant()
{
return Instant.now();
}

public long nanos()
{
return System.nanoTime();
}
}
Expand Up @@ -23,6 +23,7 @@
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.time.Clock;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
Expand All @@ -34,7 +35,6 @@
import org.neo4j.graphdb.ResourceIterator;
import org.neo4j.graphdb.config.Setting;
import org.neo4j.graphdb.factory.GraphDatabaseSettings;
import org.neo4j.helpers.Clock;
import org.neo4j.helpers.Exceptions;
import org.neo4j.helpers.collection.Visitor;
import org.neo4j.io.fs.FileSystemAbstraction;
Expand Down Expand Up @@ -660,7 +660,7 @@ public long getTimestampForVersion( long version ) throws IOException

long timeMillisThreshold = config.get( GraphDatabaseSettings.check_point_interval_time );
TimeCheckPointThreshold timeCheckPointThreshold =
new TimeCheckPointThreshold( timeMillisThreshold, Clock.SYSTEM_CLOCK );
new TimeCheckPointThreshold( timeMillisThreshold, Clock.systemUTC() );

CheckPointThreshold threshold =
CheckPointThresholds.or( countCommittedTransactionThreshold, timeCheckPointThreshold );
Expand Down Expand Up @@ -795,7 +795,7 @@ private KernelModule buildKernel( TransactionAppender appender,
KernelTransactions kernelTransactions = life.add( new KernelTransactions( statementLocksFactory,
constraintIndexCreator, statementOperations, schemaWriteGuard, transactionHeaderInformationFactory,
transactionCommitProcess, indexConfigStore, legacyIndexProviderLookup, hooks, transactionMonitor, life,
tracers, storageEngine, procedures, transactionIdStore, Clock.SYSTEM_CLOCK ) );
tracers, storageEngine, procedures, transactionIdStore, Clock.systemUTC() ) );

final Kernel kernel = new Kernel( kernelTransactions, hooks, databaseHealth, transactionMonitor, procedures );

Expand Down
Expand Up @@ -22,7 +22,6 @@
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicLong;

import org.neo4j.helpers.Clock;
import org.neo4j.kernel.impl.transaction.tracing.CommitEvent;
import org.neo4j.kernel.impl.transaction.tracing.LogAppendEvent;
import org.neo4j.kernel.impl.transaction.tracing.LogForceEvent;
Expand All @@ -33,6 +32,7 @@
import org.neo4j.kernel.impl.transaction.tracing.TransactionEvent;
import org.neo4j.kernel.impl.transaction.tracing.TransactionTracer;
import org.neo4j.kernel.impl.util.JobScheduler;
import org.neo4j.time.SystemNanoClock;

public class DefaultTransactionTracer implements TransactionTracer, LogRotationMonitor
{
Expand All @@ -41,7 +41,7 @@ public interface Monitor
void lastLogRotationEventDuration( long millis );
}

private final Clock clock;
private final SystemNanoClock clock;
private final Monitor monitor;
private final JobScheduler jobScheduler;

Expand Down Expand Up @@ -75,7 +75,7 @@ public void setLogRotated( boolean logRotated )
@Override
public LogRotateEvent beginLogRotate()
{
startTimeNanos = clock.nanoTime();
startTimeNanos = clock.nanos();
return logRotateEvent;
}

Expand Down Expand Up @@ -155,10 +155,10 @@ public void setReadOnly( boolean wasReadOnly )

public DefaultTransactionTracer( Monitor monitor, JobScheduler jobScheduler )
{
this( Clock.SYSTEM_CLOCK, monitor, jobScheduler );
this( SystemNanoClock.INSTANCE, monitor, jobScheduler );
}

public DefaultTransactionTracer( Clock clock, Monitor monitor, JobScheduler jobScheduler )
public DefaultTransactionTracer( SystemNanoClock clock, Monitor monitor, JobScheduler jobScheduler )
{
this.clock = clock;
this.monitor = monitor;
Expand Down Expand Up @@ -186,7 +186,7 @@ public long logRotationAccumulatedTotalTimeMillis()
private void updateCountersAndNotifyListeners()
{
counter.incrementAndGet();
long lastEventTime = clock.nanoTime() - startTimeNanos;
long lastEventTime = clock.nanos() - startTimeNanos;
accumulatedTotalTimeNanos.addAndGet( lastEventTime );
jobScheduler.schedule( JobScheduler.Groups.metricsEvent, () -> {
long millis = TimeUnit.NANOSECONDS.toMillis( lastEventTime );
Expand Down
Expand Up @@ -19,6 +19,7 @@
*/
package org.neo4j.kernel.impl.api;

import java.time.Clock;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
Expand All @@ -28,7 +29,6 @@

import org.neo4j.collection.pool.Pool;
import org.neo4j.graphdb.TransactionTerminatedException;
import org.neo4j.helpers.Clock;
import org.neo4j.kernel.api.KernelTransaction;
import org.neo4j.kernel.api.KeyReadTokenNameLookup;
import org.neo4j.kernel.api.exceptions.ConstraintViolationTransactionFailureException;
Expand Down Expand Up @@ -215,7 +215,7 @@ public KernelTransactionImplementation initialize(
this.terminationReason = null;
this.closing = closed = failure = success = beforeHookInvoked = false;
this.writeState = TransactionWriteState.NONE;
this.startTimeMillis = clock.currentTimeMillis();
this.startTimeMillis = clock.millis();
this.lastTransactionIdWhenStarted = lastCommittedTx;
this.lastTransactionTimestampWhenStarted = lastTimeStamp;
this.transactionEvent = tracer.beginTransaction();
Expand Down Expand Up @@ -564,7 +564,7 @@ private long commit() throws TransactionFailureException
PhysicalTransactionRepresentation transactionRepresentation =
new PhysicalTransactionRepresentation( extractedCommands );
TransactionHeaderInformation headerInformation = headerInformationFactory.create();
long timeCommitted = clock.currentTimeMillis();
long timeCommitted = clock.millis();
transactionRepresentation.setHeader( headerInformation.getAdditionalHeader(),
headerInformation.getMasterId(),
headerInformation.getAuthorId(),
Expand Down
Expand Up @@ -19,6 +19,7 @@
*/
package org.neo4j.kernel.impl.api;

import java.time.Clock;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.locks.ReentrantReadWriteLock;
Expand All @@ -28,7 +29,6 @@
import org.neo4j.collection.pool.MarshlandPool;
import org.neo4j.function.Factory;
import org.neo4j.graphdb.DatabaseShutdownException;
import org.neo4j.helpers.Clock;
import org.neo4j.kernel.api.KernelTransaction;
import org.neo4j.kernel.api.KernelTransactionHandle;
import org.neo4j.kernel.api.exceptions.Status;
Expand Down Expand Up @@ -256,7 +256,7 @@ private void assertDatabaseIsRunning()
@Override
public KernelTransactionsSnapshot get()
{
return new KernelTransactionsSnapshot( activeTransactions(), clock.currentTimeMillis() );
return new KernelTransactionsSnapshot( activeTransactions(), clock.millis() );
}

/**
Expand Down
Expand Up @@ -22,9 +22,9 @@
import java.io.File;
import java.io.IOException;
import java.nio.file.OpenOption;
import java.time.Clock;
import java.util.concurrent.atomic.AtomicLong;

import org.neo4j.helpers.Clock;
import org.neo4j.helpers.collection.Visitor;
import org.neo4j.io.pagecache.PageCache;
import org.neo4j.io.pagecache.PageCursor;
Expand Down Expand Up @@ -155,7 +155,7 @@ public String description()
super( fileName, conf, IdType.NEOSTORE_BLOCK, idGeneratorFactory, pageCache, logProvider,
TYPE_DESCRIPTOR, recordFormat, NoStoreHeaderFormat.NO_STORE_HEADER_FORMAT, storeVersion, openOptions );
this.transactionCloseWaitLogger = new CappedLogger( logProvider.getLog( MetaDataStore.class ) );
transactionCloseWaitLogger.setTimeLimit( 30, SECONDS, Clock.SYSTEM_CLOCK );
transactionCloseWaitLogger.setTimeLimit( 30, SECONDS, Clock.systemUTC() );
}

@Override
Expand Down
Expand Up @@ -21,10 +21,10 @@

import java.io.File;
import java.io.IOException;
import java.time.Clock;
import java.util.Optional;

import org.neo4j.graphdb.factory.GraphDatabaseSettings;
import org.neo4j.helpers.Clock;
import org.neo4j.io.fs.FileSystemAbstraction;
import org.neo4j.io.pagecache.PageCache;
import org.neo4j.kernel.configuration.Config;
Expand Down Expand Up @@ -115,7 +115,7 @@ public void rotationFailed( File source, File target, Headers headers, Exception
log.error( format( "Failed to rotate counts store at transaction %d to [%s], from [%s].",
headers.get( FileVersion.FILE_VERSION ).txId, target, source ), e );
}
}, new RotationTimerFactory( Clock.SYSTEM_CLOCK,
}, new RotationTimerFactory( Clock.systemUTC(),
config.get( GraphDatabaseSettings.counts_store_rotation_timeout ) ), 16, 16, HEADER_FIELDS );
}

Expand Down
Expand Up @@ -19,7 +19,7 @@
*/
package org.neo4j.kernel.impl.store.kvstore;

import org.neo4j.helpers.Clock;
import java.time.Clock;

public class RotationTimerFactory
{
Expand All @@ -34,7 +34,7 @@ public RotationTimerFactory( Clock clock, long timeoutMillis )

public RotationTimer createTimer()
{
long startTime = clock.currentTimeMillis();
long startTime = clock.millis();
return new RotationTimer( startTime, startTime + timeoutMillis );
}

Expand All @@ -51,12 +51,12 @@ public RotationTimer( long startTime, long timeoutTime )

public boolean isTimedOut()
{
return clock.currentTimeMillis() > timeoutTime;
return clock.millis() > timeoutTime;
}

public long getElapsedTimeMillis()
{
return clock.currentTimeMillis() - startTime;
return clock.millis() - startTime;
}

}
Expand Down
Expand Up @@ -22,12 +22,12 @@
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicLong;

import org.neo4j.helpers.Clock;
import org.neo4j.kernel.impl.transaction.tracing.CheckPointTracer;
import org.neo4j.kernel.impl.transaction.tracing.LogCheckPointEvent;
import org.neo4j.kernel.impl.transaction.tracing.LogForceEvent;
import org.neo4j.kernel.impl.transaction.tracing.LogForceWaitEvent;
import org.neo4j.kernel.impl.util.JobScheduler;
import org.neo4j.time.SystemNanoClock;

public class DefaultCheckPointerTracer implements CheckPointTracer, CheckPointerMonitor
{
Expand All @@ -36,7 +36,7 @@ public interface Monitor
void lastCheckPointEventDuration( long millis );
}

private final Clock clock;
private final SystemNanoClock clock;
private final Monitor monitor;
private final JobScheduler jobScheduler;

Expand Down Expand Up @@ -68,10 +68,10 @@ public LogForceEvent beginLogForce()

public DefaultCheckPointerTracer( Monitor monitor, JobScheduler jobScheduler )
{
this( Clock.SYSTEM_CLOCK, monitor, jobScheduler );
this( SystemNanoClock.INSTANCE, monitor, jobScheduler );
}

public DefaultCheckPointerTracer( Clock clock, Monitor monitor, JobScheduler jobScheduler )
public DefaultCheckPointerTracer( SystemNanoClock clock, Monitor monitor, JobScheduler jobScheduler )
{
this.clock = clock;
this.monitor = monitor;
Expand All @@ -81,7 +81,7 @@ public DefaultCheckPointerTracer( Clock clock, Monitor monitor, JobScheduler job
@Override
public LogCheckPointEvent beginCheckPoint()
{
startTimeNanos = clock.nanoTime();
startTimeNanos = clock.nanos();
return logCheckPointEvent;
}

Expand All @@ -99,7 +99,7 @@ public long checkPointAccumulatedTotalTimeMillis()

private void updateCountersAndNotifyListeners()
{
final long lastEventTime = clock.nanoTime() - startTimeNanos;
final long lastEventTime = clock.nanos() - startTimeNanos;

// update counters
counter.incrementAndGet();
Expand Down

0 comments on commit abae927

Please sign in to comment.