 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>
		
			
				
	
	
		
			110 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			110 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package redis
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 	"sync"
 | |
| 	"sync/atomic"
 | |
| )
 | |
| 
 | |
| func (c *ClusterClient) DBSize(ctx context.Context) *IntCmd {
 | |
| 	cmd := NewIntCmd(ctx, "dbsize")
 | |
| 	_ = c.hooks.process(ctx, cmd, func(ctx context.Context, _ Cmder) error {
 | |
| 		var size int64
 | |
| 		err := c.ForEachMaster(ctx, func(ctx context.Context, master *Client) error {
 | |
| 			n, err := master.DBSize(ctx).Result()
 | |
| 			if err != nil {
 | |
| 				return err
 | |
| 			}
 | |
| 			atomic.AddInt64(&size, n)
 | |
| 			return nil
 | |
| 		})
 | |
| 		if err != nil {
 | |
| 			cmd.SetErr(err)
 | |
| 		} else {
 | |
| 			cmd.val = size
 | |
| 		}
 | |
| 		return nil
 | |
| 	})
 | |
| 	return cmd
 | |
| }
 | |
| 
 | |
| func (c *ClusterClient) ScriptLoad(ctx context.Context, script string) *StringCmd {
 | |
| 	cmd := NewStringCmd(ctx, "script", "load", script)
 | |
| 	_ = c.hooks.process(ctx, cmd, func(ctx context.Context, _ Cmder) error {
 | |
| 		mu := &sync.Mutex{}
 | |
| 		err := c.ForEachShard(ctx, func(ctx context.Context, shard *Client) error {
 | |
| 			val, err := shard.ScriptLoad(ctx, script).Result()
 | |
| 			if err != nil {
 | |
| 				return err
 | |
| 			}
 | |
| 
 | |
| 			mu.Lock()
 | |
| 			if cmd.Val() == "" {
 | |
| 				cmd.val = val
 | |
| 			}
 | |
| 			mu.Unlock()
 | |
| 
 | |
| 			return nil
 | |
| 		})
 | |
| 		if err != nil {
 | |
| 			cmd.SetErr(err)
 | |
| 		}
 | |
| 		return nil
 | |
| 	})
 | |
| 	return cmd
 | |
| }
 | |
| 
 | |
| func (c *ClusterClient) ScriptFlush(ctx context.Context) *StatusCmd {
 | |
| 	cmd := NewStatusCmd(ctx, "script", "flush")
 | |
| 	_ = c.hooks.process(ctx, cmd, func(ctx context.Context, _ Cmder) error {
 | |
| 		err := c.ForEachShard(ctx, func(ctx context.Context, shard *Client) error {
 | |
| 			return shard.ScriptFlush(ctx).Err()
 | |
| 		})
 | |
| 		if err != nil {
 | |
| 			cmd.SetErr(err)
 | |
| 		}
 | |
| 		return nil
 | |
| 	})
 | |
| 	return cmd
 | |
| }
 | |
| 
 | |
| func (c *ClusterClient) ScriptExists(ctx context.Context, hashes ...string) *BoolSliceCmd {
 | |
| 	args := make([]interface{}, 2+len(hashes))
 | |
| 	args[0] = "script"
 | |
| 	args[1] = "exists"
 | |
| 	for i, hash := range hashes {
 | |
| 		args[2+i] = hash
 | |
| 	}
 | |
| 	cmd := NewBoolSliceCmd(ctx, args...)
 | |
| 
 | |
| 	result := make([]bool, len(hashes))
 | |
| 	for i := range result {
 | |
| 		result[i] = true
 | |
| 	}
 | |
| 
 | |
| 	_ = c.hooks.process(ctx, cmd, func(ctx context.Context, _ Cmder) error {
 | |
| 		mu := &sync.Mutex{}
 | |
| 		err := c.ForEachShard(ctx, func(ctx context.Context, shard *Client) error {
 | |
| 			val, err := shard.ScriptExists(ctx, hashes...).Result()
 | |
| 			if err != nil {
 | |
| 				return err
 | |
| 			}
 | |
| 
 | |
| 			mu.Lock()
 | |
| 			for i, v := range val {
 | |
| 				result[i] = result[i] && v
 | |
| 			}
 | |
| 			mu.Unlock()
 | |
| 
 | |
| 			return nil
 | |
| 		})
 | |
| 		if err != nil {
 | |
| 			cmd.SetErr(err)
 | |
| 		} else {
 | |
| 			cmd.val = result
 | |
| 		}
 | |
| 		return nil
 | |
| 	})
 | |
| 	return cmd
 | |
| }
 |