Loading CHANGELOG.md +2 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ The format is based on [keep a changelog](http://keepachangelog.com) and this pr - Allow tournament joins before the start of the tournament active period. - Authoritative matches now complete their stop phase faster to avoid unnecessary processing. - Authoritative match join attempts now have their own bounded queue and no longer count towards the match call queue limit. - Lua runtime group create function now sets the correct default max size if one is not specified. ### Fixed - Correctly report execution mode in Lua runtime after hooks. Loading @@ -33,6 +34,7 @@ The format is based on [keep a changelog](http://keepachangelog.com) and this pr - Leaderboard and tournament runtime callbacks no longer trigger twice when time delays are observed. - Check group max allowed user when promoting a user. - Correct Lua runtime decoding of stream identifying parameters. - Correctly use optional parameters when they are passed to group creation operations. ## [2.2.1] - 2018-11-20 ### Added Loading server/core_group.go +21 −31 Original line number Diff line number Diff line Loading @@ -63,43 +63,33 @@ func CreateGroup(ctx context.Context, logger *zap.Logger, db *sql.DB, userID uui } params := []interface{}{uuid.Must(uuid.NewV4()), creatorID, name, desc, avatarURL, state} query := ` INSERT INTO groups (id, creator_id, name, description, avatar_url, state, edge_count) VALUES ($1, $2, $3, $4, $5, $6, 1) RETURNING id, creator_id, name, description, avatar_url, state, edge_count, lang_tag, max_count, metadata, create_time, update_time` if lang != "" { params = append(params, lang) query = ` INSERT INTO groups (id, creator_id, name, description, avatar_url, state, edge_count, lang_tag) VALUES ($1, $2, $3, $4, $5, $6, 1, $7) RETURNING id, creator_id, name, description, avatar_url, state, edge_count, lang_tag, max_count, metadata, create_time, update_time` } statements := []string{"$1", "$2", "$3", "$4", "$5", "$6"} // called from the client if maxCount > 0 && metadata != "" { params = append(params, maxCount, metadata) //no need to add 'lang' again query := "INSERT INTO groups(id, creator_id, name, description, avatar_url, state" // Add lang tag if any. if lang != "" { query = ` INSERT INTO groups (id, creator_id, name, description, avatar_url, state, edge_count, lang_tag, max_count, metadata) VALUES ($1, $2, $3, $4, $5, $6, 1, $7, $8, $9) RETURNING id, creator_id, name, description, avatar_url, state, edge_count, lang_tag, max_count, metadata, create_time, update_time` } else { query = ` INSERT INTO groups (id, creator_id, name, description, avatar_url, state, edge_count, max_count, metadata) VALUES ($1, $2, $3, $4, $5, $6, 1, $7, $8) RETURNING id, creator_id, name, description, avatar_url, state, edge_count, lang_tag, max_count, metadata, create_time, update_time` query += ", lang_tag" params = append(params, lang) statements = append(statements, "$"+strconv.Itoa(len(params))) } // Add max count if any. if maxCount > 0 { query += ", max_count" params = append(params, maxCount) statements = append(statements, "$"+strconv.Itoa(len(params))) } // Add metadata if any. if metadata != "" { query += ", metadata" params = append(params, metadata) statements = append(statements, "$"+strconv.Itoa(len(params))) } // Add the trailing edge count value. query += `, edge_count) VALUES (` + strings.Join(statements, ",") + `,1) RETURNING id, creator_id, name, description, avatar_url, state, edge_count, lang_tag, max_count, metadata, create_time, update_time` tx, err := db.BeginTx(ctx, nil) if err != nil { logger.Error("Could not begin database transaction.", zap.Error(err)) Loading server/runtime_lua_nakama.go +1 −1 Original line number Diff line number Diff line Loading @@ -4401,7 +4401,7 @@ func (n *RuntimeLuaNakamaModule) groupCreate(l *lua.LState) int { } metadataStr = string(metadataBytes) } maxCount := l.OptInt(9, 0) maxCount := l.OptInt(9, 100) if maxCount < 1 || maxCount > 100 { l.ArgError(9, "expects max_count to be >= 1 and <= 100") return 0 Loading tests/core_storage_test.go +73 −72 File changed.Preview size limit exceeded, changes collapsed. Show changes tests/runtime_test.go +11 −10 Original line number Diff line number Diff line Loading @@ -15,6 +15,7 @@ package tests import ( "context" "errors" "io/ioutil" "net/http" Loading Loading @@ -320,7 +321,7 @@ nakama.register_rpc(test.printWorld, "helloworld")`, } payload := "Hello World" result, err, _ := fn(nil, "", "", 0, "", "", "", payload) result, err, _ := fn(context.Background(), nil, "", "", 0, "", "", "", payload) if err != nil { t.Fatal(err.Error()) } Loading Loading @@ -398,7 +399,7 @@ nakama.register_rpc(test, "test")`, t.Fatal("Expected RPC function to be registered") } result, err, _ := fn(nil, "", "", 0, "", "", "", "") result, err, _ := fn(context.Background(), nil, "", "", 0, "", "", "", "") if err != nil { t.Fatal(err) } Loading Loading @@ -429,7 +430,7 @@ nakama.register_rpc(test, "test")`, } payload := "{\"key\":\"value\"}" result, err, _ := fn(nil, "", "", 0, "", "", "", payload) result, err, _ := fn(context.Background(), nil, "", "", 0, "", "", "", payload) if err != nil { t.Fatal(err) } Loading Loading @@ -460,7 +461,7 @@ nakama.register_rpc(test, "test")`, } payload := "{\"key\":\"value\"}" result, err, _ := fn(nil, "", "", 0, "", "", "", payload) result, err, _ := fn(context.Background(), nil, "", "", 0, "", "", "", payload) if err != nil { t.Fatal(err) } Loading Loading @@ -491,7 +492,7 @@ nakama.register_rpc(test, "test")`, } payload := "{\"key\":\"value\"}" result, err, _ := fn(nil, "", "", 0, "", "", "", payload) result, err, _ := fn(context.Background(), nil, "", "", 0, "", "", "", payload) if err != nil { t.Fatal(err) } Loading Loading @@ -522,7 +523,7 @@ nakama.register_rpc(test, "test")`, } payload := "{\"key\":\"value\"}" result, err, _ := fn(nil, "", "", 0, "", "", "", payload) result, err, _ := fn(context.Background(), nil, "", "", 0, "", "", "", payload) if err != nil { t.Fatal(err) } Loading Loading @@ -579,7 +580,7 @@ nakama.register_rpc(test, "test")`, } payload := "{\"key\":\"value\"}" result, err, _ := fn(nil, "", "", 0, "", "", "", payload) result, err, _ := fn(context.Background(), nil, "", "", 0, "", "", "", payload) if err != nil { t.Fatal(err) } Loading Loading @@ -612,7 +613,7 @@ nakama.register_rpc(test, "test")`, payload := "something_to_encrypt" hash, _ := bcrypt.GenerateFromPassword([]byte(payload), bcrypt.DefaultCost) result, err, _ := fn(nil, "", "", 0, "", "", "", string(hash)) result, err, _ := fn(context.Background(), nil, "", "", 0, "", "", "", string(hash)) if err != nil { t.Fatal(err) } Loading Loading @@ -980,7 +981,7 @@ local users = nk.group_users_list(group.id) for i, u in ipairs(users) do assert(u.user.id == user_id, "'u.id' must be equal to user_id") assert(u.state == 1, "'u.state' must be equal to 1 / superadmin") assert(u.state == 0, "'u.state' must be equal to 0 / superadmin") end local groups = nk.user_groups_list(user_id) Loading @@ -988,7 +989,7 @@ for i, g in ipairs(groups) do print(nk.json_encode(g)) assert(g.group.name == group_update_name, "'g.name' must be equal to group_update_name") assert(g.state == 1, "'g.state' must be equal to 1 / superadmin") assert(g.state == 0, "'g.state' must be equal to 0 / superadmin") end nk.group_delete(group.id)`, Loading Loading
CHANGELOG.md +2 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ The format is based on [keep a changelog](http://keepachangelog.com) and this pr - Allow tournament joins before the start of the tournament active period. - Authoritative matches now complete their stop phase faster to avoid unnecessary processing. - Authoritative match join attempts now have their own bounded queue and no longer count towards the match call queue limit. - Lua runtime group create function now sets the correct default max size if one is not specified. ### Fixed - Correctly report execution mode in Lua runtime after hooks. Loading @@ -33,6 +34,7 @@ The format is based on [keep a changelog](http://keepachangelog.com) and this pr - Leaderboard and tournament runtime callbacks no longer trigger twice when time delays are observed. - Check group max allowed user when promoting a user. - Correct Lua runtime decoding of stream identifying parameters. - Correctly use optional parameters when they are passed to group creation operations. ## [2.2.1] - 2018-11-20 ### Added Loading
server/core_group.go +21 −31 Original line number Diff line number Diff line Loading @@ -63,43 +63,33 @@ func CreateGroup(ctx context.Context, logger *zap.Logger, db *sql.DB, userID uui } params := []interface{}{uuid.Must(uuid.NewV4()), creatorID, name, desc, avatarURL, state} query := ` INSERT INTO groups (id, creator_id, name, description, avatar_url, state, edge_count) VALUES ($1, $2, $3, $4, $5, $6, 1) RETURNING id, creator_id, name, description, avatar_url, state, edge_count, lang_tag, max_count, metadata, create_time, update_time` if lang != "" { params = append(params, lang) query = ` INSERT INTO groups (id, creator_id, name, description, avatar_url, state, edge_count, lang_tag) VALUES ($1, $2, $3, $4, $5, $6, 1, $7) RETURNING id, creator_id, name, description, avatar_url, state, edge_count, lang_tag, max_count, metadata, create_time, update_time` } statements := []string{"$1", "$2", "$3", "$4", "$5", "$6"} // called from the client if maxCount > 0 && metadata != "" { params = append(params, maxCount, metadata) //no need to add 'lang' again query := "INSERT INTO groups(id, creator_id, name, description, avatar_url, state" // Add lang tag if any. if lang != "" { query = ` INSERT INTO groups (id, creator_id, name, description, avatar_url, state, edge_count, lang_tag, max_count, metadata) VALUES ($1, $2, $3, $4, $5, $6, 1, $7, $8, $9) RETURNING id, creator_id, name, description, avatar_url, state, edge_count, lang_tag, max_count, metadata, create_time, update_time` } else { query = ` INSERT INTO groups (id, creator_id, name, description, avatar_url, state, edge_count, max_count, metadata) VALUES ($1, $2, $3, $4, $5, $6, 1, $7, $8) RETURNING id, creator_id, name, description, avatar_url, state, edge_count, lang_tag, max_count, metadata, create_time, update_time` query += ", lang_tag" params = append(params, lang) statements = append(statements, "$"+strconv.Itoa(len(params))) } // Add max count if any. if maxCount > 0 { query += ", max_count" params = append(params, maxCount) statements = append(statements, "$"+strconv.Itoa(len(params))) } // Add metadata if any. if metadata != "" { query += ", metadata" params = append(params, metadata) statements = append(statements, "$"+strconv.Itoa(len(params))) } // Add the trailing edge count value. query += `, edge_count) VALUES (` + strings.Join(statements, ",") + `,1) RETURNING id, creator_id, name, description, avatar_url, state, edge_count, lang_tag, max_count, metadata, create_time, update_time` tx, err := db.BeginTx(ctx, nil) if err != nil { logger.Error("Could not begin database transaction.", zap.Error(err)) Loading
server/runtime_lua_nakama.go +1 −1 Original line number Diff line number Diff line Loading @@ -4401,7 +4401,7 @@ func (n *RuntimeLuaNakamaModule) groupCreate(l *lua.LState) int { } metadataStr = string(metadataBytes) } maxCount := l.OptInt(9, 0) maxCount := l.OptInt(9, 100) if maxCount < 1 || maxCount > 100 { l.ArgError(9, "expects max_count to be >= 1 and <= 100") return 0 Loading
tests/core_storage_test.go +73 −72 File changed.Preview size limit exceeded, changes collapsed. Show changes
tests/runtime_test.go +11 −10 Original line number Diff line number Diff line Loading @@ -15,6 +15,7 @@ package tests import ( "context" "errors" "io/ioutil" "net/http" Loading Loading @@ -320,7 +321,7 @@ nakama.register_rpc(test.printWorld, "helloworld")`, } payload := "Hello World" result, err, _ := fn(nil, "", "", 0, "", "", "", payload) result, err, _ := fn(context.Background(), nil, "", "", 0, "", "", "", payload) if err != nil { t.Fatal(err.Error()) } Loading Loading @@ -398,7 +399,7 @@ nakama.register_rpc(test, "test")`, t.Fatal("Expected RPC function to be registered") } result, err, _ := fn(nil, "", "", 0, "", "", "", "") result, err, _ := fn(context.Background(), nil, "", "", 0, "", "", "", "") if err != nil { t.Fatal(err) } Loading Loading @@ -429,7 +430,7 @@ nakama.register_rpc(test, "test")`, } payload := "{\"key\":\"value\"}" result, err, _ := fn(nil, "", "", 0, "", "", "", payload) result, err, _ := fn(context.Background(), nil, "", "", 0, "", "", "", payload) if err != nil { t.Fatal(err) } Loading Loading @@ -460,7 +461,7 @@ nakama.register_rpc(test, "test")`, } payload := "{\"key\":\"value\"}" result, err, _ := fn(nil, "", "", 0, "", "", "", payload) result, err, _ := fn(context.Background(), nil, "", "", 0, "", "", "", payload) if err != nil { t.Fatal(err) } Loading Loading @@ -491,7 +492,7 @@ nakama.register_rpc(test, "test")`, } payload := "{\"key\":\"value\"}" result, err, _ := fn(nil, "", "", 0, "", "", "", payload) result, err, _ := fn(context.Background(), nil, "", "", 0, "", "", "", payload) if err != nil { t.Fatal(err) } Loading Loading @@ -522,7 +523,7 @@ nakama.register_rpc(test, "test")`, } payload := "{\"key\":\"value\"}" result, err, _ := fn(nil, "", "", 0, "", "", "", payload) result, err, _ := fn(context.Background(), nil, "", "", 0, "", "", "", payload) if err != nil { t.Fatal(err) } Loading Loading @@ -579,7 +580,7 @@ nakama.register_rpc(test, "test")`, } payload := "{\"key\":\"value\"}" result, err, _ := fn(nil, "", "", 0, "", "", "", payload) result, err, _ := fn(context.Background(), nil, "", "", 0, "", "", "", payload) if err != nil { t.Fatal(err) } Loading Loading @@ -612,7 +613,7 @@ nakama.register_rpc(test, "test")`, payload := "something_to_encrypt" hash, _ := bcrypt.GenerateFromPassword([]byte(payload), bcrypt.DefaultCost) result, err, _ := fn(nil, "", "", 0, "", "", "", string(hash)) result, err, _ := fn(context.Background(), nil, "", "", 0, "", "", "", string(hash)) if err != nil { t.Fatal(err) } Loading Loading @@ -980,7 +981,7 @@ local users = nk.group_users_list(group.id) for i, u in ipairs(users) do assert(u.user.id == user_id, "'u.id' must be equal to user_id") assert(u.state == 1, "'u.state' must be equal to 1 / superadmin") assert(u.state == 0, "'u.state' must be equal to 0 / superadmin") end local groups = nk.user_groups_list(user_id) Loading @@ -988,7 +989,7 @@ for i, g in ipairs(groups) do print(nk.json_encode(g)) assert(g.group.name == group_update_name, "'g.name' must be equal to group_update_name") assert(g.state == 1, "'g.state' must be equal to 1 / superadmin") assert(g.state == 0, "'g.state' must be equal to 0 / superadmin") end nk.group_delete(group.id)`, Loading