Commit babdfeba authored by Andrei Mihu's avatar Andrei Mihu
Browse files

Ensure deterministic ordering for group listings without filters.

parent bce794ff
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ The format is based on [keep a changelog](http://keepachangelog.com) and this pr
- Ensure deterministic ordering for storage listing operations.
- Ensure deterministic ordering for leaderboard scores where both score and subscore are identical.
- Consistent default database address between migration command and main server startup.
- Ensure deterministic ordering for group listings without filters.

### Fixed
- Handle updates during leaderboard schedule reset window.
+6 −6
Original line number Diff line number Diff line
@@ -1336,16 +1336,16 @@ func ListGroups(ctx context.Context, logger *zap.Logger, db *sql.DB, name string
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 UTC'
ORDER BY lang_tag ASC, edge_count ASC, id ASC
LIMIT $1`
		if cursor != nil {
			params = append(params, cursor.Lang, cursor.EdgeCount, cursor.ID)
			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 UTC')
AND
	((lang_tag, edge_count, id) > ($2, $3, $4))
WHERE disable_time = '1970-01-01 00:00:00 UTC'
AND (lang_tag, edge_count, id) > ($2, $3, $4)
ORDER BY lang_tag ASC, edge_count ASC, id ASC
LIMIT $1`
		}
	} else {
+8 −8
Original line number Diff line number Diff line
@@ -321,7 +321,7 @@ nakama.register_rpc(test.printWorld, "helloworld")`,
	}

	payload := "Hello World"
	result, err, _ := fn(context.Background(), nil, "", "", 0, "", "", "", payload)
	result, err, _ := fn(context.Background(), nil, "", "", nil, 0, "", "", "", payload)
	if err != nil {
		t.Fatal(err.Error())
	}
@@ -399,7 +399,7 @@ nakama.register_rpc(test, "test")`,
		t.Fatal("Expected RPC function to be registered")
	}

	result, err, _ := fn(context.Background(), nil, "", "", 0, "", "", "", "")
	result, err, _ := fn(context.Background(), nil, "", "", nil, 0, "", "", "", "")
	if err != nil {
		t.Fatal(err)
	}
@@ -430,7 +430,7 @@ nakama.register_rpc(test, "test")`,
	}

	payload := "{\"key\":\"value\"}"
	result, err, _ := fn(context.Background(), nil, "", "", 0, "", "", "", payload)
	result, err, _ := fn(context.Background(), nil, "", "", nil, 0, "", "", "", payload)
	if err != nil {
		t.Fatal(err)
	}
@@ -461,7 +461,7 @@ nakama.register_rpc(test, "test")`,
	}

	payload := "{\"key\":\"value\"}"
	result, err, _ := fn(context.Background(), nil, "", "", 0, "", "", "", payload)
	result, err, _ := fn(context.Background(), nil, "", "", nil, 0, "", "", "", payload)
	if err != nil {
		t.Fatal(err)
	}
@@ -492,7 +492,7 @@ nakama.register_rpc(test, "test")`,
	}

	payload := "{\"key\":\"value\"}"
	result, err, _ := fn(context.Background(), nil, "", "", 0, "", "", "", payload)
	result, err, _ := fn(context.Background(), nil, "", "", nil, 0, "", "", "", payload)
	if err != nil {
		t.Fatal(err)
	}
@@ -523,7 +523,7 @@ nakama.register_rpc(test, "test")`,
	}

	payload := "{\"key\":\"value\"}"
	result, err, _ := fn(context.Background(), nil, "", "", 0, "", "", "", payload)
	result, err, _ := fn(context.Background(), nil, "", "", nil, 0, "", "", "", payload)
	if err != nil {
		t.Fatal(err)
	}
@@ -580,7 +580,7 @@ nakama.register_rpc(test, "test")`,
	}

	payload := "{\"key\":\"value\"}"
	result, err, _ := fn(context.Background(), nil, "", "", 0, "", "", "", payload)
	result, err, _ := fn(context.Background(), nil, "", "", nil, 0, "", "", "", payload)
	if err != nil {
		t.Fatal(err)
	}
@@ -613,7 +613,7 @@ nakama.register_rpc(test, "test")`,

	payload := "something_to_encrypt"
	hash, _ := bcrypt.GenerateFromPassword([]byte(payload), bcrypt.DefaultCost)
	result, err, _ := fn(context.Background(), nil, "", "", 0, "", "", "", string(hash))
	result, err, _ := fn(context.Background(), nil, "", "", nil, 0, "", "", "", string(hash))
	if err != nil {
		t.Fatal(err)
	}
+5 −1
Original line number Diff line number Diff line
@@ -55,7 +55,8 @@ type DummyMessageRouter struct{}
func (d *DummyMessageRouter) SendDeferred(*zap.Logger, []*server.DeferredMessage) {
	panic("unused")
}
func (d *DummyMessageRouter) SendToPresenceIDs(*zap.Logger, []*server.PresenceID, *rtapi.Envelope, bool) {}
func (d *DummyMessageRouter) SendToPresenceIDs(*zap.Logger, []*server.PresenceID, *rtapi.Envelope, bool) {
}
func (d *DummyMessageRouter) SendToStream(*zap.Logger, server.PresenceStream, *rtapi.Envelope, bool) {}

type DummySession struct {
@@ -76,6 +77,9 @@ func (d *DummySession) Username() string {
	return ""
}
func (d *DummySession) SetUsername(string) {}
func (d *DummySession) Vars() map[string]string {
	return nil
}
func (d *DummySession) Expiry() int64 {
	return int64(0)
}