#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
#
schema_version: 1
name: org.kie.kogito.dynamic.resources
version: "main"

description: -| Module retrieved from https://github.com/jboss-openshift/cct_module/blob/master/jboss/container/java/jvm/bash However it contains a few customizations to fit Kogito needs.

execute:
  - script: configure

envs:
  - name: JAVA_OPTIONS
    description: User specified Java options to be appended to generated options in JAVA_OPTS (internal use).
    example: "-verbose:class"
  - name: JAVA_MAX_MEM_RATIO
    description: Is used when no `-Xmx` option is given in **JAVA_OPTIONS**. This is used to calculate a default maximal heap memory based on a containers restriction. If used in a container without any memory constraints for the container then this option has no effect. If there is a memory constraint then `-Xmx` is set to a ratio of the container available memory as set here. The default is `50` which means 50% of the available memory is used as an upper boundary. You can skip this mechanism by setting this value to `0` in which case no `-Xmx` option is added.
  - name: JAVA_INITIAL_MEM_RATIO
    description: Is used when no `-Xms` option is given in **JAVA_OPTIONS**. This is used to calculate a default initial heap memory based on the maximum heap memory. If used in a container without any memory constraints for the container then this option has no effect. If there is a memory constraint then `-Xms` is set to a ratio of the `-Xmx` memory as set here. The default is `25` which means 25% of the `-Xmx` is used as the initial heap size. You can skip this mechanism by setting this value to `0` in which case no `-Xms` option is added.
    example: "25"
  - name: JAVA_MAX_INITIAL_MEM
    description: Is used when no `-Xms` option is given in **JAVA_OPTIONS**. This is used to calculate the maximum value of the initial heap memory. If used in a container without any memory constraints for the container then this option has no effect. If there is a memory constraint then `-Xms` is limited to the value set here. The default is 4096Mb which means the calculated value of `-Xms` never will be greater than 4096Mb. The value of this variable is expressed in MB.
    example: "4096"
  - name: JAVA_DIAGNOSTICS
    description: Set this to get some diagnostics information to standard output when things are happening. **Disabled by default.**
    example: "true"
  - name: JAVA_DEBUG
    description: If set remote debugging will be switched on. **Disabled by default.**
    example: "true"
  - name: JAVA_DEBUG_PORT
    description: Port used for remote debugging. Defaults to *5005*.
    example: "8787"
  - name: CONTAINER_CORE_LIMIT
    description: A calculated core limit as described in https://www.kernel.org/doc/Documentation/scheduler/sched-bwc.txt.
    example: "2"
  - name: CONTAINER_MAX_MEMORY
    description: Memory limit given to the container.
    example: "1024"
  - name: GC_MIN_HEAP_FREE_RATIO
    description: Minimum percentage of heap free after GC to avoid expansion.
    example: "20"
  - name: GC_MAX_HEAP_FREE_RATIO
    description: Maximum percentage of heap free after GC to avoid shrinking.
    example: "40"
  - name: GC_TIME_RATIO
    description: Specifies the ratio of the time spent outside the garbage collection (for example, the time spent for application execution) to the time spent in the garbage collection.
    example: "4"
  - name: GC_ADAPTIVE_SIZE_POLICY_WEIGHT
    description: The weighting given to the current GC time versus previous GC times.
    example: "90"
  - name: GC_METASPACE_SIZE
    description: The initial metaspace size.
    example: "20"
  - name: GC_MAX_METASPACE_SIZE
    description: The maximum metaspace size.
    example: "100"
  - name: GC_CONTAINER_OPTIONS
    description: specify Java GC to use. The value of this variable should contain the necessary JRE command-line options to specify the required GC, which will override the default of `-XX:+UseParallelGC`.
    example: -XX:+UseG1GC
