On 4 Jun 2009, at 10:12, Mircea Markus wrote:
Galder Zamarreno wrote:
> Hi,
>
> keySet(), values(), entrySet() do not seem to be implemented at the
> moment:
>
> public Set<K> keySet() {
> throw new UnsupportedOperationException("TODO implement
> me"); // TODO implement me
> }
>
> public Collection<V> values() {
> throw new UnsupportedOperationException("TODO implement
> me"); // TODO implement me
> }
>
> public Set<Map.Entry<K, V>> entrySet() {
> throw new UnsupportedOperationException("TODO implement
> me"); // TODO implement me
> }
>
> We should be implementing these methods, shouldn't we? Users might
> want to iterate the map for example to print the contents or to
> verify it contains what they put on it...etc.
>
> I can't see a JIRA for it, so I'll open one so that this gets
> implemented for Beta1 unless someone has any objections.
>
> On IRC, Mircea said it might very costly, specially for dist, but
> we still need it regardless, otherwise we're not fully implementing
> the ConcurrentMap interface and these are commonly used methods.
for DIST these might be implemented as follows:
-the node broadcasts a 'GetKeys' command to all others nodes in the
cluster
- on remote nodes locks are acquired for all keys (not sure this
mandatory though)
- each node responds with the set of keys
- calling node puts them together and returns them to the user
for entrySet this is even more costly, as all cluster state shall be
transfered to the calling node.
Now, what worries me is the fact that users might overuse these
methods, without being aware of the performance consequences.
I think such consequences should be clearly Javadoc'd, as well as
mentioned in FAQs.
A possible way to enforce the users to acknowledge that these
operations are costly, is to disable them by default and allow a
config element to enable them.
Not sure if I like this approach - since it breaks the ConcurrentMap
contract by default.
Cheers
--
Manik Surtani
manik(a)jboss.org
Lead, Infinispan
Lead, JBoss Cache
http://www.infinispan.org
http://www.jbosscache.org