]> git.sur5r.net Git - openldap/commitdiff
ITS#5925, allow online glue_sub_attach to be deferred
authorHoward Chu <hyc@openldap.org>
Thu, 5 Feb 2009 21:44:21 +0000 (21:44 +0000)
committerHoward Chu <hyc@openldap.org>
Thu, 5 Feb 2009 21:44:21 +0000 (21:44 +0000)
servers/slapd/backglue.c
servers/slapd/main.c
servers/slapd/proto-slap.h
servers/slapd/slapcommon.c

index 8c98a593009604a9a90b2f2ca26780ee85a686c4..f9f49421f4a5fd9880824285d3424d1969fd4210 100644 (file)
@@ -942,6 +942,14 @@ glue_tool_sync (
        return 0;
 }
 
+typedef struct glue_Addrec {
+       struct glue_Addrec *ga_next;
+       BackendDB *ga_be;
+} glue_Addrec;
+
+/* List of added subordinates */
+static glue_Addrec *ga_list;
+
 static int
 glue_db_init(
        BackendDB *be,
@@ -994,6 +1002,9 @@ glue_db_init(
 
        SLAP_DBFLAGS( be ) |= SLAP_DBFLAG_GLUE_INSTANCE;
 
+       if ( ga_list )
+               glue_sub_attach( 1 );
+
        return 0;
 }
 
@@ -1068,17 +1079,10 @@ glue_sub_del( BackendDB *b0 )
        return rc;
 }
 
-typedef struct glue_Addrec {
-       struct glue_Addrec *ga_next;
-       BackendDB *ga_be;
-} glue_Addrec;
-
-/* List of added subordinates */
-static glue_Addrec *ga_list;
 
 /* Attach all the subordinate backends to their superior */
 int
-glue_sub_attach()
+glue_sub_attach( int online )
 {
        glue_Addrec *ga, *gnext = NULL;
        int rc = 0;
@@ -1127,6 +1131,11 @@ glue_sub_attach()
                if ( !be ) {
                        Debug( LDAP_DEBUG_ANY, "glue: no superior found for sub %s!\n",
                                ga->ga_be->be_suffix[0].bv_val, 0, 0 );
+                       /* allow this for now, assume a superior will
+                        * be added later
+                        */
+                       if ( online )
+                               return 0;
                        rc = LDAP_NO_SUCH_OBJECT;
                }
                ch_free( ga );
@@ -1160,7 +1169,7 @@ glue_sub_add( BackendDB *be, int advert, int online )
        ga_list = ga;
 
        if ( online )
-               rc = glue_sub_attach();
+               rc = glue_sub_attach( online );
 
        return rc;
 }
index 160b8200fb2568ac6f6ebe07932f8e66d0183d4d..fa008ee2cff64d22bd77aa1d9b08ab38746e3e14 100644 (file)
@@ -792,7 +792,7 @@ unhandled_option:;
                }
        }
 
-       if ( glue_sub_attach( ) != 0 ) {
+       if ( glue_sub_attach( ) != 0 ) {
                Debug( LDAP_DEBUG_ANY,
                    "subordinate config error\n",
                    0, 0, 0 );
index 6e8c0fe47c2af8986baf09725a340623539d2c8b..f6a3478c7cb006b97b8f787c0e04bed41afc78e0 100644 (file)
@@ -426,7 +426,7 @@ LDAP_SLAPD_V(BackendInfo) slap_binfo[];
  */
 
 LDAP_SLAPD_F (int) glue_sub_init( void );
-LDAP_SLAPD_F (int) glue_sub_attach( void );
+LDAP_SLAPD_F (int) glue_sub_attach( int online );
 LDAP_SLAPD_F (int) glue_sub_add( BackendDB *be, int advert, int online );
 LDAP_SLAPD_F (int) glue_sub_del( BackendDB *be );
 
index c29b121144fc1329ebeb5c69c66b2e44582025e4..12856633cd015e578e07abb51e80792679107d67 100644 (file)
@@ -564,7 +564,7 @@ slap_tool_init(
        }
 
        if ( use_glue ) {
-               rc = glue_sub_attach();
+               rc = glue_sub_attach( 0 );
 
                if ( rc != 0 ) {
                        fprintf( stderr,