From efa3907303ed4b44b6b5eb1e5cd725d93c49e0a8 Mon Sep 17 00:00:00 2001 From: Vu Dinh <vudinh@outlook.com> Date: Tue, 27 Apr 2021 13:51:29 -0400 Subject: [PATCH] Improve load func error handling to expose more information Many of sqlite query returns errors due to constrain issues. Those errors are often vague and not helpful for debugging reason. Those sqlite errors should be wrapped around with other information to expose the root cause and provide further data for debugging. Signed-off-by: Vu Dinh <vudinh@outlook.com> --- pkg/sqlite/load.go | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/pkg/sqlite/load.go b/pkg/sqlite/load.go index e3d116c4a..efe2f7e41 100644 --- a/pkg/sqlite/load.go +++ b/pkg/sqlite/load.go @@ -117,7 +117,7 @@ func (s *sqlLoader) addOperatorBundle(tx *sql.Tx, bundle *registry.Bundle) error } if _, err := addBundle.Exec(csvName, csvBytes, bundleBytes, bundleImage, version, skiprange, replaces, strings.Join(skips, ","), substitutesFor); err != nil { - return err + return fmt.Errorf("failed to add bundle %q: %s", csvName, err.Error()) } imgs, err := bundle.Images() @@ -126,7 +126,7 @@ func (s *sqlLoader) addOperatorBundle(tx *sql.Tx, bundle *registry.Bundle) error } for img := range imgs { if _, err := addImage.Exec(img, csvName); err != nil { - return err + return fmt.Errorf("failed to add related images %q for bundle %q: %s", img, csvName, err.Error()) } } @@ -572,23 +572,21 @@ func (s *sqlLoader) addPackageChannels(tx *sql.Tx, manifest registry.PackageMani } defer getReplaces.Close() - var errs []error - if _, err := addPackage.Exec(manifest.PackageName); err != nil { - errs = append(errs, err) - return utilerrors.NewAggregate(errs) + return fmt.Errorf("failed to add package %q: %s", manifest.PackageName, err.Error()) } + var errs []error hasDefault := false for _, c := range manifest.Channels { if _, err := addChannel.Exec(c.Name, manifest.PackageName, c.CurrentCSVName); err != nil { - errs = append(errs, err) + errs = append(errs, fmt.Errorf("failed to add channel %q in package %q: %s", c.Name, manifest.PackageName, err.Error())) continue } if c.IsDefaultChannel(manifest) { hasDefault = true if _, err := addDefaultChannel.Exec(c.Name, manifest.PackageName); err != nil { - errs = append(errs, err) + errs = append(errs, fmt.Errorf("failed to add default channel %q in package %q: %s", c.Name, manifest.PackageName, err.Error())) continue } } @@ -600,7 +598,7 @@ func (s *sqlLoader) addPackageChannels(tx *sql.Tx, manifest registry.PackageMani for _, c := range manifest.Channels { res, err := addChannelEntry.Exec(c.Name, manifest.PackageName, c.CurrentCSVName, 0) if err != nil { - errs = append(errs, err) + errs = append(errs, fmt.Errorf("failed to add channel %q in package %q: %s", c.Name, manifest.PackageName, err.Error())) continue } currentID, err := res.LastInsertId() @@ -638,7 +636,7 @@ func (s *sqlLoader) addPackageChannels(tx *sql.Tx, manifest registry.PackageMani // add dummy channel entry for the skipped version skippedChannelEntry, err := addChannelEntry.Exec(c.Name, manifest.PackageName, skip, depth) if err != nil { - errs = append(errs, err) + errs = append(errs, fmt.Errorf("failed to add channel %q for skipped version %q in package %q: %s", c.Name, skip, manifest.PackageName, err.Error())) continue } @@ -651,7 +649,7 @@ func (s *sqlLoader) addPackageChannels(tx *sql.Tx, manifest registry.PackageMani // add another channel entry for the parent, which replaces the skipped synthesizedChannelEntry, err := addChannelEntry.Exec(c.Name, manifest.PackageName, channelEntryCSVName, depth) if err != nil { - errs = append(errs, err) + errs = append(errs, fmt.Errorf("failed to add channel %q for replaces %q in package %q: %s", c.Name, channelEntryCSVName, manifest.PackageName, err.Error())) continue } @@ -677,7 +675,7 @@ func (s *sqlLoader) addPackageChannels(tx *sql.Tx, manifest registry.PackageMani replacedChannelEntry, err := addChannelEntry.Exec(c.Name, manifest.PackageName, replaces, depth) if err != nil { - errs = append(errs, err) + errs = append(errs, fmt.Errorf("failed to add channel %q for replaces %q in package %q: %s", c.Name, replaces, manifest.PackageName, err.Error())) break } @@ -1294,8 +1292,8 @@ func (s *sqlLoader) rmChannelEntry(tx *sql.Tx, csvName string) error { func getTailFromBundle(tx *sql.Tx, name string) (bundles []string, err error) { getReplacesSkips := `SELECT replaces, skips FROM operatorbundle WHERE name=?` - isDefaultChannelHead := `SELECT head_operatorbundle_name FROM channel - INNER JOIN package ON channel.name = package.default_channel + isDefaultChannelHead := `SELECT head_operatorbundle_name FROM channel + INNER JOIN package ON channel.name = package.default_channel WHERE channel.head_operatorbundle_name = ?` tail := make(map[string]struct{})