следующий ключ?
мне кажется с миллионами записей будет проблема, если так сделать
я не работал с хазелкастом но вижу есть метод - https://docs.hazelcast.org/docs/4.0.2/javadoc/com/hazelcast/map/IMap.html#getQueryCache-java.lang.String-com.hazelcast.query.Predicate-boolean- мб попробовать сюда передать предикат в котором будешь проверять что ключ не заблочен и что нужен 1 элемент?
я так понял это вроде запроса sql)) понятно что даже близко не оно, но смысл понял - а что идея хорошая, изучу детальнее
напиши потом, к какому решению придешь
обязательно
не смог разобраться как применить для лока (
такую жесть написал, хочется получше что-то.. public class Helpers { public Map.Entry<Object, Object> getNextNoLockKey(HazelcastInstance hazelcastInstance, IMap hazelcastMap){ Map.Entry<Object, Object> entry = hazelcastInstance.getMap("work-map").entrySet().iterator().next(); if(hazelcastMap.isLocked(entry.getKey())){ System.out.println("ключ заблокирован"); return getNextNoLockKey(hazelcastInstance, hazelcastMap); }else{ System.out.println("ключ НЕ заблокирован"); return entry; } } }
а то, что Михаил написал, чем не подходит? зачем тут рекурсию делать? keySet.stream().filter(e-> !map.isLocked(e)).findFirst()
пробую как Вы сказали public class Helpers { public static String getNextNoLockKey(IMap hazelcastMap){ return hazelcastMap.keySet().stream().filter(e-> !hazelcastMap.isLocked(e)).findFirst().toString(); } }
сработало, но только при условии что текущий поток заблокировал опрделенные ключи, а вот если другие потоки ключи заблокировали, тогда текщий поток даже не способен проверить на isLock "message": "Current thread is not owner of the lock! -> <not-locked>", Видимо мне нужен другой подход
мне нравится подход Михаила, но реализовать технически не смог его с локами
это exception? это получается, что ключ заблокирован, но другим потоком. Можно считать - заблокированным вцелом, при filter. просто сделать try-catch в filter может это xy проблем и не нужно определять незаблокированный ключ вообще?
Хотя вопрос а как потом получить разблокированный ключ уже не ясно.. ну да я поймаю экскпшен сейчас, пойму что тот ключ что получил заблочен, а как получить теперь следующий?
ну следующий в списке нужно проверить, пока не найдется разблокированный
Тогда уж циклом each бахнуть и проверять до первого свободного .. но вдруг миллион ключей - что тогда?
так стрим тоже самое сделает. А если миллион ключей, то xy проблем и вопрос для чего это вообще?)
Обсуждают сегодня