cocoindex-io/cocoindex · error · RuntimeError
Iggy topic {self._stream}/{self._topic} does not exist.
Error message
Iggy topic {self._stream}/{self._topic} does not exist. What it means
During readiness resolution the Iggy source fetches the topic to read its initial high-watermark. If the server reports the stream/topic does not exist (get_topic returns None), a RuntimeError is raised because offsets cannot be resolved for a nonexistent topic.
Source
Thrown at python/cocoindex/connectors/iggy/_source.py:296
self._polling_retry_interval = polling_retry_interval
self._init_retries = init_retries
self._init_retry_interval = init_retry_interval
self._allow_replay = allow_replay
self._initial_high_watermark = initial_high_watermark
self._watch_guard = SingleWatcherGuard("Iggy TopicStream")
def payloads(self) -> LiveStream[bytes]:
"""View of this stream yielding each message payload as bytes."""
return _TopicPayloadsStream(self)
async def _resolve_initial_high_watermark(self) -> int:
"""Resolve the initial next-offset watermark for readiness."""
if self._initial_high_watermark is not None:
return self._initial_high_watermark
topic = await self._client.get_topic(self._stream, self._topic)
if topic is None:
raise RuntimeError(
f"Iggy topic {self._stream}/{self._topic} does not exist."
)
if topic.partitions_count != 1:
raise RuntimeError(
"The Python Iggy SDK does not expose per-partition high watermarks. "
"Pass initial_high_watermark for multi-partition topics, or consume "
"a single-partition topic."
)
return int(topic.messages_count)
async def _create_consumer(self) -> IggyConsumer:
"""Create an Iggy consumer group configured for manual offset storage."""
return await self._client.consumer_group(
name=self._consumer_group,
stream=self._stream,
topic=self._topic,
partition_id=self._partition_id,
polling_strategy=PollingStrategy.Next(),View on GitHub (pinned to e84aa99b32)
Solutions
- Create the Iggy stream/topic (or fix the configured names) before starting the source
- Verify stream and topic names against `iggy` CLI listing
- Point the connector at the correct Iggy server/environment where the topic exists
Example fix
// before src = iggy.IggySource(client, stream="my_strem", topic="events") // after src = iggy.IggySource(client, stream="my_stream", topic="events") # topic must exist server-side
Defensive patterns
Strategy: validation
Validate before calling
topic = await client.get_topic(stream_name, topic_name)
if topic is None:
raise RuntimeError(f"Create topic {stream_name}/{topic_name} before consuming") Try / catch
try:
await source.start()
except RuntimeError as e:
if "does not exist" in str(e):
await ensure_topic_exists(client, stream_name, topic_name) Prevention
- Provision Iggy streams/topics via IaC or startup scripts before app start
- Validate names against `iggy topic list` in deployment checks
- Keep environment configs (dev/prod) with correct stream/topic names
When it happens
Trigger: Starting _watch/consumption against an Iggy stream/topic name that was never created (or was deleted), before _resolve_initial_high_watermark can read messages_count.
Common situations: Typos in stream/topic names in configuration; pointing at an environment where the topic was not provisioned; a topic deleted between runs.
Understand the failure class
Background: "Not found" and "does not exist" errors: why "Task not found", "No such folder", and "Can't find" fire when a lookup comes back empty — this error's family across 14 libraries.
Related errors
- Received an Iggy message for an untracked partition. Use an
- The Python Iggy SDK does not expose per-partition high water
- apache-iggy is required to use the Iggy connector. Please in
- apache-iggy is required to use the Iggy connector. Please in
- Iggy does not support Kafka-style tombstones. Provide deleti
AI-assisted analysis of cocoindex-io/cocoindex@e84aa99b32 (2026-09-08).
Data as JSON: /api/errors/a91cc15f7be64bdb.
Report an issue: GitHub.