diff options
| author | Diogenes Nunez <dnunez@redhat.com> | 2016-07-27 11:09:47 -0400 | 
|---|---|---|
| committer | Dan Lambright <dlambrig@redhat.com> | 2016-09-04 18:37:57 -0700 | 
| commit | 261c035c7d0cd1639cc8bd0ead82c30efcc0e93f (patch) | |
| tree | af3a2e498023e7ad8af417312b83ce2f969ef738 /libglusterfs/src/gfdb/gfdb_sqlite3.h | |
| parent | 6459fc812219551291e4be426ed8ecf2c90813a4 (diff) | |
cluster/tier: Adding compaction option for metadata databases
Problem: As metadata in the database fills up, querying the database
take a long time. As a result, tier migration slows down.  To
counteract this, we added a way to enable the compaction methods of
the underlying database. The goal is to reduce the size of the
underlying file by eliminating database fragmentation.
NOTE: There is currently a bug where sometimes a brick will
attempt to activate compaction. This happens even compaction is already
turned on.
The cause is narrowed down to the compact_mode_switch flipping its value.
Changes: libglusterfs/src/gfdb - Added a gfdb function to compact the
underlying database, compact_db() This is a no-op if the database has
no such option.
- Added a compaction function for SQLite3 that does the following
1) Changes the auto_vacuum pragma of the database
2) Compacts the database according to the type of compaction requested
- Compaction type can be changed by changing the macro
  GF_SQL_COMPACT_DEF to one of the 4 compaction types in
  gfdb_sqlite3.h
  It is currently set to GF_SQL_COMPACT_INCR, or incremental
  vacuuming.
xlators/cluster/dht/src - Added the following command-line option to
enable SQLite3 compaction.
gluster volume set <vol-name> tier-compact <off|on>
- Added the following command-line option to change the frequency the
  hot and cold tier are ordered to compact.
gluster volume set <vol-name> tier-hot-compact-frequency <int>
gluster volume set <vol-name> tier-cold-compact-frequency <int>
- tier daemon periodically sends the (new)
  GFDB_IPC_CTR_SET_COMPACT_PRAGMA IPC to the CTR xlator. The IPC
  triggers compaction of the database.
  The inputs are both gf_boolean_t.
  IPC Input:
  compact_active: Is compaction currently on for the db.
  compact_mode_switched: Did we flip the compaction switch recently?
  IPC Output:
  0 if the compaction succeeds.
  Non-zero otherwise.
xlators/features/changetimerecorder/src/ - When the CTR gets the
compaction IPC, it launches a thread that will perform the
compaction. The IPC ends after the thread is launched. To avoid extra
allocations, the parameters are passed using static variables.
Change-Id: I5e1433becb9eeff2afe8dcb4a5798977bf5ba0dd
Signed-off-by: Diogenes Nunez <dnunez@redhat.com>
Reviewed-on: http://review.gluster.org/15031
Reviewed-by: Milind Changire <mchangir@redhat.com>
Reviewed-by: Dan Lambright <dlambrig@redhat.com>
Tested-by: Dan Lambright <dlambrig@redhat.com>
CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
Smoke: Gluster Build System <jenkins@build.gluster.org>
Diffstat (limited to 'libglusterfs/src/gfdb/gfdb_sqlite3.h')
| -rw-r--r-- | libglusterfs/src/gfdb/gfdb_sqlite3.h | 21 | 
1 files changed, 18 insertions, 3 deletions
diff --git a/libglusterfs/src/gfdb/gfdb_sqlite3.h b/libglusterfs/src/gfdb/gfdb_sqlite3.h index 9d0d996a322..4d70a60e431 100644 --- a/libglusterfs/src/gfdb/gfdb_sqlite3.h +++ b/libglusterfs/src/gfdb/gfdb_sqlite3.h @@ -73,8 +73,7 @@ do {\  #define GF_SQL_AV_NONE  "none"  #define GF_SQL_AV_FULL  "full" -#define GF_SQL_AV_INCR  "incr" - +#define GF_SQL_AV_INCR  "incremental"  #define GF_SQL_SYNC_OFF         "off"  #define GF_SQL_SYNC_NORMAL      "normal" @@ -87,7 +86,12 @@ do {\  #define GF_SQL_JM_WAL           "wal"  #define GF_SQL_JM_OFF           "off" +#define GF_SQL_COMPACT_NONE   0 +#define GF_SQL_COMPACT_FULL   1 +#define GF_SQL_COMPACT_INCR   2 +#define GF_SQL_COMPACT_MANUAL 3 +#define GF_SQL_COMPACT_DEF    GF_SQL_COMPACT_INCR  typedef enum gf_sql_auto_vacuum {          gf_sql_av_none = 0,          gf_sql_av_full, @@ -319,7 +323,18 @@ int gf_sqlite3_pragma (void *db_conn, char *pragma_key, char **pragma_value);  int  gf_sqlite3_set_pragma (void *db_conn, char *pragma_key, char *pragma_value); - +/* Function to vacuum of sqlite db + * Input: + * void *db_conn                      : Sqlite connection + * gf_boolean_t compact_active        : Is compaction on? + * gf_boolean_t compact_mode_switched : Did we just flip the compaction swtich? + * Return: + *      On success return 0 + *      On failure return -1 + * */ +int +gf_sqlite3_vacuum (void *db_conn, gf_boolean_t compact_active, +                   gf_boolean_t compact_mode_switched);  void gf_sqlite3_fill_db_operations (gfdb_db_operations_t  *gfdb_db_ops);  | 
