[user-question] on eval value size limit

Jan Lahoda jan.lahoda at oracle.com
Tue Apr 11 15:45:20 UTC 2023


Hi Cyril,


For the remote execution backend (which is the default) is used, I 
believe the truncation of the variable content is hardcoded, and cannot 
be changed by the user. But for local/in-process execution backend, the 
backend should not truncate the output. So, using the local execution 
might be part of the solution. In the API, it could be something like:

     public static void main(String[] args) {
         {
             JShell j = JShell.builder().build();
             for (SnippetEvent evt : j.eval("\"a\".repeat(65536)")) {
                 System.err.println("output default execution: " + 
evt.value().length());
             }
         }
         {
             JShell j = JShell.builder().executionEngine("local").build();
             for (SnippetEvent evt : j.eval("\"a\".repeat(65536)")) {
                 System.err.println("output local execution: " + 
evt.value().length());
             }
         }
     }


which produces:

output default execution: 21844
output local execution: 65538


For the actual tool, there are feedback mode that define the truncation 
limit (inside the "UI" tool), and these can be set. For example:

$ ./jshell --execution local
|  Welcome to JShell -- Version 21-internal
|  For an introduction type: /help intro

jshell> /set mode custom normal -command
|  Created new feedback mode: custom

jshell> /set truncation custom 2147483647 varvalue,expression

jshell> /set feedback custom
|  Feedback mode: custom

jshell> "a".repeat(65536)
$1 ==> "a... very long output


Please also note there's a related bugreport:

https://bugs.openjdk.org/browse/JDK-8299829


Thanks,

     Jan


On 10. 04. 23 15:27, Cyril de Catheu wrote:
> Hey,
> I'm a user of jshell, I hope this is the correct mailing list for my 
> question.
> It seems jshell snippets value have a character limit.
>
> It can be reproduced in a jshell with the following (sorry for the 
> long strings):
>
> jshell> "a".repeat(21842);
> $1 ==> 
> "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 
> ... 
> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
>
> jshell> "a".repeat(21843);
> $2 ==> 
> "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 
> ... 
> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
>
> --> notice in the second case the last character is cut.
> So the limit seems to be of around 21842 characters.
>
> This does not look related to the jshell tool, it can also be 
> reproduced with a jdk.jshell.JShell instance programmatically. It 
> seems to be happening down in the ExecutionControl implementation.
>
> This is an issue for me because I'm using functions that return html 
> or json that are >>20k characters, so my results get broken.
>
> Is there a way to change this limit?
>
> Have a nice day.
> Cyril de Catheu
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/kulla-dev/attachments/20230411/79e19e56/attachment-0001.htm>


More information about the kulla-dev mailing list