Как можно изменить значение в таблице ha sh в Java на основе прошедшего времени? - PullRequest
0 голосов
/ 01 апреля 2020

Я пытаюсь смоделировать распределенную файловую систему, и у меня возникли небольшие проблемы с имитацией работы сердцебиения. У меня есть один узел имени, который хранит метаданные файла, и узлы данных, которые фактически хранят блоки файла. Периодически (как каждые 3 секунды) я отправляю сообщение с узла данных на узел имени, сообщая узлу имени, что он жив.

В настоящее время у меня есть HashTable в узле имени, который хранится в качестве ключа имя узла данных (String) и в качестве значения логическое значение, которое сообщает мне, если узел данных еще жив или нет. Если я получаю сообщение от узла данных, значение в таблице ha sh переключается на true. Часть, с которой у меня возникают трудности, это как я могу переключить значение обратно в false, если я не получу сообщение от узла данных, скажем, в течение 10 секунд?

Единственное, о чем я могу думать, - это отметка времени каждый такт и размещение каждой временной метки в другой хеш-таблице, которая содержит имя узла данных и временную метку. Затем напишите функцию, которая сравнивает текущее время с каждой из временных меток в хеш-таблице и измените любой узел данных с временной меткой с более чем 10 секунд go на false в булевой таблице ha sh. Затем поместите эту функцию в бесконечное время, пока l oop. Что было бы лучшим способом приблизиться к чему-то подобному?

1 Ответ

1 голос
/ 01 апреля 2020

Вы изменяете карту с Map<String, Boolean> на Map<String, Instant>, поэтому в ней сохраняется последнее время сердцебиения, а не просто логическое значение "жив".

Затем вы пишете метод boolean isAlive(String name), который будет искать запись на карте. Если запись найдена и сохраненное значение Instant меньше 10 секунд в прошлом, вы возвращаете true, в противном случае вы возвращаете false.

Нет необходимости сохранять Map вверх назначить свидание. Вы просто инкапсулируете карту этим методом, чтобы интерпретировать значение карты "вживую" при запросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...