| 63 | uint64_t CeilDiv1000(uint64_t value) { return value / 1000 + (value % 1000 != 0 ? 1 : 0); } |
| 64 | |
| 65 | Status ParseHashFieldExpireArgument(std::string_view raw, int64_t *expire_arg) { |
| 66 | auto parsed = ParseInt<int64_t>(raw, 10); |
| 67 | if (!parsed) { |
| 68 | return {Status::RedisParseErr, errValueNotInteger}; |
| 69 | } |
| 70 | if (*parsed < 0) { |
| 71 | return {Status::RedisParseErr, "invalid expire time, must be >= 0"}; |
| 72 | } |
| 73 | *expire_arg = *parsed; |
| 74 | return Status::OK(); |
| 75 | } |
| 76 | |
| 77 | Status ConvertHashFieldExpireAtMs(int64_t expire_arg, HashFieldExpireTimeMode time_mode, uint64_t now_ms, |
| 78 | uint64_t *expire_at_ms) { |