From ed426bb7ab57cc38c1f29833a2b0fbb1f37842be Mon Sep 17 00:00:00 2001 From: Craig Taverner Date: Thu, 15 Sep 2016 12:01:53 +0200 Subject: [PATCH] Ensure security log is closed on LifeCycle.shutdown --- .../core/EnterpriseCoreEditionModule.java | 2 + .../edge/EnterpriseEdgeEditionModule.java | 2 + .../factory/HighlyAvailableEditionModule.java | 2 + .../enterprise/EnterpriseEditionModule.java | 4 ++ .../kernel/impl/enterprise/SecurityLog.java | 37 +++++++++++-------- 5 files changed, 32 insertions(+), 15 deletions(-) diff --git a/enterprise/core-edge/src/main/java/org/neo4j/coreedge/core/EnterpriseCoreEditionModule.java b/enterprise/core-edge/src/main/java/org/neo4j/coreedge/core/EnterpriseCoreEditionModule.java index b519a4e4113b0..ee26bdadb2306 100644 --- a/enterprise/core-edge/src/main/java/org/neo4j/coreedge/core/EnterpriseCoreEditionModule.java +++ b/enterprise/core-edge/src/main/java/org/neo4j/coreedge/core/EnterpriseCoreEditionModule.java @@ -228,6 +228,8 @@ private void editionInvariants( PlatformModule platformModule, Dependencies depe securityLog = SecurityLog.create( config, logging.getInternalLog( GraphDatabaseFacade.class ), platformModule.fileSystem, platformModule.jobScheduler ); + life.add( securityLog ); + life.add( dependencies.satisfyDependency( createAuthManager( config, logging, platformModule.fileSystem, platformModule.jobScheduler ) ) ); diff --git a/enterprise/core-edge/src/main/java/org/neo4j/coreedge/edge/EnterpriseEdgeEditionModule.java b/enterprise/core-edge/src/main/java/org/neo4j/coreedge/edge/EnterpriseEdgeEditionModule.java index d0b89b287dc51..f278463033a5f 100644 --- a/enterprise/core-edge/src/main/java/org/neo4j/coreedge/edge/EnterpriseEdgeEditionModule.java +++ b/enterprise/core-edge/src/main/java/org/neo4j/coreedge/edge/EnterpriseEdgeEditionModule.java @@ -155,6 +155,8 @@ protected Log authManagerLog() securityLog = SecurityLog.create( config, logging.getInternalLog( GraphDatabaseFacade.class ), platformModule.fileSystem, platformModule.jobScheduler ); + life.add( securityLog ); + life.add( dependencies.satisfyDependency( createAuthManager( config, logging, platformModule.fileSystem, platformModule.jobScheduler ) ) ); 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 b63f9f0f88d1f..d2d394fafa650 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 @@ -515,6 +515,8 @@ public void elected( String role, InstanceId instanceId, URI electedMember ) securityLog = SecurityLog.create( config, logging.getInternalLog( GraphDatabaseFacade.class ), platformModule.fileSystem, platformModule.jobScheduler ); + life.add( securityLog ); + life.add( dependencies.satisfyDependency( createAuthManager( config, logging, platformModule.fileSystem, platformModule.jobScheduler ) ) ); diff --git a/enterprise/kernel/src/main/java/org/neo4j/kernel/impl/enterprise/EnterpriseEditionModule.java b/enterprise/kernel/src/main/java/org/neo4j/kernel/impl/enterprise/EnterpriseEditionModule.java index e3b1e93317721..f0b44c6fbe718 100644 --- a/enterprise/kernel/src/main/java/org/neo4j/kernel/impl/enterprise/EnterpriseEditionModule.java +++ b/enterprise/kernel/src/main/java/org/neo4j/kernel/impl/enterprise/EnterpriseEditionModule.java @@ -63,6 +63,10 @@ public EnterpriseEditionModule( PlatformModule platformModule ) platformModule.dependencies.satisfyDependency( new IdBasedStoreEntityCounters( this.idGeneratorFactory ) ); ioLimiter = new ConfigurableIOLimiter( platformModule.config ); platformModule.dependencies.satisfyDependency( createSessionTracker() ); + if ( securityLog != null ) + { + platformModule.life.add( securityLog ); + } } @Override diff --git a/enterprise/kernel/src/main/java/org/neo4j/kernel/impl/enterprise/SecurityLog.java b/enterprise/kernel/src/main/java/org/neo4j/kernel/impl/enterprise/SecurityLog.java index b728db0582039..9f8d4a6ff57cd 100644 --- a/enterprise/kernel/src/main/java/org/neo4j/kernel/impl/enterprise/SecurityLog.java +++ b/enterprise/kernel/src/main/java/org/neo4j/kernel/impl/enterprise/SecurityLog.java @@ -29,6 +29,7 @@ import org.neo4j.kernel.configuration.Config; import org.neo4j.kernel.impl.enterprise.configuration.EnterpriseEditionSettings; import org.neo4j.kernel.impl.util.JobScheduler; +import org.neo4j.kernel.lifecycle.LifecycleAdapter; import org.neo4j.logging.FormattedLog; import org.neo4j.logging.Log; import org.neo4j.logging.Logger; @@ -38,35 +39,31 @@ import static org.neo4j.helpers.Strings.escape; import static org.neo4j.kernel.impl.enterprise.configuration.EnterpriseEditionSettings.security_log_filename; -public class SecurityLog implements Log +public class SecurityLog extends LifecycleAdapter implements Log { + private RotatingFileOutputStreamSupplier rotatingSupplier; private final Log inner; public SecurityLog( Config config, FileSystemAbstraction fileSystem, Executor executor ) throws IOException - { - this( createLog( config, fileSystem, executor ) ); - } - - public SecurityLog( Log log ) - { - inner = log; - } - - private static AsyncLog createLog( Config config, FileSystemAbstraction fileSystem, Executor executor ) - throws IOException { FormattedLog.Builder builder = FormattedLog.withUTCTimeZone(); File logFile = config.get( security_log_filename ); - RotatingFileOutputStreamSupplier rotatingSupplier = new RotatingFileOutputStreamSupplier( fileSystem, logFile, + rotatingSupplier = new RotatingFileOutputStreamSupplier( fileSystem, logFile, config.get( EnterpriseEditionSettings.store_security_log_rotation_threshold ), config.get( EnterpriseEditionSettings.store_security_log_rotation_delay ), config.get( EnterpriseEditionSettings.store_security_log_max_archives ), executor ); - return new AsyncLog( + this.inner = new AsyncLog( event -> executor.execute( event::process ), builder.toOutputStream( rotatingSupplier ) - ); + ); + } + + /* Only used for tests */ + public SecurityLog( Log log ) + { + inner = log; } private static String withSubject( AuthSubject subject, String msg ) @@ -220,4 +217,14 @@ public static SecurityLog create( Config config, Log log, FileSystemAbstraction return null; } } + + @Override + public void shutdown() throws Throwable + { + if ( this.rotatingSupplier != null ) + { + this.rotatingSupplier.close(); + this.rotatingSupplier = null; + } + } }