Skip to content

Commit

Permalink
bump database version and provide db upgrade logic
Browse files Browse the repository at this point in the history
  • Loading branch information
or-else committed Aug 14, 2019
1 parent 8585077 commit 03232bd
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 14 deletions.
20 changes: 19 additions & 1 deletion server/db/mysql/adapter.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ const (
defaultDSN = "root:@tcp(localhost:3306)/tinode?parseTime=true"
defaultDatabase = "tinode"

adpVersion = 107
adpVersion = 108

adapterName = "mysql"

Expand Down Expand Up @@ -473,6 +473,24 @@ func (a *adapter) UpgradeDb() error {
}
}

if a.version == 107 {
// Perform database upgrade from version 107 to version 108.

// Replace default user access JRWPA with JRWPAS.
if _, err := a.db.Exec(`UPDATE users SET access=JSON_REPLACE(access, '$.Auth', 'JRWPAS')
WHERE CAST(JSON_EXTRACT(access, '$.Auth') AS CHAR) LIKE '"JRWPA"'`); err != nil {
return err
}

if err := a.updateDbVersion(108); err != nil {
return err
}

if _, err := a.GetDbVersion(); err != nil {
return err
}
}

if a.version != adpVersion {
return errors.New("Failed to perform database upgrade to version " + strconv.Itoa(adpVersion) +
". DB is still at " + strconv.Itoa(a.version))
Expand Down
15 changes: 10 additions & 5 deletions server/db/rethinkdb/adapter.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ const (
defaultHost = "localhost:28015"
defaultDatabase = "tinode"

adpVersion = 107
adpVersion = 108

adapterName = "rethinkdb"

Expand Down Expand Up @@ -359,12 +359,17 @@ func (a *adapter) UpgradeDb() error {
return err
}

if a.version == 106 {
// Perform database upgrade from version 106 to version 107.
if a.version == 106 || a.version == 107 {
// Perform database upgrade from versions 106 or 107 to version 108.

// There is nothing to upgrade other than the version.
// Replace default 'Auth' access mode JRWPA with JRWPAS
filter := map[string]interface{}{"Access": map[string]interface{}{"Auth": t.ModeCP2P}}
update := map[string]interface{}{"Access": map[string]interface{}{"Auth": t.ModeCAuth}}
if _, err := rdb.DB(a.dbName).Table("users").Filter(filter).Update(update).RunWrite(a.conn); err != nil {
return err
}

if err := a.updateDbVersion(107); err != nil {
if err := a.updateDbVersion(108); err != nil {
return err
}

Expand Down
16 changes: 9 additions & 7 deletions server/store/types/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -410,26 +410,28 @@ const (

ModeNone AccessMode = 0 // No access, requests to gain access are processed normally (N:0)

// Normal user's access to a topic ("JRWPS")
// Normal user's access to a topic ("JRWPS", 47, 0x2F)
ModeCPublic AccessMode = ModeJoin | ModeRead | ModeWrite | ModePres | ModeShare
// User's subscription to 'me' and 'fnd' ("JPS")
// User's subscription to 'me' and 'fnd' ("JPS", 41, 0x29)
ModeCSelf AccessMode = ModeJoin | ModePres | ModeShare
// Owner's subscription to a generic topic ("JRWPASDO")
// Owner's subscription to a generic topic ("JRWPASDO", 255, 0xFF)
ModeCFull AccessMode = ModeJoin | ModeRead | ModeWrite | ModePres | ModeApprove | ModeShare | ModeDelete | ModeOwner
// Default P2P access mode ("JRWPA")
// Default P2P access mode ("JRWPA", 31, 0x1F)
ModeCP2P AccessMode = ModeJoin | ModeRead | ModeWrite | ModePres | ModeApprove
// Read-only access to topic ("JR", 0x3)
// Default Auth access mode for a user ("JRWPAS", 63, 0x3F).
ModeCAuth AccessMode = ModeCP2P | ModeCPublic
// Read-only access to topic ("JR", 3)
ModeCReadOnly = ModeJoin | ModeRead

// Admin: user who can modify access mode ("OA", hex: 0x90, dec: 144)
// Admin: user who can modify access mode ("OA", dec: 144, hex: 0x90)
ModeCAdmin = ModeOwner | ModeApprove
// Sharer: flags which define user who can be notified of access mode changes ("OAS", dec: 176, hex: 0xB0)
ModeCSharer = ModeCAdmin | ModeShare

// Invalid mode to indicate an error
ModeInvalid AccessMode = 0x100000

// All possible valid bits (excluding ModeInvalid and ModeUnset)
// All possible valid bits (excluding ModeInvalid and ModeUnset) = 0xFF, 255
ModeBitmask AccessMode = ModeJoin | ModeRead | ModeWrite | ModePres | ModeApprove | ModeShare | ModeDelete | ModeOwner
)

Expand Down
2 changes: 1 addition & 1 deletion tinode-db/gendb.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ func genDb(data *Data) {
user := types.User{
State: uu.State,
Access: types.DefaultAccess{
Auth: types.ModeCP2P,
Auth: types.ModeCAuth,
Anon: types.ModeNone,
},
Tags: uu.Tags,
Expand Down

0 comments on commit 03232bd

Please sign in to comment.