Skip to content

v1.28.0

Choose a tag to compare

@mortenoh mortenoh released this 29 Sep 07:51
· 86 commits to main since this release
v1.28.0
8593e8a

A large registry or guide now builds on a machine that has room for it, rather than being killed by giving the publisher more heap than the machine can hold alongside everything else.

The publisher heap

A build holds more than its heap. The Java process keeps about 2 GB of its own around the heap, and Jekyll renders the site at the very end as a second process in the same container, taking about 4 GB on a registry of twenty thousand resources. Java also grows into whatever ceiling it is given, so a larger JAVA_HEAP is more memory held, not more room.

Measured on a registry package of 10,453 organisation units (20,906 resources), the publisher never used more than 7 GB of heap. At 8g the build held about 13.5 GB in total. At 16g it held about 21.5 GB, which a 24 GB Docker cannot hold with anything else running. Depth (seven levels instead of five) and organisation unit geometry each changed that by less than 0.3 GB. The number of resources is what matters.

  • The default JAVA_HEAP is now the memory Docker reports less 6 GB, capped at 8g and floored at 4g, and 8g when Docker cannot be asked. A 24 GB Docker now gets 8g, not 22g. A guide that really needs more stops with a Java OutOfMemoryError, which says so, and make build JAVA_HEAP=12g raises it.
  • Every build prints two peaks as it finishes. peak memory in use is what the machine has to hold: the heap, the Java process around it, and Jekyll. peak container memory is the container's own high-water mark, which also counts file cache the kernel takes back when memory runs short. Size Docker by the first.
  • When the build is killed for memory, the report now suggests lowering the ceiling (JAVA_HEAP=8g when it was above that) before giving Docker more memory.

Invisible characters in contact details

A DHIS2 phone number or email that carries an invisible format character (a zero-width space pasted in with the number, a byte-order mark, a direction mark) is now published without it. The IG publisher renders a phone contact as a tel: link, and a link with a zero-width space in it failed the build's QA with XHTML_URL_INVALID. Every digit and letter of the value is kept, and DHIS2 is not touched. Organisation unit phone numbers and emails, and the phone number nominated under [ips.identity], are covered, and generate raises a note naming each organisation unit whose DHIS2 value carried one.

d2w fhir validate now reports the same kind of character in names, form names, option names and codes (invisible-character). It reports only a stray one, touching nothing but visible ASCII, such as B. Hin​Tang or a code OU​2. Lao, Thai, Khmer and Myanmar mark word breaks with a zero-width space, so one inside such text is correct and is left alone. A code is a warning, because it reaches identifiers, resource ids and URLs. A name is informational and is published as DHIS2 holds it. The reports print the character as ​, so it can be seen, and the fix is to retype the value in DHIS2.

A project picks up the new Makefile with make update. A JAVA_HEAP set on the command line or in the environment is used as it stands.

The reference is Build and publish.