Data corruption with Nashorn + Handlebars and concurrent requests
Sebastien Deleuze
sdeleuze at pivotal.io
Mon Jun 1 12:05:23 UTC 2015
See Handlebars developers feedback [1].
As suggested before, Handlerbars is not designed with concurrency in mind,
but they may accept some pull requests to improve that if that means no
regression for other regular users.
I will try to have a look to at least identify what should be done and have
an idea of the amount of work needed to fix that.
[1]
https://github.com/wycats/handlebars.js/issues/1031#issuecomment-107271075
On Tue, May 26, 2015 at 7:50 AM, A. Sundararajan <
sundararajan.athijegannathan at oracle.com> wrote:
> Oops. double negative :)
>
> /but the compiled handlebars function may not be MT-unsafe./
>
> should have been
>
> "but the compiled handlebars function may not be MT-safe".
>
> -Sundar
>
>
> On Tuesday 26 May 2015 11:15 AM, A. Sundararajan wrote:
>
>> Actually either the Handlebars.compile or the compiled function could be
>> MT-unsafe. FWIW, I tried the following change to handlebars's render.js
>> script:
>>
>> function renderHandlebars(template, model) {
>>
>> // Create a real Javascript Object from the model Map
>> var data = {};
>> for (var k in model) {
>> // Convert Java Iterable and List to real Javascript arrays
>> if (model[k] instanceof Java.type("java.lang.Iterable")) {
>> data[k] = Java.from(model[k]);
>> } else {
>> data[k] = model[k];
>> }
>> }
>> // TODO Manage compiled template cache
>> var compiledTemplate = Handlebars.compile(template);
>>
>> // call compiled template function as synchronized
>> // use Handlebars object as lock
>>
>> return Java.synchronized(function(data) {
>> compiledTemplate(data);
>> }, Handlebars);
>> }
>>
>> With that change, it appears handlebars MT-usage seems fine [i.e., no
>> exception seen]. This suggests that the Handlebars.compile itself is
>> MT-safe but the compiled handlebars function may not be MT-unsafe. FYI.
>>
>
>
More information about the nashorn-dev
mailing list