 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>
		
			
				
	
	
		
			83 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package freelist
 | |
| 
 | |
| import (
 | |
| 	"go.etcd.io/bbolt/internal/common"
 | |
| )
 | |
| 
 | |
| type ReadWriter interface {
 | |
| 	// Read calls Init with the page ids stored in the given page.
 | |
| 	Read(page *common.Page)
 | |
| 
 | |
| 	// Write writes the freelist into the given page.
 | |
| 	Write(page *common.Page)
 | |
| 
 | |
| 	// EstimatedWritePageSize returns the size in bytes of the freelist after serialization in Write.
 | |
| 	// This should never underestimate the size.
 | |
| 	EstimatedWritePageSize() int
 | |
| }
 | |
| 
 | |
| type Interface interface {
 | |
| 	ReadWriter
 | |
| 
 | |
| 	// Init initializes this freelist with the given list of pages.
 | |
| 	Init(ids common.Pgids)
 | |
| 
 | |
| 	// Allocate tries to allocate the given number of contiguous pages
 | |
| 	// from the free list pages. It returns the starting page ID if
 | |
| 	// available; otherwise, it returns 0.
 | |
| 	Allocate(txid common.Txid, numPages int) common.Pgid
 | |
| 
 | |
| 	// Count returns the number of free and pending pages.
 | |
| 	Count() int
 | |
| 
 | |
| 	// FreeCount returns the number of free pages.
 | |
| 	FreeCount() int
 | |
| 
 | |
| 	// PendingCount returns the number of pending pages.
 | |
| 	PendingCount() int
 | |
| 
 | |
| 	// AddReadonlyTXID adds a given read-only transaction id for pending page tracking.
 | |
| 	AddReadonlyTXID(txid common.Txid)
 | |
| 
 | |
| 	// RemoveReadonlyTXID removes a given read-only transaction id for pending page tracking.
 | |
| 	RemoveReadonlyTXID(txid common.Txid)
 | |
| 
 | |
| 	// ReleasePendingPages releases any pages associated with closed read-only transactions.
 | |
| 	ReleasePendingPages()
 | |
| 
 | |
| 	// Free releases a page and its overflow for a given transaction id.
 | |
| 	// If the page is already free or is one of the meta pages, then a panic will occur.
 | |
| 	Free(txId common.Txid, p *common.Page)
 | |
| 
 | |
| 	// Freed returns whether a given page is in the free list.
 | |
| 	Freed(pgId common.Pgid) bool
 | |
| 
 | |
| 	// Rollback removes the pages from a given pending tx.
 | |
| 	Rollback(txId common.Txid)
 | |
| 
 | |
| 	// Copyall copies a list of all free ids and all pending ids in one sorted list.
 | |
| 	// f.count returns the minimum length required for dst.
 | |
| 	Copyall(dst []common.Pgid)
 | |
| 
 | |
| 	// Reload reads the freelist from a page and filters out pending items.
 | |
| 	Reload(p *common.Page)
 | |
| 
 | |
| 	// NoSyncReload reads the freelist from Pgids and filters out pending items.
 | |
| 	NoSyncReload(pgIds common.Pgids)
 | |
| 
 | |
| 	// freePageIds returns the IDs of all free pages. Returns an empty slice if no free pages are available.
 | |
| 	freePageIds() common.Pgids
 | |
| 
 | |
| 	// pendingPageIds returns all pending pages by transaction id.
 | |
| 	pendingPageIds() map[common.Txid]*txPending
 | |
| 
 | |
| 	// release moves all page ids for a transaction id (or older) to the freelist.
 | |
| 	release(txId common.Txid)
 | |
| 
 | |
| 	// releaseRange moves pending pages allocated within an extent [begin,end] to the free list.
 | |
| 	releaseRange(begin, end common.Txid)
 | |
| 
 | |
| 	// mergeSpans is merging the given pages into the freelist
 | |
| 	mergeSpans(ids common.Pgids)
 | |
| }
 |