Univention Bugzilla – Attachment 10214 Details for
Bug 47587
cache_update_master_entry mdb_txn_commit: failed: MDB_PAGE_NOTFOUND
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
close_and_reopen_cache_and_retry_on_failure_in_cache_update_master_entry.diff
close_and_reopen_cache_and_retry_on_failure_in_cache_update_master_entry.diff (text/plain), 3.56 KB, created by
Arvid Requate
on 2019-10-21 13:52:10 CEST
(
hide
)
Description:
close_and_reopen_cache_and_retry_on_failure_in_cache_update_master_entry.diff
Filename:
MIME Type:
Creator:
Arvid Requate
Created:
2019-10-21 13:52:10 CEST
Size:
3.56 KB
patch
obsolete
>diff --git a/management/univention-directory-listener/src/cache.c b/management/univention-directory-listener/src/cache.c >index ae288c7757..cba4437ef8 100644 >--- a/management/univention-directory-listener/src/cache.c >+++ b/management/univention-directory-listener/src/cache.c >@@ -397,7 +397,7 @@ int cache_get_master_entry(CacheMasterEntry *master_entry) { > return MDB_SUCCESS; > } > >-int cache_update_master_entry(CacheMasterEntry *master_entry) { >+int cache_update_master_entry(CacheMasterEntry *master_entry, int retry) { > int rv; > MDB_txn *write_txn; > MDB_val key, data; >@@ -426,7 +426,24 @@ int cache_update_master_entry(CacheMasterEntry *master_entry) { > univention_debug(UV_DEBUG_LISTENER, UV_DEBUG_ALL, "cache_update_master_entry: Transaction commit"); > if ((rv = mdb_txn_commit(write_txn)) != MDB_SUCCESS) { > univention_debug(UV_DEBUG_LISTENER, UV_DEBUG_ERROR, "cache_update_master_entry: storing master entry in database failed"); >- ERROR_MDB_ABORT(rv, "mdb_txn_commit"); >+ if (rv == MDB_PAGE_NOTFOUND && retry == 1) { >+ univention_debug(UV_DEBUG_LISTENER, UV_DEBUG_ERROR, "cache_update_master_entry: retrying"); >+ cache_mdb_close(); >+ >+ /* TODO: pass these paths properly !! */ >+ char cache_dir[PATH_MAX] = "/var/lib/univention-directory-listener"; >+ char cache_mdb_dir[PATH_MAX]; >+ >+ rv = snprintf(cache_mdb_dir, PATH_MAX, "%s/cache", cache_dir); >+ if (rv < 0 || rv >= PATH_MAX) >+ abort(); >+ >+ if (cache_init(cache_mdb_dir, 0) != 0) >+ exit(1); >+ cache_update_master_entry(master_entry, 0); >+ } else { >+ ERROR_MDB_ABORT(rv, "mdb_txn_commit"); >+ } > return rv; > } > >diff --git a/management/univention-directory-listener/src/cache.h b/management/univention-directory-listener/src/cache.h >index 13f9c5f8b0..bdc16f6834 100644 >--- a/management/univention-directory-listener/src/cache.h >+++ b/management/univention-directory-listener/src/cache.h >@@ -46,7 +46,7 @@ int cache_lock(void); > int cache_init(char *cache_mdb_dir, int mdb_flags); > void cache_sync(void); > int cache_get_master_entry(CacheMasterEntry *master_entry); >-int cache_update_master_entry(CacheMasterEntry *master_entry); >+int cache_update_master_entry(CacheMasterEntry *master_entry, int retry); > int cache_update_entry(NotifierID id, char *dn, CacheEntry *entry); > int cache_update_entry_lower(NotifierID id, char *dn, CacheEntry *entry); > int cache_delete_entry(NotifierID id, char *dn); >diff --git a/management/univention-directory-listener/src/main.c b/management/univention-directory-listener/src/main.c >index 80accc64b3..4c56c5b15f 100644 >--- a/management/univention-directory-listener/src/main.c >+++ b/management/univention-directory-listener/src/main.c >@@ -587,7 +587,7 @@ int main(int argc, char *argv[]) { > > cache_get_schema_id(&cache_master_entry.schema_id, 0); > >- rv = cache_update_master_entry(&cache_master_entry); >+ rv = cache_update_master_entry(&cache_master_entry, 0); > } > if (rv != 0) > return rv; >diff --git a/management/univention-directory-listener/src/notifier.c b/management/univention-directory-listener/src/notifier.c >index 7bce309c34..0aeab605ac 100644 >--- a/management/univention-directory-listener/src/notifier.c >+++ b/management/univention-directory-listener/src/notifier.c >@@ -239,7 +239,7 @@ int notifier_listen(univention_ldap_parameters_t *lp, bool write_transaction_fil > goto out; > > cache_master_entry.id = id; >- cache_update_master_entry(&cache_master_entry); >+ cache_update_master_entry(&cache_master_entry, 1); > if (cache_set_int("notifier_id", id)) > univention_debug(UV_DEBUG_LISTENER, UV_DEBUG_WARN, "failed to write notifier ID"); > change_free_transaction_op(&trans.cur);
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 47587
:
10207
| 10214