Loading CHANGELOG.md +1 −0 Original line number Diff line number Diff line Loading @@ -12,6 +12,7 @@ The format is based on [keep a changelog](http://keepachangelog.com) and this pr - Improved parsing of client IP and port for incoming requests and socket connections. - WebSocket sessions no longer log the client IP and port number in error messages. - Made Go and Lua runtime startup log messages consistent. - All schema and query statements that use the '1970-01-01 00:00:00' constant now specify UTC timezone. ### Fixed - CRON expressions for leaderboard and tournament resets now allow concurrent processing. Loading migrate/a_migrate-packr.go +2 −2 Original line number Diff line number Diff line Loading @@ -7,6 +7,6 @@ import "github.com/gobuffalo/packr" // You can use the "packr clean" command to clean up this, // and any other packr generated files. func init() { packr.PackJSONBytes("./sql", "20180103142001_initial_schema.sql", "\"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\"") packr.PackJSONBytes("./sql", "20180805174141-tournaments.sql", "\"H4sIAAAAAAAA/7RVzW7bOBfd6ykuvGncz38JUHwzNaaAYisTobJUWHLazsagqRuLE4lUSaq25+kHlG39pJGbLkbwhtY5h+fee0iN31rwFmYiP0i2TTTcTK5/gyhB8MkTyQjYhU6EVBaUOI9R5ApjKHiMEnSCYOeEJnh+M4AHlIoJDjejCVwZQO/0qtefGomDKCAjB+BCQ6EQdMIUPLIUAfcUcw2MAxVZnjLCKcKO6aTc56QyMhpfTxpiownjQICK/ADisQkEok+mE63z9+PxbrcbkdLsSMjtOD3C1NhzZ44fOsOb0eREWPEUlQKJ3womMYbNAUiep4ySTYqQkh0ICWQrEWPQwhjeSaYZ3w5AiUe9IxKNTMyUlmxT6Fa/zvaYagEEB8KhZ4fghj24tUM3HBiRz250H6wi+Gwvl7YfuU4IwRJmgT93IzfwQwjuwPa/wkfXnw8AmU5QAu5zaSoQEpjpJMZl20LEloVHcbSkcqTskVFICd8WZIuwFd9Rcsa3kKPMmDITVUB4bGRSljFNdPnXD3WZjcaWNRyCH0TOe4jMeDO2lSUBMsILkqYHM+KMaWWapzAnkmgELQlXhB6VtQDkqpBotEqXNMGMQJHHRKMCIhEUfiuQUzMipMSkiQr6JAWhSbyBWKAqY6aKPBdSGyESx6aq2b0z+whUcKUlYVwr+M4I9GwvcpYQ2beeA6PRCOz5HGaBt1r4PVCaaMyQazUqy/vfsSiEVW42qa1bt86frj+1mmIpkhjlRhAZW9CQBUo0boU8QPmEC9vzXD8qF3Pnzl55EUxMJ8Ffed6gzY1RUcnysq8AD/Zydm8vr27evetX3DdvOsnFaSLlc96za2MYDo+TooLHatSWQh6vNcvwyI7chRNG9uJT9Fct9eb69/9PhpPr4eQaJpP35a/T2t+C8XV1+G6DwHNsv23tzvZCp4ufkf1asX/wQmnXk9NzSYMX2VpRIfGiRrtJGdkDSVOxwxiOXKI1Zrl+3jTNdIqV5i8Or67uNcN7xtVE6mpeL06Li91Vv+JPra4oryVS8TzRP3auq2FTaxYsFm40tV57ZPwwWtpGkiZIn9bV4Tke56tq/eEPmPQHXbQq+idatb5Mq2J1olXrDz9j1e1oUOs/z/wH23PnduR0F3oZda7jMups++eoyuHUsmZLx+Bcf+58AfeunKHzxQ2jsLpJ1nWy1ucroXK+ZvEeAr851brxg0YoB/V1MnfC2aC6IfuXXYgdR7lm8Rr3OZOH4+7NrLL4BQ+nBMPVmT6ABn8AbYH+64/Cf5GCZzOpDk/zYzQXO97y6N6dO9Q+UPNl8Ol8ZGtMM2gvIxofnQugRhJfRpyH3I1ofQW6Yc04dyOqtnXDygu5+/XlPer8Ti2rhFQZ/bV8PkvYi9Ors/aKgqfWvwEAAP//bZ8RWeILAAA=\"") packr.PackJSONBytes("./sql", "20180103142001_initial_schema.sql", "\"H4sIAAAAAAAA/7xaUZPaOBJ+51d0zcMN5JgZZpLZ7CXZrfKAJ+FCIIdhN7kXl7B7QBnb8koChru6/34l2QbJgHFmU8tuJRi3Wq3Wp0+fWrl60YAX0GXphtP5QsJN5/pnmCwQhuSRxAScpVwwLhqg7QY0wERgCMskRA5ygeCkJFhg8aYNvyEXlCVwc9mBpjI4y1+dtd4qFxu2hJhsIGESlgJBLqiABxoh4FOAqQSaQMDiNKIkCRDWVC50P7mXS+Xja+6DzSShCRAIWLoB9mAaApF50Asp0zdXV+v1+pLoYC8Zn19FmZm4GvS77tBzL24uO3mDaRKhEMDxjyXlGMJsAyRNIxqQWYQQkTUwDmTOEUOQTAW85lTSZN4GwR7kmnBUbkIqJKezpbTyVYRHhWXAEiAJnDke9L0zuHO8vtdWTn7vTz6MphP43RmPneGk73owGkN3NOz1J/3R0IPRPTjDr/CxP+y1AalcIAd8SrkaAeNAVSYx1GnzEK0QHlgWkkgxoA80gIgk8yWZI8zZCnlCkzmkyGMq1IwKIEmo3EQ0ppJI/dPeuFRHV43GxQX8PaZzTiTCNG10x64zcWHi3A1c6N/DcDQB90vfm3gKA1xAswEA8Hnc/+SMv8JH9ys0adhqN/TPNATjM532e7sn5Wk4HQza2lI5S0iM2bvfnHH3gzNuXt/83AKVM28ydvrDSdanXxj7j7iB6bD/r6lbchdSkUZk42cuC3c3t7et7D1ZEUm4v+SR2d3t9U3+/uJCg0+8ubqSjEXikqJ80OhbyDi6mgXpq9faUCXel2ReiluFDT333pkOJnCOyXnmNmKBTr9trcNSXeLl/BLOPJLAPSdJQEXA2tB1znRbSWP8D0uwsu1nkuFhQmOE5tSDv0GXJCQkrcxJjJKERJLMyT+90fBuOyHbcP/7v/NSOtckilAWhrWbYUxotDU0Q4Z82jK7lAixZjwHy93XietsW3U/uN2P0IwwmctFs7BswTt4edPpdPL5eiABzhh79DXibPiYPc0Zm0fo57issCMxBphI5Mr2uJ2QSOLCXYVdsBSSxaf7xXCOfsCWiU62QjzsJbpT5MQw/vUX6LRK2Q84Eom+wg0ATPqfXG/ifPo8+bfhK2HrZrndMg2f1W6FnD5sqtudX//jdeeic33RuYZO543+H6aTbhk5IRWKsnNnz/XVaL3VhOahXKbgbYTEWFPIZaM/9NzxRGV4VBAZDdtbGmo1snkaTF0Pmued/HNx4I/ic96G8/Os3WioOOt+0O9OFBlCb6RC+tAfvn/bOMWofogrGuBRXlW/3o/Gbv/9MPtVN1K9jN17d+wOu663G1FLxdJzB+7Eha7jdZ2eW6JmC4v7nKwga/H2zkTb5OxbRNEGGrZ02k8NU4H30CAFW/IAtSshicQ2pExQRZqHBr+1bmXR1c7BnqcQhaSJZudnZHMbx/5Oly/WncW7X6EeoMrzUSQid3zXf78liK2h2gqmSucpiSAYl8C42uhZApytxeWBFW4tr6oFbqfo0CBLFs8eqZ75HfN5n5zBIB/rjgWtMT9wiknY7LTaQJMVlegLTGTzevfMMUC6wrB502rDLGLBI4bNl602hBihxLD5qtUGwoOFNrpt2fg2YFlCyim0J0yqLTnb95uFurjvf/nkvoGABY+ckWBxrkQaiTYCuRKYSmMHEa6UJEzYcr6A9QITi9IXREDP9boQsxDV/CotR5MQny73V9V2eRoe9Fr98YRSxr8p38xc+DQ8rt8K6tlzVsLJcvYNA7kvL0o7IUskZluqLV4qtEugsnoAfzbshjgnkq4QViRaogDCEUS2z3AUyFdawKtIUentbEgVAzIn2Nr1Dq/LU9gTknFymGcDFkUYqIloA0cStuERN+0i8T8QF7uOKjcbBYXiU2NPOgEMPR35m7ozvsrPv2YEL29apRmPw1u19Bbq0Jr1wjQGs2lWmTyImqLf64IqteUh2aZOpFjLRWZ5SvrVgNG+7qvVyCJIE08WkhRGc4j2hz33Swmiu3a+SomfN1PU4NPwScFqi+J9zG557RE3J9ZCjEIUa8FWHJIrEa9oVGkO/ZATy/Y5RBFwmkrGtz9FZIbRYUK1JUqx8r9v4dhH5z24H2DNiwsIFkTqPVB98bMJ1XugfuYYsxXq/W/O2TL1vzGa6C0weyRhtglmTxGSFTZvt8+PNHhs/rR9TDmLmdo2XyvNa7JlBXQ7VsAmJx4YomlqlwcqOcKYzkr63pkau8jRAPZwcNJU4+NErObG9D1kZR/toHzcOr7KS8qvbsOGIYSKSasl9SMkIfIZIzzcX3hFnagE9aPZIrqiqStYKwS4G40GrjO0U3XvDDwt75X29TPtW8GkFrUTEejFoya5ea1gzVLkRE12PUwrJzMU2RIUWMjPgGOsxOiN9l08vVQdKJEgfREsMFxGuB36T6+Mok7AWaLkfEzkGzh7AcZ/Z41ySed5APoBUsOYaSW12aEJN20UgPAppXyTc6cIGFd/LWf5N7ZOdlrEolTbj8WrFuCOs6vtoVSQMRNVBHGIoKoYyvSo4ajGtGtpnt0OVHYy6/2dvUhOTS+F9b6jZBn7hqfDhaat0NhZ73uqgt/z8Fefvuo2M3B2vFmd0pTBgwUw2lCB6pP8mBVW/QjDOfL9BVN5bPvz4vzYke2AuDimu61JXZBkrgithINjcDlmc0y91sPF6Ra16lOSxTMhWXJAMFqTsTswlbJ0OqcVi+B5gWtlJvYDNqup7e2VRduoNuegKm/GNt0dGwI7dK616caUbvY9gFEdyML3q252Cv1lnSaLax3rUqd8p1PzRse6z6m+zrGYrybvWYUtS04coG9tW2JcNQ6WYpKp/IgJDDOpYt0cfNfFwTU4w57Z/t0vEJOn7KFE9sXPFZtGZ9vNzlr10jqO/WfRf91G1lXCn7lJqDjE7pLnGzGqY2x+hC1Wpr0SzfVntNOLsbI/sxOj71P9WX2UFn8NZtnV7OtX7Bt/SW38B1XGn1UX/6uq4t9fExdLdXwJY5qxRfZNHUlijGfI9XnkG6OJz/GPpTq2vDQr4K9a1rGvuv5t/quBHlsnjd549HmHpD0Uva0wEEde2tvyESNLUB2x2T+qnDY8YpEXlY68zQtXR96axfCqIVfky7gwrLAQbxv/DwAA///NhkpZLSQAAA==\"") packr.PackJSONBytes("./sql", "20180805174141-tournaments.sql", "\"H4sIAAAAAAAA/7RVzW7bOBfd6ykuvGncz38JUHwzNaaAYisTobJUWHLazsagqRuLE4lUSaq25+kHlG39pJGbLkbwhtY5h+fee0iN31rwFmYiP0i2TTTcTK5/gyhB8MkTyQjYhU6EVBaUOI9R5ApjKHiMEnSCYOeEJnh+M4AHlIoJDjejCVwZQO/0qtefGomDKCAjB+BCQ6EQdMIUPLIUAfcUcw2MAxVZnjLCKcKO6aTc56QyMhpfTxpiownjQICK/ADisQkEok+mE63z9+PxbrcbkdLsSMjtOD3C1NhzZ44fOsOb0eREWPEUlQKJ3womMYbNAUiep4ySTYqQkh0ICWQrEWPQwhjeSaYZ3w5AiUe9IxKNTMyUlmxT6Fa/zvaYagEEB8KhZ4fghj24tUM3HBiRz250H6wi+Gwvl7YfuU4IwRJmgT93IzfwQwjuwPa/wkfXnw8AmU5QAu5zaSoQEpjpJMZl20LEloVHcbSkcqTskVFICd8WZIuwFd9Rcsa3kKPMmDITVUB4bGRSljFNdPnXD3WZjcaWNRyCH0TOe4jMeDO2lSUBMsILkqYHM+KMaWWapzAnkmgELQlXhB6VtQDkqpBotEqXNMGMQJHHRKMCIhEUfiuQUzMipMSkiQr6JAWhSbyBWKAqY6aKPBdSGyESx6aq2b0z+whUcKUlYVwr+M4I9GwvcpYQ2beeA6PRCOz5HGaBt1r4PVCaaMyQazUqy/vfsSiEVW42qa1bt86frj+1mmIpkhjlRhAZW9CQBUo0boU8QPmEC9vzXD8qF3Pnzl55EUxMJ8Ffed6gzY1RUcnysq8AD/Zydm8vr27evetX3DdvOsnFaSLlc96za2MYDo+TooLHatSWQh6vNcvwyI7chRNG9uJT9Fct9eb69/9PhpPr4eQaJpP35Q9W0azT3t+C8XV1AG+DwHNsv23vzvZCp4ufkf1asX/wQnnXk9NzSYMX2VpRIfGiRrtRGdkDSVOxwxiOXKI1Zrl+3jjNdIqV5i8OsK7uNQN8xtVE6mpmL06Mi91Vv+JPra44ryVS8TzVP3auq2FTaxYsFm40tV57bPwwWtpGkiZIn9bVAToe6atq/eEPmPQHXbQq/idatb5Mq2J1olXrDz9j1e1oUOs/z/wH23PnduR0F3oZda7jMups++eoyuHUsmZLx+Bcf+58AfeunKHzxQ2jsLpN1nWy1udroXK+ZvEeAr851brxg0YoB/WVMnfC2aC6JfuXXYgdR7lm8Rr3OZOH4+7NrLL4BQ+nBMPVmT6ABn8AbYH+64/Cf5GCZzOpDk/zgzQXO97y6N6dO9Q+UPNl8Ol8ZGtMM2gvIxofngugRhJfRpyH3I1ofQW6Yc04dyOqtnXDygu5+/XlPer8Ti2rhFQZ/bV8PkvYi9Ors/aKgqfWvwEAAP//B0qo3OYLAAA=\"") } migrate/sql/20180103142001_initial_schema.sql +4 −4 Original line number Diff line number Diff line Loading @@ -38,8 +38,8 @@ CREATE TABLE IF NOT EXISTS users ( edge_count INT DEFAULT 0 CHECK (edge_count >= 0) NOT NULL, create_time TIMESTAMPTZ DEFAULT now() NOT NULL, update_time TIMESTAMPTZ DEFAULT now() NOT NULL, verify_time TIMESTAMPTZ DEFAULT '1970-01-01 00:00:00' NOT NULL, disable_time TIMESTAMPTZ DEFAULT '1970-01-01 00:00:00' NOT NULL verify_time TIMESTAMPTZ DEFAULT '1970-01-01 00:00:00 UTC' NOT NULL, disable_time TIMESTAMPTZ DEFAULT '1970-01-01 00:00:00 UTC' NOT NULL ); -- Setup System user. Loading Loading @@ -148,7 +148,7 @@ CREATE TABLE IF NOT EXISTS leaderboard_record ( metadata JSONB DEFAULT '{}' NOT NULL, create_time TIMESTAMPTZ DEFAULT now() NOT NULL, update_time TIMESTAMPTZ DEFAULT now() NOT NULL, expiry_time TIMESTAMPTZ DEFAULT '1970-01-01 00:00:00' NOT NULL, expiry_time TIMESTAMPTZ DEFAULT '1970-01-01 00:00:00 UTC' NOT NULL, UNIQUE (owner_id, leaderboard_id, expiry_time) ); Loading Loading @@ -188,7 +188,7 @@ CREATE TABLE IF NOT EXISTS groups ( max_count INT DEFAULT 100 CHECK (max_count >= 1) NOT NULL, create_time TIMESTAMPTZ DEFAULT now() NOT NULL, update_time TIMESTAMPTZ DEFAULT now() NOT NULL, disable_time TIMESTAMPTZ DEFAULT '1970-01-01 00:00:00' NOT NULL disable_time TIMESTAMPTZ DEFAULT '1970-01-01 00:00:00 UTC' NOT NULL ); CREATE INDEX IF NOT EXISTS edge_count_update_time_id_idx ON groups (disable_time, edge_count, update_time, id); CREATE INDEX IF NOT EXISTS update_time_edge_count_id_idx ON groups (disable_time, update_time, edge_count, id); Loading migrate/sql/20180805174141-tournaments.sql +1 −1 Original line number Diff line number Diff line Loading @@ -24,7 +24,7 @@ ALTER TABLE leaderboard ADD COLUMN category SMALLINT DEFAULT 0 NOT NULL, ADD COLUMN description VARCHAR(255) DEFAULT '' NOT NULL, ADD COLUMN duration INT DEFAULT 0 NOT NULL, -- in seconds. ADD COLUMN end_time TIMESTAMPTZ DEFAULT '1970-01-01 00:00:00' NOT NULL, ADD COLUMN end_time TIMESTAMPTZ DEFAULT '1970-01-01 00:00:00 UTC' NOT NULL, ADD COLUMN join_required BOOLEAN DEFAULT FALSE NOT NULL, ADD COLUMN max_size INT DEFAULT 100000000 NOT NULL, ADD COLUMN max_num_score INT DEFAULT 1000000 NOT NULL, -- max allowed score attempts. Loading server/core_group.go +14 −14 Original line number Diff line number Diff line Loading @@ -217,7 +217,7 @@ func UpdateGroup(ctx context.Context, logger *zap.Logger, db *sql.DB, groupID uu return ErrGroupNoUpdateOps } query := "UPDATE groups SET update_time = now(), " + strings.Join(statements, ", ") + " WHERE (id = $1) AND (disable_time = '1970-01-01 00:00:00')" query := "UPDATE groups SET update_time = now(), " + strings.Join(statements, ", ") + " WHERE (id = $1) AND (disable_time = '1970-01-01 00:00:00 UTC')" res, err := db.ExecContext(ctx, query, params...) if err != nil { if e, ok := err.(*pq.Error); ok && e.Code == dbErrorUniqueViolation { Loading Loading @@ -274,7 +274,7 @@ func JoinGroup(ctx context.Context, logger *zap.Logger, db *sql.DB, router Messa query := ` SELECT id, creator_id, name, description, avatar_url, state, edge_count, lang_tag, max_count, metadata, create_time, update_time FROM groups WHERE (id = $1) AND (disable_time = '1970-01-01 00:00:00')` WHERE (id = $1) AND (disable_time = '1970-01-01 00:00:00 UTC')` rows, err := db.QueryContext(ctx, query, groupID) if err != nil { logger.Error("Could not look up group while trying to join it.", zap.Error(err)) Loading Loading @@ -440,7 +440,7 @@ func LeaveGroup(ctx context.Context, logger *zap.Logger, db *sql.DB, groupID uui // check to ensure we are not decrementing the count when the relationship was an invite. if myState.Int64 < 3 { query = "UPDATE groups SET edge_count = edge_count - 1, update_time = now() WHERE (id = $1::UUID) AND (disable_time = '1970-01-01 00:00:00')" query = "UPDATE groups SET edge_count = edge_count - 1, update_time = now() WHERE (id = $1::UUID) AND (disable_time = '1970-01-01 00:00:00 UTC')" res, err := tx.ExecContext(ctx, query, groupID) if err != nil { logger.Debug("Could not update group edge_count.", zap.String("group_id", groupID.String()), zap.String("user_id", userID.String())) Loading Loading @@ -488,7 +488,7 @@ func AddGroupUsers(ctx context.Context, logger *zap.Logger, db *sql.DB, router M } var groupName sql.NullString query := "SELECT name FROM groups WHERE id = $1 AND disable_time = '1970-01-01 00:00:00'" query := "SELECT name FROM groups WHERE id = $1 AND disable_time = '1970-01-01 00:00:00 UTC'" if err := db.QueryRowContext(ctx, query, groupID).Scan(&groupName); err != nil { if err == sql.ErrNoRows { logger.Info("Cannot add users to disabled group.", zap.String("group_id", groupID.String())) Loading Loading @@ -636,7 +636,7 @@ WHERE (source_id = $2::UUID AND destination_id = $1::UUID) ) AND EXISTS (SELECT id FROM groups WHERE id = $1 AND disable_time = '1970-01-01 00:00:00') EXISTS (SELECT id FROM groups WHERE id = $1 AND disable_time = '1970-01-01 00:00:00 UTC') AND NOT ( (EXISTS (SELECT 1 FROM group_edge WHERE source_id = $1::UUID AND destination_id = $2::UUID AND state = 0)) Loading @@ -655,7 +655,7 @@ WHERE (source_id = $2::UUID AND destination_id = $1::UUID AND state > 1) ) AND EXISTS (SELECT id FROM groups WHERE id = $1 AND disable_time = '1970-01-01 00:00:00') EXISTS (SELECT id FROM groups WHERE id = $1 AND disable_time = '1970-01-01 00:00:00 UTC') RETURNING state` } Loading Loading @@ -712,7 +712,7 @@ func PromoteGroupUsers(ctx context.Context, logger *zap.Logger, db *sql.DB, call } var groupExists sql.NullBool query := "SELECT EXISTS (SELECT id FROM groups WHERE id = $1 AND disable_time = '1970-01-01 00:00:00')" query := "SELECT EXISTS (SELECT id FROM groups WHERE id = $1 AND disable_time = '1970-01-01 00:00:00 UTC')" err := db.QueryRowContext(ctx, query, groupID).Scan(&groupExists) if err != nil { logger.Error("Could not look up group when promoting users.", zap.Error(err), zap.String("group_id", groupID.String())) Loading Loading @@ -785,7 +785,7 @@ SELECT u.id, u.username, u.display_name, u.avatar_url, u.facebook_id, u.google_id, u.gamecenter_id, u.steam_id, u.edge_count, u.create_time, u.update_time, ge.state FROM users u, group_edge ge WHERE u.id = ge.source_id AND ge.destination_id = $1 AND u.disable_time = '1970-01-01 00:00:00'` WHERE u.id = ge.source_id AND ge.destination_id = $1 AND u.disable_time = '1970-01-01 00:00:00 UTC'` rows, err := db.QueryContext(ctx, query, groupID) if err != nil { Loading Loading @@ -866,7 +866,7 @@ lang_tag, metadata, groups.state, edge_count, max_count, create_time, groups.update_time, group_edge.state FROM groups JOIN group_edge ON (group_edge.source_id = id) WHERE group_edge.destination_id = $1 AND disable_time = '1970-01-01 00:00:00'` WHERE group_edge.destination_id = $1 AND disable_time = '1970-01-01 00:00:00 UTC'` rows, err := db.QueryContext(ctx, query, userID) if err != nil { Loading Loading @@ -951,7 +951,7 @@ func GetGroups(ctx context.Context, logger *zap.Logger, db *sql.DB, ids []string query := `SELECT id, creator_id, name, description, avatar_url, state, edge_count, lang_tag, max_count, metadata, create_time, update_time FROM groups WHERE disable_time = '1970-01-01 00:00:00' WHERE disable_time = '1970-01-01 00:00:00 UTC' AND id IN (` + strings.Join(statements, ",") + `)` rows, err := db.QueryContext(ctx, query, params...) if err != nil { Loading Loading @@ -996,7 +996,7 @@ func ListGroups(ctx context.Context, logger *zap.Logger, db *sql.DB, name string query = ` SELECT id, creator_id, name, description, avatar_url, state, edge_count, lang_tag, max_count, metadata, create_time, update_time FROM groups WHERE disable_time = '1970-01-01 00:00:00' WHERE disable_time = '1970-01-01 00:00:00 UTC' LIMIT $1` if cursor != nil { params = append(params, cursor.Lang, cursor.EdgeCount, cursor.ID) Loading @@ -1004,7 +1004,7 @@ LIMIT $1` SELECT id, creator_id, name, description, avatar_url, state, edge_count, lang_tag, max_count, metadata, create_time, update_time FROM groups WHERE (disable_time = '1970-01-01 00:00:00') (disable_time = '1970-01-01 00:00:00 UTC') AND ((lang_tag, edge_count, id) > ($2, $3, $4)) LIMIT $1` Loading @@ -1015,7 +1015,7 @@ LIMIT $1` SELECT id, creator_id, name, description, avatar_url, state, edge_count, lang_tag, max_count, metadata, create_time, update_time FROM groups WHERE (disable_time = '1970-01-01 00:00:00') (disable_time = '1970-01-01 00:00:00 UTC') AND (name LIKE $2) LIMIT $1` Loading @@ -1025,7 +1025,7 @@ LIMIT $1` SELECT id, creator_id, name, description, avatar_url, state, edge_count, lang_tag, max_count, metadata, create_time, update_time FROM groups WHERE (disable_time = '1970-01-01 00:00:00') (disable_time = '1970-01-01 00:00:00 UTC') AND (name LIKE $2) AND Loading Loading
CHANGELOG.md +1 −0 Original line number Diff line number Diff line Loading @@ -12,6 +12,7 @@ The format is based on [keep a changelog](http://keepachangelog.com) and this pr - Improved parsing of client IP and port for incoming requests and socket connections. - WebSocket sessions no longer log the client IP and port number in error messages. - Made Go and Lua runtime startup log messages consistent. - All schema and query statements that use the '1970-01-01 00:00:00' constant now specify UTC timezone. ### Fixed - CRON expressions for leaderboard and tournament resets now allow concurrent processing. Loading
migrate/a_migrate-packr.go +2 −2 Original line number Diff line number Diff line Loading @@ -7,6 +7,6 @@ import "github.com/gobuffalo/packr" // You can use the "packr clean" command to clean up this, // and any other packr generated files. func init() { packr.PackJSONBytes("./sql", "20180103142001_initial_schema.sql", "\"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\"") packr.PackJSONBytes("./sql", "20180805174141-tournaments.sql", "\"H4sIAAAAAAAA/7RVzW7bOBfd6ykuvGncz38JUHwzNaaAYisTobJUWHLazsagqRuLE4lUSaq25+kHlG39pJGbLkbwhtY5h+fee0iN31rwFmYiP0i2TTTcTK5/gyhB8MkTyQjYhU6EVBaUOI9R5ApjKHiMEnSCYOeEJnh+M4AHlIoJDjejCVwZQO/0qtefGomDKCAjB+BCQ6EQdMIUPLIUAfcUcw2MAxVZnjLCKcKO6aTc56QyMhpfTxpiownjQICK/ADisQkEok+mE63z9+PxbrcbkdLsSMjtOD3C1NhzZ44fOsOb0eREWPEUlQKJ3womMYbNAUiep4ySTYqQkh0ICWQrEWPQwhjeSaYZ3w5AiUe9IxKNTMyUlmxT6Fa/zvaYagEEB8KhZ4fghj24tUM3HBiRz250H6wi+Gwvl7YfuU4IwRJmgT93IzfwQwjuwPa/wkfXnw8AmU5QAu5zaSoQEpjpJMZl20LEloVHcbSkcqTskVFICd8WZIuwFd9Rcsa3kKPMmDITVUB4bGRSljFNdPnXD3WZjcaWNRyCH0TOe4jMeDO2lSUBMsILkqYHM+KMaWWapzAnkmgELQlXhB6VtQDkqpBotEqXNMGMQJHHRKMCIhEUfiuQUzMipMSkiQr6JAWhSbyBWKAqY6aKPBdSGyESx6aq2b0z+whUcKUlYVwr+M4I9GwvcpYQ2beeA6PRCOz5HGaBt1r4PVCaaMyQazUqy/vfsSiEVW42qa1bt86frj+1mmIpkhjlRhAZW9CQBUo0boU8QPmEC9vzXD8qF3Pnzl55EUxMJ8Ffed6gzY1RUcnysq8AD/Zydm8vr27evetX3DdvOsnFaSLlc96za2MYDo+TooLHatSWQh6vNcvwyI7chRNG9uJT9Fct9eb69/9PhpPr4eQaJpP35a/T2t+C8XV1+G6DwHNsv23tzvZCp4ufkf1asX/wQmnXk9NzSYMX2VpRIfGiRrtJGdkDSVOxwxiOXKI1Zrl+3jTNdIqV5i8Or67uNcN7xtVE6mpeL06Li91Vv+JPra4oryVS8TzRP3auq2FTaxYsFm40tV57ZPwwWtpGkiZIn9bV4Tke56tq/eEPmPQHXbQq+idatb5Mq2J1olXrDz9j1e1oUOs/z/wH23PnduR0F3oZda7jMups++eoyuHUsmZLx+Bcf+58AfeunKHzxQ2jsLpJ1nWy1ucroXK+ZvEeAr851brxg0YoB/V1MnfC2aC6IfuXXYgdR7lm8Rr3OZOH4+7NrLL4BQ+nBMPVmT6ABn8AbYH+64/Cf5GCZzOpDk/zYzQXO97y6N6dO9Q+UPNl8Ol8ZGtMM2gvIxofnQugRhJfRpyH3I1ofQW6Yc04dyOqtnXDygu5+/XlPer8Ti2rhFQZ/bV8PkvYi9Ors/aKgqfWvwEAAP//bZ8RWeILAAA=\"") packr.PackJSONBytes("./sql", "20180103142001_initial_schema.sql", "\"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\"") packr.PackJSONBytes("./sql", "20180805174141-tournaments.sql", "\"H4sIAAAAAAAA/7RVzW7bOBfd6ykuvGncz38JUHwzNaaAYisTobJUWHLazsagqRuLE4lUSaq25+kHlG39pJGbLkbwhtY5h+fee0iN31rwFmYiP0i2TTTcTK5/gyhB8MkTyQjYhU6EVBaUOI9R5ApjKHiMEnSCYOeEJnh+M4AHlIoJDjejCVwZQO/0qtefGomDKCAjB+BCQ6EQdMIUPLIUAfcUcw2MAxVZnjLCKcKO6aTc56QyMhpfTxpiownjQICK/ADisQkEok+mE63z9+PxbrcbkdLsSMjtOD3C1NhzZ44fOsOb0eREWPEUlQKJ3womMYbNAUiep4ySTYqQkh0ICWQrEWPQwhjeSaYZ3w5AiUe9IxKNTMyUlmxT6Fa/zvaYagEEB8KhZ4fghj24tUM3HBiRz250H6wi+Gwvl7YfuU4IwRJmgT93IzfwQwjuwPa/wkfXnw8AmU5QAu5zaSoQEpjpJMZl20LEloVHcbSkcqTskVFICd8WZIuwFd9Rcsa3kKPMmDITVUB4bGRSljFNdPnXD3WZjcaWNRyCH0TOe4jMeDO2lSUBMsILkqYHM+KMaWWapzAnkmgELQlXhB6VtQDkqpBotEqXNMGMQJHHRKMCIhEUfiuQUzMipMSkiQr6JAWhSbyBWKAqY6aKPBdSGyESx6aq2b0z+whUcKUlYVwr+M4I9GwvcpYQ2beeA6PRCOz5HGaBt1r4PVCaaMyQazUqy/vfsSiEVW42qa1bt86frj+1mmIpkhjlRhAZW9CQBUo0boU8QPmEC9vzXD8qF3Pnzl55EUxMJ8Ffed6gzY1RUcnysq8AD/Zydm8vr27evetX3DdvOsnFaSLlc96za2MYDo+TooLHatSWQh6vNcvwyI7chRNG9uJT9Fct9eb69/9PhpPr4eQaJpP35Q9W0azT3t+C8XV1AG+DwHNsv23vzvZCp4ufkf1asX/wQnnXk9NzSYMX2VpRIfGiRrtRGdkDSVOxwxiOXKI1Zrl+3jjNdIqV5i8OsK7uNQN8xtVE6mpmL06Mi91Vv+JPra44ryVS8TzVP3auq2FTaxYsFm40tV57bPwwWtpGkiZIn9bVAToe6atq/eEPmPQHXbQq/idatb5Mq2J1olXrDz9j1e1oUOs/z/wH23PnduR0F3oZda7jMups++eoyuHUsmZLx+Bcf+58AfeunKHzxQ2jsLpN1nWy1udroXK+ZvEeAr851brxg0YoB/WVMnfC2aC6JfuXXYgdR7lm8Rr3OZOH4+7NrLL4BQ+nBMPVmT6ABn8AbYH+64/Cf5GCZzOpDk/zgzQXO97y6N6dO9Q+UPNl8Ol8ZGtMM2gvIxofngugRhJfRpyH3I1ofQW6Yc04dyOqtnXDygu5+/XlPer8Ti2rhFQZ/bV8PkvYi9Ors/aKgqfWvwEAAP//B0qo3OYLAAA=\"") }
migrate/sql/20180103142001_initial_schema.sql +4 −4 Original line number Diff line number Diff line Loading @@ -38,8 +38,8 @@ CREATE TABLE IF NOT EXISTS users ( edge_count INT DEFAULT 0 CHECK (edge_count >= 0) NOT NULL, create_time TIMESTAMPTZ DEFAULT now() NOT NULL, update_time TIMESTAMPTZ DEFAULT now() NOT NULL, verify_time TIMESTAMPTZ DEFAULT '1970-01-01 00:00:00' NOT NULL, disable_time TIMESTAMPTZ DEFAULT '1970-01-01 00:00:00' NOT NULL verify_time TIMESTAMPTZ DEFAULT '1970-01-01 00:00:00 UTC' NOT NULL, disable_time TIMESTAMPTZ DEFAULT '1970-01-01 00:00:00 UTC' NOT NULL ); -- Setup System user. Loading Loading @@ -148,7 +148,7 @@ CREATE TABLE IF NOT EXISTS leaderboard_record ( metadata JSONB DEFAULT '{}' NOT NULL, create_time TIMESTAMPTZ DEFAULT now() NOT NULL, update_time TIMESTAMPTZ DEFAULT now() NOT NULL, expiry_time TIMESTAMPTZ DEFAULT '1970-01-01 00:00:00' NOT NULL, expiry_time TIMESTAMPTZ DEFAULT '1970-01-01 00:00:00 UTC' NOT NULL, UNIQUE (owner_id, leaderboard_id, expiry_time) ); Loading Loading @@ -188,7 +188,7 @@ CREATE TABLE IF NOT EXISTS groups ( max_count INT DEFAULT 100 CHECK (max_count >= 1) NOT NULL, create_time TIMESTAMPTZ DEFAULT now() NOT NULL, update_time TIMESTAMPTZ DEFAULT now() NOT NULL, disable_time TIMESTAMPTZ DEFAULT '1970-01-01 00:00:00' NOT NULL disable_time TIMESTAMPTZ DEFAULT '1970-01-01 00:00:00 UTC' NOT NULL ); CREATE INDEX IF NOT EXISTS edge_count_update_time_id_idx ON groups (disable_time, edge_count, update_time, id); CREATE INDEX IF NOT EXISTS update_time_edge_count_id_idx ON groups (disable_time, update_time, edge_count, id); Loading
migrate/sql/20180805174141-tournaments.sql +1 −1 Original line number Diff line number Diff line Loading @@ -24,7 +24,7 @@ ALTER TABLE leaderboard ADD COLUMN category SMALLINT DEFAULT 0 NOT NULL, ADD COLUMN description VARCHAR(255) DEFAULT '' NOT NULL, ADD COLUMN duration INT DEFAULT 0 NOT NULL, -- in seconds. ADD COLUMN end_time TIMESTAMPTZ DEFAULT '1970-01-01 00:00:00' NOT NULL, ADD COLUMN end_time TIMESTAMPTZ DEFAULT '1970-01-01 00:00:00 UTC' NOT NULL, ADD COLUMN join_required BOOLEAN DEFAULT FALSE NOT NULL, ADD COLUMN max_size INT DEFAULT 100000000 NOT NULL, ADD COLUMN max_num_score INT DEFAULT 1000000 NOT NULL, -- max allowed score attempts. Loading
server/core_group.go +14 −14 Original line number Diff line number Diff line Loading @@ -217,7 +217,7 @@ func UpdateGroup(ctx context.Context, logger *zap.Logger, db *sql.DB, groupID uu return ErrGroupNoUpdateOps } query := "UPDATE groups SET update_time = now(), " + strings.Join(statements, ", ") + " WHERE (id = $1) AND (disable_time = '1970-01-01 00:00:00')" query := "UPDATE groups SET update_time = now(), " + strings.Join(statements, ", ") + " WHERE (id = $1) AND (disable_time = '1970-01-01 00:00:00 UTC')" res, err := db.ExecContext(ctx, query, params...) if err != nil { if e, ok := err.(*pq.Error); ok && e.Code == dbErrorUniqueViolation { Loading Loading @@ -274,7 +274,7 @@ func JoinGroup(ctx context.Context, logger *zap.Logger, db *sql.DB, router Messa query := ` SELECT id, creator_id, name, description, avatar_url, state, edge_count, lang_tag, max_count, metadata, create_time, update_time FROM groups WHERE (id = $1) AND (disable_time = '1970-01-01 00:00:00')` WHERE (id = $1) AND (disable_time = '1970-01-01 00:00:00 UTC')` rows, err := db.QueryContext(ctx, query, groupID) if err != nil { logger.Error("Could not look up group while trying to join it.", zap.Error(err)) Loading Loading @@ -440,7 +440,7 @@ func LeaveGroup(ctx context.Context, logger *zap.Logger, db *sql.DB, groupID uui // check to ensure we are not decrementing the count when the relationship was an invite. if myState.Int64 < 3 { query = "UPDATE groups SET edge_count = edge_count - 1, update_time = now() WHERE (id = $1::UUID) AND (disable_time = '1970-01-01 00:00:00')" query = "UPDATE groups SET edge_count = edge_count - 1, update_time = now() WHERE (id = $1::UUID) AND (disable_time = '1970-01-01 00:00:00 UTC')" res, err := tx.ExecContext(ctx, query, groupID) if err != nil { logger.Debug("Could not update group edge_count.", zap.String("group_id", groupID.String()), zap.String("user_id", userID.String())) Loading Loading @@ -488,7 +488,7 @@ func AddGroupUsers(ctx context.Context, logger *zap.Logger, db *sql.DB, router M } var groupName sql.NullString query := "SELECT name FROM groups WHERE id = $1 AND disable_time = '1970-01-01 00:00:00'" query := "SELECT name FROM groups WHERE id = $1 AND disable_time = '1970-01-01 00:00:00 UTC'" if err := db.QueryRowContext(ctx, query, groupID).Scan(&groupName); err != nil { if err == sql.ErrNoRows { logger.Info("Cannot add users to disabled group.", zap.String("group_id", groupID.String())) Loading Loading @@ -636,7 +636,7 @@ WHERE (source_id = $2::UUID AND destination_id = $1::UUID) ) AND EXISTS (SELECT id FROM groups WHERE id = $1 AND disable_time = '1970-01-01 00:00:00') EXISTS (SELECT id FROM groups WHERE id = $1 AND disable_time = '1970-01-01 00:00:00 UTC') AND NOT ( (EXISTS (SELECT 1 FROM group_edge WHERE source_id = $1::UUID AND destination_id = $2::UUID AND state = 0)) Loading @@ -655,7 +655,7 @@ WHERE (source_id = $2::UUID AND destination_id = $1::UUID AND state > 1) ) AND EXISTS (SELECT id FROM groups WHERE id = $1 AND disable_time = '1970-01-01 00:00:00') EXISTS (SELECT id FROM groups WHERE id = $1 AND disable_time = '1970-01-01 00:00:00 UTC') RETURNING state` } Loading Loading @@ -712,7 +712,7 @@ func PromoteGroupUsers(ctx context.Context, logger *zap.Logger, db *sql.DB, call } var groupExists sql.NullBool query := "SELECT EXISTS (SELECT id FROM groups WHERE id = $1 AND disable_time = '1970-01-01 00:00:00')" query := "SELECT EXISTS (SELECT id FROM groups WHERE id = $1 AND disable_time = '1970-01-01 00:00:00 UTC')" err := db.QueryRowContext(ctx, query, groupID).Scan(&groupExists) if err != nil { logger.Error("Could not look up group when promoting users.", zap.Error(err), zap.String("group_id", groupID.String())) Loading Loading @@ -785,7 +785,7 @@ SELECT u.id, u.username, u.display_name, u.avatar_url, u.facebook_id, u.google_id, u.gamecenter_id, u.steam_id, u.edge_count, u.create_time, u.update_time, ge.state FROM users u, group_edge ge WHERE u.id = ge.source_id AND ge.destination_id = $1 AND u.disable_time = '1970-01-01 00:00:00'` WHERE u.id = ge.source_id AND ge.destination_id = $1 AND u.disable_time = '1970-01-01 00:00:00 UTC'` rows, err := db.QueryContext(ctx, query, groupID) if err != nil { Loading Loading @@ -866,7 +866,7 @@ lang_tag, metadata, groups.state, edge_count, max_count, create_time, groups.update_time, group_edge.state FROM groups JOIN group_edge ON (group_edge.source_id = id) WHERE group_edge.destination_id = $1 AND disable_time = '1970-01-01 00:00:00'` WHERE group_edge.destination_id = $1 AND disable_time = '1970-01-01 00:00:00 UTC'` rows, err := db.QueryContext(ctx, query, userID) if err != nil { Loading Loading @@ -951,7 +951,7 @@ func GetGroups(ctx context.Context, logger *zap.Logger, db *sql.DB, ids []string query := `SELECT id, creator_id, name, description, avatar_url, state, edge_count, lang_tag, max_count, metadata, create_time, update_time FROM groups WHERE disable_time = '1970-01-01 00:00:00' WHERE disable_time = '1970-01-01 00:00:00 UTC' AND id IN (` + strings.Join(statements, ",") + `)` rows, err := db.QueryContext(ctx, query, params...) if err != nil { Loading Loading @@ -996,7 +996,7 @@ func ListGroups(ctx context.Context, logger *zap.Logger, db *sql.DB, name string query = ` SELECT id, creator_id, name, description, avatar_url, state, edge_count, lang_tag, max_count, metadata, create_time, update_time FROM groups WHERE disable_time = '1970-01-01 00:00:00' WHERE disable_time = '1970-01-01 00:00:00 UTC' LIMIT $1` if cursor != nil { params = append(params, cursor.Lang, cursor.EdgeCount, cursor.ID) Loading @@ -1004,7 +1004,7 @@ LIMIT $1` SELECT id, creator_id, name, description, avatar_url, state, edge_count, lang_tag, max_count, metadata, create_time, update_time FROM groups WHERE (disable_time = '1970-01-01 00:00:00') (disable_time = '1970-01-01 00:00:00 UTC') AND ((lang_tag, edge_count, id) > ($2, $3, $4)) LIMIT $1` Loading @@ -1015,7 +1015,7 @@ LIMIT $1` SELECT id, creator_id, name, description, avatar_url, state, edge_count, lang_tag, max_count, metadata, create_time, update_time FROM groups WHERE (disable_time = '1970-01-01 00:00:00') (disable_time = '1970-01-01 00:00:00 UTC') AND (name LIKE $2) LIMIT $1` Loading @@ -1025,7 +1025,7 @@ LIMIT $1` SELECT id, creator_id, name, description, avatar_url, state, edge_count, lang_tag, max_count, metadata, create_time, update_time FROM groups WHERE (disable_time = '1970-01-01 00:00:00') (disable_time = '1970-01-01 00:00:00 UTC') AND (name LIKE $2) AND Loading