Skip to content

Commit

Permalink
Change how different editions register their procedures
Browse files Browse the repository at this point in the history
  • Loading branch information
systay committed Sep 14, 2016
1 parent 332364d commit 1aa34a2
Show file tree
Hide file tree
Showing 10 changed files with 125 additions and 48 deletions.
Expand Up @@ -256,11 +256,9 @@ protected void registerRecovery( final DatabaseInfo databaseInfo, LifeSupport li
}

@Override
public void setupProcedures( Procedures procedures ) throws KernelException
public void registerEditionSpecificProcedures( Procedures procedures ) throws KernelException
{
// If you change this, don't forget to update the HA and Core|Edge editions, too
procedures.registerProcedure( org.neo4j.kernel.builtinprocs.BuiltInProcedures.class );
registerProceduresFromProvider( "auth-procedures-provider", procedures );
// Community does not add any extra procedures
}

@Override
Expand Down
Expand Up @@ -34,7 +34,6 @@
import org.neo4j.graphdb.factory.GraphDatabaseSettings;
import org.neo4j.graphdb.spatial.Geometry;
import org.neo4j.graphdb.spatial.Point;
import org.neo4j.helpers.Service;
import org.neo4j.io.fs.FileSystemAbstraction;
import org.neo4j.io.pagecache.PageCache;
import org.neo4j.kernel.AvailabilityGuard;
Expand Down Expand Up @@ -411,7 +410,7 @@ private Procedures setupProcedures( PlatformModule platform, EditionModule editi
// Edition procedures
try
{
editionModule.setupProcedures( procedures );
editionModule.registerCrossEditionProcedures( procedures );
}
catch ( KernelException e )
{
Expand Down
Expand Up @@ -21,7 +21,6 @@

import java.util.List;
import java.util.ArrayList;
import java.util.Optional;
import java.util.stream.StreamSupport;

import org.neo4j.graphdb.DependencyResolver;
Expand Down Expand Up @@ -68,7 +67,15 @@
*/
public abstract class EditionModule
{
public abstract void setupProcedures( Procedures procedures ) throws KernelException;
public void registerCrossEditionProcedures( Procedures procedures ) throws KernelException
{
procedures.registerProcedure( org.neo4j.kernel.builtinprocs.BuiltInProcedures.class );
registerProceduresFromProvider( "auth-procedures-provider", procedures );

registerEditionSpecificProcedures( procedures );
}

protected abstract void registerEditionSpecificProcedures( Procedures procedures ) throws KernelException;

protected Log authManagerLog()
{
Expand Down
Expand Up @@ -62,7 +62,7 @@ public void shouldFailWhenAuthEnabledAndNoAuthManagerServiceFound()
// When
new EditionModule() {
@Override
public void setupProcedures( Procedures procedures ) throws KernelException
public void registerEditionSpecificProcedures( Procedures procedures ) throws KernelException
{

}
Expand Down
22 changes: 15 additions & 7 deletions enterprise/core-edge/pom.xml
Expand Up @@ -152,13 +152,21 @@
<version>${project.version}</version>
</dependency>

<dependency>
<groupId>org.neo4j</groupId>
<artifactId>neo4j-backup</artifactId>
<version>${project.version}</version>
<type>test-jar</type>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.neo4j</groupId>
<artifactId>neo4j-backup</artifactId>
<version>${project.version}</version>
<type>test-jar</type>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.neo4j</groupId>
<artifactId>neo4j-cypher</artifactId>
<version>${project.version}</version>
<type>test-jar</type>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.mockito</groupId>
Expand Down
Expand Up @@ -110,25 +110,18 @@ public enum RaftLogImplementation
}

@Override
public void setupProcedures( Procedures procedures ) throws KernelException
public void registerEditionSpecificProcedures( Procedures procedures ) throws KernelException
{
try
{
procedures.registerComponent( SecurityLog.class, (ctx) -> securityLog );
registerProceduresFromProvider( "auth-procedures-provider", procedures );
registerProceduresFromProvider( "enterprise-auth-procedures-provider", procedures );

procedures.registerProcedure( org.neo4j.kernel.builtinprocs.BuiltInProcedures.class );
procedures.registerProcedure( org.neo4j.kernel.enterprise.builtinprocs.BuiltInProcedures.class );
procedures.register( new DiscoverEndpointAcquisitionServersProcedure( topologyService, logProvider ) );
procedures.register( new AcquireEndpointsProcedure( topologyService, consensusModule.raftMachine(), logProvider ) );
procedures.register( new ClusterOverviewProcedure( topologyService, consensusModule.raftMachine(), logProvider ) );
procedures.register( new CoreRoleProcedure( consensusModule.raftMachine()) );
}
catch ( ProcedureException e )
{
throw new RuntimeException( e );
}
procedures.registerComponent( SecurityLog.class, ( ctx ) -> securityLog );
registerProceduresFromProvider( "enterprise-auth-procedures-provider", procedures );

procedures.registerProcedure( org.neo4j.kernel.enterprise.builtinprocs.BuiltInProcedures.class );
procedures.register( new DiscoverEndpointAcquisitionServersProcedure( topologyService, logProvider ) );
procedures.register(
new AcquireEndpointsProcedure( topologyService, consensusModule.raftMachine(), logProvider ) );
procedures.register(
new ClusterOverviewProcedure( topologyService, consensusModule.raftMachine(), logProvider ) );
procedures.register( new CoreRoleProcedure( consensusModule.raftMachine() ) );
}

@Override
Expand Down
Expand Up @@ -102,14 +102,12 @@ public class EnterpriseEdgeEditionModule extends EditionModule
private SecurityLog securityLog;

@Override
public void setupProcedures( Procedures procedures ) throws KernelException
public void registerEditionSpecificProcedures( Procedures procedures ) throws KernelException
{
procedures.registerProcedure( org.neo4j.kernel.builtinprocs.BuiltInProcedures.class );
procedures.registerProcedure( org.neo4j.kernel.enterprise.builtinprocs.BuiltInProcedures.class );
procedures.register( new EdgeRoleProcedure() );

procedures.registerComponent( SecurityLog.class, (ctx) -> securityLog );
registerProceduresFromProvider( "auth-procedures-provider" , procedures );
registerProceduresFromProvider( "enterprise-auth-procedures-provider", procedures );
}

Expand Down
@@ -0,0 +1,81 @@
/*
* 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 Affero 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.neo4j.coreedge.scenarios;

import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;

import org.neo4j.coreedge.core.CoreGraphDatabase;
import org.neo4j.coreedge.discovery.Cluster;
import org.neo4j.coreedge.discovery.CoreClusterMember;
import org.neo4j.coreedge.discovery.EdgeClusterMember;
import org.neo4j.graphdb.Result;
import org.neo4j.kernel.api.KernelTransaction;
import org.neo4j.kernel.enterprise.api.security.EnterpriseAuthSubject;
import org.neo4j.kernel.impl.coreapi.InternalTransaction;
import org.neo4j.test.coreedge.ClusterRule;

import static org.junit.Assert.assertTrue;

public class CoreEdgeProceduresIT
{
@Rule
public final ClusterRule clusterRule = new ClusterRule( getClass() )
.withNumberOfCoreMembers( 2 )
.withNumberOfEdgeMembers( 1 );

private Cluster cluster;

@Before
public void setup() throws Exception
{
cluster = clusterRule.startCluster();
}

@Test
public void testThatProceduresAreAvailable() throws Throwable
{
String[] procs = new String[]{
"dbms.procedures", // Kernel built procedures
// "dbms.security.listUsers", // Security procedure from community
"dbms.listQueries" // Built in procedure from enterprise
};

for ( String procedure : procs )
{
CoreClusterMember coreClusterMember = cluster.coreMembers().stream().findFirst().get();
CoreGraphDatabase database = coreClusterMember.database();
InternalTransaction tx =
database.beginTransaction( KernelTransaction.Type.explicit, EnterpriseAuthSubject.AUTH_DISABLED );
Result coreResult = database.execute( "CALL " + procedure + "()" );
assertTrue( "core with procedure " + procedure, coreResult.hasNext() );
coreResult.close();
tx.close();


EdgeClusterMember edgeClusterMember = cluster.edgeMembers().stream().findFirst().get();
Result edgeResult = edgeClusterMember.database().execute( "CALL " + procedure + "()" );

assertTrue( "edge with procedure " + procedure, coreResult.hasNext() );
edgeResult.close();
}
}
}
Expand Up @@ -194,13 +194,11 @@ protected Log authManagerLog()
}

@Override
public void setupProcedures( Procedures procedures ) throws KernelException
public void registerEditionSpecificProcedures( Procedures procedures ) throws KernelException
{
procedures.registerProcedure( org.neo4j.kernel.builtinprocs.BuiltInProcedures.class );
procedures.registerProcedure( org.neo4j.kernel.enterprise.builtinprocs.BuiltInProcedures.class );

procedures.registerComponent( SecurityLog.class, (ctx) -> securityLog );
registerProceduresFromProvider( "auth-procedures-provider", procedures );
registerProceduresFromProvider( "enterprise-auth-procedures-provider", procedures );
}

Expand Down
Expand Up @@ -19,8 +19,6 @@
*/
package org.neo4j.kernel.impl.enterprise;

import java.io.IOException;

import org.neo4j.io.fs.FileSystemAbstraction;
import org.neo4j.kernel.api.bolt.BoltConnectionTracker;
import org.neo4j.kernel.api.exceptions.KernelException;
Expand Down Expand Up @@ -49,19 +47,16 @@
*/
public class EnterpriseEditionModule extends CommunityEditionModule
{
private SecurityLog securityLog;

@Override
public void setupProcedures( Procedures procedures ) throws KernelException
public void registerEditionSpecificProcedures( Procedures procedures ) throws KernelException
{
super.setupProcedures( procedures );
// If you change this, don't forget to update the HA and Core|Edge editions, too
procedures.registerProcedure( org.neo4j.kernel.enterprise.builtinprocs.BuiltInProcedures.class );

procedures.registerComponent( SecurityLog.class, (ctx) -> securityLog );
registerProceduresFromProvider( "enterprise-auth-procedures-provider", procedures );
}

private SecurityLog securityLog;

public EnterpriseEditionModule( PlatformModule platformModule )
{
super( platformModule );
Expand Down

0 comments on commit 1aa34a2

Please sign in to comment.