summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2018-02-12 02:23:49 +0100
committerCarlos Garnacho <carlosg@gnome.org>2018-02-13 01:26:28 +0100
commit57235eb302194554feb077019d9c69a4bbd8214f (patch)
tree925224b5a972d5673175b77fc5c6e08f979456cb
parent09408f1dcad26b8a5959d5734af93b5a50723d82 (diff)
downloadtracker-57235eb302194554feb077019d9c69a4bbd8214f.tar.gz
libtracker-data: Perform VACUUM only on large database files
The agressive VACUUM on shutdown is the cause for the reported slowness in tracker-store restarts. Let's be a bit more conservative, and only trigger VACUUMing when the database file gets hideously large (4GB). There is the remote possibility that a database is still larger than 4GB after VACUUM. I'll just make it suck at the moment and do the same frequent VACUUMs we get currently.
-rw-r--r--src/libtracker-data/tracker-data-manager.c2
-rw-r--r--src/libtracker-data/tracker-db-manager.c14
-rw-r--r--src/libtracker-data/tracker-db-manager.h2
3 files changed, 17 insertions, 1 deletions
diff --git a/src/libtracker-data/tracker-data-manager.c b/src/libtracker-data/tracker-data-manager.c
index 856330314..38f8f7793 100644
--- a/src/libtracker-data/tracker-data-manager.c
+++ b/src/libtracker-data/tracker-data-manager.c
@@ -4821,7 +4821,7 @@ tracker_data_manager_dispose (GObject *object)
g_clear_error (&error);
}
- tracker_db_interface_execute_query (iface, NULL, "VACUUM");
+ tracker_db_manager_check_perform_vacuum (manager->db_manager);
}
g_clear_pointer (&manager->db_manager, tracker_db_manager_free);
diff --git a/src/libtracker-data/tracker-db-manager.c b/src/libtracker-data/tracker-db-manager.c
index aff39bf81..efb0fa2fb 100644
--- a/src/libtracker-data/tracker-db-manager.c
+++ b/src/libtracker-data/tracker-db-manager.c
@@ -65,6 +65,8 @@
#define TRACKER_DB_VERSION_FILE "db-version.txt"
#define TRACKER_DB_LOCALE_FILE "db-locale.txt"
+#define TRACKER_VACUUM_CHECK_SIZE ((goffset) 4 * 1024 * 1024 * 1024) /* 4GB */
+
#define IN_USE_FILENAME ".meta.isrunning"
#define PARSER_SHA1_FILENAME "parser-sha1.txt"
@@ -1163,3 +1165,15 @@ tracker_db_manager_tokenizer_update (TrackerDBManager *db_manager)
g_free (filename);
}
+
+void
+tracker_db_manager_check_perform_vacuum (TrackerDBManager *db_manager)
+{
+ TrackerDBInterface *iface;
+
+ if (tracker_file_get_size (db_manager->db.abs_filename) < TRACKER_VACUUM_CHECK_SIZE)
+ return;
+
+ iface = tracker_db_manager_get_writable_db_interface (db_manager);
+ tracker_db_interface_execute_query (iface, NULL, "VACUUM");
+}
diff --git a/src/libtracker-data/tracker-db-manager.h b/src/libtracker-data/tracker-db-manager.h
index 53f73a4cb..95a71cfdb 100644
--- a/src/libtracker-data/tracker-db-manager.h
+++ b/src/libtracker-data/tracker-db-manager.h
@@ -96,6 +96,8 @@ void tracker_db_manager_set_current_locale (TrackerDBManager
gboolean tracker_db_manager_get_tokenizer_changed (TrackerDBManager *db_manager);
void tracker_db_manager_tokenizer_update (TrackerDBManager *db_manager);
+void tracker_db_manager_check_perform_vacuum (TrackerDBManager *db_manager);
+
G_END_DECLS
#endif /* __LIBTRACKER_DB_MANAGER_H__ */