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.security.AnonymousContext;
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;

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

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

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

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

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

Expand All @@ -79,7 +81,7 @@ public void listConfigWithASpecificConfigName() throws Exception
// When
RawIterator<Object[],ProcedureException> stream =
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 );

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

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

import static java.util.Collections.singletonList;
Expand Down Expand Up @@ -283,7 +284,7 @@ public void failWhenCallingNonExistingProcedures()
{
// When
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" );
}
catch ( Exception e )
Expand Down
Expand Up @@ -23,7 +23,6 @@ import java.net.URL
import java.util.function.Predicate

import org.eclipse.collections.api.iterator.LongIterator
import org.eclipse.collections.impl.iterator.ImmutableEmptyLongIterator
import org.neo4j.collection.RawIterator
import org.neo4j.cypher.InternalException
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]) = {
callProcedure(name, args,
txContext.dbmsOperations.procedureCallDbms(_,_,txContext.securityContext,
txContext.resourceTracker))
txContext.dbmsOperations.procedureCallDbms(_,_,txContext.graph.getDependencyResolver, txContext.securityContext,
txContext.resourceTracker))
}

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,
transactionalContext.dbmsOperations.procedureCallDbms(id,
_,
transactionalContext.graph.getDependencyResolver,
transactionalContext.securityContext,
transactionalContext.resourceTracker))
}
Expand Down Expand Up @@ -893,6 +894,7 @@ sealed class TransactionBoundQueryContext(val transactionalContext: Transactiona
callProcedure(args,
transactionalContext.dbmsOperations.procedureCallDbms(kn,
_,
transactionalContext.graph.getDependencyResolver,
transactionalContext.securityContext,
transactionalContext.resourceTracker))
}
Expand Down
Expand Up @@ -30,11 +30,11 @@
import org.neo4j.helpers.Service;
import org.neo4j.kernel.impl.transaction.state.DataSourceManager;
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.LogProvider;

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

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

@Override
public void start()
{
}

@Override
public void stop()
{
}

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

import org.neo4j.collection.RawIterator;
import org.neo4j.graphdb.DependencyResolver;
import org.neo4j.internal.kernel.api.exceptions.ProcedureException;
import org.neo4j.internal.kernel.api.procs.QualifiedName;
import org.neo4j.internal.kernel.api.security.SecurityContext;
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
Expand All @@ -33,30 +33,11 @@
*/
public interface DbmsOperations
{
//=================================================
//== PROCEDURE OPERATIONS ==
//=================================================

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

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

/** Invoke a DBMS function by name */
AnyValue functionCallDbms(
QualifiedName name,
AnyValue[] input,
SecurityContext securityContext
) throws ProcedureException;
RawIterator<Object[],ProcedureException> procedureCallDbms( int id, Object[] input, DependencyResolver dependencyResolver, SecurityContext securityContext,
ResourceTracker resourceTracker ) throws ProcedureException;
}
Expand Up @@ -20,15 +20,17 @@
package org.neo4j.kernel.impl.api.dbms;

import org.neo4j.collection.RawIterator;
import org.neo4j.graphdb.DependencyResolver;
import org.neo4j.internal.kernel.api.exceptions.ProcedureException;
import org.neo4j.internal.kernel.api.procs.QualifiedName;
import org.neo4j.internal.kernel.api.security.SecurityContext;
import org.neo4j.kernel.api.ResourceTracker;
import org.neo4j.kernel.api.dbms.DbmsOperations;
import org.neo4j.kernel.api.proc.BasicContext;
import org.neo4j.kernel.api.proc.Context;
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
{
Expand All @@ -41,40 +43,26 @@ public NonTransactionalDbmsOperations( Procedures procedures )
}

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

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

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

import java.util.function.Supplier;

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

PageCacheWarmerKernelExtension(
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.fileListing = fileListing;
this.dataSourceManager = dataSourceManager;
this.config = config;
pageCacheWarmer = new PageCacheWarmer( fs, pageCache, scheduler );
availabilityListener = new WarmupAvailabilityListener( scheduler, pageCacheWarmer, config, log, monitor );
Expand All @@ -61,7 +60,7 @@ public void start()
{
pageCacheWarmer.start();
availabilityGuard.addListener( availabilityListener );
fileListing.get().registerStoreFileProvider( pageCacheWarmer );
getNeoStoreFileListing().registerStoreFileProvider( pageCacheWarmer );
started = true;
}
}
Expand All @@ -77,4 +76,9 @@ public void stop() throws Throwable
started = false;
}
}

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

import java.util.function.Supplier;

import org.neo4j.helpers.Service;
import org.neo4j.io.fs.FileSystemAbstraction;
import org.neo4j.io.pagecache.PageCache;
Expand All @@ -32,7 +30,7 @@
import org.neo4j.kernel.extension.KernelExtensionFactory;
import org.neo4j.kernel.impl.logging.LogService;
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.monitoring.Monitors;
import org.neo4j.logging.Log;
Expand All @@ -52,7 +50,7 @@ public interface Dependencies

FileSystemAbstraction fileSystemAbstraction();

NeoStoreFileListing fileListing();
DataSourceManager getDataSourceManager();

LogService logService();

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