diff pkg/mesh/cache.go @ 5724:1ea1d3ef2258

Be tolerant in re-generating multi meshes iso areas if mesh data is empty.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Wed, 29 May 2024 14:23:37 +0200
parents 03dfbe675842
children
line wrap: on
line diff
--- a/pkg/mesh/cache.go	Wed May 29 12:49:20 2024 +0200
+++ b/pkg/mesh/cache.go	Wed May 29 14:23:37 2024 +0200
@@ -16,6 +16,8 @@
 import (
 	"context"
 	"database/sql"
+	"errors"
+	"fmt"
 	"sync"
 	"time"
 )
@@ -51,6 +53,7 @@
 SELECT mesh_index, coalesce(mesh_index_version, 1) AS mesh_index_version
 FROM waterway.sounding_results
 WHERE id = $1
+  AND mesh_checksum IS NOT NULL AND mesh_index IS NOT NULL
 `
 	fetchMeshSQL = `
 SELECT mesh_checksum, mesh_index, coalesce(mesh_index_version, 1) AS mesh_index_version
@@ -107,13 +110,15 @@
 ) (*STRTree, error) {
 	var data []byte
 	var version int
-	err := tx.QueryRowContext(ctx, directMeshSQL, id).Scan(&data, &version)
-	if err != nil {
-		return nil, err
+	switch err := tx.QueryRowContext(ctx, directMeshSQL, id).Scan(&data, &version); {
+	case errors.Is(err, sql.ErrNoRows):
+		return nil, nil
+	case err != nil:
+		return nil, fmt.Errorf("fetching mesh from db failed: %w", err)
 	}
 	tree := new(STRTree)
 	if err := tree.FromBytes(data, version); err != nil {
-		return nil, err
+		return nil, fmt.Errorf("deserializing mesh failed: %w (version %d)", err, version)
 	}
 	return tree, nil
 }