 Konstantin Lebedev
					
					3 years ago
						Konstantin Lebedev
					
					3 years ago
					
						
							committed by
							
								 GitHub
								GitHub
							
						 
					
				 
				
			 
		 
		
			
				
				  
				  No known key found for this signature in database
				  
				  	
						GPG Key ID: 4AEE18F83AFDEB23
				  	
				  
				
			
		
		
		
	
		
			
				 2 changed files with 
9 additions and 
1 deletions
			 
			
		 
		
			
				- 
					
					
					 
					weed/command/master.go
				
- 
					
					
					 
					weed/util/grace/signal_handling.go
				
					
					
						
							
								
									
										
											
	
		
			
				
					|  |  | @ -255,7 +255,7 @@ func startMaster(masterOption MasterOptions, masterWhiteList []string) { | 
			
		
	
		
			
				
					|  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 	grace.OnInterrupt(ms.Shutdown) | 
			
		
	
		
			
				
					|  |  |  | 	grace.OnInterrupt(grpcS.GracefulStop) | 
			
		
	
		
			
				
					|  |  |  | 	grace.OnInterrupt(grpcS.Stop) | 
			
		
	
		
			
				
					|  |  |  | 	grace.OnReload(func() { | 
			
		
	
		
			
				
					|  |  |  | 		if ms.Topo.HashicorpRaft != nil && ms.Topo.HashicorpRaft.State() == hashicorpRaft.Leader { | 
			
		
	
		
			
				
					|  |  |  | 			ms.Topo.HashicorpRaft.LeadershipTransfer() | 
			
		
	
	
		
			
				
					|  |  | 
 | 
			
		
	
										
									
								
							
						 
					 
				 
			
		
			
				
					
					
						
							
								
									
										
											
	
		
			
				
					|  |  | @ -4,8 +4,11 @@ | 
			
		
	
		
			
				
					|  |  |  | package grace | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | import ( | 
			
		
	
		
			
				
					|  |  |  | 	"github.com/seaweedfs/seaweedfs/weed/glog" | 
			
		
	
		
			
				
					|  |  |  | 	"os" | 
			
		
	
		
			
				
					|  |  |  | 	"os/signal" | 
			
		
	
		
			
				
					|  |  |  | 	"reflect" | 
			
		
	
		
			
				
					|  |  |  | 	"runtime" | 
			
		
	
		
			
				
					|  |  |  | 	"sync" | 
			
		
	
		
			
				
					|  |  |  | 	"syscall" | 
			
		
	
		
			
				
					|  |  |  | ) | 
			
		
	
	
		
			
				
					|  |  | @ -16,6 +19,10 @@ var interruptHookLock sync.RWMutex | 
			
		
	
		
			
				
					|  |  |  | var reloadHooks = make([]func(), 0) | 
			
		
	
		
			
				
					|  |  |  | var reloadHookLock sync.RWMutex | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | func GetFunctionName(i interface{}) string { | 
			
		
	
		
			
				
					|  |  |  | 	return runtime.FuncForPC(reflect.ValueOf(i).Pointer()).Name() | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | func init() { | 
			
		
	
		
			
				
					|  |  |  | 	signalChan = make(chan os.Signal, 1) | 
			
		
	
		
			
				
					|  |  |  | 	signal.Notify(signalChan, | 
			
		
	
	
		
			
				
					|  |  | @ -38,6 +45,7 @@ func init() { | 
			
		
	
		
			
				
					|  |  |  | 			} else { | 
			
		
	
		
			
				
					|  |  |  | 				interruptHookLock.RLock() | 
			
		
	
		
			
				
					|  |  |  | 				for _, hook := range interruptHooks { | 
			
		
	
		
			
				
					|  |  |  | 					glog.V(4).Infof("exec interrupt hook func name:%s", GetFunctionName(hook)) | 
			
		
	
		
			
				
					|  |  |  | 					hook() | 
			
		
	
		
			
				
					|  |  |  | 				} | 
			
		
	
		
			
				
					|  |  |  | 				interruptHookLock.RUnlock() | 
			
		
	
	
		
			
				
					|  |  | 
 |