diff --git a/pkg/database/database.go b/pkg/database/database.go index dc0405e5..4080d811 100644 --- a/pkg/database/database.go +++ b/pkg/database/database.go @@ -33,31 +33,6 @@ type LSN struct { lsn string } -func checkVersion(c *pgx.Conn, exp string) (bool, error) { - rows, err := c.Query(`SELECT extversion FROM pg_catalog.pg_extension WHERE extname OPERATOR(pg_catalog.=) 'yezzey';`) - if err != nil { - return false, fmt.Errorf("unable to get ao/aocs tables %v", err) //fix - } - - defer rows.Close() - ylogger.Zero.Debug().Msg("executed select") - - if rows.Next() { - var ver string - if err := rows.Scan(&ver); err != nil { - return false, fmt.Errorf("unable to parse query output %v", err) - } - if rows.Next() { - return false, fmt.Errorf("unable to get yezzey extension version: duplicate output") - } - - /* we compare versions lexicographically */ - return ver >= exp, nil - } - - return false, fmt.Errorf("unable to get yezzey extension version") -} - func nextPrefix(prefix string) string { b := []byte(prefix) for i := len(b) - 1; i >= 0; i-- { @@ -82,39 +57,33 @@ func (database *DatabaseHandler) GetVirtualExpireIndexByPrefix(port uint64, db D upper := nextPrefix(prefix) usePrefix := lower != "" && upper != "" - /* Todo: check that yezzey version >= 1.8.4 */ - if ch, err := checkVersion(conn, "1.8.4"); err != nil { - ylogger.Zero.Warn().Err(err).Msg("GetVirtualExpireIndexByPrefix: failed") - return err - } else if ch { - var rows *pgx.Rows - if usePrefix { - rows, err = conn.Query(`SELECT x_path, lsn FROM yezzey.yezzey_expire_hint WHERE x_path COLLATE "C" OPERATOR(pg_catalog.>=) $1 COLLATE "C" AND x_path COLLATE "C" OPERATOR(pg_catalog.<) $2 COLLATE "C";`, lower, upper) - } else { - rows, err = conn.Query(`SELECT x_path, lsn FROM yezzey.yezzey_expire_hint;`) + var rows *pgx.Rows + if usePrefix { + rows, err = conn.Query(`SELECT x_path, lsn FROM yezzey.yezzey_expire_hint WHERE x_path COLLATE "C" OPERATOR(pg_catalog.>=) $1 COLLATE "C" AND x_path COLLATE "C" OPERATOR(pg_catalog.<) $2 COLLATE "C";`, lower, upper) + } else { + rows, err = conn.Query(`SELECT x_path, lsn FROM yezzey.yezzey_expire_hint;`) + } + if err != nil { + return fmt.Errorf("unable to get ao/aocs tables %v", err) //fix + } + defer rows.Close() + ylogger.Zero.Debug().Bool("prefix filtered", usePrefix).Msg("executed select") + + for rows.Next() { + row := ExpireHint{} + if err := rows.Scan(&row.x_path, &row.expireLsn); err != nil { + return fmt.Errorf("unable to parse query output %v", err) } + + lsn, err := pgx.ParseLSN(row.expireLsn) if err != nil { - return fmt.Errorf("unable to get ao/aocs tables %v", err) //fix - } - defer rows.Close() - ylogger.Zero.Debug().Bool("prefix filtered", usePrefix).Msg("executed select") - - for rows.Next() { - row := ExpireHint{} - if err := rows.Scan(&row.x_path, &row.expireLsn); err != nil { - return fmt.Errorf("unable to parse query output %v", err) - } - - lsn, err := pgx.ParseLSN(row.expireLsn) - if err != nil { - return fmt.Errorf("unable to parse query output %v", err) - } - - ylogger.Zero.Debug().Str("x_path", row.x_path).Str("lsn", row.expireLsn).Msg("added file to expire hint") - (*expireIndex)[row.x_path] = lsn + return fmt.Errorf("unable to parse query output %v", err) } - ylogger.Zero.Debug().Msg("fetched expire hint info") + + ylogger.Zero.Debug().Str("x_path", row.x_path).Str("lsn", row.expireLsn).Msg("added file to expire hint") + (*expireIndex)[row.x_path] = lsn } + ylogger.Zero.Debug().Msg("fetched expire hint info") var viRows *pgx.Rows if usePrefix {