On Tue, 13 Aug 2024 15:07:17 GMT, Sonia Zaldana Calles <szald...@openjdk.org> 
wrote:

> Hi all, 
> 
> This PR addresses [8204681](https://bugs.openjdk.org/browse/JDK-8204681) 
> enabling support for timestamp expansion in filenames specified in 
> `-XX:HeapDumpPath` using `%t`. 
> 
> As mentioned in this comments for this issue, this is somewhat related to 
> [8334492](https://bugs.openjdk.org/browse/JDK-8334492) where we enabled 
> support for `%p` for filenames specified in jcmd. 
> 
> With this patch, I propose: 
> - Expanding the utility function `Arguments::copy_expand_pid` to 
> `Arguments::copy_expand_arguments` to deal with `%p` expansions for pid and 
> `%t` expansions for timestamps. 
> - Leveraging the above utility function to enable argument expansion for both 
> heap dump filenames and jcmd output commands. 
> - Though the linked JBS issue only relates to heap dumps generated in case of 
> OOM, I think we can edit it to more broadly support filename expansion to 
> support `%t` for jcmd as well. 
> 
> Testing: 
> - [x] Added test cases pass with all platforms (verified with a GHA job). 
> - [x] Tier 1 passes with GHA. 
> 
> Looking forward to hearing your thoughts!
> 
> Thanks, 
> Sonia

I think this could be very useful, but it needs more preparation and decisions. 
Possibly a CSR.

- copy_expand_xxx is used in many places. While I think all of these places 
would benefit from more expansions than just %p, there is a potential backward 
compatibility issue if clients use %t for whatever reason today
- Do we want the time of the dump or the JVM start? If the JVM runs for a week, 
then produces a JFR file, should the file be named by the JVM start date? I 
think in most cases the *current* time makes more sense
- Do we want the printout as a human-readable date or as a numeric timestamp? 
Both makes sense depending on the post-processing clients want to do.
- Do we want to improve this function further, potentially adding more 
replacement options?

One possible way to solve this:
- use different characters for timestamp (number) and datetime (human readable 
date)
- use always the current time
- If we want to add further replacements: 
  - come up with a new replacement character that does not clash with libc 
sprintf (IMHO using percent was not a good idea in the first place). E.g. `$`
  - Add a new switch to guard this new replacement logic. By default off. If 
on, the contract is that any character following a `$` may be either now or in 
the future replaced with something different. Client must not use `$` as a 
normal character.
  - We probably should remove all non-matching `$` from the input.
  - The first replacements could be: `$p` for pid, `$t` for timestamp 
(numeric), `$d` for datetime
  - later replacements can be added later. Since we guard the new feature with 
a switch and forbid the use of `$`, we are then free to do so without breaking 
backward compatibility.

I would like to hear @dholmes-ora take on this.

We had a similar system at SAP in our proprietary JVM, which was really useful, 
so I like this idea in general.

-------------

PR Comment: https://git.openjdk.org/jdk/pull/20568#issuecomment-2301641288

Reply via email to