gotd/updates: initialize channel state runctx immediately
This commit is contained in:
@@ -537,7 +537,9 @@ func (t *TelegramClient) Connect(_ context.Context) {
|
|||||||
|
|
||||||
runTelegramClient(ctx, t.client, t.clientInitialized, t.clientDone, func(ctx context.Context) error {
|
runTelegramClient(ctx, t.client, t.clientInitialized, t.clientDone, func(ctx context.Context) error {
|
||||||
log.Info().Msg("Client running starting updates")
|
log.Info().Msg("Client running starting updates")
|
||||||
return t.updatesManager.Run(ctx, t.client.API(), t.telegramUserID, updates.AuthOptions{})
|
return t.updatesManager.Run(ctx, t.client.API(), t.telegramUserID, updates.AuthOptions{
|
||||||
|
IsBot: t.metadata.IsBot,
|
||||||
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -84,8 +84,8 @@ func (m *Manager) Run(ctx context.Context, api API, userID int64, opt AuthOption
|
|||||||
zap.Bool("is_bot", opt.IsBot),
|
zap.Bool("is_bot", opt.IsBot),
|
||||||
zap.Bool("forget", opt.Forget),
|
zap.Bool("forget", opt.Forget),
|
||||||
)
|
)
|
||||||
lg.Debug("Run")
|
lg.Info("Starting update manager")
|
||||||
defer lg.Debug("Done")
|
defer lg.Info("Update manager exiting")
|
||||||
|
|
||||||
wg, ctx := errgroup.WithContext(ctx)
|
wg, ctx := errgroup.WithContext(ctx)
|
||||||
|
|
||||||
@@ -157,7 +157,7 @@ func (m *Manager) Run(ctx context.Context, api API, userID int64, opt AuthOption
|
|||||||
wg.Go(func() error {
|
wg.Go(func() error {
|
||||||
return m.state.Run(ctx)
|
return m.state.Run(ctx)
|
||||||
})
|
})
|
||||||
lg.Debug("Wait")
|
lg.Debug("Waiting for manager workgroup to exit")
|
||||||
return wg.Wait()
|
return wg.Wait()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -397,7 +397,20 @@ func (s *internalState) RemoveChannel(channelID int64, reason error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *internalState) createAndRunChannelState(ctx context.Context, channelID, accessHash int64, initialPts int) (state *channelState) {
|
func (s *internalState) createAndRunChannelState(ctx context.Context, channelID, accessHash int64, initialPts int) (state *channelState) {
|
||||||
state = s.newChannelState(channelID, accessHash, initialPts)
|
state = newChannelState(ctx, channelStateConfig{
|
||||||
|
Out: s.internalQueue,
|
||||||
|
InitialPts: initialPts,
|
||||||
|
ChannelID: channelID,
|
||||||
|
AccessHash: accessHash,
|
||||||
|
SelfID: s.selfID,
|
||||||
|
Storage: s.storage,
|
||||||
|
DiffLimit: s.diffLim,
|
||||||
|
RawClient: s.client,
|
||||||
|
Handler: s.handler,
|
||||||
|
OnChannelTooLong: s.onTooLong,
|
||||||
|
Logger: s.log.Named("channel").With(zap.Int64("channel_id", channelID)),
|
||||||
|
Tracer: s.tracer,
|
||||||
|
})
|
||||||
s.channelsLock.Lock()
|
s.channelsLock.Lock()
|
||||||
s.channels[channelID] = state
|
s.channels[channelID] = state
|
||||||
s.channelsLock.Unlock()
|
s.channelsLock.Unlock()
|
||||||
@@ -415,23 +428,6 @@ func (s *internalState) createAndRunChannelState(ctx context.Context, channelID,
|
|||||||
return state
|
return state
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *internalState) newChannelState(channelID, accessHash int64, initialPts int) *channelState {
|
|
||||||
return newChannelState(channelStateConfig{
|
|
||||||
Out: s.internalQueue,
|
|
||||||
InitialPts: initialPts,
|
|
||||||
ChannelID: channelID,
|
|
||||||
AccessHash: accessHash,
|
|
||||||
SelfID: s.selfID,
|
|
||||||
Storage: s.storage,
|
|
||||||
DiffLimit: s.diffLim,
|
|
||||||
RawClient: s.client,
|
|
||||||
Handler: s.handler,
|
|
||||||
OnChannelTooLong: s.onTooLong,
|
|
||||||
Logger: s.log.Named("channel").With(zap.Int64("channel_id", channelID)),
|
|
||||||
Tracer: s.tracer,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *internalState) getDifference(ctx context.Context) error {
|
func (s *internalState) getDifference(ctx context.Context) error {
|
||||||
ctx, span := s.tracer.Start(ctx, "getDifference")
|
ctx, span := s.tracer.Start(ctx, "getDifference")
|
||||||
defer span.End()
|
defer span.End()
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ type channelStateConfig struct {
|
|||||||
Tracer trace.Tracer
|
Tracer trace.Tracer
|
||||||
}
|
}
|
||||||
|
|
||||||
func newChannelState(cfg channelStateConfig) *channelState {
|
func newChannelState(ctx context.Context, cfg channelStateConfig) *channelState {
|
||||||
state := &channelState{
|
state := &channelState{
|
||||||
updates: make(chan channelUpdate, 10),
|
updates: make(chan channelUpdate, 10),
|
||||||
out: cfg.Out,
|
out: cfg.Out,
|
||||||
@@ -88,6 +88,8 @@ func newChannelState(cfg channelStateConfig) *channelState {
|
|||||||
Tracer: cfg.Tracer,
|
Tracer: cfg.Tracer,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
state.runCtx, state.stop = context.WithCancelCause(ctx)
|
||||||
|
|
||||||
return state
|
return state
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -105,7 +107,6 @@ func (s *channelState) Push(ctx context.Context, u channelUpdate) error {
|
|||||||
var ErrRemoveChannelState = errors.New("remove channel state")
|
var ErrRemoveChannelState = errors.New("remove channel state")
|
||||||
|
|
||||||
func (s *channelState) Run(ctx context.Context) error {
|
func (s *channelState) Run(ctx context.Context) error {
|
||||||
s.runCtx, s.stop = context.WithCancelCause(ctx)
|
|
||||||
defer s.stop(nil)
|
defer s.stop(nil)
|
||||||
// Subscribe to channel updates.
|
// Subscribe to channel updates.
|
||||||
if err := s.getDifference(s.runCtx); err != nil {
|
if err := s.getDifference(s.runCtx); err != nil {
|
||||||
|
|||||||
Reference in New Issue
Block a user