Errata

ZooKeeper

The errata list is a list of errors and their corrections that were found after the product was released. If the error was corrected in a later version or reprint the date of the correction will be displayed in the column titled "Date Corrected".

The following errata were submitted by our customers and approved as valid errors by the author or editor.

Color key: Serious technical mistake Minor technical mistake Language or formatting error Typo Question Note Update

Version Location Description Submitted By Date submitted Date corrected
Printed
Page 127
First code example.

The second argument for zoo_acreate is text string of of the server_id, created by a call to snprintf. The third argument of zoo_acreate is supposed to be the length of the second argument, but it contains sizeof(int), not strlen(server_id_string) (or strtlen(server_id_string) + 1 if you want to store the trailing NUL). Since it is likely that the first 4 characters of the string of the random integer used as server_id will usually be unique, this will almost always work, but it isn't correct. It adds insult to injury that there is even a note that explains this incorrect behavior as passing in the length of an int due to the data being stored being an int.

Peter Aronson  Jan 10, 2016  Jul 08, 2016
Printed
Page 158
4th paragraph

Hi,

This section is regarding the Zookeeper internal leader election mechanism. The example looks good, but the description is misleading.

Here is the original paragraph:
1. Let voteId and voteZxid be the identifier and the zxid in the current vote of the receiver, whereas myZxid and mySid are the values of the receiver itself.
2. if(voteZxid > myZxid) or (voreZxid = myZxid and voteId > mySid), keep the current vote.
3. Otherwise, change my vote by assigning myZxid to voteZxid and mySid to voteZxid.

If I understand correctly, voteId and voteZxid belongs to other ZK server, myZxid and mySid belongs to the ZK server which received voteId and voteZxid. If so, 2 should be:

if(voteZxid "<" myZxid) or (voreZxid = myZxid and voteId "<" mySid), keep the current vote.

Because we want to keep the receiver's vote if the receiver has most up to date data, which means myZxid should be greater than voteZxid.

Thanks,
Kwan

Note from the Author or Editor:
The logic is indeed inverted, and the fix consists of either changing the signs as the reporter suggests or swapping the wording between steps 2 and 3.

Kwan-I Lee  Jan 07, 2016  Jul 08, 2016
Printed
Page 158
4th paragraph

Hi,

This section is regarding the Zookeeper internal leader election mechanism. The example looks good, but the description is misleading.

Here is the original paragraph:
1. Let voteId and voteZxid be the identifier and the zxid in the current vote of the receiver, whereas myZxid and mySid are the values of the receiver itself.
2. if(voteZxid > myZxid) or (voreZxid = myZxid and voteId > mySid), keep the current vote.
3. Otherwise, change my vote by assigning myZxid to voteZxid and mySid to voteZxid.

If I understand correctly, voteId and voteZxid belongs to other ZK server, myZxid and mySid belongs to the ZK server which received voteId and voteZxid. If so, 2 should be:

if(voteZxid "<" myZxid) or (voreZxid = myZxid and voteId "<" mySid), keep the current vote.

Because we want to keep the receiver's vote if the receiver has most up to date data, which means myZxid should be greater than voteZxid.

Thanks,
Kwan

Kwan-I Lee  Jan 07, 2016  Jul 08, 2016
PDF
Page 47
Code example

Code example has some missing statements:

import org.apache.zookeeper.WatchedEvent;
import java.io.IOException;

void startZK() throws IOException {
zk = new ZooKeeper(hostPort, 15000, this);
}

Note from the Author or Editor:
Add both import statements to the code snippet. The order of the imports should be:

import java.io.IOException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;

Gabriel Nicolas Avellaneda  Oct 10, 2015  Jul 08, 2016
Printed
Page 175
United States

At the beginning of 2nd paragraph in Clients section, ClientCnx should be ClientCnxn.

Note from the Author or Editor:
Page 175, Clients section, second paragraph. It should read ClientCnxn.

Pengfei Xuan  Mar 27, 2014  Jul 08, 2016
Printed
Page 213
2nd paragraph

Mentions terminateConnection (twice) but should be terminateSession.

Note from the Author or Editor:
On page 213, in the paragraph that starts with "In contrast...", there are two occurrences of terminateConnection and both occurrences need to be replaced with terminateSession.

Roger Schildmeijer  Feb 04, 2014  Jul 08, 2016
Printed
Page 181
6th paragraph

The last sentence under weight.x=n should be under fsync.warningthresholdms knob.

Note from the Author or Editor:
Move the paragraph that starts with "If the sync system call takes too long..." to after the sentence that starts with "A ZooKeeper server will sync...".

The second paragraph under "fsync.warningthresholdms" should read:

A ZooKeeper server will sync a change to storage before it acknowledges the change. If the sync system call takes too long, system performance can be severely impacted. The server tracks the duration of this call and will issue a warning if it is taking longer than fsync.warningthresholdms. By default, it is 1,000 milliseconds.

Roger Schildmeijer  Feb 04, 2014  Jul 08, 2016
Printed
Page 164
4th paragraph

Weird characters instead of the tick (l�)

Note from the Author or Editor:
There are a couple of incorrect characters in the last paragraph of the page. In my copy of the book, they appear as a square with an X inside. Both occurrences of the character should be replaced with \prime (') so that we have l'.

The solution to fix this was a bit odd. I'll document this here just so that I remember. In two places, this sequence of characters was producing a crossed box: _l&#x2b9;_&#x2009;. I tried a number of things, but the one that worked was to add a space between the end of the italics block and the space special character like this: _l&#x2b9;_ &#x2009;. I also omitted the space to the following word to avoid the additional space in the printed text.

Roger Schildmeijer  Feb 04, 2014  Jul 08, 2016
Printed
Page 98
3rd paragraph

c_1 is mentioned twice. First time it should be c_2

Note from the Author or Editor:
In the second paragraph after Figure 5.2, the third sentence should be "If c_2 is watching ephemeral nodes from c_1, then it will be informed of the death of c_1."

Roger Schildmeijer  Feb 04, 2014  Jul 08, 2016
Printed
Page 162
Figure 9-4

The figure has a legend but the numbers are not in the figure itself.

Note from the Author or Editor:
The description is correct, Figure 9.4 has a legend with numbers, but the numbers aren't in the diagram. The numbers should simply follow the arrows. More specifically, (1) is for the leftmost arrows from S_2 to S_1 and S_3; (2) is for the middle arrows from S_1, S_3 to S_2; (3) is for the rightmost arrows from S_2 to S_1 and S_3.

Roger Schildmeijer  Feb 04, 2014  Jul 08, 2016
Printed
Page 78
1st paragraph

Mentions getWorkerList, should be getWorkers

Note from the Author or Editor:
The description is correct, as per the code snippet, it should be getWorkers in the first sentence of the first paragraph of the page.

Roger Schildmeijer  Feb 04, 2014  Jul 08, 2016
Printed
Page 77
Code listing

In "case CONNECTIONLOSS" you invoke getWorkerList(); should be getWorkers()

Note from the Author or Editor:
In the code snippet of page 77, statement labeled with (2), it should be "getWorkers();".

Roger Schildmeijer  Feb 04, 2014  Jul 08, 2016
Printed, PDF, ePub, Mobi, , Other Digital Version
Page cover
back cover

The last sentence in the second paragraph of the back cover copy should be changed from "and include the information you need to administer this server." to "and include the information you need to administer this service."

Note from the Author or Editor:
We have corrected on both the Amazon and the O'Reilly sites. It should be service instead of server as reported.

Kara Ebrahim  Dec 02, 2013  Jul 08, 2016