Skip to content

Commit

Permalink
Update dependencies of page cache warmer. Change lifecycle of
Browse files Browse the repository at this point in the history
jmx kernel extension.
Pass correct dependency provider into context for non
transactional procedures calls.
  • Loading branch information
MishaDemianenko committed Jun 21, 2018
1 parent 141e6b3 commit 8474ced
Show file tree
Hide file tree
Showing 10 changed files with 51 additions and 84 deletions.
Expand Up @@ -30,11 +30,13 @@
import org.neo4j.kernel.api.StubResourceManager; import org.neo4j.kernel.api.StubResourceManager;
import org.neo4j.kernel.api.security.AnonymousContext; import org.neo4j.kernel.api.security.AnonymousContext;
import org.neo4j.kernel.impl.api.integrationtest.KernelIntegrationTest; import org.neo4j.kernel.impl.api.integrationtest.KernelIntegrationTest;
import org.neo4j.kernel.impl.util.Dependencies;


import static org.neo4j.internal.kernel.api.procs.ProcedureSignature.procedureName; import static org.neo4j.internal.kernel.api.procs.ProcedureSignature.procedureName;


public class AuthProceduresTest extends KernelIntegrationTest public class AuthProceduresTest extends KernelIntegrationTest
{ {
private final Dependencies dependencyResolver = new Dependencies();
@Rule @Rule
public ExpectedException exception = ExpectedException.none(); public ExpectedException exception = ExpectedException.none();


Expand All @@ -54,7 +56,7 @@ public void shouldFailWhenDeprecatedChangePasswordWithStaticAccessModeInDbmsMode
// When // When
dbmsOperations() dbmsOperations()
.procedureCallDbms( procedureName( "dbms", "changePassword" ), .procedureCallDbms( procedureName( "dbms", "changePassword" ),
inputArray, inputArray, dependencyResolver,
AnonymousContext.none().authorize( s -> -1 ), AnonymousContext.none().authorize( s -> -1 ),
resourceTracker ); resourceTracker );
} }
Expand All @@ -72,7 +74,7 @@ public void shouldFailWhenChangePasswordWithStaticAccessModeInDbmsMode() throws


// When // When
dbmsOperations().procedureCallDbms( procedureName( "dbms", "security", "changePassword" ), dbmsOperations().procedureCallDbms( procedureName( "dbms", "security", "changePassword" ),
inputArray, inputArray, dependencyResolver,
AnonymousContext.none().authorize( s -> -1 ), AnonymousContext.none().authorize( s -> -1 ),
resourceTracker ); resourceTracker );
} }
Expand Down
Expand Up @@ -33,6 +33,7 @@
import org.neo4j.kernel.api.ResourceTracker; import org.neo4j.kernel.api.ResourceTracker;
import org.neo4j.kernel.api.StubResourceManager; import org.neo4j.kernel.api.StubResourceManager;
import org.neo4j.kernel.impl.api.integrationtest.KernelIntegrationTest; import org.neo4j.kernel.impl.api.integrationtest.KernelIntegrationTest;
import org.neo4j.kernel.impl.util.Dependencies;


