mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-26 12:27:06 +00:00 
			
		
		
		
	 5dbf36f356
			
		
	
	5dbf36f356
	
	
	
		
			
			* Issue search support elasticsearch * Fix lint * Add indexer name on app.ini * add a warnning on SearchIssuesByKeyword * improve code
		
			
				
	
	
		
			57 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
		
			Vendored
		
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
		
			Vendored
		
	
	
	
| // Copyright 2012-present Oliver Eilhard. All rights reserved.
 | ||
| // Use of this source code is governed by a MIT-license.
 | ||
| // See http://olivere.mit-license.org/license.txt for details.
 | ||
| 
 | ||
| // This file is based on code (c) 2014 Cenk Altı and governed by the MIT license.
 | ||
| // See https://github.com/cenkalti/backoff for original source.
 | ||
| 
 | ||
| package elastic
 | ||
| 
 | ||
| import "time"
 | ||
| 
 | ||
| // An Operation is executing by Retry() or RetryNotify().
 | ||
| // The operation will be retried using a backoff policy if it returns an error.
 | ||
| type Operation func() error
 | ||
| 
 | ||
| // Notify is a notify-on-error function. It receives error returned
 | ||
| // from an operation.
 | ||
| //
 | ||
| // Notice that if the backoff policy stated to stop retrying,
 | ||
| // the notify function isn't called.
 | ||
| type Notify func(error)
 | ||
| 
 | ||
| // Retry the function f until it does not return error or BackOff stops.
 | ||
| // f is guaranteed to be run at least once.
 | ||
| // It is the caller's responsibility to reset b after Retry returns.
 | ||
| //
 | ||
| // Retry sleeps the goroutine for the duration returned by BackOff after a
 | ||
| // failed operation returns.
 | ||
| func Retry(o Operation, b Backoff) error { return RetryNotify(o, b, nil) }
 | ||
| 
 | ||
| // RetryNotify calls notify function with the error and wait duration
 | ||
| // for each failed attempt before sleep.
 | ||
| func RetryNotify(operation Operation, b Backoff, notify Notify) error {
 | ||
| 	var err error
 | ||
| 	var wait time.Duration
 | ||
| 	var retry bool
 | ||
| 	var n int
 | ||
| 
 | ||
| 	for {
 | ||
| 		if err = operation(); err == nil {
 | ||
| 			return nil
 | ||
| 		}
 | ||
| 
 | ||
| 		n++
 | ||
| 		wait, retry = b.Next(n)
 | ||
| 		if !retry {
 | ||
| 			return err
 | ||
| 		}
 | ||
| 
 | ||
| 		if notify != nil {
 | ||
| 			notify(err)
 | ||
| 		}
 | ||
| 
 | ||
| 		time.Sleep(wait)
 | ||
| 	}
 | ||
| }
 |