Environment
Novell ZENworks 10 Configuration Management
Situation
Randomly, primary ZENworks server fails to deliver user assignments due to disconnected LDAP connection.
ERROR (in services-messages.log ):
[DEBUG] [11/10/10 9:54:47 AM] [] [Assignment Web Service] [] [com.novell.zenworks.datamodel.exceptions.AuthoritativeSourceConnectionException: javax.naming.CommunicationException: connection closed [[Root exception is java.io.IOException: connection closed]]; remaining name ''
at com.novell.zenworks.datamodel.utils.ldap.LDAPUtil.handleSearchException(LDAPUtil.java:1298)
at com.novell.zenworks.datamodel.session.jndi.ldap.LdapAuthoritativeSourceSession.search(LdapAuthoritativeSourceSession.java:1665)
at com.novell.zenworks.datamodel.session.jndi.ldap.LdapAuthoritativeSourceSession.searchForObject(LdapAuthoritativeSourceSession.java:1521)
at com.novell.zenworks.datamodel.session.jndi.ldap.LdapAuthoritativeSourceSession.searchForObject(LdapAuthoritativeSourceSession.java:1436)
at com.novell.zenworks.datamodel.session.jndi.ldap.LdapAuthoritativeSourceSession.getBasicObject(LdapAuthoritativeSourceSession.java:873)
at com.novell.zenworks.datamodel.services.authsources.AuthoritativeSourceServiceImpl.getBasicObject(AuthoritativeSourceServiceImpl.java:215)
at com.novell.zenworks.datamodel.services.users.UserAdminImpl.getBasicObject(UserAdminImpl.java:269)
at com.novell.zenworks.datamodel.services.effectiveassignments.EffectiveAssignmentCache.getBasicObject(EffectiveAssignmentCache.java:205)
at com.novell.zenworks.datamodel.services.effectiveassignments.EffectiveAssignmentCache.getBasicObject(EffectiveAssignmentCache.java:182)
at com.novell.zenworks.datamodel.services.effectiveassignments.ConsumerObjectWrapper.<init>(ConsumerObjectWrapper.java:89)
at com.novell.zenworks.datamodel.services.effectiveassignments.EffectiveAssignmentCache.getConsumerObjectWrapper(EffectiveAssignmentCache.java:342)
at com.novell.zenworks.datamodel.services.effectiveassignments.EffectiveAssignmentCalculator.getAllAssignments(EffectiveAssignmentCalculator.java:329)
at com.novell.zenworks.datamodel.services.effectiveassignments.EffectiveAssignmentCalculator.getAllAssignments(EffectiveAssignmentCalculator.java:320)
at com.novell.zenworks.datamodel.services.effectiveassignments.EffectiveAssignmentCalculator.getAllEffectiveAssignments(EffectiveAssignmentCalculator.java:194)
at com.novell.zenworks.webservice.assignmentservice.AssignmentWebService.getAllAssignments(AssignmentWebService.java:231)
at com.novell.zenworks.webservice.assignmentservice.AssignmentWebService.getEffectiveAssignments(AssignmentWebService.java:108)
at com.novell.zenworks.assignment.schema.AssignmentService_ServiceTieSkeleton.getEffectiveAssignments(AssignmentService_ServiceTieSkeleton.java:41)
at com.novell.zenworks.assignment.schema.AssignmentService_ServiceSkeleton._invoke(AssignmentService_ServiceSkeleton.java:153)
at com.novell.soa.ws.server.ServletSkeleton.invokeEndPoint(ServletSkeleton.java:201)
at com.novell.soa.ws.impl.soap.MessageHandlerInvoker.invokeServerMessageHandlers(MessageHandlerInvoker.java:347)
at com.novell.soa.ws.impl.soap.SOAPHandler.handleServerRequest(SOAPHandler.java:85)
at com.novell.soa.ws.impl.rpc.ServerDelegateImpl.handleServerRequest(ServerDelegateImpl.java:92)
at com.novell.soa.ws.server.ServletSkeleton.handleRequest(ServletSkeleton.java:101)
at com.novell.soa.ws.server.ServletSkeleton.doPost(ServletSkeleton.java:300)
at com.novell.zenworks.webservice.assignmentservice.AssignmentServiceImpl.doPost(AssignmentServiceImpl.java:54)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at com.novell.zenworks.webservice.lib.AuthenticationFilter.doFilter(AuthenticationFilter.java:176)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at com.novell.zenworks.webservice.lib.StatisticFilter.doFilter(StatisticFilter.java:77)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at com.novell.zenworks.tomcat.ZENRequestValve.invoke(ZENRequestValve.java:1196)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
at java.lang.Thread.run(Thread.java:595)
Caused by: javax.naming.CommunicationException: connection closed [[Root exception is java.io.IOException: connection closed]]; remaining name ''
at com.sun.jndi.ldap.LdapCtx.doSearch(LdapCtx.java:1986)
at com.sun.jndi.ldap.LdapCtx.searchAux(LdapCtx.java:1830)
at com.sun.jndi.ldap.LdapCtx.c_search(LdapCtx.java:1755)
at com.sun.jndi.toolkit.ctx.ComponentDirContext.p_search(ComponentDirContext.java:368)
at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.search(PartialCompositeDirContext.java:338)
at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.search(PartialCompositeDirContext.java:321)
at com.novell.zenworks.datamodel.session.jndi.ldap.NamingEnumerationPart.<init>(NamingEnumerationPart.java:115)
at com.novell.zenworks.datamodel.session.jndi.ldap.NamingEnumerationPart.<init>(NamingEnumerationPart.java:171)
at com.novell.zenworks.datamodel.session.jndi.ldap.LdapAuthoritativeSourceSession.search(LdapAuthoritativeSourceSession.java:1643)
... 46 more
Caused by: java.io.IOException: connection closed
at com.sun.jndi.ldap.LdapClient.ensureOpen(LdapClient.java:1559)
at com.sun.jndi.ldap.LdapClient.search(LdapClient.java:505)
at com.sun.jndi.ldap.LdapCtx.doSearch(LdapCtx.java:1968)
at com.novell.zenworks.datamodel.utils.ldap.LDAPUtil.handleSearchException(LDAPUtil.java:1298)
at com.novell.zenworks.datamodel.session.jndi.ldap.LdapAuthoritativeSourceSession.search(LdapAuthoritativeSourceSession.java:1665)
at com.novell.zenworks.datamodel.session.jndi.ldap.LdapAuthoritativeSourceSession.searchForObject(LdapAuthoritativeSourceSession.java:1521)
at com.novell.zenworks.datamodel.session.jndi.ldap.LdapAuthoritativeSourceSession.searchForObject(LdapAuthoritativeSourceSession.java:1436)
at com.novell.zenworks.datamodel.session.jndi.ldap.LdapAuthoritativeSourceSession.getBasicObject(LdapAuthoritativeSourceSession.java:873)
at com.novell.zenworks.datamodel.services.authsources.AuthoritativeSourceServiceImpl.getBasicObject(AuthoritativeSourceServiceImpl.java:215)
at com.novell.zenworks.datamodel.services.users.UserAdminImpl.getBasicObject(UserAdminImpl.java:269)
at com.novell.zenworks.datamodel.services.effectiveassignments.EffectiveAssignmentCache.getBasicObject(EffectiveAssignmentCache.java:205)
at com.novell.zenworks.datamodel.services.effectiveassignments.EffectiveAssignmentCache.getBasicObject(EffectiveAssignmentCache.java:182)
at com.novell.zenworks.datamodel.services.effectiveassignments.ConsumerObjectWrapper.<init>(ConsumerObjectWrapper.java:89)
at com.novell.zenworks.datamodel.services.effectiveassignments.EffectiveAssignmentCache.getConsumerObjectWrapper(EffectiveAssignmentCache.java:342)
at com.novell.zenworks.datamodel.services.effectiveassignments.EffectiveAssignmentCalculator.getAllAssignments(EffectiveAssignmentCalculator.java:329)
at com.novell.zenworks.datamodel.services.effectiveassignments.EffectiveAssignmentCalculator.getAllAssignments(EffectiveAssignmentCalculator.java:320)
at com.novell.zenworks.datamodel.services.effectiveassignments.EffectiveAssignmentCalculator.getAllEffectiveAssignments(EffectiveAssignmentCalculator.java:194)
at com.novell.zenworks.webservice.assignmentservice.AssignmentWebService.getAllAssignments(AssignmentWebService.java:231)
at com.novell.zenworks.webservice.assignmentservice.AssignmentWebService.getEffectiveAssignments(AssignmentWebService.java:108)
at com.novell.zenworks.assignment.schema.AssignmentService_ServiceTieSkeleton.getEffectiveAssignments(AssignmentService_ServiceTieSkeleton.java:41)
at com.novell.zenworks.assignment.schema.AssignmentService_ServiceSkeleton._invoke(AssignmentService_ServiceSkeleton.java:153)
at com.novell.soa.ws.server.ServletSkeleton.invokeEndPoint(ServletSkeleton.java:201)
at com.novell.soa.ws.impl.soap.MessageHandlerInvoker.invokeServerMessageHandlers(MessageHandlerInvoker.java:347)
at com.novell.soa.ws.impl.soap.SOAPHandler.handleServerRequest(SOAPHandler.java:85)
at com.novell.soa.ws.impl.rpc.ServerDelegateImpl.handleServerRequest(ServerDelegateImpl.java:92)
at com.novell.soa.ws.server.ServletSkeleton.handleRequest(ServletSkeleton.java:101)
at com.novell.soa.ws.server.ServletSkeleton.doPost(ServletSkeleton.java:300)
at com.novell.zenworks.webservice.assignmentservice.AssignmentServiceImpl.doPost(AssignmentServiceImpl.java:54)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at com.novell.zenworks.webservice.lib.AuthenticationFilter.doFilter(AuthenticationFilter.java:176)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at com.novell.zenworks.webservice.lib.StatisticFilter.doFilter(StatisticFilter.java:77)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at com.novell.zenworks.tomcat.ZENRequestValve.invoke(ZENRequestValve.java:1196)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
at java.lang.Thread.run(Thread.java:595)
Caused by: javax.naming.CommunicationException: connection closed [[Root exception is java.io.IOException: connection closed]]; remaining name ''
at com.sun.jndi.ldap.LdapCtx.doSearch(LdapCtx.java:1986)
at com.sun.jndi.ldap.LdapCtx.searchAux(LdapCtx.java:1830)
at com.sun.jndi.ldap.LdapCtx.c_search(LdapCtx.java:1755)
at com.sun.jndi.toolkit.ctx.ComponentDirContext.p_search(ComponentDirContext.java:368)
at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.search(PartialCompositeDirContext.java:338)
at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.search(PartialCompositeDirContext.java:321)
at com.novell.zenworks.datamodel.session.jndi.ldap.NamingEnumerationPart.<init>(NamingEnumerationPart.java:115)
at com.novell.zenworks.datamodel.session.jndi.ldap.NamingEnumerationPart.<init>(NamingEnumerationPart.java:171)
at com.novell.zenworks.datamodel.session.jndi.ldap.LdapAuthoritativeSourceSession.search(LdapAuthoritativeSourceSession.java:1643)
... 46 more
Caused by: java.io.IOException: connection closed
at com.sun.jndi.ldap.LdapClient.ensureOpen(LdapClient.java:1559)
at com.sun.jndi.ldap.LdapClient.search(LdapClient.java:505)
at com.sun.jndi.ldap.LdapCtx.doSearch(LdapCtx.java:1968)
... 54 more
Resolution
This is fixed in version 11.3 - see KB 7014213 "ZENworks Configuration Management 11.3 - update information and list of fixes", which can be found at https://support.microfocus.com/kb/doc.php?id=7014213
Workaround for prior versions:
For ZENworks 10.3.2 to 11.2.4, when using more than one usersource connection, backup to another directory then modify the following file to set round robin to true:
zenworks_home\conf\datamodel\authsource\authsourceconfig.xml (Linux: /etc/opt/novell/zenworks/datamodel/authsource/authsourceconfig.xml
<AuthSourceConfig>
<DoConnectionRoundRobin>true</DoConnectionRoundRobin>
</AuthSourceConfig>
Additionally:
back up to another directory then modify zenworks_home\conf\datamodel\caching\administration\caching-authsources.xml (Linux: /etc/opt/novell/zenworks/datamodel/caching/administration/caching-authsources.xml)
change timeToIdleSeconds="600" and timeToLiveSeconds="600" to some value between 5 and 10 seconds. Do this for both sections:
<!-- Configures how long to wait before retrying -->
and
<!-- Cache of authoritative sources that don't appear to be up -->
<!-- Configures how long to wait before retrying -->
<!-- Cache of authoritative sources that don't appear to be up -->
<!-- Configures how long to wait before retrying -->
NOTE: the times used here will govern how quickly group member assignments will be seen after the user is added to the group.
If that helps, try decreasing by one hour per test until the best value is found.