diff options
author | Volker Lendecke <vl@samba.org> | 2009-07-14 18:31:28 +0200 |
---|---|---|
committer | Volker Lendecke <vl@samba.org> | 2009-07-15 10:55:20 +0200 |
commit | 76705d10c626a66cc77f3ec294f4f98bef95aeb5 (patch) | |
tree | ebba28d32a98b4095118c7c14687f0ef63edfe89 /source3/lib | |
parent | 3d7dfc1197017c34bdb8dbc6e62460f19bd7d141 (diff) | |
download | samba-76705d10c626a66cc77f3ec294f4f98bef95aeb5.tar.gz samba-76705d10c626a66cc77f3ec294f4f98bef95aeb5.tar.bz2 samba-76705d10c626a66cc77f3ec294f4f98bef95aeb5.zip |
Consolidate gencache also every 100 writes in a single process
Diffstat (limited to 'source3/lib')
-rw-r--r-- | source3/lib/gencache.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/source3/lib/gencache.c b/source3/lib/gencache.c index 6496ad3ed6..ee1f4b70b3 100644 --- a/source3/lib/gencache.c +++ b/source3/lib/gencache.c @@ -121,6 +121,7 @@ bool gencache_set_data_blob(const char *keystr, const DATA_BLOB *blob, TDB_DATA databuf; char* val; time_t last_stabilize; + static int writecount; if (tdb_data_cmp(string_term_tdb_data(keystr), last_stabilize_key()) == 0) { @@ -163,6 +164,18 @@ bool gencache_set_data_blob(const char *keystr, const DATA_BLOB *blob, } /* + * Every 100 writes within a single process, stabilize the cache with + * a transaction. This is done to prevent a single transaction to + * become huge and chew lots of memory. + */ + writecount += 1; + if (writecount > lp_parm_int(-1, "gencache", "stabilize_count", 100)) { + gencache_stabilize(); + writecount = 0; + goto done; + } + + /* * Every 5 minutes, call gencache_stabilize() to not let grow * gencache_notrans.tdb too large. */ @@ -180,6 +193,7 @@ bool gencache_set_data_blob(const char *keystr, const DATA_BLOB *blob, gencache_stabilize(); } +done: return ret == 0; } |