Just want to let you know that Ignite already provide a highly performant and stable implementation of a distributed ID generator https://apacheignite.readme.io/docs/id-generator <https://apacheignite.readme.io/docs/id-generator>
— Denis > On Nov 23, 2016, at 11:11 PM, Shawn Du <[email protected]> wrote: > > Fixed by myself. > > There are two errors in my code/configuration. > > 1) lock are only supported in TRANSACTIONAL mode. I missed it in my > configuration. > 2) within a lock block, can't start cache: > IgniteCache<String, NamedSequence> cache = > ignite.cache(NamedSequence.CACHE_NAME_ID); > > Above code should be called out of the lock block. > > Thanks > Shawn > > -----邮件原件----- > 发件人: Shawn Du [mailto:[email protected]] > 发送时间: 2016年11月24日 14:20 > 收件人: [email protected] > 主题: Lock and Failed to unlock keys exception > > Hi, > > I am trying to implement distributed ID generators using lock and caches. > > I wrote some codes like this, but it always throw exception "Failed to > unlock keys exception". > The code may runs in different JVM/hosts. > > Do I misuse the lock feature? Thanks in advance. > > ---------------------------------------------------- > Lock lock = osCache.lock(Os.CACHE_LOCK); try { > lock.lock(); > os = osCache.get(videoMessage.os()); > if (os == null) > { > os = new Os(videoMessage.os(), > idGenerator.next(Os.class.getName())); > osCache.put(os.getName(), os); > } > videoMessage.os(os.getId() + ""); > } > finally > { > lock.unlock(); > } > > -------------------------------------------------------End > IdGenerator.next looks like this: > ------------------------------------------------------- > public int next(String name) > { > IgniteCache<String, NamedSequence> cache = > ignite.cache(NamedSequence.CACHE_NAME_ID); > NamedSequence sequence = cache.get(name); > if (sequence == null) > { > sequence = new NamedSequence(name); > } > else > { > sequence.increase(); > } > cache.put(sequence.getName(), sequence); > return sequence.getSequence(); > } > ---------------------------------------------------------- >
