Что означает код HRESULT 0x80630107 (PEER_E_ALREADY_LISTENING)?

 
Предыдущий Следующий
PEER_E_CONNECT_SELF PEER_E_NODE_NOT_FOUND

PEER_E_ALREADY_LISTENING

PEER_E_ALREADY_LISTENING — HRESULT 0x80630107 означает, что graph уже вошёл в состояние listening и второй listen request был выдан без остановки или закрытия первого listener. PEER_E_ALREADY_LISTENING — Исследуйте первый API, сообщивший этот результат, а не более поздний UI wrapper.

Вопросы, отделяющие этот сбой

  • Был ли объект возвращён PeerGraphListen, получен из graph status/listener shutdown либо восстановлен из кэшированного текста или другого процесса?
  • Сохраните call stack listen, выбранные port и scope, graph status, результат предыдущего listen и владельца lifecycle listener.
  • Произошли ли shutdown, deletion, sign-out, expiration или replication между выбором объекта и его использованием?
  • Завершается ли операция успешно при контролируемом сравнении, описанном ниже?

Peer Graphing поддерживает связанный набор nodes, реплицирует records и имеет отдельные lifetimes graph, node, connection и event. Открытая graph database не означает, что node подключён.

Контролируемое сравнение

один раз вызовите listen, запросите status, затем намеренно вызовите его повторно с тем же graph handle до закрытия listener. Сохраняйте identity, graph/group ID, cloud и user context неизменными, если только один из них не является проверяемой переменной.

Таблица решений

Наблюдаемый результатСледующее действие для PEER_E_ALREADY_LISTENING
HRESULT повторяется при идентичном зафиксированном состоянииПроверьте контракт вызывающего кода и состояние node/connection; повторные сетевые попытки не добавят доказательств.
Вызов продвигается до PEER_E_UNABLE_TO_LISTENPEER_E_UNABLE_TO_LISTEN отличается тем, что already-listening означает наличие активного listener, а unable-to-listen — невозможность создать запрошенный listener.
Контролируемый запуск успешен, production — нетСравните user token, database path, cloud, endpoint, certificate chain и фактическую firewall policy.

Безопасное исправление и проверка

сделайте listening идемпотентным на уровне приложения и назначьте одного владельца graph listener. Перед изменениями создайте резервные копии экспортируемой identity и group configuration и сохраните hashes database/invitation artifacts.

Исправление подтверждено только когда нужная операция успешна, а полученные соединения, записи, членство, endpoint или область Peer Collaboration можно независимо перечислить.

Инструментирование и регрессионное покрытие

Фиксируйте первый неудачный вызов, а не более поздний результат cleanup. Решающее доказательство: call stack listen, выбранные port и scope, graph status, предыдущий listen result и владение lifecycle listener.

Регрессионный уровеньПроверяемый случайУсловие прохождения
Входные данные и время жизни объектаСоздайте минимальный объект, достигающий состояния, где graph уже слушает и второй listen request выдан без остановки/закрытия первого listener.Тест записывает owning handle, user context и точный API из PeerGraphListen, graph status и listener shutdown.
Контролируемое сравнениеодин раз вызовите listen, запросите status, затем намеренно вызовите его повторно с тем же graph handle до закрытия listener.Между неуспешным и успешным запуском изменяется только целевое состояние node или connection.
Путь восстановлениясделайте listening идемпотентным на уровне приложения и назначьте одного владельца graph listener.Нужная операция завершается успешно без замены несвязанной replicated graph database.

Сохраняйте unsigned hexadecimal HRESULT, symbolic names и timestamps в одной трассировка. Такая запись позволяет регрессионному тесту отличить состояние жизненного цикла графа от последующего сбоя транспорта, авторизации или приложения.

Ссылки


Нужно найти другой код? Найти другой код состояния или ошибки.