| 362 | } |
| 363 | |
| 364 | func (i *Lifecycler) ChangeReadOnlyState(ctx context.Context, readOnly bool) error { |
| 365 | errCh := make(chan error) |
| 366 | fn := func() { |
| 367 | prevReadOnly, _ := i.GetReadOnlyState() |
| 368 | if prevReadOnly == readOnly { |
| 369 | errCh <- nil |
| 370 | return |
| 371 | } |
| 372 | |
| 373 | level.Info(i.logger).Log("msg", "changing read-only state of instance in the ring", "readOnly", readOnly, "ring", i.RingName) |
| 374 | i.setReadOnlyState(readOnly, time.Now()) |
| 375 | errCh <- i.updateConsul(ctx) |
| 376 | } |
| 377 | |
| 378 | if err := i.sendToLifecyclerLoop(fn); err != nil { |
| 379 | return err |
| 380 | } |
| 381 | return <-errCh |
| 382 | } |
| 383 | |
| 384 | func (i *Lifecycler) getTokens() Tokens { |
| 385 | i.stateMtx.RLock() |