[ 
https://issues.apache.org/jira/browse/ZOOKEEPER-4885?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17898169#comment-17898169
 ] 

Xin Chen edited comment on ZOOKEEPER-4885 at 11/14/24 9:08 AM:
---------------------------------------------------------------

2.        Also, {*}there is another real scenario in the production 
environment{*}:

Another zk client of Hive is responsible for establishing persistent nodes. Due 
to abnormal Kereros interaction during creation, a non SASL authenticated 
Zookeeper client was obtained, It may report an error when creating SASL Znode:
{code:java}
org.apache.zookeeper.KeeperException.NoAuthException
org.apache.zookeeper.KeeperException.InvalidACLException
org.apache.zookeeper.KeeperException.AuthFailedException{code}
Similarly, after the recovery of kerberos, using this client to continuously 
create znodes also results in continuous error messages. So the solution 
provided is to *consider actively rebuilding a client in the user code every 
time these three exceptions are encountered.*
{code:java}
// user code demo 

try {
                createZNode(zookeeperClient, c);
            } catch (Exception e) {
                e.printStackTrace();
                c++;
                if (e instanceof 
org.apache.zookeeper.KeeperException.AuthFailedException || e instanceof 
org.apache.zookeeper.KeeperException.NoAuthException || e instanceof 
org.apache.zookeeper.KeeperException.InvalidACLException) {
                    System.out.println("Warn: zkclient need construct, state: " 
+ zooKeeper.getState() + " zkException: " + e.getClass());                      
                                
                    zooKeeperClient.close();
                    Thread.sleep(5000);
// Proactively rebuild client objects       
                zooKeeper = new ZooKeeper("localhost:2181", 120000, new 
ZkClientKerberos()); 
                } else {
                    throw e; // Other exceptions are thrown directly            
     }{code}
 

 

 


was (Author: JIRAUSER298666):
2.        Also, {*}there is another real scenario in the production 
environment{*}:

Another zk client of Hive is responsible for establishing persistent nodes. Due 
to abnormal Kereros interaction during creation, a non SASL authenticated 
Zookeeper client was obtained, It may report an error when creating SASL Znode:
{code:java}
org.apache.zookeeper.KeeperException.NoAuthException
org.apache.zookeeper.KeeperException.InvalidACLException
org.apache.zookeeper.KeeperException.AuthFailedException{code}
Similarly, after the recovery of kerberos, using this client to continuously 
create znodes also results in continuous error messages. So the solution 
provided is to *consider actively rebuilding a client in the user code every 
time these three exceptions are encountered.*
{code:java}
// user code demo 

try {
                createZNode(zookeeperClient, c);
            } catch (Exception e) {
                e.printStackTrace();
                c++;
                if (e instanceof 
org.apache.zookeeper.KeeperException.AuthFailedException || e instanceof 
org.apache.zookeeper.KeeperException.NoAuthException || e instanceof 
org.apache.zookeeper.KeeperException.InvalidACLException) {
                    System.out.println("Warn: zkclient need construct, state: " 
+ zooKeeper.getState()
                            + " zkException: " + e.getClass());                 
                     zooKeeperClient.close();
                    Thread.sleep(5000);
// Proactively rebuild client objects       
                zooKeeper = new ZooKeeper("localhost:2181", 120000, new 
ZkClientKerberos()); 
                } else {
                    throw e; // Other exceptions are thrown directly            
     }{code}
 

 

 

> Can Non-SASL-Clients automatically recover with the recovery of kerberos 
> communication?
> ---------------------------------------------------------------------------------------
>
>                 Key: ZOOKEEPER-4885
>                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-4885
>             Project: ZooKeeper
>          Issue Type: Improvement
>    Affects Versions: 3.4.14, 3.6.4, 3.9.3
>            Reporter: Xin Chen
>            Priority: Major
>
> About  ZOOKEEPER-2139 & ZOOKEEPER-2323, it just avoids ZooKeeper clients into 
> infinite AuthFailedException. Noauth Exception still exists! 
> LoginException was thrown through each login, but at this point, a zkclient 
> without Kerberos SASL authentication was created. Non SASL Znodes can be 
> operated on in the future. However, when Kerberos recovers from network 
> disconnections and other anomalies, the previously created zkclient without 
> SASL authentication is still being used without rebuilding the login or 
> recreating a saslclient. If it is used to operate on ACL Znodes at this time, 
> an error will always be reported: 
> {code:java}
> KeeperErrorCode = NoAuth for /zookeeper
> or
> KeeperErrorCode = AuthFailed for /zookeeper
> or
> KeeperErrorCode = InvalidACL for /zookeeper{code}
> Isn't this a question that should be considered?  And I also met this issue 
> in ZK-3.6.4,It seems that this issue has not been considered in the updated 
> version. 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to