Index: src/cache.h =================================================================== --- src/cache.h (Revision 78503) +++ src/cache.h (Arbeitskopie) @@ -42,12 +42,6 @@ extern char *cache_dir; extern char *ldap_dir; -typedef struct _CacheMasterEntry { - NotifierID id; - NotifierID schema_id; -} CacheMasterEntry; -extern CacheMasterEntry cache_master_entry; - int cache_lock(void); int cache_init(char *cache_mdb_dir, int mdb_flags); void cache_sync(void); Index: src/cache_bdb.c =================================================================== --- src/cache_bdb.c (Revision 78503) +++ src/cache_bdb.c (Arbeitskopie) @@ -89,7 +89,7 @@ char *bdb_cache_dir = "/var/lib/univention-directory-listener"; char *bdb_ldap_dir = "/var/lib/univention-ldap"; -BdbCacheMasterEntry bdb_cache_master_entry; +CacheMasterEntry cache_master_entry; DB *dbp; #ifdef WITH_DB42 @@ -278,7 +278,7 @@ return fclose(fp) || (rv != 1); } -int bdb_cache_get_master_entry(BdbCacheMasterEntry *master_entry) { +int bdb_cache_get_master_entry(CacheMasterEntry *master_entry) { DBT key, data; int rv; @@ -297,18 +297,18 @@ return rv; } - if (data.size != sizeof(BdbCacheMasterEntry)) { + if (data.size != sizeof(CacheMasterEntry)) { univention_debug(UV_DEBUG_LISTENER, UV_DEBUG_ERROR, "master entry has unexpected length"); return 1; } - memcpy(master_entry, data.data, sizeof(BdbCacheMasterEntry)); + memcpy(master_entry, data.data, sizeof(CacheMasterEntry)); free(data.data); return 0; } -int bdb_cache_update_master_entry(BdbCacheMasterEntry *master_entry, DB_TXN *dbtxnp) { +int bdb_cache_update_master_entry(CacheMasterEntry *master_entry, DB_TXN *dbtxnp) { DBT key, data; int rv; int flags; @@ -320,7 +320,7 @@ key.size = MASTER_KEY_SIZE; data.data = (void *)master_entry; - data.size = sizeof(BdbCacheMasterEntry); + data.size = sizeof(CacheMasterEntry); #ifdef WITH_DB42 if (dbtxnp == NULL) @@ -343,7 +343,7 @@ DB_TXN *bdb_cache_new_transaction(NotifierID id, char *dn) { #ifdef WITH_DB42 DB_TXN *dbtxnp; - BdbCacheMasterEntry master_entry; + CacheMasterEntry master_entry; NotifierID *old_id; dbenvp->txn_begin(dbenvp, NULL, &dbtxnp, 0); Index: src/cache_bdb.h =================================================================== --- src/cache_bdb.h (Revision 78503) +++ src/cache_bdb.h (Arbeitskopie) @@ -41,17 +41,11 @@ extern char *bdb_cache_dir; extern char *bdb_ldap_dir; -typedef struct _BdbCacheMasterEntry { - NotifierID id; - NotifierID schema_id; -} BdbCacheMasterEntry; -extern BdbCacheMasterEntry bdb_cache_master_entry; - int bdb_cache_lock(void); int bdb_cache_init(void); void bdb_cache_sync(void); -int bdb_cache_get_master_entry(BdbCacheMasterEntry *master_entry); -int bdb_cache_update_master_entry(BdbCacheMasterEntry *master_entry, DB_TXN *dptxnp); +int bdb_cache_get_master_entry(CacheMasterEntry *master_entry); +int bdb_cache_update_master_entry(CacheMasterEntry *master_entry, DB_TXN *dptxnp); int bdb_cache_update_entry(NotifierID id, char *dn, CacheEntry *entry); int bdb_cache_update_entry_lower(NotifierID id, char *dn, CacheEntry *entry); int bdb_cache_delete_entry(NotifierID id, char *dn); Index: src/cache_entry.h =================================================================== --- src/cache_entry.h (Revision 78503) +++ src/cache_entry.h (Arbeitskopie) @@ -40,6 +40,12 @@ #include "network.h" +typedef struct _CacheMasterEntry { + NotifierID id; + NotifierID schema_id; +} CacheMasterEntry; +extern CacheMasterEntry cache_master_entry; + struct _CacheEntryAttribute { char *name; char **values; Index: src/convert.c =================================================================== --- src/convert.c (Revision 78503) +++ src/convert.c (Arbeitskopie) @@ -120,6 +120,7 @@ if (bdb_cache_init() != 0) exit(1); + printf("Converting listener cache to LMDB\n"); rv = snprintf(cache_mdb_dir, PATH_MAX, "%s/cache", cache_dir); if (rv < 0 || rv >= PATH_MAX) abort(); @@ -126,7 +127,21 @@ if (cache_init(cache_mdb_dir, 0) != 0) exit(1); - bdb_cache_get_master_entry(&bdb_cache_master_entry); + rv = bdb_cache_get_master_entry(&cache_master_entry); + if (rv) { + printf("notifier_id not found in BDB cache, falling back to notifier_id file\n"); + cache_get_int("notifier_id", &cache_master_entry.id, -1); + if (cache_master_entry.id == -1) { + univention_debug(UV_DEBUG_LISTENER, UV_DEBUG_ERROR, "cannot determine current ID"); + univention_debug(UV_DEBUG_LISTENER, UV_DEBUG_ERROR, "Aborting conversion"); + return 1; + } + + printf("schema_id not found in BDB cache, falling back to schema/id/id file\n"); + cache_get_schema_id(&cache_master_entry.schema_id, 0); + } + printf("cached notifier_id:\t%ld\n", cache_master_entry.id); + printf("cached schema_id:\t%ld\n", cache_master_entry.schema_id); rv = cache_update_master_entry(&cache_master_entry); for (rv = bdb_cache_first_entry(&cur, &dn, &entry); rv != DB_NOTFOUND; rv = bdb_cache_next_entry(&cur, &dn, &entry)) {