These were checked in a few days back. I didn't close the JIRA 'cause
there were so many failures on cc it was hard for me to guarantee I
didn't cause a problem when I ran the testsuite. I'd compared my
results to cc and saw no regressions, so I think it was OK, so I'll go
ahead and close 874; we can re-open if the work on nailing down the
remaining failures shows something amiss.
Manik Surtani wrote:
Brian,
Do you want to check in your fixes for 874 (if you haven't already)?
Getting close to a clean build on 1.4.x, with a few MUX and PojoCache
failures remaining.
Cheers,
> Yeah, I'm looking into the CC failures today, there does seem to be a
> proliferation of failures (almost 4% at the moment). --
> Manik Surtani
>
> Lead, JBoss Cache
> JBoss, a division of Red Hat
>
> Email: manik(a)jboss.org
> Telephone: +44 7786 702 706
> MSN: manik(a)surtani.org
> Yahoo/AIM/Skype: maniksurtani
>
>
>
> On 8 Dec 2006, at 04:36, Brian Stansberry wrote:
>
>> This change is made on 1.4 and HEAD.
>>
>> When I looked at it, the effiency gain from using a Set vs a List
>> only exists with the locks collection. So that's the only one I
>> changed to LinkedHashSet. The methods that add things to the other
>> list fields (e.g. modifications) don't do a contains() check to see
>> if what they are adding is already there, so they don't have the
>> inefficiency. Presumably
>> this means that with normal behavior the same object wouldn't get
>> added twice to these lists. A cursory check showed that to be the
>> case, and if it weren't I'd expect we'd have noticeable bugs. So, I
>> decided not to change to other fields to LinkedHashSet -- didn't
>> want to introduce issues by making a change. At least not in 1.4.
>>
>> I ran the testsuite and saw no regressions vs cc. But, there are a
>> lot of failures now on cc, so I'm going to wait to close JBCACHE-874
>> until we get some cleaner test runs.
>>
>> jbosscache-dev-bounces(a)lists.jboss.org wrote:
>>> Manik Surtani wrote:
>>>> On 5 Dec 2006, at 19:29, Brian Stansberry wrote:
>>>>
>>>>> Manik Surtani wrote:
>>>>>> Brian Stansberry wrote:
>>>>>>> It's not a big deal if JBCACHE-874 doesn't go in
1.4.1.CR1, but
>>>>>>> it would be nice to get it in so it's out in the wild
longer
>>>>>>> before the GA.
>>>>>>
>>>>>> Sorry yes, forgot about this.
>>>>>>
>>>>>
>>>>> If you're delaying 1.4.1.CR1 for this, let me know, because at
>>>>> this point I was deferring it a bit pending anything that comes
>>>>> out of this thread.
>>>>
>>>> What would you like me to do? When do you think you could have
>>>> 874 in?
>>>>
>>>
>>> Probably by tomorrow. If there's going to be a CR2 I'd prefer you
>>> don't delay CR1 for this. Getting things out in the wild is good,
>>> the benefit of having this out in CR1 is outweighed by the benefit
>>> of getting everything else in CR1 out in the wild sooner.
>>>
>>>>>
>>>>>>>
>>>>>>> 1) A bunch of the LinkedList fields in TransactionEntry are
>>>>>>> protected. Changing them to LinkedHashSet therefore
technically
>>>>>>> changes the API. This is an internal class, so I don't
think
>>>>>>> that's an issue. Any objections?
>>>>>>
>>>>>> I'm ok with this, I don't think it will break the
>>>>>> OptimisticTransactionEntry subclass. In fact, is there any
>>>>>> reason why this needs to be protected? Could we make do with
>>>>>> stronger access protection than protected?
>>>>>>
>>>>>
>>>>> I don't see any reason why not; this is an internal class. I
much
>>>>> prefer private fields; hate protected 'cause it's never clear
to
>>>>> me if the class designer had a strong reason to expose them or
>>>>> just did it "in case some subclass wants it some day".
IMHO a
>>>>> protected getter/setter with a private field is a much better
>>>>> indication of design intent and allows clean subsequent addition
>>>>> of things like lazy initialization.
>>>>
>>>> +1. And like I said, if we can make do with package-level access
>>>> for the getter/setter and private for the field, I'd go with that
>>>> if it makes sense.
>>>>
>>>
>>> I'll check; we may not even need the getters/setters for this
>>> particular case. I don't think the subclass uses any of the
>>> protected fields. And if not, I don't think there is any real
>>> "design intent" to expose them.
>>> If later on, we find a real need to expose them, then we add them.
>>>
>>>>>
>>>>>>>
>>>>>>> 2) A number of TransactionEntry methods return List and
>>>>>>> currently hand out a ref to the internal data structure.
The
>>>>>>> caller of these methods logically expects a List so I think
>>>>>>> the API should remain the same. So, that implies the methods
>>>>>>> would do something like "return new
ArrayList(internalSet);"
>>>>>>>
>>>>>>
>>>>>> Hmm, I guess so. Perhaps in 2.0.0, change this to return a
>>>>>> Collection?
>>>>>>
>>>>>
>>>>> Maybe. Depends on whether callers are relying on an expected
>>>>> ordering. I had a quick look at these methods yesterday. At
>>>>> least one is never invoked and thus can be dropped. For another,
>>>>> at least in some cases, Set semantics are fine, so a possibility
>>>>> for
>>>>> 1.4.1 is
>>>>> an added method that exposes the internal Set.
>>>>
>>>> Ok, I'm happy with this. Like you said, this *is* an internal
>>>> class anyway.
>>>>
>>>
>>> Yes. And if there is a path whereby outside code can access
>>> this class (I think there is), adding methods doesn't break
>>> any compatibility.
>>>
>>>>>
>>>>> Another possibility for 2.0.0 is to return an Iterator over the
>>>>> internal field, which would give the same ordering as a List
>>>>> with no extra effort. I expect all the callers already end up
>>>>> iterating over the List anyway.
>>>>
>>>> Is this the case? What about calling contains() on the List? I
>>>> thought I saw this somewhere ...
>>>
>>> You did, but the contains() call is done internally to
>>> TransactionEntry whenever any of the add methods are called
>>> -- in order to ensure Set semantics on the internal lists.
>>> Getting rid of this inefficiency is the primary benefit of
>>> JBCACHE-874.
>>>
>>> - Brian
>>>
>>> _______________________________________________
>>> jbosscache-dev mailing list
>>> jbosscache-dev(a)lists.jboss.org
>>>
https://lists.jboss.org/mailman/listinfo/jbosscache-dev