mirror of
				https://github.com/go-gitea/gitea
				synced 2025-10-30 19:08:37 +00:00 
			
		
		
		
	Fix memcache support when value is returned as string always (#2924)
This commit is contained in:
		
							
								
								
									
										29
									
								
								modules/cache/cache.go
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										29
									
								
								modules/cache/cache.go
									
									
									
									
										vendored
									
									
								
							| @@ -5,6 +5,9 @@ | |||||||
| package cache | package cache | ||||||
|  |  | ||||||
| import ( | import ( | ||||||
|  | 	"fmt" | ||||||
|  | 	"strconv" | ||||||
|  |  | ||||||
| 	"code.gitea.io/gitea/modules/setting" | 	"code.gitea.io/gitea/modules/setting" | ||||||
|  |  | ||||||
| 	mc "github.com/go-macaron/cache" | 	mc "github.com/go-macaron/cache" | ||||||
| @@ -42,7 +45,18 @@ func GetInt(key string, getFunc func() (int, error)) (int, error) { | |||||||
| 		} | 		} | ||||||
| 		conn.Put(key, value, int64(setting.CacheService.TTL.Seconds())) | 		conn.Put(key, value, int64(setting.CacheService.TTL.Seconds())) | ||||||
| 	} | 	} | ||||||
| 	return conn.Get(key).(int), nil | 	switch value := conn.Get(key).(type) { | ||||||
|  | 	case int: | ||||||
|  | 		return value, nil | ||||||
|  | 	case string: | ||||||
|  | 		v, err := strconv.Atoi(value) | ||||||
|  | 		if err != nil { | ||||||
|  | 			return 0, err | ||||||
|  | 		} | ||||||
|  | 		return v, nil | ||||||
|  | 	default: | ||||||
|  | 		return 0, fmt.Errorf("Unsupported cached value type: %v", value) | ||||||
|  | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
| // GetInt64 returns key value from cache with callback when no key exists in cache | // GetInt64 returns key value from cache with callback when no key exists in cache | ||||||
| @@ -60,7 +74,18 @@ func GetInt64(key string, getFunc func() (int64, error)) (int64, error) { | |||||||
| 		} | 		} | ||||||
| 		conn.Put(key, value, int64(setting.CacheService.TTL.Seconds())) | 		conn.Put(key, value, int64(setting.CacheService.TTL.Seconds())) | ||||||
| 	} | 	} | ||||||
| 	return conn.Get(key).(int64), nil | 	switch value := conn.Get(key).(type) { | ||||||
|  | 	case int64: | ||||||
|  | 		return value, nil | ||||||
|  | 	case string: | ||||||
|  | 		v, err := strconv.ParseInt(value, 10, 64) | ||||||
|  | 		if err != nil { | ||||||
|  | 			return 0, err | ||||||
|  | 		} | ||||||
|  | 		return v, nil | ||||||
|  | 	default: | ||||||
|  | 		return 0, fmt.Errorf("Unsupported cached value type: %v", value) | ||||||
|  | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
| // Remove key from cache | // Remove key from cache | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user