From cf86b52dfebb1da22ad07759a5ac4ae82bdd59c4 Mon Sep 17 00:00:00 2001 From: Patrick Reinhart Date: Wed, 24 Jan 2024 16:51:36 +0100 Subject: [PATCH] Adds initial configuration part Signed-off-by: Patrick Reinhart --- .../java/org/exist/util/Configuration.java | 34 +++++++++++++++++-- .../org/exist/util/io/ContentFilePool.java | 6 ++-- exist-distribution/src/main/config/conf.xml | 2 +- schema/conf.xsd | 4 +-- 4 files changed, 37 insertions(+), 9 deletions(-) diff --git a/exist-core/src/main/java/org/exist/util/Configuration.java b/exist-core/src/main/java/org/exist/util/Configuration.java index 4c9e3508218..6f914b8cd53 100644 --- a/exist-core/src/main/java/org/exist/util/Configuration.java +++ b/exist-core/src/main/java/org/exist/util/Configuration.java @@ -33,6 +33,7 @@ import org.exist.start.Main; import org.exist.storage.lock.LockManager; import org.exist.storage.lock.LockTable; +import org.exist.util.io.ContentFilePool; import org.exist.xquery.*; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -111,7 +112,6 @@ import static org.exist.storage.XQueryPool.MAX_STACK_SIZE_ATTRIBUTE; import static org.exist.storage.XQueryPool.POOL_SIZE_ATTTRIBUTE; import static org.exist.storage.XQueryPool.PROPERTY_MAX_STACK_SIZE; -import static org.exist.storage.XQueryPool.PROPERTY_POOL_SIZE; import static org.exist.storage.journal.Journal.PROPERTY_RECOVERY_JOURNAL_DIR; import static org.exist.storage.journal.Journal.PROPERTY_RECOVERY_SIZE_LIMIT; import static org.exist.storage.journal.Journal.PROPERTY_RECOVERY_SYNC_ON_COMMIT; @@ -123,6 +123,8 @@ import static org.exist.util.ParametersExtractor.PARAMETER_ELEMENT_NAME; import static org.exist.util.XMLReaderObjectFactory.PROPERTY_VALIDATION_MODE; import static org.exist.util.XMLReaderPool.XmlParser.*; +import static org.exist.util.io.ContentFilePool.PROPERTY_IN_MEMORY_SIZE; +import static org.exist.util.io.VirtualTempPath.DEFAULT_IN_MEMORY_SIZE; import static org.exist.xquery.FunctionFactory.*; import static org.exist.xquery.XQueryContext.*; import static org.exist.xquery.XQueryWatchDog.PROPERTY_OUTPUT_SIZE_LIMIT; @@ -316,6 +318,11 @@ public Configuration(@Nullable String configFilename, Optional existHomeDi configureValidation(existHomeDirname, (Element) validations.item(0)); } + //RPC server + final NodeList rpcServer = doc.getElementsByTagName("rpc-server"); + if (rpcServer.getLength() > 0) { + configureRpcServer(existHomeDirname, (Element) rpcServer.item(0)); + } } catch (final SAXException | IOException | ParserConfigurationException e) { LOG.error("error while reading config file: {}", configFilename, e); throw new DatabaseConfigurationException(e.getMessage(), e); @@ -1217,8 +1224,8 @@ private void configureXQueryPool(final Element queryPool) { if (maxPoolSize != null) { try { - config.put(PROPERTY_POOL_SIZE, Integer.valueOf(maxPoolSize)); - LOG.debug(PROPERTY_POOL_SIZE + ": {}", config.get(PROPERTY_POOL_SIZE)); + config.put(XQueryPool.PROPERTY_POOL_SIZE, Integer.valueOf(maxPoolSize)); + LOG.debug(XQueryPool.PROPERTY_POOL_SIZE + ": {}", config.get(XQueryPool.PROPERTY_POOL_SIZE)); } catch (final NumberFormatException e) { LOG.warn(e); } @@ -1497,6 +1504,27 @@ private void configureValidation(final Optional dbHome, final Element vali } } + private void configureRpcServer(final Optional dbHome, final Element validation) { + final NodeList contentFile = validation.getElementsByTagName("content-file"); + if (contentFile.getLength() > 0) { + final String inMemorySize = ((Element) contentFile.item(0)).getAttribute("in-memory-size"); + if (inMemorySize != null) { + config.put(PROPERTY_IN_MEMORY_SIZE, parseInt(inMemorySize, DEFAULT_IN_MEMORY_SIZE)); + if (LOG.isDebugEnabled()) { + LOG.debug("{}: {}", PROPERTY_IN_MEMORY_SIZE, config.get(DEFAULT_IN_MEMORY_SIZE)); + } + } + } + final NodeList contentFilePool = validation.getElementsByTagName("content-file-pool"); + if (contentFilePool.getLength() > 0) { + final String size = ((Element) contentFilePool.item(0)).getAttribute("size"); + config.put(ContentFilePool.PROPERTY_POOL_SIZE, parseInt(size, -1)); + if (LOG.isDebugEnabled()) { + LOG.debug("{}: {}", ContentFilePool.PROPERTY_IN_MEMORY_SIZE, config.get(ContentFilePool.PROPERTY_POOL_SIZE)); + } + } + } + /** * Gets the value of a configuration attribute *

diff --git a/exist-core/src/main/java/org/exist/util/io/ContentFilePool.java b/exist-core/src/main/java/org/exist/util/io/ContentFilePool.java index 4610be320d2..0547b49f007 100644 --- a/exist-core/src/main/java/org/exist/util/io/ContentFilePool.java +++ b/exist-core/src/main/java/org/exist/util/io/ContentFilePool.java @@ -30,8 +30,8 @@ * @author Patrick Reinhart */ public final class ContentFilePool extends GenericObjectPool { - public static final String PROPERTY_POOL_SIZE = "content-file.pool.size"; - public static final String PROPERTY_IN_MEMORY_SIZE = "content-file.in-memory-size"; + public static final String PROPERTY_IN_MEMORY_SIZE = "rpc-server.content-file.in-memory-size"; + public static final String PROPERTY_POOL_SIZE = "rpc-server.content-file-pool.size"; public ContentFilePool(final TemporaryFileManager tempFileManager, final Configuration config, final int maxIdle) { super(new ContentFilePoolObjectFactory(tempFileManager, toInMemorySize(config)), toPoolConfig(config, maxIdle)); @@ -47,7 +47,7 @@ private static GenericObjectPoolConfig toPoolConfig(final Configura poolConfig.setLifo(true); poolConfig.setMaxIdle(maxIdle); poolConfig.setMaxTotal(config.getInteger(PROPERTY_POOL_SIZE)); - poolConfig.setJmxNameBase("org.exist.management.exist:type=VirtualTempPathPool"); + poolConfig.setJmxNameBase("org.exist.management.exist:type=ContentFilePool"); return poolConfig; } diff --git a/exist-distribution/src/main/config/conf.xml b/exist-distribution/src/main/config/conf.xml index c27cc9e285e..f9e97733db4 100644 --- a/exist-distribution/src/main/config/conf.xml +++ b/exist-distribution/src/main/config/conf.xml @@ -1123,7 +1123,7 @@ - max-in-memory-size: Defines the maximum in memory hold data before storing on temporary disk space --> - +