Skip to content

Commit

Permalink
Small performance improvement. Don't copy all files each time.
Browse files Browse the repository at this point in the history
  • Loading branch information
Jesse Eichar committed Feb 18, 2014
1 parent ea5254b commit 642bcc1
Show file tree
Hide file tree
Showing 6 changed files with 80 additions and 19 deletions.
84 changes: 70 additions & 14 deletions core/src/test/java/org/fao/geonet/AbstractCoreIntegrationTest.java
@@ -1,7 +1,7 @@
package org.fao.geonet;

import com.google.common.collect.FluentIterable;
import com.google.common.collect.Lists;
import com.google.common.collect.TreeTraverser;
import com.google.common.io.Files;
import com.vividsolutions.jts.geom.MultiPolygon;
import jeeves.constants.ConfigFile;
Expand All @@ -10,7 +10,6 @@
import jeeves.server.context.ServiceContext;
import jeeves.server.sources.ServiceRequest;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.fao.geonet.constants.Geonet;
import org.fao.geonet.domain.*;
import org.fao.geonet.kernel.DataManager;
Expand Down Expand Up @@ -40,8 +39,6 @@
import org.jdom.Namespace;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Rule;
import org.junit.rules.TemporaryFolder;
import org.opengis.feature.type.AttributeDescriptor;
import org.opengis.feature.type.Name;
import org.opengis.filter.Filter;
Expand All @@ -55,7 +52,6 @@
import java.io.*;
import java.lang.reflect.Constructor;
import java.net.URL;
import java.nio.channels.FileChannel;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
Expand All @@ -81,11 +77,29 @@ public abstract class AbstractCoreIntegrationTest extends AbstractSpringDataTest
@Autowired
protected DirectoryFactory _directoryFactory;

@Rule
public TemporaryFolder _testTemporaryFolder = new TemporaryFolder();
protected static File _dataDirectory;

