Skip to content

Commit

Permalink
fixed logic to scaleup
Browse files Browse the repository at this point in the history
  • Loading branch information
henrod committed Oct 5, 2017
1 parent d501ac3 commit cc2e31e
Show file tree
Hide file tree
Showing 4 changed files with 75 additions and 15 deletions.
32 changes: 19 additions & 13 deletions controller/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -1226,22 +1226,28 @@ func SetRoomStatus(
}

if status == models.StatusOccupied {
if roomsCountByStatus.Total()*configYaml.AutoScaling.Up.Trigger.Limit > 100*roomsCountByStatus.Ready {
if roomsCountByStatus.Total()*configYaml.AutoScaling.Up.Trigger.Limit < 100*roomsCountByStatus.Occupied {
log.WithFields(logrus.Fields{
"readyRooms": roomsCountByStatus.Ready,
}).Info("few ready rooms, scaling up")

go ScaleUp(
logger,
mr,
db,
redisClient,
clientset,
scheduler,
configYaml.AutoScaling.Up.Delta,
config.GetInt("scaleUpTimeoutSeconds"),
false,
)
go func() {
err := ScaleUp(
logger,
mr,
db,
redisClient,
clientset,
scheduler,
configYaml.AutoScaling.Up.Delta,
config.GetInt("scaleUpTimeoutSeconds"),
false,
)
if err != nil {
log.WithError(err).Error(err)
return
}
log.Debug("finished scaling up")
}()
return nil
}
}
Expand Down
54 changes: 54 additions & 0 deletions controller/controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3901,6 +3901,60 @@ cmd:
time.Sleep(1 * time.Second)
})

It("should not scale up if has enough ready rooms", func() {
kCreating := models.GetRoomStatusSetRedisKey(configYaml1.Name, "creating")
kReady := models.GetRoomStatusSetRedisKey(configYaml1.Name, "ready")
kOccupied := models.GetRoomStatusSetRedisKey(configYaml1.Name, "occupied")
kTerminating := models.GetRoomStatusSetRedisKey(configYaml1.Name, "terminating")
status := "occupied"

mockRedisClient.EXPECT().TxPipeline().Return(mockPipeline)
mockPipeline.EXPECT().HMSet(rKey, map[string]interface{}{
"lastPing": time.Now().Unix(),
"status": status,
})
mockPipeline.EXPECT().ZAdd(pKey, gomock.Any())
mockPipeline.EXPECT().Eval(models.ZaddIfNotExists, gomock.Any(), roomName)
mockPipeline.EXPECT().SAdd(oKey, rKey)
for _, key := range allStatusKeys {
if !strings.Contains(key, status) {
mockPipeline.EXPECT().SRem(key, rKey)
}
}
expC := &models.RoomsStatusCount{
Creating: 0,
Occupied: 3,
Ready: 3,
Terminating: 0,
}
mockPipeline.EXPECT().SCard(kCreating).Return(redis.NewIntResult(int64(expC.Creating), nil))
mockPipeline.EXPECT().SCard(kReady).Return(redis.NewIntResult(int64(expC.Ready), nil))
mockPipeline.EXPECT().SCard(kOccupied).Return(redis.NewIntResult(int64(expC.Occupied), nil))
mockPipeline.EXPECT().SCard(kTerminating).Return(redis.NewIntResult(int64(expC.Terminating), nil))
mockPipeline.EXPECT().Exec()

mockDb.EXPECT().
Query(gomock.Any(), "SELECT * FROM schedulers WHERE name = ?", configYaml1.Name).
Do(func(scheduler *models.Scheduler, query string, modifier string) {
*scheduler = *models.NewScheduler(configYaml1.Name, configYaml1.Game, yaml1)
})

err := controller.SetRoomStatus(
logger,
mockRedisClient,
mockDb,
mr,
clientset,
status,
config,
room,
schedulerCache,
)

time.Sleep(1 * time.Second)
Expect(err).NotTo(HaveOccurred())
})

It("should not scale up if error on db", func() {
status := "occupied"

Expand Down
2 changes: 1 addition & 1 deletion helm/charts/maestro/Chart.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name: maestro
home: https://github.com/topfreegames/maestro
description: Maestro api and worker
version: 3.10.2
version: 3.10.3
maintainers:
- name: TFGCo
email: backend@tfgco.com
2 changes: 1 addition & 1 deletion metadata/version.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
package metadata

//Version of Maestro
var Version = "3.10.2"
var Version = "3.10.3"

//KubeVersion is the desired Kubernetes version
var KubeVersion = "v1.7.5"

0 comments on commit cc2e31e

Please sign in to comment.