[ 
https://issues.apache.org/jira/browse/ZOOKEEPER-4253?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Damon Liu updated ZOOKEEPER-4253:
---------------------------------
    Description: 
App AA connects to ZooKeeper and creates a temporary path such as 
/brokers/ids/10. Another APP BB also connects to ZooKeeper. At some point AA BB 
and ZooKeeper are restarted, and BB allocates AA's old session

before restart:
 AA connect to zookeeper ,and log in zk:
 [2021-03-07 08:47:43,468] INFO [SyncThread:0] Established session 
{color:#ff0000}0x10000053ef90000{color} with negotiated timeout 8000 for client 
/{color:#ff0000}22.20.0.45{color}:59966 
(org.apache.zookeeper.server.ZooKeeperServer)

 

after restart:

BB connect to zookeeper ,and log in zk:

[2021-03-07 08:58:51,351] INFO [SyncThread:0] Established session 
{color:#ff0000}0x10000053ef90000{color} with negotiated timeout 30000 for 
client /{color:#ff0000}22.20.0.47{color}:39360 
(org.apache.zookeeper.server.ZooKeeperServer)

 

I understand that after a restart, ZooKeeper loads old transaction logs and 
snapshot files, and old sessions and temporary paths are loaded. If BB obtains 
the old session 0x10000053ef90000 at this point, the session will not expire 
and the temporary path will not be deleted, causing AA to be unable to 
re-register the temporary path

This is my question. I look forward to your help. Thank you very much!

 

2021/03/17 14:44

I have checked the source code of zookeeper, and the generation of session is 
as follows:
{code:java}
public static long initializeNextSession(long id) {
 long nextSid = 0;
 nextSid = (Time.currentElapsedTime() << 24) >>> 8;
 nextSid = nextSid | (id <<56);
 return nextSid;
}{code}
Id is a fixed value, and the only variable that affects session id is the 
current time. Obviously zookeeper it takes different time to create session 
twice, but why get the same session id?

  was:
App AA connects to ZooKeeper and creates a temporary path such as 
/brokers/ids/10. Another APP BB also connects to ZooKeeper. At some point AA BB 
and ZooKeeper are restarted, and BB allocates AA's old session

before restart:
AA connect to zookeeper ,and log in zk:
[2021-03-07 08:47:43,468] INFO [SyncThread:0] Established session 
{color:#ff0000}0x10000053ef90000{color} with negotiated timeout 8000 for client 
/{color:#ff0000}22.20.0.45{color}:59966 
(org.apache.zookeeper.server.ZooKeeperServer)

 

after restart:

BB connect to zookeeper ,and log in zk:

[2021-03-07 08:58:51,351] INFO [SyncThread:0] Established session 
{color:#ff0000}0x10000053ef90000{color} with negotiated timeout 30000 for 
client /{color:#ff0000}22.20.0.47{color}:39360 
(org.apache.zookeeper.server.ZooKeeperServer)

 

I understand that after a restart, ZooKeeper loads old transaction logs and 
snapshot files, and old sessions and temporary paths are loaded. If BB obtains 
the old session 0x10000053ef90000 at this point, the session will not expire 
and the temporary path will not be deleted, causing AA to be unable to 
re-register the temporary path

This is my question. I look forward to your help. Thank you very much!

 


> I connected to ZooKeeper at different times, but I got the same session ID
> --------------------------------------------------------------------------
>
>                 Key: ZOOKEEPER-4253
>                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-4253
>             Project: ZooKeeper
>          Issue Type: Bug
>          Components: java client
>    Affects Versions: 3.4.13
>            Reporter: Damon Liu
>            Priority: Major
>         Attachments: AA.log, BB.log, zookeeper.log
>
>
> App AA connects to ZooKeeper and creates a temporary path such as 
> /brokers/ids/10. Another APP BB also connects to ZooKeeper. At some point AA 
> BB and ZooKeeper are restarted, and BB allocates AA's old session
> before restart:
>  AA connect to zookeeper ,and log in zk:
>  [2021-03-07 08:47:43,468] INFO [SyncThread:0] Established session 
> {color:#ff0000}0x10000053ef90000{color} with negotiated timeout 8000 for 
> client /{color:#ff0000}22.20.0.45{color}:59966 
> (org.apache.zookeeper.server.ZooKeeperServer)
>  
> after restart:
> BB connect to zookeeper ,and log in zk:
> [2021-03-07 08:58:51,351] INFO [SyncThread:0] Established session 
> {color:#ff0000}0x10000053ef90000{color} with negotiated timeout 30000 for 
> client /{color:#ff0000}22.20.0.47{color}:39360 
> (org.apache.zookeeper.server.ZooKeeperServer)
>  
> I understand that after a restart, ZooKeeper loads old transaction logs and 
> snapshot files, and old sessions and temporary paths are loaded. If BB 
> obtains the old session 0x10000053ef90000 at this point, the session will not 
> expire and the temporary path will not be deleted, causing AA to be unable to 
> re-register the temporary path
> This is my question. I look forward to your help. Thank you very much!
>  
> 2021/03/17 14:44
> I have checked the source code of zookeeper, and the generation of session is 
> as follows:
> {code:java}
> public static long initializeNextSession(long id) {
>  long nextSid = 0;
>  nextSid = (Time.currentElapsedTime() << 24) >>> 8;
>  nextSid = nextSid | (id <<56);
>  return nextSid;
> }{code}
> Id is a fixed value, and the only variable that affects session id is the 
> current time. Obviously zookeeper it takes different time to create session 
> twice, but why get the same session id?



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to