You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@zookeeper.apache.org by "ASF GitHub Bot (JIRA)" <ji...@apache.org> on 2018/03/06 13:13:00 UTC
[jira] [Commented] (ZOOKEEPER-2901) Session ID that is negative
causes mis-calculation of Ephemeral Type
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2901?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16387728#comment-16387728 ]
ASF GitHub Bot commented on ZOOKEEPER-2901:
-------------------------------------------
Github user anmolnar commented on a diff in the pull request:
https://github.com/apache/zookeeper/pull/377#discussion_r172509908
--- Diff: src/java/main/org/apache/zookeeper/server/OldEphemeralType.java ---
@@ -0,0 +1,74 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ * <p/>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p/>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.zookeeper.server;
+
+/**
+ * See https://issues.apache.org/jira/browse/ZOOKEEPER-2901
+ *
+ * version 3.5.3 introduced bugs associated with how TTL nodes were implemented. version 3.5.4
+ * fixes the problems but makes TTL nodes created in 3.5.3 invalid. OldEphemeralType is a copy
+ * of the old - bad - implementation that is provided as a workaround. {@link EphemeralType#TTL_3_5_3_EMULATION_PROPERTY}
+ * can be used to emulate support of the badly specified TTL nodes.
+ */
+public enum OldEphemeralType {
+ /**
+ * Not ephemeral
+ */
+ VOID,
+ /**
+ * Standard, pre-3.5.x EPHEMERAL
+ */
+ NORMAL,
+ /**
+ * Container node
+ */
+ CONTAINER,
+ /**
+ * TTL node
+ */
+ TTL;
+
+ public static final long CONTAINER_EPHEMERAL_OWNER = Long.MIN_VALUE;
+ public static final long MAX_TTL = 0x0fffffffffffffffL;
+ public static final long TTL_MASK = 0x8000000000000000L;
+
+ public static OldEphemeralType get(long ephemeralOwner) {
--- End diff --
Makes sense.
I think it would be slightly more accurate to name the old enum to `EphemeralTypeEmu353`.
What do you think?
> Session ID that is negative causes mis-calculation of Ephemeral Type
> --------------------------------------------------------------------
>
> Key: ZOOKEEPER-2901
> URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2901
> Project: ZooKeeper
> Issue Type: Bug
> Components: server
> Affects Versions: 3.5.3
> Environment: Running 3.5.3-beta in Docker container
> Reporter: Mark Johnson
> Assignee: Jordan Zimmerman
> Priority: Blocker
>
> In the code that determines the EphemeralType it is looking at the owner (which is the client ID or connection ID):
> EphemeralType.java:
> public static EphemeralType get(long ephemeralOwner) {
> if (ephemeralOwner == CONTAINER_EPHEMERAL_OWNER) {
> return CONTAINER;
> }
> if (ephemeralOwner < 0) {
> return TTL;
> }
> return (ephemeralOwner == 0) ? VOID : NORMAL;
> }
> However my connection ID is:
> header.getClientId(): -720548323429908480
> This causes the code to think this is a TTL Ephemeral node instead of a
> NORMAL Ephemeral node.
> This also explains why this is random - if my client ID is non-negative
> then the node gets added correctly.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)