import static org.hamcrest.Matchers.hasItem; import static org.hamcrest.Matchers.hasItem;
import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertArrayEquals;
Expand All @@ -45,14 +46,15 @@
public class BuiltInDbmsProceduresIT extends KernelIntegrationTest public class BuiltInDbmsProceduresIT extends KernelIntegrationTest
{ {
private final ResourceTracker resourceTracker = new StubResourceManager(); private final ResourceTracker resourceTracker = new StubResourceManager();
private final Dependencies dependencyResolver = new Dependencies();


@Test @Test
public void listConfig() throws Exception public void listConfig() throws Exception
{ {
// When // When
RawIterator<Object[],ProcedureException> stream = RawIterator<Object[],ProcedureException> stream =
dbmsOperations().procedureCallDbms( procedureName( "dbms", "listConfig" ), dbmsOperations().procedureCallDbms( procedureName( "dbms", "listConfig" ),
Arrays.asList( "" ).toArray(), Arrays.asList( "" ).toArray(), dependencyResolver,
SecurityContext.AUTH_DISABLED, SecurityContext.AUTH_DISABLED,
resourceTracker ); resourceTracker );


Expand All @@ -79,7 +81,7 @@ public void listConfigWithASpecificConfigName() throws Exception
// When // When
RawIterator<Object[],ProcedureException> stream = RawIterator<Object[],ProcedureException> stream =
dbmsOperations().procedureCallDbms( procedureName( "dbms", "listConfig" ), dbmsOperations().procedureCallDbms( procedureName( "dbms", "listConfig" ),
Arrays.asList( GraphDatabaseSettings.strict_config_validation.name() ).toArray(), Arrays.asList( GraphDatabaseSettings.strict_config_validation.name() ).toArray(), dependencyResolver,
SecurityContext.AUTH_DISABLED, resourceTracker ); SecurityContext.AUTH_DISABLED, resourceTracker );


// Then // Then
Expand All @@ -99,7 +101,7 @@ public void durationAlwaysListedWithUnit() throws Exception
// When // When
RawIterator<Object[],ProcedureException> stream = RawIterator<Object[],ProcedureException> stream =
dbmsOperations().procedureCallDbms( procedureName( "dbms", "listConfig" ), dbmsOperations().procedureCallDbms( procedureName( "dbms", "listConfig" ),
Collections.singletonList( GraphDatabaseSettings.transaction_timeout.name() ).toArray(), Collections.singletonList( GraphDatabaseSettings.transaction_timeout.name() ).toArray(), dependencyResolver,
SecurityContext.AUTH_DISABLED, resourceTracker ); SecurityContext.AUTH_DISABLED, resourceTracker );


// Then // Then
Expand Down
Expand Up @@ -36,6 +36,7 @@
import org.neo4j.kernel.api.ResourceTracker; import org.neo4j.kernel.api.ResourceTracker;
import org.neo4j.kernel.api.StubResourceManager; import org.neo4j.kernel.api.StubResourceManager;
import org.neo4j.kernel.api.security.AnonymousContext; import org.neo4j.kernel.api.security.AnonymousContext;
import org.neo4j.kernel.impl.util.Dependencies;
import org.neo4j.kernel.internal.Version; import org.neo4j.kernel.internal.Version;


import static java.util.Collections.singletonList; import static java.util.Collections.singletonList;
Expand Down Expand Up @@ -283,7 +284,7 @@ public void failWhenCallingNonExistingProcedures()
{ {
// When // When
dbmsOperations().procedureCallDbms( procedureName( "dbms", "iDoNotExist" ), new Object[0], dbmsOperations().procedureCallDbms( procedureName( "dbms", "iDoNotExist" ), new Object[0],
AnonymousContext.none().authorize( s -> -1 ), resourceTracker ); new Dependencies(), AnonymousContext.none().authorize( s -> -1 ), resourceTracker );
fail( "This should never get here" ); fail( "This should never get here" );
} }
catch ( Exception e ) catch ( Exception e )
Expand Down
Expand Up @@ -23,7 +23,6 @@ import java.net.URL
import java.util.function.Predicate import java.util.function.Predicate


import org.eclipse.collections.api.iterator.LongIterator import org.eclipse.collections.api.iterator.LongIterator
import org.eclipse.collections.impl.iterator.ImmutableEmptyLongIterator
import org.neo4j.collection.RawIterator import org.neo4j.collection.RawIterator
import org.neo4j.cypher.InternalException import org.neo4j.cypher.InternalException
import org.neo4j.cypher.internal.compiler.v3_1.MinMaxOrdering.{BY_NUMBER, BY_STRING, BY_VALUE} import org.neo4j.cypher.internal.compiler.v3_1.MinMaxOrdering.{BY_NUMBER, BY_STRING, BY_VALUE}
Expand Down Expand Up @@ -906,8 +905,8 @@ final class TransactionBoundQueryContext(txContext: TransactionalContextWrapper,


override def callDbmsProcedure(name: QualifiedName, args: Seq[Any], allowed: Array[String]) = { override def callDbmsProcedure(name: QualifiedName, args: Seq[Any], allowed: Array[String]) = {
callProcedure(name, args, callProcedure(name, args,
txContext.dbmsOperations.procedureCallDbms(_,_,txContext.securityContext, txContext.dbmsOperations.procedureCallDbms(_,_,txContext.graph.getDependencyResolver, txContext.securityContext,
txContext.resourceTracker)) txContext.resourceTracker))
} }


private def callProcedure(name: QualifiedName, args: Seq[Any], call: KernelProcedureCall) = { private def callProcedure(name: QualifiedName, args: Seq[Any], call: KernelProcedureCall) = {
Expand Down
Expand Up @@ -853,6 +853,7 @@ sealed class TransactionBoundQueryContext(val transactionalContext: Transactiona
callProcedure(args, callProcedure(args,
transactionalContext.dbmsOperations.procedureCallDbms(id, transactionalContext.dbmsOperations.procedureCallDbms(id,
_, _,
transactionalContext.graph.getDependencyResolver,
transactionalContext.securityContext, transactionalContext.securityContext,
transactionalContext.resourceTracker)) transactionalContext.resourceTracker))
} }
Expand Down Expand Up @@ -893,6 +894,7 @@ sealed class TransactionBoundQueryContext(val transactionalContext: Transactiona
callProcedure(args, callProcedure(args,
transactionalContext.dbmsOperations.procedureCallDbms(kn, transactionalContext.dbmsOperations.procedureCallDbms(kn,
_, _,
transactionalContext.graph.getDependencyResolver,
transactionalContext.securityContext, transactionalContext.securityContext,
transactionalContext.resourceTracker)) transactionalContext.resourceTracker))
} }
Expand Down
Expand Up @@ -30,11 +30,11 @@
import org.neo4j.helpers.Service; import org.neo4j.helpers.Service;
import org.neo4j.kernel.impl.transaction.state.DataSourceManager; import org.neo4j.kernel.impl.transaction.state.DataSourceManager;
import org.neo4j.kernel.internal.KernelData; import org.neo4j.kernel.internal.KernelData;
import org.neo4j.kernel.lifecycle.Lifecycle; import org.neo4j.kernel.lifecycle.LifecycleAdapter;
import org.neo4j.logging.Log; import org.neo4j.logging.Log;
import org.neo4j.logging.LogProvider; import org.neo4j.logging.LogProvider;


public class JmxKernelExtension implements Lifecycle public class JmxKernelExtension extends LifecycleAdapter
{ {
private final KernelData kernelData; private final KernelData kernelData;
private final DataSourceManager dataSourceManager; private final DataSourceManager dataSourceManager;
Expand All @@ -51,7 +51,7 @@ public JmxKernelExtension( KernelData kernelData, DataSourceManager dataSourceMa
} }


@Override @Override
public void init() public void start()
{ {
support = ManagementSupport.load(); support = ManagementSupport.load();
mbs = support.getMBeanServer(); mbs = support.getMBeanServer();
Expand Down Expand Up @@ -94,18 +94,8 @@ public void init()
} }
} }


@Override
public void start()
{
}

@Override @Override
public void stop() public void stop()
{
}

@Override
public void shutdown()
{ {
for ( Neo4jMBean bean : beans ) for ( Neo4jMBean bean : beans )
{ {
Expand Down
Expand Up @@ -20,11 +20,11 @@
package org.neo4j.kernel.api.dbms; package org.neo4j.kernel.api.dbms;


import org.neo4j.collection.RawIterator; import org.neo4j.collection.RawIterator;
import org.neo4j.graphdb.DependencyResolver;
import org.neo4j.internal.kernel.api.exceptions.ProcedureException; import org.neo4j.internal.kernel.api.exceptions.ProcedureException;
import org.neo4j.internal.kernel.api.procs.QualifiedName; import org.neo4j.internal.kernel.api.procs.QualifiedName;
import org.neo4j.internal.kernel.api.security.SecurityContext; import org.neo4j.internal.kernel.api.security.SecurityContext;
import org.neo4j.kernel.api.ResourceTracker; import org.neo4j.kernel.api.ResourceTracker;
import org.neo4j.values.AnyValue;


/** /**
* Defines all types of system-oriented operations - i.e. those which do not read from or * Defines all types of system-oriented operations - i.e. those which do not read from or
Expand All @@ -33,30 +33,11 @@
*/ */
public interface DbmsOperations public interface DbmsOperations
{ {
//=================================================
//== PROCEDURE OPERATIONS ==
//=================================================

/** Invoke a DBMS procedure by name */ /** Invoke a DBMS procedure by name */
RawIterator<Object[],ProcedureException> procedureCallDbms( RawIterator<Object[],ProcedureException> procedureCallDbms( QualifiedName name, Object[] input, DependencyResolver dependencyResolver,
QualifiedName name, SecurityContext securityContext, ResourceTracker resourceTracker ) throws ProcedureException;
Object[] input,
SecurityContext securityContext,
ResourceTracker resourceTracker
) throws ProcedureException;


/** Invoke a DBMS procedure by id */ /** Invoke a DBMS procedure by id */
RawIterator<Object[],ProcedureException> procedureCallDbms( RawIterator<Object[],ProcedureException> procedureCallDbms( int id, Object[] input, DependencyResolver dependencyResolver, SecurityContext securityContext,
int id, ResourceTracker resourceTracker ) throws ProcedureException;
Object[] input,
SecurityContext securityContext,
ResourceTracker resourceTracker
) throws ProcedureException;

/** Invoke a DBMS function by name */
AnyValue functionCallDbms(
QualifiedName name,
AnyValue[] input,
SecurityContext securityContext
) throws ProcedureException;
} }
Expand Up @@ -20,15 +20,17 @@
package org.neo4j.kernel.impl.api.dbms; package org.neo4j.kernel.impl.api.dbms;


import org.neo4j.collection.RawIterator; import org.neo4j.collection.RawIterator;
import org.neo4j.graphdb.DependencyResolver;
import org.neo4j.internal.kernel.api.exceptions.ProcedureException; import org.neo4j.internal.kernel.api.exceptions.ProcedureException;
import org.neo4j.internal.kernel.api.procs.QualifiedName; import org.neo4j.internal.kernel.api.procs.QualifiedName;
import org.neo4j.internal.kernel.api.security.SecurityContext; import org.neo4j.internal.kernel.api.security.SecurityContext;
import org.neo4j.kernel.api.ResourceTracker; import org.neo4j.kernel.api.ResourceTracker;
import org.neo4j.kernel.api.dbms.DbmsOperations; import org.neo4j.kernel.api.dbms.DbmsOperations;
import org.neo4j.kernel.api.proc.BasicContext; import org.neo4j.kernel.api.proc.BasicContext;
import org.neo4j.kernel.api.proc.Context;
import org.neo4j.kernel.impl.proc.Procedures; import org.neo4j.kernel.impl.proc.Procedures;
import org.neo4j.values.AnyValue;
import static org.neo4j.kernel.api.proc.Context.DEPENDENCY_RESOLVER;
import static org.neo4j.kernel.api.proc.Context.SECURITY_CONTEXT;


public class NonTransactionalDbmsOperations implements DbmsOperations public class NonTransactionalDbmsOperations implements DbmsOperations
{ {
Expand All @@ -41,40 +43,26 @@ public NonTransactionalDbmsOperations( Procedures procedures )
} }


@Override @Override
public RawIterator<Object[],ProcedureException> procedureCallDbms( public RawIterator<Object[],ProcedureException> procedureCallDbms( QualifiedName name, Object[] input, DependencyResolver dependencyResolver,
QualifiedName name, SecurityContext securityContext, ResourceTracker resourceTracker ) throws ProcedureException
Object[] input,
SecurityContext securityContext,
ResourceTracker resourceTracker
) throws ProcedureException
{ {
BasicContext ctx = new BasicContext(); BasicContext ctx = createContext( securityContext, dependencyResolver );
ctx.put( Context.SECURITY_CONTEXT, securityContext );
return procedures.callProcedure( ctx, name, input, resourceTracker ); return procedures.callProcedure( ctx, name, input, resourceTracker );
} }


@Override @Override
public RawIterator<Object[],ProcedureException> procedureCallDbms( public RawIterator<Object[],ProcedureException> procedureCallDbms( int id, Object[] input, DependencyResolver dependencyResolver,
int id, SecurityContext securityContext, ResourceTracker resourceTracker ) throws ProcedureException
Object[] input,
SecurityContext securityContext,
ResourceTracker resourceTracker
) throws ProcedureException
{ {
BasicContext ctx = new BasicContext(); BasicContext ctx = createContext( securityContext, dependencyResolver );
ctx.put( Context.SECURITY_CONTEXT, securityContext );
return procedures.callProcedure( ctx, id, input, resourceTracker ); return procedures.callProcedure( ctx, id, input, resourceTracker );
} }


@Override private BasicContext createContext( SecurityContext securityContext, DependencyResolver dependencyResolver )
public AnyValue functionCallDbms(
QualifiedName name,
AnyValue[] input,
SecurityContext securityContext
) throws ProcedureException
{ {
BasicContext ctx = new BasicContext(); BasicContext ctx = new BasicContext();
ctx.put( Context.SECURITY_CONTEXT, securityContext ); ctx.put( SECURITY_CONTEXT, securityContext );
return procedures.callFunction( ctx, name, input ); ctx.put( DEPENDENCY_RESOLVER, dependencyResolver );
return ctx;
} }
} }
Expand Up @@ -22,13 +22,12 @@
*/ */
package org.neo4j.kernel.impl.pagecache; package org.neo4j.kernel.impl.pagecache;


import java.util.function.Supplier;

import org.neo4j.graphdb.factory.GraphDatabaseSettings; import org.neo4j.graphdb.factory.GraphDatabaseSettings;
import org.neo4j.io.fs.FileSystemAbstraction; import org.neo4j.io.fs.FileSystemAbstraction;
import org.neo4j.io.pagecache.PageCache; import org.neo4j.io.pagecache.PageCache;
import org.neo4j.kernel.AvailabilityGuard; import org.neo4j.kernel.AvailabilityGuard;
import org.neo4j.kernel.configuration.Config; import org.neo4j.kernel.configuration.Config;
import org.neo4j.kernel.impl.transaction.state.DataSourceManager;
import org.neo4j.kernel.impl.transaction.state.NeoStoreFileListing; import org.neo4j.kernel.impl.transaction.state.NeoStoreFileListing;
import org.neo4j.kernel.lifecycle.LifecycleAdapter; import org.neo4j.kernel.lifecycle.LifecycleAdapter;
import org.neo4j.logging.Log; import org.neo4j.logging.Log;
Expand All @@ -37,18 +36,18 @@
class PageCacheWarmerKernelExtension extends LifecycleAdapter class PageCacheWarmerKernelExtension extends LifecycleAdapter
{ {
private final AvailabilityGuard availabilityGuard; private final AvailabilityGuard availabilityGuard;
private final Supplier<NeoStoreFileListing> fileListing; private final DataSourceManager dataSourceManager;
private final Config config; private final Config config;
private final PageCacheWarmer pageCacheWarmer; private final PageCacheWarmer pageCacheWarmer;
private final WarmupAvailabilityListener availabilityListener; private final WarmupAvailabilityListener availabilityListener;
private volatile boolean started; private volatile boolean started;


PageCacheWarmerKernelExtension( PageCacheWarmerKernelExtension(
JobScheduler scheduler, AvailabilityGuard availabilityGuard, PageCache pageCache, FileSystemAbstraction fs, JobScheduler scheduler, AvailabilityGuard availabilityGuard, PageCache pageCache, FileSystemAbstraction fs,
Supplier<NeoStoreFileListing> fileListing, Log log, PageCacheWarmerMonitor monitor, Config config ) DataSourceManager dataSourceManager, Log log, PageCacheWarmerMonitor monitor, Config config )
{ {
this.availabilityGuard = availabilityGuard; this.availabilityGuard = availabilityGuard;
this.fileListing = fileListing; this.dataSourceManager = dataSourceManager;
this.config = config; this.config = config;
pageCacheWarmer = new PageCacheWarmer( fs, pageCache, scheduler ); pageCacheWarmer = new PageCacheWarmer( fs, pageCache, scheduler );
availabilityListener = new WarmupAvailabilityListener( scheduler, pageCacheWarmer, config, log, monitor ); availabilityListener = new WarmupAvailabilityListener( scheduler, pageCacheWarmer, config, log, monitor );
Expand All @@ -61,7 +60,7 @@ public void start()
{ {
pageCacheWarmer.start(); pageCacheWarmer.start();
availabilityGuard.addListener( availabilityListener ); availabilityGuard.addListener( availabilityListener );
fileListing.get().registerStoreFileProvider( pageCacheWarmer ); getNeoStoreFileListing().registerStoreFileProvider( pageCacheWarmer );
started = true; started = true;
} }
} }
Expand All @@ -77,4 +76,9 @@ public void stop() throws Throwable
started = false; started = false;
} }
} }

private NeoStoreFileListing getNeoStoreFileListing()
{
return dataSourceManager.getDataSource().getDependencyResolver().resolveDependency( NeoStoreFileListing.class );
}
} }
Expand Up @@ -22,8 +22,6 @@
*/ */
package org.neo4j.kernel.impl.pagecache; package org.neo4j.kernel.impl.pagecache;


import java.util.function.Supplier;

import org.neo4j.helpers.Service; import org.neo4j.helpers.Service;
import org.neo4j.io.fs.FileSystemAbstraction; import org.neo4j.io.fs.FileSystemAbstraction;
import org.neo4j.io.pagecache.PageCache; import org.neo4j.io.pagecache.PageCache;
Expand All @@ -32,7 +30,7 @@
import org.neo4j.kernel.extension.KernelExtensionFactory; import org.neo4j.kernel.extension.KernelExtensionFactory;
import org.neo4j.kernel.impl.logging.LogService; import org.neo4j.kernel.impl.logging.LogService;
import org.neo4j.kernel.impl.spi.KernelContext; import org.neo4j.kernel.impl.spi.KernelContext;
import org.neo4j.kernel.impl.transaction.state.NeoStoreFileListing; import org.neo4j.kernel.impl.transaction.state.DataSourceManager;
import org.neo4j.kernel.lifecycle.Lifecycle; import org.neo4j.kernel.lifecycle.Lifecycle;
import org.neo4j.kernel.monitoring.Monitors; import org.neo4j.kernel.monitoring.Monitors;
import org.neo4j.logging.Log; import org.neo4j.logging.Log;
Expand All @@ -52,7 +50,7 @@ public interface Dependencies


FileSystemAbstraction fileSystemAbstraction(); FileSystemAbstraction fileSystemAbstraction();


NeoStoreFileListing fileListing(); DataSourceManager getDataSourceManager();


LogService logService(); LogService logService();


Expand All @@ -73,12 +71,12 @@ public Lifecycle newInstance( KernelContext context, Dependencies deps )
AvailabilityGuard availabilityGuard = deps.availabilityGuard(); AvailabilityGuard availabilityGuard = deps.availabilityGuard();
PageCache pageCache = deps.pageCache(); PageCache pageCache = deps.pageCache();
FileSystemAbstraction fs = deps.fileSystemAbstraction(); FileSystemAbstraction fs = deps.fileSystemAbstraction();
Supplier<NeoStoreFileListing> fileListing = deps::fileListing;
LogService logService = deps.logService(); LogService logService = deps.logService();
DataSourceManager dataSourceManager = deps.getDataSourceManager();
Log log = logService.getInternalLog( PageCacheWarmer.class ); Log log = logService.getInternalLog( PageCacheWarmer.class );
PageCacheWarmerMonitor monitor = deps.monitors().newMonitor( PageCacheWarmerMonitor.class ); PageCacheWarmerMonitor monitor = deps.monitors().newMonitor( PageCacheWarmerMonitor.class );
Config config = deps.config(); Config config = deps.config();
return new PageCacheWarmerKernelExtension( return new PageCacheWarmerKernelExtension(
scheduler, availabilityGuard, pageCache, fs, fileListing, log, monitor, config ); scheduler, availabilityGuard, pageCache, fs, dataSourceManager, log, monitor, config );
} }
} }

0 comments on commit 8474ced

Please sign in to comment.