2014-07-30 02:15:44 +00:00
|
|
|
package checkpoints
|
2014-07-28 03:31:51 +00:00
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"fmt"
|
|
|
|
|
|
|
|
|
|
"github.com/hoisie/redis"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type RedisCheckpoint struct {
|
2014-07-30 01:45:58 +00:00
|
|
|
AppName string
|
2014-07-28 03:31:51 +00:00
|
|
|
client redis.Client
|
|
|
|
|
sequenceNumber string
|
|
|
|
|
}
|
|
|
|
|
|
2014-07-28 23:33:42 +00:00
|
|
|
func (c *RedisCheckpoint) CheckpointExists(streamName string, shardID string) bool {
|
|
|
|
|
key := c.keyGen(streamName, shardID)
|
2014-07-28 03:31:51 +00:00
|
|
|
val, _ := c.client.Get(key)
|
|
|
|
|
|
2014-07-30 06:09:57 +00:00
|
|
|
if val != nil && string(val) != "" {
|
2014-07-28 03:31:51 +00:00
|
|
|
c.sequenceNumber = string(val)
|
|
|
|
|
return true
|
|
|
|
|
} else {
|
|
|
|
|
return false
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2014-07-30 06:09:57 +00:00
|
|
|
func (c RedisCheckpoint) SequenceNumber() string {
|
|
|
|
|
return c.sequenceNumber
|
|
|
|
|
}
|
|
|
|
|
|
2014-07-28 23:33:42 +00:00
|
|
|
func (c *RedisCheckpoint) SetCheckpoint(streamName string, shardID string, sequenceNumber string) {
|
|
|
|
|
key := c.keyGen(streamName, shardID)
|
2014-07-28 03:31:51 +00:00
|
|
|
c.client.Set(key, []byte(sequenceNumber))
|
|
|
|
|
c.sequenceNumber = sequenceNumber
|
|
|
|
|
}
|
|
|
|
|
|
2014-07-28 23:33:42 +00:00
|
|
|
func (c RedisCheckpoint) keyGen(streamName string, shardID string) string {
|
2014-07-30 01:45:58 +00:00
|
|
|
return fmt.Sprintf("%v:checkpoint:%v:%v", c.AppName, streamName, shardID)
|
2014-07-28 03:31:51 +00:00
|
|
|
}
|