 9bdcbe0447
			
		
	
	9bdcbe0447
	
	
	
		
			
			Major integrations and fixes: - Added BACKBEAT SDK integration for P2P operation timing - Implemented beat-aware status tracking for distributed operations - Added Docker secrets support for secure license management - Resolved KACHING license validation via HTTPS/TLS - Updated docker-compose configuration for clean stack deployment - Disabled rollback policies to prevent deployment failures - Added license credential storage (CHORUS-DEV-MULTI-001) Technical improvements: - BACKBEAT P2P operation tracking with phase management - Enhanced configuration system with file-based secrets - Improved error handling for license validation - Clean separation of KACHING and CHORUS deployment stacks 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
		
			
				
	
	
		
			79 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # go-temp-err-catcher
 | |
| 
 | |
| This is a little package to use with your net.Listeners.
 | |
| 
 | |
| Docs: https://godoc.org/github.com/jbenet/go-temp-err-catcher
 | |
| 
 | |
| Get:
 | |
| 
 | |
|   go get github.com/jbenet/go-temp-err-catcher
 | |
| 
 | |
| ## Examples
 | |
| 
 | |
| It is meant to be used with things like net.Lister.Accept:
 | |
| 
 | |
| ```go
 | |
| import (
 | |
|   tec "github.com/jbenet/go-temp-err-catcher"
 | |
| )
 | |
| 
 | |
| func listen(listener net.Listener) {
 | |
|   var c tec.TempErrCatcher
 | |
| 
 | |
|   for {
 | |
|     conn, err := listener.Accept()
 | |
|     if err != nil && c.IsTemporary(c) {
 | |
|       continue
 | |
|     }
 | |
|     return conn, err
 | |
|   }
 | |
| }
 | |
| ```
 | |
| 
 | |
| You can make your errors implement `Temporary`:
 | |
| 
 | |
| ```go
 | |
| type errTemp struct {
 | |
|   e error
 | |
| }
 | |
| 
 | |
| func (e errTemp) Temporary() bool {
 | |
|   return true
 | |
| }
 | |
| 
 | |
| func (e errTemp) Error() string {
 | |
|   return e.e.Error()
 | |
| }
 | |
| 
 | |
| err := errors.New("beep boop")
 | |
| var c tec.TempErrCatcher
 | |
| c.IsTemporary(err)              // false
 | |
| c.IsTemporary(errTemp{err}) // true
 | |
| ```
 | |
| 
 | |
| Or just use `ErrTemp`:
 | |
| 
 | |
| ```go
 | |
| err := errors.New("beep boop")
 | |
| var c tec.TempErrCatcher
 | |
| c.IsTemporary(err)              // false
 | |
| c.IsTemporary(tec.ErrTemp{err}) // true
 | |
| ```
 | |
| 
 | |
| 
 | |
| You can also define an `IsTemp` function to classify errors:
 | |
| 
 | |
| ```go
 | |
| var ErrSkip = errors.New("this should be skipped")
 | |
| var ErrNotSkip = errors.New("this should not be skipped")
 | |
| 
 | |
| var c tec.TempErrCatcher
 | |
| c.IsTemp = func(e error) bool {
 | |
|   return e == ErrSkip
 | |
| }
 | |
| 
 | |
| c.IsTemporary(ErrSkip) // true
 | |
| c.IsTemporary(ErrNotSkip) // false
 | |
| c.IsTemporary(ErrTemp) // false! no longer accepts Temporary()
 | |
| ```
 |