@BeforeClass
public static void setUpDataDirectory() {
if (_dataDirectory == null) {
_dataDirectory = Files.createTempDir();
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
@Override
public void run() {
try {
FileUtils.deleteDirectory(_dataDirectory);
} catch (IOException e) {
e.printStackTrace();
}
}
}));
}
}
@Before
public void configureAppContext() throws Exception {



System.setProperty(LuceneConfig.USE_NRT_MANAGER_REOPEN_THREAD, Boolean.toString(true));
// clear out datastore
for (Name name : _datastore.getNames()) {
Expand All @@ -97,6 +111,8 @@ public void configureAppContext() throws Exception {

final GeonetworkDataDirectory geonetworkDataDirectory = _applicationContext.getBean(GeonetworkDataDirectory.class);

SyncReport report = synchronizeDataDirectory(new File(webappDir , "WEB-INF/data"));

final ArrayList<Element> params = getServiceConfigParameterElements();

final ServiceConfig serviceConfig = new ServiceConfig(params);
Expand All @@ -120,12 +136,9 @@ public void configureAppContext() throws Exception {
nodeInfo.setId(getGeonetworkNodeId());
nodeInfo.setDefaultNode(isDefaultNode());


final File dataDir = _testTemporaryFolder.getRoot();

TransformerFactoryFactory.init("net.sf.saxon.TransformerFactoryImpl");

geonetworkDataDirectory.init("geonetwork", webappDir, dataDir.getAbsolutePath(),
geonetworkDataDirectory.init("geonetwork", webappDir, _dataDirectory.getAbsolutePath(),
serviceConfig, null);

_directoryFactory.resetIndex();
Expand All @@ -138,12 +151,15 @@ public void configureAppContext() throws Exception {
SchemaManager.registerXmlCatalogFiles(webappDir, schemaPluginsCatalogFile);

final SchemaManager schemaManager = _applicationContext.getBean(SchemaManager.class);
schemaManager.configure(webappDir, resourcePath,
schemaPluginsCatalogFile, schemaPluginsDir, "eng", "iso19139", true);
if (report.updateSchemaManager) {
schemaManager.configure(webappDir, resourcePath,
schemaPluginsCatalogFile, schemaPluginsDir, "eng", "iso19139", true);
}

_applicationContext.getBean(SearchManager.class).init(false, false, "", 100);
_applicationContext.getBean(DataManager.class).init(createServiceContext(), false);
String siteUuid = _testTemporaryFolder.getRoot().getName();

String siteUuid = _dataDirectory.getName();
_applicationContext.getBean(SettingManager.class).setSiteUuid(siteUuid);
final SourceRepository sourceRepository = _applicationContext.getBean(SourceRepository.class);
List<Source> sources = sourceRepository.findAll();
Expand All @@ -155,6 +171,42 @@ public void configureAppContext() throws Exception {

}

private SyncReport synchronizeDataDirectory(File srcDataDir) throws IOException {
SyncReport report = new SyncReport();

boolean deleteNewFilesFromDataDir = _dataDirectory.exists();

final TreeTraverser<File> fileTreeTraverser = Files.fileTreeTraverser();

final int prefixPathLength = srcDataDir.getPath().length();
for (File file : fileTreeTraverser.preOrderTraversal(srcDataDir)) {
String relativePath = file.getPath().substring(prefixPathLength);
final File dataDirFile = new File(_dataDirectory, relativePath);
if (file.isFile() && (!dataDirFile.exists() || dataDirFile.lastModified() != file.lastModified())) {
Files.createParentDirs(dataDirFile);
BinaryFile.copy(file, dataDirFile);
dataDirFile.setLastModified(file.lastModified());

report.updateSchemaManager |= file.getPath().contains("schema_plugins");
}
}

if (deleteNewFilesFromDataDir ) {

final int prefixPathLength2 = _dataDirectory.getPath().length();
for (File dataDirFile : fileTreeTraverser.preOrderTraversal(_dataDirectory)) {
String relativePath = dataDirFile.getPath().substring(prefixPathLength2);
final File srcFile = new File(srcDataDir, relativePath);
if (!srcFile.exists()) {
dataDirFile.delete();
report.updateSchemaManager |= dataDirFile.getPath().contains("schema_plugins");
}
}
}

return report;
}

protected boolean isDefaultNode() {
return true;
}
Expand Down Expand Up @@ -297,4 +349,8 @@ protected int importMetadataXML(ServiceContext context, String uuid, InputStream
dataManager.indexMetadata(id.get(0), true);
return Integer.parseInt(id.get(0));
}

private class SyncReport {
public boolean updateSchemaManager = false;
}
}
Expand Up @@ -41,7 +41,7 @@ protected String getDataDir() {
}

private String getBaseDir() {
return new File(_testTemporaryFolder.getRoot(), "nonDefaultDataDir").getAbsolutePath();
return new File(_dataDirectory, "nonDefaultDataDir").getAbsolutePath();
}


Expand Down
Expand Up @@ -19,7 +19,7 @@ public class GeonetworkDataDirectoryMultiNodeSystemPropertyOnlySystemDataDirSetT

@Before
public void setSystemProperties() {
System.setProperty(GeonetworkDataDirectory.GEONETWORK_DIR_KEY, new File(_testTemporaryFolder.getRoot(),
System.setProperty(GeonetworkDataDirectory.GEONETWORK_DIR_KEY, new File(_dataDirectory,
"node1NonDefaultDataDir").getAbsolutePath());
}

Expand All @@ -42,7 +42,7 @@ protected boolean isDefaultNode() {
*/
@Override
protected String getDataDir() {
return new File(_testTemporaryFolder.getRoot(), "node1NonDefaultDataDir").getAbsolutePath() + "_" + getGeonetworkNodeId() + File.separator;
return new File(_dataDirectory, "node1NonDefaultDataDir").getAbsolutePath() + "_" + getGeonetworkNodeId() + File.separator;
}


Expand Down
Expand Up @@ -28,7 +28,7 @@ protected ArrayList<Element> getServiceConfigParameterElements() {
*/
@Override
protected String getDataDir() {
return new File(_testTemporaryFolder.getRoot(), "nonDefaultDataDir").getAbsolutePath() + File.separator;
return new File(_dataDirectory, "nonDefaultDataDir").getAbsolutePath() + File.separator;
}


Expand Down
Expand Up @@ -32,7 +32,7 @@ public void resetSystemProperties() {
*/
@Override
protected String getDataDir() {
return new File(_testTemporaryFolder.getRoot(), "nonDefaultDataDir").getAbsolutePath() + File.separator;
return new File(_dataDirectory, "nonDefaultDataDir").getAbsolutePath() + File.separator;
}


Expand Down
5 changes: 5 additions & 0 deletions pom.xml
Expand Up @@ -321,6 +321,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.16</version>
<configuration>
<excludes>
<exclude>**/*IntegrationTest.java</exclude>
Expand All @@ -340,6 +341,10 @@
<includes>
<include>**/*IntegrationTest.java</include>
</includes>
<forkCount>1</forkCount>
<reuseForks>true</reuseForks>
<perCoreThreadCount>false</perCoreThreadCount>
<threadCount>1</threadCount>
</configuration>
</execution>
</executions>
Expand Down

0 comments on commit 642bcc1

Please sign in to comment.