Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 8cac72a

Browse files
agneumbogdan-ts
authored andcommitted
fix: show error message on creating snapshot when data in the pool has not changed (#626)
1 parent b31ca19 commit 8cac72a

File tree

8 files changed

+26
-14
lines changed

8 files changed

+26
-14
lines changed

‎engine/internal/retrieval/engine/postgres/snapshot/logical.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ func (s *LogicalInitial) Run(ctx context.Context) error {
161161
var existsError *thinclones.SnapshotExistsError
162162
if errors.As(err, &existsError) {
163163
log.Msg("Skip snapshotting: ", existsError.Error())
164-
return nil
164+
return err
165165
}
166166

167167
return errors.Wrap(err, "failed to create a snapshot")

‎engine/internal/retrieval/retrieval.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"gitlab.com/postgres-ai/database-lab/v3/internal/provision/pool"
2222
"gitlab.com/postgres-ai/database-lab/v3/internal/provision/resources"
2323
"gitlab.com/postgres-ai/database-lab/v3/internal/provision/runners"
24+
"gitlab.com/postgres-ai/database-lab/v3/internal/provision/thinclones"
2425
"gitlab.com/postgres-ai/database-lab/v3/internal/retrieval/components"
2526
"gitlab.com/postgres-ai/database-lab/v3/internal/retrieval/config"
2627
"gitlab.com/postgres-ai/database-lab/v3/internal/retrieval/dbmarker"
@@ -350,7 +351,9 @@ func (r *Retrieval) run(ctx context.Context, fsm pool.FSManager) (err error) {
350351
r.State.cleanAlerts()
351352
}
352353

353-
if err := r.SnapshotData(ctx, poolName); err != nil && err != errNoJobs {
354+
var existsErr *thinclones.SnapshotExistsError
355+
356+
if err := r.SnapshotData(ctx, poolName); err != nil && (err != errNoJobs || !errors.As(err, &existsErr)) {
354357
return err
355358
}
356359

@@ -455,7 +458,9 @@ func (r *Retrieval) SnapshotData(ctx context.Context, poolName string) error {
455458
defer func() {
456459
r.State.Status = models.Finished
457460

458-
if err != nil {
461+
var existsErr *thinclones.SnapshotExistsError
462+
463+
if err != nil && !errors.As(err, &existsErr) {
459464
r.State.Status = models.Failed
460465
r.State.addAlert(telemetry.Alert{
461466
Level: models.RefreshFailed,

‎engine/internal/srv/routes.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"fmt"
77
"net/http"
88
"os"
9+
"sort"
910
"strconv"
1011
"strings"
1112
"time"
@@ -172,6 +173,10 @@ func (s *Server) createSnapshot(w http.ResponseWriter, r *http.Request) {
172173
return
173174
}
174175

176+
sort.SliceStable(snapshotList, func(i, j int) bool {
177+
return snapshotList[i].CreatedAt.After(snapshotList[j].CreatedAt)
178+
})
179+
175180
if err := fsManager.InitBranching(); err != nil {
176181
api.SendBadRequestError(w, r, "Cannot verify branch metadata: "+err.Error())
177182
return

‎engine/test/1.synthetic.sh

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -164,12 +164,6 @@ if [[ $(dblab snapshot list | jq length) -eq 0 ]] ; then
164164
echo "No snapshot found" && exit 1
165165
fi
166166

167-
dblab snapshot create
168-
169-
if [[ $(dblab snapshot list | jq length) -eq 0 ]] ; then
170-
echo "Snapshot has not been created" && exit 1
171-
fi
172-
173167
## Create a clone
174168
CLONE_ID="testclone"
175169

‎engine/test/2.logical_generic.sh

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ set -euxo pipefail
44
TAG=${TAG:-${CI_COMMIT_REF_SLUG:-"master"}}
55
IMAGE2TEST="registry.gitlab.com/postgres-ai/database-lab/dblab-server:${TAG}"
66
DLE_SERVER_NAME="dblab_server_test"
7+
export EXTENDED_IMAGE_TAG="-minor-update" # -0.5.3
78

89
# Environment variables for replacement rules
910
export SOURCE_DBNAME="${SOURCE_DBNAME:-test}"
@@ -98,7 +99,7 @@ yq eval -i '
9899
.provision.portPool.to = env(DLE_PORT_POOL_TO) |
99100
.retrieval.spec.logicalDump.options.dumpLocation = env(DLE_TEST_MOUNT_DIR) + "/" + env(DLE_TEST_POOL_NAME) + "/dump" |
100101
.retrieval.spec.logicalRestore.options.dumpLocation = env(DLE_TEST_MOUNT_DIR) + "/" + env(DLE_TEST_POOL_NAME) + "/dump" |
101-
.databaseContainer.dockerImage = "registry.gitlab.com/postgres-ai/custom-images/extended-postgres:" + strenv(POSTGRES_VERSION)
102+
.databaseContainer.dockerImage = "registry.gitlab.com/postgres-ai/custom-images/extended-postgres:" + strenv(POSTGRES_VERSION) + env(EXTENDED_IMAGE_TAG)
102103
' "${configDir}/server.yml"
103104

104105
SHARED_PRELOAD_LIBRARIES="pg_stat_statements, auto_explain, pgaudit, logerrors, pg_stat_kcache"
@@ -176,7 +177,7 @@ PATCH_CONFIG_DATA=$(jq -n -c \
176177
--arg username "$SOURCE_USERNAME" \
177178
--arg password "$SOURCE_PASSWORD" \
178179
--arg spl "$SHARED_PRELOAD_LIBRARIES" \
179-
--arg dockerImage "registry.gitlab.com/postgres-ai/custom-images/extended-postgres:${POSTGRES_VERSION}" \
180+
--arg dockerImage "registry.gitlab.com/postgres-ai/custom-images/extended-postgres:${POSTGRES_VERSION}${EXTENDED_IMAGE_TAG}" \
180181
'{
181182
"global": {
182183
"debug": true
@@ -247,7 +248,7 @@ if [[ $(yq eval '.retrieval.spec.logicalDump.options.source.connection.dbname' $
247248
$(yq eval '.retrieval.spec.logicalDump.options.source.connection.username' ${configDir}/server.yml) != "$SOURCE_USERNAME" ||
248249
$(yq eval '.retrieval.spec.logicalDump.options.source.connection.password' ${configDir}/server.yml) != "$SOURCE_PASSWORD" ||
249250
$(yq eval '.retrieval.refresh.timetable' ${configDir}/server.yml) != "5 0 * * 1" ||
250-
$(yq eval '.databaseContainer.dockerImage' ${configDir}/server.yml) != "registry.gitlab.com/postgres-ai/custom-images/extended-postgres:${POSTGRES_VERSION}" ||
251+
$(yq eval '.databaseContainer.dockerImage' ${configDir}/server.yml) != "registry.gitlab.com/postgres-ai/custom-images/extended-postgres:${POSTGRES_VERSION}${EXTENDED_IMAGE_TAG}" ||
251252
$(yq eval '.databaseConfigs.configs.shared_buffers' ${configDir}/server.yml) != "256MB" ]] ; then
252253
echo "Configuration has not been updated properly"
253254
exit 1

‎engine/test/4.physical_basebackup.sh

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ set -euxo pipefail
44
TAG=${TAG:-${CI_COMMIT_REF_SLUG:-"master"}}
55
IMAGE2TEST="registry.gitlab.com/postgres-ai/database-lab/dblab-server:${TAG}"
66
DLE_SERVER_NAME="dblab_server_test"
7+
export EXTENDED_IMAGE_TAG="-minor-update" # -0.5.3
78

89
# Environment variables for replacement rules
910
export SOURCE_HOST="${SOURCE_HOST:-172.17.0.1}"
@@ -110,7 +111,7 @@ yq eval -i '
110111
.poolManager.mountDir = env(DLE_TEST_MOUNT_DIR) |
111112
.provision.portPool.from = env(DLE_PORT_POOL_FROM) |
112113
.provision.portPool.to = env(DLE_PORT_POOL_TO) |
113-
.databaseContainer.dockerImage = "registry.gitlab.com/postgres-ai/custom-images/extended-postgres:" + strenv(POSTGRES_VERSION) |
114+
.databaseContainer.dockerImage = "registry.gitlab.com/postgres-ai/custom-images/extended-postgres:" + strenv(POSTGRES_VERSION) + env(EXTENDED_IMAGE_TAG) |
114115
.retrieval.spec.physicalRestore.options.envs.PGUSER = strenv(SOURCE_USERNAME) |
115116
.retrieval.spec.physicalRestore.options.envs.PGPASSWORD = strenv(SOURCE_PASSWORD) |
116117
.retrieval.spec.physicalRestore.options.envs.PGHOST = strenv(SOURCE_HOST) |

‎engine/test/5.logical_rds.sh

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ set -euxo pipefail
44
TAG="${TAG:-"master"}"
55
IMAGE2TEST="registry.gitlab.com/postgres-ai/database-lab/dblab-server:${TAG}"
66
DLE_SERVER_NAME="dblab_server_test"
7+
export EXTENDED_IMAGE_TAG="-minor-update" # -0.5.3
78

89
# Environment variables for replacement rules
910
export DLE_TEST_MOUNT_DIR="/var/lib/test/dblab_mount"
@@ -48,7 +49,7 @@ yq eval -i '
4849
.poolManager.mountDir = env(DLE_TEST_MOUNT_DIR) |
4950
.provision.portPool.from = env(DLE_PORT_POOL_FROM) |
5051
.provision.portPool.to = env(DLE_PORT_POOL_TO) |
51-
.databaseContainer.dockerImage = "registry.gitlab.com/postgres-ai/custom-images/extended-postgres:" + strenv(POSTGRES_VERSION) |
52+
.databaseContainer.dockerImage = "registry.gitlab.com/postgres-ai/custom-images/extended-postgres:" + strenv(POSTGRES_VERSION) + env(EXTENDED_IMAGE_TAG) |
5253
.retrieval.spec.logicalDump.options.dumpLocation = env(DLE_TEST_MOUNT_DIR) + "/" + env(DLE_TEST_POOL_NAME) + "/dump" |
5354
.retrieval.spec.logicalDump.options.source.connection.dbname = strenv(SOURCE_DBNAME) |
5455
.retrieval.spec.logicalDump.options.source.connection.username = strenv(SOURCE_USERNAME) |

‎engine/test/_cleanup.sh

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ set -euxo pipefail
33

44
DLE_TEST_MOUNT_DIR="/var/lib/test/dblab_mount"
55
DLE_TEST_POOL_NAME="test_dblab_pool"
6+
TMP_DATA_DIR="/tmp/dle_test/logical_generic"
67
ZFS_FILE="$(pwd)/zfs_file"
78

89
# Stop and remove test Docker containers
@@ -46,3 +47,7 @@ sudo rm -f "${ZFS_FILE}" \
4647
# Remove CLI configuration
4748
dblab config remove test \
4849
|| echo "Removing CLI configuration finished with errors but it is OK to ignore them."
50+
51+
# Clean up tmp source database
52+
sudo rm -rf ${TMP_DATA_DIR}/postgresql/* \
53+
|| echo "Cleaning up tmp source directory finished with errors but it is OK to ignore them."

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /