# HG changeset patch # User Sascha L. Teichmann # Date 1542194590 -3600 # Node ID 930fdd8b474f23a7c6514681af67260ad3c1edc1 # Parent 1ae93a0438df116217a03b95a680eb2c0857f98a Track successfull imports in a separate table to be able to remove them later. diff -r 1ae93a0438df -r 930fdd8b474f pkg/imports/queue.go --- a/pkg/imports/queue.go Wed Nov 14 12:12:00 2018 +0100 +++ b/pkg/imports/queue.go Wed Nov 14 12:23:10 2018 +0100 @@ -36,7 +36,7 @@ } Job interface { - Do(*sql.Conn, Feedback) error + Do(int64, context.Context, *sql.Conn, Feedback) error CleanUp() error } @@ -355,8 +355,11 @@ feedback.Info("import #%d started", idj.id) errDo := survive(func() error { - return auth.RunAs(idj.user, context.Background(), - func(conn *sql.Conn) error { return job.Do(conn, feedback) }) + ctx := context.Background() + return auth.RunAs(idj.user, ctx, + func(conn *sql.Conn) error { + return job.Do(idj.id, ctx, conn, feedback) + }) })() if errDo != nil { feedback.Error("error do: %v", errDo) diff -r 1ae93a0438df -r 930fdd8b474f pkg/imports/sr.go --- a/pkg/imports/sr.go Wed Nov 14 12:12:00 2018 +0100 +++ b/pkg/imports/sr.go Wed Nov 14 12:23:10 2018 +0100 @@ -144,7 +144,12 @@ ` ) -func (sr SoundingResult) Do(conn *sql.Conn, feedback Feedback) error { +func (sr SoundingResult) Do( + importID int64, + ctx context.Context, + conn *sql.Conn, + feedback Feedback, +) error { z, err := zip.OpenReader(filepath.Join(string(sr), "sr.zip")) if err != nil { @@ -188,8 +193,6 @@ return err } - ctx := context.Background() - tx, err := conn.BeginTx(ctx, nil) if err != nil { return err @@ -261,6 +264,11 @@ return err } + // Store for potential later removal. + if err = track(tx, ctx, importID, "waterway.sounding_results", id); err != nil { + return err + } + if err = tx.Commit(); err == nil { feedback.Info("Storing sounding result was successful.") } diff -r 1ae93a0438df -r 930fdd8b474f pkg/imports/track.go --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pkg/imports/track.go Wed Nov 14 12:23:10 2018 +0100 @@ -0,0 +1,30 @@ +// This is Free Software under GNU Affero General Public License v >= 3.0 +// without warranty, see README.md and license for details. +// +// SPDX-License-Identifier: AGPL-3.0-or-later +// License-Filename: LICENSES/AGPL-3.0.txt +// +// Copyright (C) 2018 by via donau +// – Österreichische Wasserstraßen-Gesellschaft mbH +// Software engineering by Intevation GmbH +// +// Author(s): +// * Sascha L. Teichmann + +package imports + +import ( + "context" + "database/sql" +) + +const ( + trackImportSQL = ` + INSERT INTO waterway.track_imports (import_id, relation, key) + VALUES ($1, $2::regclass, $3)` +) + +func track(tx *sql.Tx, ctx context.Context, importID int64, relation string, key int64) error { + _, err := tx.ExecContext(ctx, trackImportSQL, importID, relation, key) + return err +} diff -r 1ae93a0438df -r 930fdd8b474f schema/auth.sql --- a/schema/auth.sql Wed Nov 14 12:12:00 2018 +0100 +++ b/schema/auth.sql Wed Nov 14 12:23:10 2018 +0100 @@ -24,7 +24,7 @@ GRANT INSERT, UPDATE, DELETE ON users.templates, users.user_templates TO waterway_admin; GRANT INSERT, UPDATE, DELETE ON - waterway.imports, waterway.import_logs TO waterway_admin; + waterway.imports, waterway.import_logs, waterway.track_imports TO waterway_admin; -- -- Extended privileges for sys_admin diff -r 1ae93a0438df -r 930fdd8b474f schema/gemma.sql --- a/schema/gemma.sql Wed Nov 14 12:12:00 2018 +0100 +++ b/schema/gemma.sql Wed Nov 14 12:23:10 2018 +0100 @@ -539,4 +539,11 @@ msg TEXT NOT NULL ); +CREATE TABLE waterway.track_imports ( + import_id int NOT NULL REFERENCES waterway.imports(id), + relation regclass NOT NULL, + key int NOT NULL, + UNIQUE (relation, key) +); + COMMIT;