Merge pull request #32831 from hongchaodeng/deb
Automatic merge from submit-queue etcd3/watcher: logging error To debug #32770 If error happened, the watcher might just stop/exit silently.
This commit is contained in:
		@@ -158,6 +158,7 @@ func (wc *watchChan) sync() error {
 | 
				
			|||||||
func (wc *watchChan) startWatching() {
 | 
					func (wc *watchChan) startWatching() {
 | 
				
			||||||
	if wc.initialRev == 0 {
 | 
						if wc.initialRev == 0 {
 | 
				
			||||||
		if err := wc.sync(); err != nil {
 | 
							if err := wc.sync(); err != nil {
 | 
				
			||||||
 | 
								glog.Errorf("failed to sync with latest state: %v", err)
 | 
				
			||||||
			wc.sendError(err)
 | 
								wc.sendError(err)
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -169,8 +170,10 @@ func (wc *watchChan) startWatching() {
 | 
				
			|||||||
	wch := wc.watcher.client.Watch(wc.ctx, wc.key, opts...)
 | 
						wch := wc.watcher.client.Watch(wc.ctx, wc.key, opts...)
 | 
				
			||||||
	for wres := range wch {
 | 
						for wres := range wch {
 | 
				
			||||||
		if wres.Err() != nil {
 | 
							if wres.Err() != nil {
 | 
				
			||||||
 | 
								err := wres.Err()
 | 
				
			||||||
			// If there is an error on server (e.g. compaction), the channel will return it before closed.
 | 
								// If there is an error on server (e.g. compaction), the channel will return it before closed.
 | 
				
			||||||
			wc.sendError(wres.Err())
 | 
								glog.Errorf("watch chan error: %v", err)
 | 
				
			||||||
 | 
								wc.sendError(err)
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		for _, e := range wres.Events {
 | 
							for _, e := range wres.Events {
 | 
				
			||||||
@@ -219,6 +222,7 @@ func (wc *watchChan) processEvent(wg *sync.WaitGroup) {
 | 
				
			|||||||
func (wc *watchChan) transform(e *event) (res *watch.Event) {
 | 
					func (wc *watchChan) transform(e *event) (res *watch.Event) {
 | 
				
			||||||
	curObj, oldObj, err := prepareObjs(wc.ctx, e, wc.watcher.client, wc.watcher.codec, wc.watcher.versioner)
 | 
						curObj, oldObj, err := prepareObjs(wc.ctx, e, wc.watcher.client, wc.watcher.codec, wc.watcher.versioner)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
 | 
							glog.Errorf("failed to prepare current and previous objects: %v", err)
 | 
				
			||||||
		wc.sendError(err)
 | 
							wc.sendError(err)
 | 
				
			||||||
		return nil
 | 
							return nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user