Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Etcd key:channel / [nodeID] / [channelName],value: ChannelInfo

ChanelInfo contains State,StartTime, SeekPosition. State is a enum whose values are Unwatched, Watched. This means whether datanode watch it successfully.

StartTime is the watch event start time.

If there is a new channel registration, datacoord updates channel / [nodeid] / [channelname]

...

  1. When the datacoord is started, the channels of offline datanodes are assigned to current online nodes.
  2. When DataNode comes online, DataCoord may move some channels to the node and change the channels of different nodes through etcd transactions operation.
  3. When DataNode goes offline, DataCoord reassigns the channels to other nodes, changing them through the etcd transaction.
  4. Specially, if the last DataNode goes offline and there is no living DataNode at this time, record the channel in channel/remaining/[channelName].
  5. Start a background goroutine to check states of channels. If a channel's state has't changed to Watched for a long time, maybe we should reallocated it to another node atomically.

DataNode: 

  1. When DataNode starts, the channel of this Node on etcd must be empty, because the nodeID is incremented.
  2. When DataNode receives an Add event, execute WatchChannel, and transactionlly change state of channel on etcd to Watched.
  3. When DataNode receives Delete event, execute ReleaseChannel.

...