Feat: graceful shutdown
This commit is contained in:
		
							
								
								
									
										26
									
								
								pkg/cache/impl.go
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										26
									
								
								pkg/cache/impl.go
									
									
									
									
										vendored
									
									
								
							| @@ -102,6 +102,19 @@ func (mc *MemoryCache) RemoveKey(key string) { | ||||
| 	mc.lock.RUnlock() | ||||
| } | ||||
|  | ||||
| func (mc *MemoryCache) BackupNow() { | ||||
| 	data := mc.GetAll() | ||||
| 	jsonString, err := json.Marshal(data) | ||||
| 	if err != nil { | ||||
| 		slog.Warn("immediate backup failed to marshal", "err", err) | ||||
| 		return | ||||
| 	} | ||||
| 	err = os.WriteFile(storeFileName, jsonString, os.ModePerm) | ||||
| 	if err != nil { | ||||
| 		slog.Warn("immediate backup failed to write", "err", err) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (mc *MemoryCache) StartExpiryRoutine(n time.Duration) { | ||||
| 	ticker := time.NewTicker(n) | ||||
| 	go func() { | ||||
| @@ -127,18 +140,7 @@ func (mc *MemoryCache) StartBackupRoutine(n time.Duration) { | ||||
| 	go func() { | ||||
| 		for { | ||||
| 			<-ticker.C | ||||
| 			// get all | ||||
| 			data := mc.GetAll() | ||||
| 			jsonString, err := json.Marshal(data) | ||||
| 			if err != nil { | ||||
| 				slog.Warn("failed to marshal", "err", err) | ||||
| 				continue | ||||
| 			} | ||||
| 			err = os.WriteFile(storeFileName, jsonString, os.ModePerm) | ||||
| 			if err != nil { | ||||
| 				slog.Warn("failed to write", "err", err) | ||||
| 				continue | ||||
| 			} | ||||
| 			mc.BackupNow() | ||||
| 		} | ||||
| 	}() | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Grail Finder
					Grail Finder