Persist partition|offset|user_id in the keyserver (#1226)

* Persist partition|offset|user_id in the keyserver

Required for a query API which will be used by the syncapi which
will be called when a `/sync` request comes in which will return
a list of user IDs of people who have changed their device keys
between two tokens.

* Add tests and fix maxOffset bug

* s/offset/log_offset/g because 'offset' is a reserved word in postgres
This commit is contained in:
Kegsay 2020-07-28 17:38:30 +01:00 committed by GitHub
parent acc8e80a51
commit adf7b59294
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 292 additions and 0 deletions

View file

@ -15,10 +15,12 @@
package producers
import (
"context"
"encoding/json"
"github.com/Shopify/sarama"
"github.com/matrix-org/dendrite/keyserver/api"
"github.com/matrix-org/dendrite/keyserver/storage"
"github.com/sirupsen/logrus"
)
@ -26,6 +28,7 @@ import (
type KeyChange struct {
Topic string
Producer sarama.SyncProducer
DB storage.Database
}
// ProduceKeyChanges creates new change events for each key
@ -46,6 +49,10 @@ func (p *KeyChange) ProduceKeyChanges(keys []api.DeviceKeys) error {
if err != nil {
return err
}
err = p.DB.StoreKeyChange(context.Background(), partition, offset, key.UserID)
if err != nil {
return err
}
logrus.WithFields(logrus.Fields{
"user_id": key.UserID,
"device_id": key.DeviceID,