Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Restoring database from another version of Brewtarget (self-compiled version 2.0.4 from 2018 codebase) on MacOS 11.7.8 causes application to fail to load on Brewtarget 3.0.9 on Linux Mint 21.1 #766

Closed
rstanton00 opened this issue Aug 2, 2023 · 4 comments

Comments

@rstanton00
Copy link

I recently installed Brewtarget on a laptop running Linux Mint 21.1. I had previously been running Brewtarget on a MBPro with 11.7.8. I exported my database from there and attempted to restore it into the Linux Mint Brewtarget, so that I would have all my recipes along with self-added ingredients and styles. After restarting Brewtarget, I find the application can no longer successfully launch. Below is my terminal output. Unfortunately, I don't know enough about the application to debug what's going wrong on my own. I'd be happy to attach the database backup/export if there's a way to attach a file to an issue and work with anyone on finding out what the issue is.

ObjectStore::ObjectStore(const TypeLookup&, const ObjectStore::TableDefinition&, const JunctionTableDefinitions&) Construct of object store for primary table brewnote
ObjectStore::ObjectStore(const TypeLookup&, const ObjectStore::TableDefinition&, const JunctionTableDefinitions&) Construct of object store for primary table equipment
ObjectStore::ObjectStore(const TypeLookup&, const ObjectStore::TableDefinition&, const JunctionTableDefinitions&) Construct of object store for primary table fermentable
ObjectStore::ObjectStore(const TypeLookup&, const ObjectStore::TableDefinition&, const JunctionTableDefinitions&) Construct of object store for primary table hop
ObjectStore::ObjectStore(const TypeLookup&, const ObjectStore::TableDefinition&, const JunctionTableDefinitions&) Construct of object store for primary table instruction
ObjectStore::ObjectStore(const TypeLookup&, const ObjectStore::TableDefinition&, const JunctionTableDefinitions&) Construct of object store for primary table fermentable_in_inventory
ObjectStore::ObjectStore(const TypeLookup&, const ObjectStore::TableDefinition&, const JunctionTableDefinitions&) Construct of object store for primary table hop_in_inventory
ObjectStore::ObjectStore(const TypeLookup&, const ObjectStore::TableDefinition&, const JunctionTableDefinitions&) Construct of object store for primary table misc_in_inventory
ObjectStore::ObjectStore(const TypeLookup&, const ObjectStore::TableDefinition&, const JunctionTableDefinitions&) Construct of object store for primary table yeast_in_inventory
ObjectStore::ObjectStore(const TypeLookup&, const ObjectStore::TableDefinition&, const JunctionTableDefinitions&) Construct of object store for primary table mash
ObjectStore::ObjectStore(const TypeLookup&, const ObjectStore::TableDefinition&, const JunctionTableDefinitions&) Construct of object store for primary table mashstep
ObjectStore::ObjectStore(const TypeLookup&, const ObjectStore::TableDefinition&, const JunctionTableDefinitions&) Construct of object store for primary table misc
ObjectStore::ObjectStore(const TypeLookup&, const ObjectStore::TableDefinition&, const JunctionTableDefinitions&) Construct of object store for primary table recipe
ObjectStore::ObjectStore(const TypeLookup&, const ObjectStore::TableDefinition&, const JunctionTableDefinitions&) Construct of object store for primary table salt
ObjectStore::ObjectStore(const TypeLookup&, const ObjectStore::TableDefinition&, const JunctionTableDefinitions&) Construct of object store for primary table style
ObjectStore::ObjectStore(const TypeLookup&, const ObjectStore::TableDefinition&, const JunctionTableDefinitions&) Construct of object store for primary table water
ObjectStore::ObjectStore(const TypeLookup&, const ObjectStore::TableDefinition&, const JunctionTableDefinitions&) Construct of object store for primary table yeast
void PersistentSettings::initialise(QString) Qt-proposed directories for user-specific configuration files are: ("/home/me/.config/brewtarget", "/etc/xdg/xdg-mate/brewtarget", "/etc/xdg/brewtarget")
void PersistentSettings::initialise(QString) Preferred writeable directory for user-specific configuration files is: "/home/me/.config/brewtarget"
void PersistentSettings::initialise(QString) Persistent settings file: "/home/me/.config/brewtarget/brewtargetPersistentSettings.conf"
int main(int, char**) Persistent Settings initialised
bool Logging::setDirectory(std::optional, Logging::PersistNewDirectory)
bool Logging::setDirectory(std::optional, Logging::PersistNewDirectory) Logging to specified directory: "/home/me/.config/brewtarget"
bool {anonymous}::openLogFile() Logging to file "/home/me/.config/brewtarget/brewtarget.log"
[14:10:10.802] (1dod70lshs) INFO : Starting Brewtarget v 3.0.9 (app name "brewtarget" ) on "Linux Mint 21.1" [main.cpp:195]
[14:10:10.802] (1dod70lshs) INFO : Built at Mon May 15 02:57:36 UTC 2023 on linux for linux with gcc compiler [main.cpp:198]
[14:10:10.802] (1dod70lshs) INFO : Log directory: "/home/me/.config/brewtarget" [main.cpp:201]
[14:10:10.802] (1dod70lshs) INFO : Using Qt runtime v 5.15.3 (compiled against Qt v 5.15.3 ) [main.cpp:202]
[14:10:10.802] (1dod70lshs) INFO : Configuration directory: "/home/me/.config/brewtarget" [main.cpp:203]
[14:10:10.802] (1dod70lshs) INFO : Data directory: "/home/me/.config/brewtarget" [main.cpp:204]
[14:10:10.802] (1dod70lshs) INFO : void {anonymous}::initResourceDir(QDir&) Determined resource directory is "/usr/share/brewtarget" [Application.cpp:342]
[14:10:10.802] (1dod70lshs) INFO : Resource directory: "/usr/share/brewtarget" [main.cpp:205]
[14:10:10.868] (1dod70lshs) INFO : bool Database::load() Known DB drivers: ("QSQLITE") [database/Database.cpp:638]
[14:10:10.868] (1dod70lshs) INFO : bool Database::impl::loadSQLite(Database&) dbFileName = " /home/me/.config/brewtarget/database.sqlite "
dataDbFileName=" /usr/bin/../share/brewtarget/default_db.sqlite " [database/Database.cpp:251]
[14:10:10.868] (1dod70lshs) INFO : bool Database::impl::loadSQLite(Database&) SQLite version QVariant(QString, "3.37.2") [database/Database.cpp:303]
[14:10:10.869] (1dod70lshs) INFO : bool Database::impl::updateSchema(Database&, bool*) Schema version in DB: 10 , current schema version in code: 10 [database/Database.cpp:399]
[14:10:10.885] (1dod70lshs) ERROR : void ObjectStore::impl::wrapAndUnmapAsNeeded(const ObjectStore::TableDefinition&, const ObjectStore::TableField&, QVariant&) Unexpected type # 10 = QString in QVariant for property forcedCarbonation , field type FieldType # 0 : ( "ObjectStore::FieldType::Bool" ) , value QVariant(QString, "false") , table recipe , column forced_carb [database/ObjectStore.cpp:697]
[14:10:10.886] (1dod70lshs) ERROR : void ObjectStore::impl::wrapAndUnmapAsNeeded(const ObjectStore::TableDefinition&, const ObjectStore::TableField&, QVariant&) Call stack is:
Stacktrace:
0# Logging::getStackTrace() in brewtarget
1# ObjectStore::impl::wrapAndUnmapAsNeeded(ObjectStore::TableDefinition const&, ObjectStore::TableField const&, QVariant&) in brewtarget
2# ObjectStore::loadAll(Database*) in brewtarget
3# __pthread_once_slow at ./nptl/pthread_once.c:118
4# ObjectStoreTyped::getInstance() in brewtarget
5# BtTreeModel::BtTreeModel(BtTreeView*, BtTreeModel::TypeMasks) in brewtarget
6# BtTreeView::BtTreeView(QWidget*, BtTreeModel::TypeMasks) in brewtarget
7# RecipeTreeView::RecipeTreeView(QWidget*) in brewtarget
8# Ui_mainWindow::setupUi(QMainWindow*) in brewtarget
9# MainWindow::MainWindow(QWidget*) in brewtarget
10# 0x00005604FFC6AFA2 in brewtarget
11# __pthread_once_slow at ./nptl/pthread_once.c:118
12# MainWindow::instance() in brewtarget
13# Application::run() in brewtarget
14# main in brewtarget
15# __libc_start_call_main at ../sysdeps/nptl/libc_start_call_main.h:58
16# __libc_start_main at ../csu/libc-start.c:379
17# _start in brewtarget
[database/ObjectStore.cpp:702]
[14:10:10.886] (1dod70lshs) ERROR : ASSERT: "false" in file ../src/database/ObjectStore.cpp, line 704 [database/ObjectStore.cpp:704]
Aborted (core dumped)

@matty0ung
Copy link
Contributor

Sorry to hear you're having problems. It looks like the error message is saying that it found an unexpected value in the database. Specifically, it was trying to read the forced_carb column on the recipe table and it found the string "false" when it was expecting to get a boolean (ie ON/OFF) value of 0 or 1.

Do you know what version of Brewtarget you were running on the Mac?

If you want to attach your database file (see https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/attaching-files for how), I'd be happy to take a more detailed look.

@matty0ung
Copy link
Contributor

The short-term fix will be just to edit the database to change false to 0 in the row or rows affected. (If you're comfortable using a tool such as DB Browser for SQLite can do this yourself, otherwise we can fix the file when you attach it to the issue.)

Longer term, I'll look at enhancing the code so that it can automatically recover from this sort of problem. It's because the SQLite database does not have a native boolean type and also does not enforce data types. Normally, it just stores true / false in an integer column as 0 / 1 and everything just works. However, it will also let you store strings in an integer column(!).

@matty0ung
Copy link
Contributor

Should be fixed by #767, but please re-open if not.

@matty0ung
Copy link
Contributor

This should be fixed in https://github.com/Brewtarget/brewtarget/releases/tag/v3.0.10, but please re-open if not.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants