Skip to content

Commit

Permalink
Replace SScan with SRandMember.
Browse files Browse the repository at this point in the history
  • Loading branch information
cscatolini committed Dec 5, 2018
1 parent 8b937d7 commit 2787da5
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 15 deletions.
6 changes: 3 additions & 3 deletions api/room_handler_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1026,7 +1026,7 @@ forwarders:
expectedRet[idx] = r.GetRoomRedisKey()
}
mockRedisClient.EXPECT().TxPipeline().Return(mockPipeline)
mockPipeline.EXPECT().SScan(pKey, uint64(0), "", int64(5)).Return(redis.NewScanCmdResult(expectedRet, 0, nil))
mockPipeline.EXPECT().SRandMemberN(pKey, int64(5)).Return(redis.NewStringSliceResult(expectedRet, nil))
mockPipeline.EXPECT().Exec()

url := fmt.Sprintf("/scheduler/%s/rooms", namespace)
Expand Down Expand Up @@ -1103,8 +1103,8 @@ forwarders:
mockRedisTraceWrapper.EXPECT().WithContext(gomock.Any(), mockRedisClient).Return(mockRedisClient)
pKey := models.GetRoomStatusSetRedisKey(namespace, models.StatusReady)
mockRedisClient.EXPECT().TxPipeline().Return(mockPipeline)
mockPipeline.EXPECT().SScan(pKey, uint64(0), "", int64(5)).Return(
redis.NewScanCmdResult([]string{}, 0, errors.New("something went wrong")))
mockPipeline.EXPECT().SRandMemberN(pKey, int64(5)).Return(
redis.NewStringSliceResult([]string{}, errors.New("something went wrong")))
mockPipeline.EXPECT().Exec()

url := fmt.Sprintf("/scheduler/%s/rooms", namespace)
Expand Down
4 changes: 2 additions & 2 deletions models/constants.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,8 @@ const SegmentHMSet = "Redis/HMSet"
//SegmentZRangeBy represents a segment
const SegmentZRangeBy = "Redis/ZRangeBy"

//SegmentSScan represents a segment
const SegmentSScan = "Redis/SegmentSScan"
//SegmentSRandMember represents a segment
const SegmentSRandMember = "Redis/SegmentSRandMember"

//SegmentPipeExec represents a segment
const SegmentPipeExec = "Redis/Exec"
Expand Down
10 changes: 4 additions & 6 deletions models/room.go
Original file line number Diff line number Diff line change
Expand Up @@ -408,20 +408,18 @@ func GetRoomsOccupiedTimeout(redisClient interfaces.RedisClient, schedulerName s

func getReadyRooms(tx redis.Pipeliner, schedulerName string, size int, mr *MixedMetricsReporter) ([]string, error) {
var result []string
rooms := tx.SScan(
rooms := tx.SRandMemberN(
GetRoomStatusSetRedisKey(schedulerName, StatusReady),
uint64(0),
"",
int64(size),
)
err := mr.WithSegment(SegmentSScan, func() error {
err := mr.WithSegment(SegmentSRandMember, func() error {
_, err := tx.Exec()
return err
})
if err != nil {
return nil, err
}
result, _, err = rooms.Result()
result, err = rooms.Result()
if err != nil {
return nil, err
}
Expand All @@ -437,7 +435,7 @@ func getReadyRooms(tx redis.Pipeliner, schedulerName string, size int, mr *Mixed
// GetRoomsByMetric returns a list of rooms ordered by metric
func GetRoomsByMetric(redisClient interfaces.RedisClient, schedulerName string, metricName string, size int, mr *MixedMetricsReporter) ([]string, error) {
var result []string
// TODO hacky, one day add ZRange and SScan to redis interface
// TODO hacky, one day add ZRange and SRandMember to redis interface
tx := redisClient.TxPipeline()
if metricName == string(RoomAutoScalingPolicyType) || metricName == string(LegacyAutoScalingPolicyType) {
return getReadyRooms(tx, schedulerName, size, mr)
Expand Down
8 changes: 4 additions & 4 deletions models/room_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -666,8 +666,8 @@ var _ = Describe("Room", func() {
expectedRet[idx] = r.GetRoomRedisKey()
}
mockRedisClient.EXPECT().TxPipeline().Return(mockPipeline)
mockPipeline.EXPECT().SScan(pKey, uint64(0), "", int64(size)).Return(
redis.NewScanCmdResult(expectedRet, 0, nil))
mockPipeline.EXPECT().SRandMemberN(pKey, int64(size)).Return(
redis.NewStringSliceResult(expectedRet, nil))
mockPipeline.EXPECT().Exec()

rooms, err := models.GetRoomsByMetric(mockRedisClient, scheduler, metric, size, mmr)
Expand All @@ -682,8 +682,8 @@ var _ = Describe("Room", func() {
pKey := models.GetRoomStatusSetRedisKey(scheduler, models.StatusReady)

mockRedisClient.EXPECT().TxPipeline().Return(mockPipeline)
mockPipeline.EXPECT().SScan(pKey, uint64(0), "", int64(size)).Return(
redis.NewScanCmdResult([]string{}, 0, errors.New("some error")))
mockPipeline.EXPECT().SRandMemberN(pKey, int64(size)).Return(
redis.NewStringSliceResult([]string{}, errors.New("some error")))
mockPipeline.EXPECT().Exec()

_, err := models.GetRoomsByMetric(mockRedisClient, scheduler, metric, size, mmr)
Expand Down

0 comments on commit 2787da5

Please sign in to comment.