You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2022/07/18 13:04:20 UTC

[sling-org-apache-sling-feature-launcher] 01/01: SLING-11462 - Reduce memory requirements if feature archives are not used

This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to branch issue/SLING-11462
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-feature-launcher.git

commit 54c336b9b7b46847a3757ca79cc4ca4a7a137a50
Author: Robert Munteanu <ro...@apache.org>
AuthorDate: Mon Jul 18 16:03:55 2022 +0300

    SLING-11462 - Reduce memory requirements if feature archives are not used
    
    Lazily initialise the buffer used for reading feature model archives.
---
 .../org/apache/sling/feature/launcher/impl/FeatureProcessor.java    | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/src/main/java/org/apache/sling/feature/launcher/impl/FeatureProcessor.java b/src/main/java/org/apache/sling/feature/launcher/impl/FeatureProcessor.java
index 379b0e6..763a186 100644
--- a/src/main/java/org/apache/sling/feature/launcher/impl/FeatureProcessor.java
+++ b/src/main/java/org/apache/sling/feature/launcher/impl/FeatureProcessor.java
@@ -108,16 +108,20 @@ public class FeatureProcessor {
         }
 
         List<Feature> features = new ArrayList<>();
-        final byte[] buffer = new byte[1024*1024*256];
+        // lazily initialised, we don't want to allocate that much memory unless needed
+        final byte[][] bufferHolder = new byte[1][];
         for (final String featureFile : config.getFeatureFiles()) {
             for (final String initFile : IOUtils.getFeatureFiles(config.getHomeDirectory(), featureFile)) {
                 if ( initFile.endsWith(IOUtils.EXTENSION_FEATURE_ARCHIVE) ) {
+                    if ( bufferHolder[0] == null )
+                        bufferHolder[0] = new byte[1024*1024*256];
                     logger.debug("Reading feature archive {}", initFile);
                     final ArtifactHandler featureArtifact = artifactManager.getArtifactHandler(initFile);
                     try (final InputStream is = featureArtifact.getLocalURL().openStream()) {
                         for(final Feature feature : ArchiveReader.read(is, (id, stream) -> {
                                 final File artifactFile = new File(config.getCacheDirectory(),
                                             id.toMvnPath().replace('/', File.separatorChar));
+                                byte[] buffer = bufferHolder[0];
                                 if (!artifactFile.exists()) {
                                     artifactFile.getParentFile().mkdirs();
                                     try (final OutputStream os = new FileOutputStream(artifactFile)) {