On Fri, Mar 30, 2012 at 3:57 PM, Sven Meier <s...@meiers.net> wrote:
> Hi Juergen and Jesse,
>
> I've debugged WicketLinkTagHandler and everything worked as I have expected
> it:
>
> The WicketTag is always the same instance, coming from the cached markup.
> Changing its id doesn't make sense to me: This is global state which is
> accessed for *each* rendering of the container.
>
>
>>An id which is unique with markup file is not guranteed to be unique in the
>> page markup.
>>That's why resolvers are using the page.autoIndex to create a page unique
>> id
>
> Yes, the id has to be unique for components inside their container. That
> hasn't changed with the patch.
>

>From a component resolution point of view you are right, but I think
you are ignoring Javascript here. wicket-ids may become become ids and
they need to be page unique, correct?

Juergen

> Back to debugging
> Sven
>
>
>
> On 03/30/2012 12:40 PM, Juergen Donnerstag wrote:
>>
>> On Fri, Mar 30, 2012 at 3:01 AM, Jesse Long<je...@virtualpostman.co.za>
>>  wrote:
>>>
>>> Hi Juergen, Sven,
>>>
>>> We are not doing away with adding the "auto index" unique number to the
>>> resultant component id, we are only doing away with modifying the id in
>>> the
>>> cached markup tag.
>>
>> The patched changed the resolver and not the filter. Hence the markup
>> loaded into the cache is still the same, but the id presented at
>> render time is now a different.
>>
>>> The uniqueness of the id of the component returned by the resolve()
>>> method
>>> is still being guaranteed (as far as I understand) because it takes the
>>> original id from the tag and append the current page's next auto index
>>> number. The component (TransparentWebMarkupContainer) is then created
>>> with
>>> this modified id.
>>
>> sorry but this is also not correct. The markup of a page is composed
>> of potentially many markup files (fragments, panels, inheritance,
>> etc.). An id which is unique with markup file is not guranteed to be
>> unique in the page markup. That's why resolvers are using the
>> page.autoIndex to create a page unique id
>>
>>> All I'm asking in this patch is to not modify the original id stored in
>>> the
>>> markup tag, because its not necessary. (AFAIK).
>>>
>>> Anyway, the resultant component id is now (after the patch) as unique as
>>> it
>>> is on the first render without the patch...
>>
>> sorry, but this is not true.
>>
>>> This problem is actually very serious. I have a base page which 90% of my
>>> pages extend. Without the patch, on every single render, the id stored in
>>> the tag has a few bytes appended, causing the id of the resultant
>>> component
>>> to be a few bytes longer (for every render of every page in any session).
>>> I'm not sure if these ids get stored in memory after the render (I dont
>>> know
>>> wicket internals well enough to tell) or stored in the page store. If
>>> they
>>> do, its a big memory leak.
>>>
>>> At the very least its spews out huge amounts of data in the debug
>>> logging.
>>
>> I very well understand your pain point, but lets fix the problem
>> properly and not introduce a bug with an enhancement.
>>
>> Juergen
>>
>>> Cheers,
>>> Jesse
>>>
>>>
>>>
>>> On 29/03/2012 22:39, Sven Meier wrote:
>>>>
>>>> Hi,
>>>>
>>>>> An artifical markup which creates duplicate IDs can be constructed.
>>>>
>>>> all auto labels' tags have the same id already (its class name) so no
>>>> need
>>>> to create some artificial markup.
>>>>
>>>>> To me the applied patch leaves us with a bigger problem than it fixes.
>>>>
>>>> If the id of the tag in the cached markup is altered on each render, the
>>>> id can get quite long pretty fast. As the reporter of the issues has
>>>> stated,
>>>> this is a 'big' problem ;).
>>>>
>>>>> we should fix it properly
>>>>
>>>> Agreed. Obviously I'm missing a key concept here.
>>>> I'll try to debug this issue tomorrow to understand the problem you've
>>>> identified.
>>>>
>>>> Sven
>>>>
>>>> On 03/29/2012 09:44 PM, Juergen Donnerstag wrote:
>>>>>
>>>>> Hi Sven
>>>>>
>>>>>> I double checked with how other filters/resolvers are doing it and I
>>>>>> found
>>>>>> AutoLabelTextResolver to leave the tag id untouched too.
>>>>>
>>>>> which is a fault as well. Same risk.
>>>>>
>>>>>>> May be a Component's flag bit can be used for that purpose.
>>>>>>
>>>>>> Shouldn't that be a flag on the markup tag instead then?
>>>>>
>>>>> No, because the Pages are made of potentially many markups. Since the
>>>>> ID has no info about hierarchy, the number appended is the only thing
>>>>> that makes it page unique. Hence it can not be per markup. Since every
>>>>> tag gets associated with a Component, the Component is the right place
>>>>> for the flag.
>>>>>
>>>>>>> I don't know how likely it is and I know we have no tests for it.
>>>>>>
>>>>>> Yeah, I didn't find one either. I'm not sure I understand where's a
>>>>>> possible
>>>>>> problem here. It's hard to discuss this issues without an actual case.
>>>>>
>>>>> An artifical markup which creates duplicate IDs can be constructed.
>>>>> I've not tried it but I don't expect it to be too difficult. Knowing
>>>>> there is a potential risk which will be very hard to find by a normal
>>>>> user, makes me belief we should fix it properly, To me the applied
>>>>> patch leaves us with a bigger problem than it fixes.
>>>>>
>>>>> Juergen
>>>>>
>>>>>> Sven
>>>>>>
>>>>>>
>>>>>> On 03/29/2012 08:42 PM, Juergen Donnerstag wrote:
>>>>>>>
>>>>>>> Hi Sven,
>>>>>>>
>>>>>>> the change introduces a theoretical risk of duplicate ids. I don't
>>>>>>> know how likely it is and I know we have no tests for it. But Filters
>>>>>>> are created per markup file and modify the markup upon loading, prior
>>>>>>> to caching. Which also means that the Page is not available. In case
>>>>>>> of inheritance it might not even be the same Page. To be absolutely
>>>>>>> sure the ID is page-unique, it gets update in the Resolvers where the
>>>>>>> Page instance is available.
>>>>>>>
>>>>>>> The root cause is that we don't validate if the ID has been updated
>>>>>>> already and avoid subsequent updates. We have no means to do that
>>>>>>> check. A number at the end of the ID would not be sufficient. May be
>>>>>>> a
>>>>>>> Component's flag bit can be used for that purpose.
>>>>>>>
>>>>>>> I understand the problem in your application, but users will have an
>>>>>>> extremly hard time to identify the issue if it occurs. I'm not sure
>>>>>>> it's worth it. May be the approach outlined above solved your problem
>>>>>>> as well, but in a safe manner.
>>>>>>>
>>>>>>> Juergen
>>>>>>>
>>>>>>> On Thu, Mar 29, 2012 at 6:43 PM,<svenme...@apache.org>      wrote:
>>>>>>>>
>>>>>>>> Updated Branches:
>>>>>>>>  refs/heads/wicket-1.5.x c6c45a510 ->      d7e0d8845
>>>>>>>>
>>>>>>>>
>>>>>>>> WICKET-4484 do not change tag id when resolving component
>>>>>>>>
>>>>>>>>
>>>>>>>> Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
>>>>>>>> Commit:
>>>>>>>> http://git-wip-us.apache.org/repos/asf/wicket/commit/d7e0d884
>>>>>>>> Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/d7e0d884
>>>>>>>> Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/d7e0d884
>>>>>>>>
>>>>>>>> Branch: refs/heads/wicket-1.5.x
>>>>>>>> Commit: d7e0d8845dd509110e48ba965f0e11a3aae6a1f5
>>>>>>>> Parents: c6c45a5
>>>>>>>> Author: Sven Meier<svenme...@apache.org>
>>>>>>>> Authored: Thu Mar 29 18:43:07 2012 +0200
>>>>>>>> Committer: Sven Meier<svenme...@apache.org>
>>>>>>>> Committed: Thu Mar 29 18:43:07 2012 +0200
>>>>>>>>
>>>>>>>>
>>>>>>>> ----------------------------------------------------------------------
>>>>>>>>  .../markup/parser/filter/WicketLinkTagHandler.java |    1 -
>>>>>>>>  1 files changed, 0 insertions(+), 1 deletions(-)
>>>>>>>>
>>>>>>>> ----------------------------------------------------------------------
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> http://git-wip-us.apache.org/repos/asf/wicket/blob/d7e0d884/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/WicketLinkTagHandler.java
>>>>>>>>
>>>>>>>> ----------------------------------------------------------------------
>>>>>>>> diff --git
>>>>>>>>
>>>>>>>>
>>>>>>>> a/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/WicketLinkTagHandler.java
>>>>>>>>
>>>>>>>>
>>>>>>>> b/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/WicketLinkTagHandler.java
>>>>>>>> index 689133e..8779b6f 100644
>>>>>>>> ---
>>>>>>>>
>>>>>>>>
>>>>>>>> a/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/WicketLinkTagHandler.java
>>>>>>>> +++
>>>>>>>>
>>>>>>>>
>>>>>>>> b/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/WicketLinkTagHandler.java
>>>>>>>> @@ -208,7 +208,6 @@ public class WicketLinkTagHandler extends
>>>>>>>> AbstractMarkupFilter implements ICompo
>>>>>>>>                        if (wtag.isLinkTag()&&
>>>>>>>>  (wtag.getNamespace()
>>>>>>>> !=
>>>>>>>> null))
>>>>>>>>                        {
>>>>>>>>                                String id = tag.getId() + "-" +
>>>>>>>> container.getPage().getAutoIndex();
>>>>>>>> -                               tag.setId(id);
>>>>>>>>
>>>>>>>>                                return new
>>>>>>>> TransparentWebMarkupContainer(id);
>>>>>>>>                        }
>>>>>>>>
>>>>
>

Reply via email to