comparison 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
comparison
equal deleted inserted replaced
5723:4c8652a61eab 5724:1ea1d3ef2258
14 package mesh 14 package mesh
15 15
16 import ( 16 import (
17 "context" 17 "context"
18 "database/sql" 18 "database/sql"
19 "errors"
20 "fmt"
19 "sync" 21 "sync"
20 "time" 22 "time"
21 ) 23 )
22 24
23 type ( 25 type (
49 const ( 51 const (
50 directMeshSQL = ` 52 directMeshSQL = `
51 SELECT mesh_index, coalesce(mesh_index_version, 1) AS mesh_index_version 53 SELECT mesh_index, coalesce(mesh_index_version, 1) AS mesh_index_version
52 FROM waterway.sounding_results 54 FROM waterway.sounding_results
53 WHERE id = $1 55 WHERE id = $1
56 AND mesh_checksum IS NOT NULL AND mesh_index IS NOT NULL
54 ` 57 `
55 fetchMeshSQL = ` 58 fetchMeshSQL = `
56 SELECT mesh_checksum, mesh_index, coalesce(mesh_index_version, 1) AS mesh_index_version 59 SELECT mesh_checksum, mesh_index, coalesce(mesh_index_version, 1) AS mesh_index_version
57 FROM waterway.sounding_results 60 FROM waterway.sounding_results
58 WHERE bottleneck_id = $1 AND date_info = $2::date 61 WHERE bottleneck_id = $1 AND date_info = $2::date
105 tx *sql.Tx, 108 tx *sql.Tx,
106 id int64, 109 id int64,
107 ) (*STRTree, error) { 110 ) (*STRTree, error) {
108 var data []byte 111 var data []byte
109 var version int 112 var version int
110 err := tx.QueryRowContext(ctx, directMeshSQL, id).Scan(&data, &version) 113 switch err := tx.QueryRowContext(ctx, directMeshSQL, id).Scan(&data, &version); {
111 if err != nil { 114 case errors.Is(err, sql.ErrNoRows):
112 return nil, err 115 return nil, nil
116 case err != nil:
117 return nil, fmt.Errorf("fetching mesh from db failed: %w", err)
113 } 118 }
114 tree := new(STRTree) 119 tree := new(STRTree)
115 if err := tree.FromBytes(data, version); err != nil { 120 if err := tree.FromBytes(data, version); err != nil {
116 return nil, err 121 return nil, fmt.Errorf("deserializing mesh failed: %w (version %d)", err, version)
117 } 122 }
118 return tree, nil 123 return tree, nil
119 } 124 }
120 125
121 func (c *Cache) get( 126 func (c *Cache) get(