raft/read_only.go
func (ro *readOnly) advance(m pb.Message) []*readIndexStatus {
	var (
		i     int
		found bool
	)

	ctx := string(m.Context)
	rss := []*readIndexStatus{}

	for _, okctx := range ro.readIndexQueue {
		i++
		rs, ok := ro.pendingReadIndex[okctx]
		if !ok {
			panic("cannot find corresponding read state from pending map")
		}
		rss = append(rss, rs)
		if okctx == ctx {
			found = true
			break
		}
	}

	if found {
		ro.readIndexQueue = ro.readIndexQueue[i:]
		for _, rs := range rss {
			delete(ro.pendingReadIndex, string(rs.req.Entries[0].Data))
		}
		return rss
	}

	return nil
}
func (ro *readOnly) advance(m pb.Message) []*readIndexStatus {
	var (
		i     int
		found bool
	)

	ctx := string(m.Context)
	rss := []*readIndexStatus{}

	for _, okctx := range ro.readIndexQueue {
		i++
		rs, ok := ro.pendingReadIndex[okctx]
		if !ok {
			panic("cannot find corresponding read state from pending map")
		}
		rss = append(rss, rs)
		if okctx == ctx {
			found = true
			break
		}
	}

	if found {
		ro.readIndexQueue = ro.readIndexQueue[i:]
		for _, rs := range rss {
			delete(ro.pendingReadIndex, string(rs.req.Entries[0].Data))
		}
		return rss
	}

	return nil
}
func ( ro * readOnly ) advance ( m pb . Message ) [ ] * readIndexStatus { var ( i int found bool ) ctx := string ( m . Context ) rss := [ ] * readIndexStatus { } for _ , okctx := range ro . readIndexQueue { i ++ rs , ok := ro . pendingReadIndex [ okctx ] if ! ok { panic ( " " ) } rss = append ( rss , rs ) if okctx == ctx { found = true break } } if found { ro . readIndexQueue = ro . readIndexQueue [ i : ] for _ , rs := range rss { delete ( ro . pendingReadIndex , string ( rs . req . Entries [ 0 ] . Data ) ) } return rss } return nil }
// advance advances the read only request queue kept by the readonly struct.
// It dequeues the requests until it finds the read only request that has
// the same context as the given `m`.
advance advances the read only request queue kept by the readonly struct . It dequeues the requests until it finds the read only request that has the same context as the given m .