You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							53 lines
						
					
					
						
							1.1 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							53 lines
						
					
					
						
							1.1 KiB
						
					
					
				| package shell | |
| 
 | |
| import ( | |
| 	"context" | |
| 	"flag" | |
| 	"io" | |
| 
 | |
| 	"github.com/chrislusf/seaweedfs/weed/pb/master_pb" | |
| ) | |
| 
 | |
| func init() { | |
| 	Commands = append(Commands, &commandVacuum{}) | |
| } | |
| 
 | |
| type commandVacuum struct { | |
| } | |
| 
 | |
| func (c *commandVacuum) Name() string { | |
| 	return "volume.vacuum" | |
| } | |
| 
 | |
| func (c *commandVacuum) Help() string { | |
| 	return `compact volumes if deleted entries are more than the limit | |
|  | |
| 	volume.vacuum [-garbageThreshold=0.3] | |
|  | |
| ` | |
| } | |
| 
 | |
| func (c *commandVacuum) Do(args []string, commandEnv *CommandEnv, writer io.Writer) (err error) { | |
| 
 | |
| 	volumeVacuumCommand := flag.NewFlagSet(c.Name(), flag.ContinueOnError) | |
| 	garbageThreshold := volumeVacuumCommand.Float64("garbageThreshold", 0.3, "vacuum when garbage is more than this limit") | |
| 	if err = volumeVacuumCommand.Parse(args); err != nil { | |
| 		return | |
| 	} | |
| 
 | |
| 	if err = commandEnv.confirmIsLocked(args); err != nil { | |
| 		return | |
| 	} | |
| 
 | |
| 	err = commandEnv.MasterClient.WithClient(false, func(client master_pb.SeaweedClient) error { | |
| 		_, err = client.VacuumVolume(context.Background(), &master_pb.VacuumVolumeRequest{ | |
| 			GarbageThreshold: float32(*garbageThreshold), | |
| 		}) | |
| 		return err | |
| 	}) | |
| 	if err != nil { | |
| 		return | |
| 	} | |
| 
 | |
| 	return nil | |
| }
 |