Skip to content

Commit

Permalink
Update metrics plugin to follow resolve all it's external dependency …
Browse files Browse the repository at this point in the history
…during instantiation.

Move dependency resolution to plugin construction phase to follow expected dependency
resolution contract: all external dependencies should be resolved during
plugin instantiation, instead of followed lifecycle phases.
  • Loading branch information
MishaDemianenko committed Jan 26, 2017
1 parent 8569bfc commit 52ff5c8
Show file tree
Hide file tree
Showing 2 changed files with 78 additions and 22 deletions.
Expand Up @@ -34,36 +34,26 @@
public class MetricsExtension implements Lifecycle
{
private final LifeSupport life = new LifeSupport();
private final MetricsKernelExtensionFactory.Dependencies dependencies;
private final LogService logService;
private final Config configuration;
private final KernelContext kernelContext;
private Log logger;
private CompositeEventReporter reporter;
private boolean metricsBuilt;

public MetricsExtension( KernelContext kernelContext, MetricsKernelExtensionFactory.Dependencies dependencies )
MetricsExtension( KernelContext kernelContext, MetricsKernelExtensionFactory.Dependencies dependencies )
{
this.kernelContext = kernelContext;
this.dependencies = dependencies;
this.logService = dependencies.logService();
this.configuration = dependencies.configuration();
LogService logService = dependencies.logService();
Config configuration = dependencies.configuration();
logger = logService.getUserLog( getClass() );

MetricRegistry registry = new MetricRegistry();
reporter = new EventReporterBuilder( configuration, registry, logger, kernelContext, life ).build();
metricsBuilt = new Neo4jMetricsBuilder( registry, reporter, configuration, logService, kernelContext,
dependencies, life ).build();
}

@Override
public void init()
{
Log logger = logService.getUserLog( getClass() );
logger.info( "Initiating metrics..." );

// Setup metrics
final MetricRegistry registry = new MetricRegistry();

// Setup output
CompositeEventReporter reporter =
new EventReporterBuilder( configuration, registry, logger, kernelContext, life ).build();

// Setup metric gathering
boolean metricsBuilt = new Neo4jMetricsBuilder(
registry, reporter, configuration, logService, kernelContext, dependencies, life ).build();

if ( metricsBuilt && reporter.isEmpty() )
{
logger.warn( "Several metrics were enabled but no exporting option was configured to report values to. " +
Expand Down
@@ -0,0 +1,66 @@
/*
* Copyright (c) 2002-2017 "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.unsafe.impl.batchimport.store;

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

import java.io.File;

import org.neo4j.helpers.collection.MapUtil;
import org.neo4j.io.fs.DefaultFileSystemAbstraction;
import org.neo4j.kernel.configuration.Config;
import org.neo4j.kernel.impl.logging.SimpleLogService;
import org.neo4j.kernel.impl.store.format.RecordFormatSelector;
import org.neo4j.logging.AssertableLogProvider;
import org.neo4j.metrics.MetricsExtension;
import org.neo4j.metrics.MetricsSettings;
import org.neo4j.test.rule.TestDirectory;
import org.neo4j.test.rule.fs.DefaultFileSystemRule;
import org.neo4j.unsafe.impl.batchimport.AdditionalInitialIds;
import org.neo4j.unsafe.impl.batchimport.Configuration;

public class BatchingNeoStoresIT
{

@Rule
public TestDirectory testDirectory = TestDirectory.testDirectory();
@Rule
public DefaultFileSystemRule fileSystemRule = new DefaultFileSystemRule();

@Test
public void startBatchingNeoStoreWithMetricsPluginEnabled() throws Exception
{
DefaultFileSystemAbstraction fileSystem = fileSystemRule.get();
File storeDir = testDirectory.graphDbDir();
Config config = Config.defaults()
.with( MapUtil.stringMap( MetricsSettings.metricsEnabled.name(), "true" ) );
AssertableLogProvider provider = new AssertableLogProvider();
SimpleLogService logService = new SimpleLogService( provider, provider );

try ( BatchingNeoStores batchingNeoStores = BatchingNeoStores
.batchingNeoStores( fileSystem, storeDir, RecordFormatSelector.defaultFormat(), Configuration.DEFAULT,
logService, AdditionalInitialIds.EMPTY, config ) )
{
// empty block
}
provider.assertNone( AssertableLogProvider.inLog( MetricsExtension.class ).any() );
}
}

0 comments on commit 52ff5c8

Please sign in to comment.