 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>
		
			
				
	
	
		
			63 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Package temperrcatcher provides a TempErrCatcher object,
 | |
| // which implements simple error-retrying functionality.
 | |
| // It is meant to be used with things like net.Lister.Accept:
 | |
| //
 | |
| //   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`:
 | |
| //
 | |
| //   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`:
 | |
| //
 | |
| //   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:
 | |
| //
 | |
| //   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()
 | |
| //
 | |
| package temperrcatcher
 |