126 lines
4.5 KiB
Go
126 lines
4.5 KiB
Go
package constant
|
|
|
|
import (
|
|
"fmt"
|
|
)
|
|
|
|
type RedisCode int
|
|
|
|
const (
|
|
LockSuccess = RedisCode(1)
|
|
UnLockSuccess = RedisCode(1)
|
|
RefreshLockSuccess = RedisCode(1)
|
|
UnRLockSuccess = RedisCode(0)
|
|
RLockFailureWithWLockOccupancy = RedisCode(-1)
|
|
UnRLockFailureWithWLockOccupancy = RedisCode(-2)
|
|
WLockFailureWithRLockOccupancy = RedisCode(-3)
|
|
WLockFailureWithWLockOccupancy = RedisCode(-4)
|
|
UnWLockFailureWithRLockOccupancy = RedisCode(-5)
|
|
UnWLockFailureWithWLockOccupancy = RedisCode(-6)
|
|
WLockFailureWithNotFirstPriority = RedisCode(-7)
|
|
RefreshLockFailure = RedisCode(-8)
|
|
LockFailure = RedisCode(-9)
|
|
UnLocakFailureWithLockOccupancy = RedisCode(-10)
|
|
UnknownInternalError = RedisCode(-99)
|
|
)
|
|
|
|
type RedisLockType int
|
|
|
|
const (
|
|
LockType = RedisLockType(iota)
|
|
UnLockType
|
|
RefreshLockType
|
|
)
|
|
|
|
type RedisResult struct {
|
|
Code RedisCode
|
|
Message string
|
|
}
|
|
|
|
func (e *RedisResult) Error() string {
|
|
return fmt.Sprintf("redis execution code:%d,message:%s\n", e.Code, e.Message)
|
|
}
|
|
|
|
func (e *RedisResult) OutputResultMessage() string {
|
|
return e.Message
|
|
}
|
|
|
|
func (e *RedisResult) OutputResultCode() int {
|
|
return int(e.Code)
|
|
}
|
|
|
|
func NewRedisResult(res RedisCode, lockType RedisLockType, redisMsg string) error {
|
|
resInt := int(res)
|
|
switch resInt {
|
|
case 1:
|
|
if lockType == LockType {
|
|
return &RedisResult{Code: res, Message: "redis lock success"}
|
|
} else if lockType == UnLockType {
|
|
return &RedisResult{Code: res, Message: "redis unlock success"}
|
|
} else {
|
|
return &RedisResult{Code: res, Message: "redis refresh lock success"}
|
|
}
|
|
case 0:
|
|
return &RedisResult{Code: res, Message: "redis unlock read lock success, the lock is still occupied by other processes read lock"}
|
|
case -1:
|
|
return &RedisResult{Code: res, Message: "redis lock read lock failure,the lock is already occupied by another processes write lock"}
|
|
case -2:
|
|
return &RedisResult{Code: res, Message: "redis un lock read lock failure,the lock is already occupied by another processes write lock"}
|
|
case -3:
|
|
return &RedisResult{Code: res, Message: "redis lock write lock failure,the lock is already occupied by anthor processes read lock"}
|
|
case -4:
|
|
return &RedisResult{Code: res, Message: "redis lock write lock failure,the lock is already occupied by anthor processes write lock"}
|
|
case -5:
|
|
return &RedisResult{Code: res, Message: "redis un lock write lock failure,the lock is already occupied by another processes read lock"}
|
|
case -6:
|
|
return &RedisResult{Code: res, Message: "redis un lock write lock failure,the lock is already occupied by another processes write lock"}
|
|
case -7:
|
|
return &RedisResult{Code: res, Message: "redis lock write lock failure,the first priority in the current process non-waiting queue"}
|
|
case -8:
|
|
return &RedisResult{Code: res, Message: "redis refresh lock failure,the lock not exist"}
|
|
case -9:
|
|
return &RedisResult{Code: res, Message: "redis lock failure,the lock is already occupied by another processes lock"}
|
|
case -99:
|
|
return &RedisResult{Code: res, Message: fmt.Sprintf("redis internal execution error:%v\n", redisMsg)}
|
|
default:
|
|
msg := "unkown redis execution result"
|
|
if redisMsg != "" {
|
|
msg = fmt.Sprintf("%s:%s\n", msg, redisMsg)
|
|
}
|
|
return &RedisResult{Code: res, Message: msg}
|
|
}
|
|
}
|
|
|
|
func TranslateResultToStr(res RedisCode, lockType RedisLockType) string {
|
|
resInt := int(res)
|
|
switch resInt {
|
|
case 1:
|
|
if lockType == LockType {
|
|
return "redis lock success"
|
|
} else if lockType == UnLockType {
|
|
return "redis unlock success"
|
|
} else {
|
|
return "redis refresh lock success"
|
|
}
|
|
case 0:
|
|
return "redis unlock read lock success, the lock is still occupied by other processes read lock"
|
|
case -1:
|
|
return "redis lock read lock failure,the lock is already occupied by another processes write lock"
|
|
case -2:
|
|
return "redis un lock read lock failure,the lock is already occupied by another processes write lock"
|
|
case -3:
|
|
return "redis lock write lock failure,the lock is already occupied by anthor processes read lock"
|
|
case -4:
|
|
return "redis lock write lock failure,the lock is already occupied by anthor processes write lock"
|
|
case -5:
|
|
return "redis un lock write lock failure,the lock is already occupied by another processes read lock"
|
|
case -6:
|
|
return "redis un lock write lock failure,the lock is already occupied by another processes write lock"
|
|
case -7:
|
|
return "redis lock write lock failure,the first priority in the current process non-waiting queue"
|
|
case -8:
|
|
return "redis refresh lock failure,the lock not exist"
|
|
}
|
|
return "unkown redis execution result"
|
|
}
|