SLING-7362 - Allow to configure the SCD default compression level
diff --git a/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializer.java b/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializer.java
index 5547185..641a52c 100644
--- a/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializer.java
+++ b/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializer.java
@@ -80,10 +80,11 @@
private final boolean useBinaryReferences;
private final String name;
private final Map<String, String> exportPathMapping;
+ private final int compressionLevel;
public FileVaultContentSerializer(String name, Packaging packaging, ImportMode importMode, AccessControlHandling aclHandling, String[] packageRoots,
String[] nodeFilters, String[] propertyFilters, boolean useBinaryReferences, int autosaveThreshold,
- Map<String, String> exportPathMapping) {
+ Map<String, String> exportPathMapping, int compressionLevel) {
this.name = name;
this.packaging = packaging;
this.importMode = importMode;
@@ -94,6 +95,7 @@
this.propertyFilters = VltUtils.parseFilters(propertyFilters);
this.useBinaryReferences = useBinaryReferences;
this.exportPathMapping = exportPathMapping;
+ this.compressionLevel = compressionLevel;
}
@Override
@@ -107,6 +109,9 @@
WorkspaceFilter filter = VltUtils.createFilter(exportOptions.getRequest(), nodeFilters, propertyFilters);
ExportOptions opts = VltUtils.getExportOptions(filter, packageRoots, packageGroup, packageName, VERSION, useBinaryReferences, exportPathMapping);
+ // Set configured compression level (SLING-7362)
+ opts.setCompressionLevel(compressionLevel);
+
log.debug("assembling package {} user {}", packageGroup + '/' + packageName + "-" + VERSION, resourceResolver.getUserID());
packaging.getPackageManager().assemble(session, opts, outputStream);
diff --git a/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VaultDistributionPackageBuilderFactory.java b/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VaultDistributionPackageBuilderFactory.java
index d44dcbe..2ecefa5 100644
--- a/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VaultDistributionPackageBuilderFactory.java
+++ b/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VaultDistributionPackageBuilderFactory.java
@@ -204,6 +204,18 @@
"The format is {sourcePattern}={destinationPattern}, e.g. /etc/(.*)=/var/$1/some or simply /data=/bak")
private static final String PATHS_MAPPING = "pathsMapping";
+ private static final int DEFAULT_COMPRESSION_LEVEL = 1;
+
+ @Property(
+ label = "The Vault zlib compression level",
+ description = "The zlib compression level used by Vault to serialize content. The compression level is " +
+ "an integer between -1 and 9, see http://www.zlib.net/manual.html. Default is '1' (BEST_SPEED).",
+ intValue = DEFAULT_COMPRESSION_LEVEL,
+ propertyPrivate = true
+ )
+ private static final String COMPRESSION_LEVEL = "compressionLevel";
+
+
@Reference
private Packaging packaging;
@@ -238,6 +250,8 @@
digestAlgorithm = null;
}
+ int compressionLevel = PropertiesUtil.toInteger(config.get(COMPRESSION_LEVEL), DEFAULT_COMPRESSION_LEVEL);
+
ImportMode importMode = null;
if (importModeString != null) {
importMode = ImportMode.valueOf(importModeString.trim());
@@ -253,7 +267,7 @@
pathsMapping = SettingsUtils.removeEmptyEntries(pathsMapping);
DistributionContentSerializer contentSerializer = new FileVaultContentSerializer(name, packaging, importMode, aclHandling,
- packageRoots, packageNodeFilters, packagePropertyFilters, useBinaryReferences, autosaveThreshold, pathsMapping);
+ packageRoots, packageNodeFilters, packagePropertyFilters, useBinaryReferences, autosaveThreshold, pathsMapping, compressionLevel);
DistributionPackageBuilder wrapped;
if ("filevlt".equals(type)) {
diff --git a/src/test/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporterTest.java b/src/test/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporterTest.java
index f1679b7..9111a52 100644
--- a/src/test/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporterTest.java
+++ b/src/test/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporterTest.java
@@ -81,7 +81,8 @@
new String[0],
false,
-1,
- null
+ null,
+ 1
);
DistributionPackageBuilder builder =
diff --git a/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializerTest.java b/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializerTest.java
index 4f5cf98..8a1c01d 100644
--- a/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializerTest.java
+++ b/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializerTest.java
@@ -82,7 +82,7 @@
boolean useReferences = false;
int threshold = 1024;
FileVaultContentSerializer fileVaultContentSerializer = new FileVaultContentSerializer("vlt", packaging, importMode,
- aclHandling, packageRoots, nodeFilters, propertyFilters, useReferences, threshold, new HashMap<String, String>());
+ aclHandling, packageRoots, nodeFilters, propertyFilters, useReferences, threshold, new HashMap<String, String>(), 1);
ResourceResolver sessionResolver = mock(ResourceResolver.class);
Session session = mock(Session.class);
@@ -124,7 +124,7 @@
boolean useReferences = false;
int thershold = 1024;
FileVaultContentSerializer fileVaultContentSerializer = new FileVaultContentSerializer("vlt", packaging, importMode,
- aclHandling, packageRoots, nodeFilters, propertyFilters, useReferences, thershold, new HashMap<String, String>());
+ aclHandling, packageRoots, nodeFilters, propertyFilters, useReferences, thershold, new HashMap<String, String>(), 1);
File file = new File(getClass().getResource("/vlt/dp.vlt").getFile());