Mercurial > gemma
diff pkg/controllers/user.go @ 1654:85386ad17d34
Scheduled imports: Don't track the user in the running scheduler.
The user is stored in the database already.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Thu, 20 Dec 2018 18:39:19 +0100 |
parents | 5f80ec319a4f |
children | f32e8a973b48 |
line wrap: on
line diff
--- a/pkg/controllers/user.go Thu Dec 20 18:14:28 2018 +0100 +++ b/pkg/controllers/user.go Thu Dec 20 18:39:19 2018 +0100 @@ -17,6 +17,7 @@ import ( "bytes" + "context" "database/sql" "fmt" "log" @@ -71,6 +72,10 @@ ST_XMax(map_extent), ST_YMax(map_extent) FROM users.list_users WHERE username = $1` + + scheduledIDsSQL = ` +SELECT id from waterway.import_configuration +WHERE username = $1` ) var ( @@ -96,6 +101,30 @@ (inkluding import errors) and details on the concerned import.`)) ) +func scheduledIDs( + ctx context.Context, + conn *sql.Conn, + user string, +) (map[int64]struct{}, error) { + ids := map[int64]struct{}{} + rows, err := conn.QueryContext(ctx, scheduledIDsSQL, user) + if err != nil { + return nil, nil + } + defer rows.Close() + for rows.Next() { + var id int64 + if err := rows.Scan(&id); err != nil { + return nil, err + } + ids[id] = struct{}{} + } + if err := rows.Err(); err != nil { + return nil, err + } + return ids, nil +} + func deleteUser( _ interface{}, req *http.Request, db *sql.Conn, @@ -113,6 +142,16 @@ return } + // Remove scheduled tasks. + ids, err2 := scheduledIDs(req.Context(), db, user) + if err2 == nil { + if len(ids) > 0 { + go func() { scheduler.UnbindByIDs(ids) }() + } + } else { + log.Printf("error: %v\n", err2) + } + var res sql.Result if res, err = db.ExecContext(req.Context(), deleteUserSQL, user); err != nil { @@ -129,7 +168,6 @@ // Running in a go routine should not be necessary. go func() { auth.Sessions.Logout(user) }() - go func() { scheduler.UnbindUser(user) }() jr = JSONResult{Code: http.StatusNoContent} return @@ -207,7 +245,6 @@ if user != newUser.User { // Running in a go routine should not be necessary. go func() { auth.Sessions.Logout(string(user)) }() - go func() { scheduler.UnbindUser(string(user)) }() } jr = JSONResult{