Errata

Designing Distributed Systems

Errata for Designing Distributed Systems

Submit your own errata for this product.

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 multiple
multiple

Figure 10-2 is the wrong image, and 9-2 has incorrect labels.

Note from the Author or Editor:
Thank you. These have been fixed for the next release.

Justin Billing  Aug 29, 2018  Dec 14, 2018
?
Section labeled "Hands On: Deploying an Ambassador and Memcache for a Sharded Cache"

Several instances where "memcache" was misspelled "memecache" in Chapter 6

This line:
Save this to a file named memcached-shards.yaml and you can deploy this with kubectl create -f memecached-shards.yaml

Should probably read:
... with kubectl create -f memcached-shards.yaml

Likewise, this line:
You should now have DNS entries for memecache-0.memecache, memecache-1.memcache, etc.

Should probably read:
... for memcache-0.memcache, memcache-1.memcache, etc.

"Memecache" is also mentioned here in the example service config: https://github.com/brendandburns/designing-distributed-systems/blob/master/sharded/memcached-service.yaml#L13

Note from the Author or Editor:
The reporter is correct 'memecache' should be 'memcache' everywhere.

I've fixed this in atlas.

Charles Neill  Oct 24, 2018  Dec 14, 2018
ePub
Page i
1st paragraph

At this point, nearly ever developer

should be

At this point, nearly every developer

Anonymous  Jan 29, 2018  Feb 13, 2018
PDF
Page 15
2nd Code snippet with docker run command

Below command did not execute and threw error. I made change to --address to -addr 0.0.0.0:8080 resolve the issue

docker run --pid=container:${APP_ID} \
-p 8080:8080 \
brendanburns/topz:db0fa58 \
/server --address=0.0.0.0:8080

flag provided but not defined: -address
Usage of /server:
-addr string
The address to serve on (default "localhost:8080")

Following change resolved the issue.

docker run --pid=container:ms -p 8080:8080 brendanburns/topz:db0fa58 /server -addr 0.0.0.0:8080



Note from the Author or Editor:
Confirmed and fixed in the Atlas repo.

Vijay Mateti  Apr 13, 2018  Dec 14, 2018
PDF
Page 22
3rd paragraph

"Once approach is to build all of the sharding logic..."

"Once" should be "One"

Should be "One approach is to build all of the sharding logic..."

Anonymous  Feb 18, 2018  Dec 14, 2018
PDF
Page 24
Bottom

Missing name for configmap, it should be:

`kubectl create configmap twem-config --from-file=./nutcracker.yaml`

Note from the Author or Editor:
Confirmed and fixed in the book's repository.

Fred Hsu  May 14, 2018  Dec 14, 2018
PDF
Page 25
Top

The commands array for the pod should be listed as a string array instead of a YAML array. i.e.:
`command: ["nutcracker", "-c", "/etc/config/nutcracker.yaml", "-v", "7", "-s", "6222"]`

Note from the Author or Editor:
Fixed in the books source repo.

Fred Hsu  May 14, 2018  Dec 14, 2018
PDF
Page 28
Under the 3rd paragraph

Missing configmap name, it should be:

`kubectl create configmap experiment-config --from-file=nginx.conf`

Note from the Author or Editor:
The reporter is correct. I fixed this in the original source for future versions.

Kazuki Suda  Jan 08, 2019 
Printed
Page 96
Code example for compareAndSwap

The compareAndSwap implementation on page 96 appears to be incorrect. There are a few issues:

1. Updating an existing key with non-empty current value will always return false and an error
2. Updating an existing key with empty current value always succeeds
3. Updating a missing key with a non-empty current value will not result in an error
4. Etc...

I think the root cause of all of this, is a missing '!':

```
if _, found := store[key]; found {
```

Should be:

```
if _, found := store[key]; !found {
```

I wonder if this idea could be expressed without some of the Go complexity that may not make sense to non-Go programmers:

```
func compareAndSwap(key, nextValue, currentValue string) (bool, error) {
lock.Lock()
defer lock.Unlock()
v := store[key]
if v == currentValue {
store[key] = nextValue
return true, nil
}
if v == "" {
return false, fmt.Errorf("Expected value %s for key %s, but found empty", currentValue, key)
}
return false, nil
}
```

Not that it matters, but this also covers the case where a key is updated with an empty value.

As a side note, I felt it might be worth noting that though the example is logically relevant, compare-and-swap is typically implemented in hardware?

Thanks for the great read and for the interesting distraction!

Note from the Author or Editor:
The reporter is correct. I fixed the error in the original repository in atlas.

Ryan Armstrong  Aug 29, 2018  Dec 14, 2018
103
Last paragraph

There is "In the first image" but second image does not exist.

Second image will be similar to the image in Figure 9-2 but "owner" in Lockserver should be "shard1.cluster.internal".

Note from the Author or Editor:
Confirmed and fixed in the book's source repo.

Anonymous  May 16, 2018  Dec 14, 2018
PDF,
Page 104
Figure 9-2

3 nodes has the same name "shard1.cluster.internal".
But 2 of them should have the name "shad2.cluster.internal" and "Worker".

Note from the Author or Editor:
Confirmed. There are three boxes on the left of that image.

In order they should read:
"shard1.cluster.internal"
"shard2.cluster.internal"
"worker"

Anonymous  May 16, 2018  Dec 14, 2018
PDF
Page 109-118
Chapter 10

Chapter 10 "Work Queue Systems" has no indexed terms. Is this intentional?

Note from the Author or Editor:
There should be an index, if there isn't one this is indeed an error. I'll work with the O'Reilly folks to see what happened (I didn't write the index it was generated somehow)

Hayato Matsuura  Dec 28, 2018 
PDF
Page 110
First Graph 10-2

I noticed figures 10-2 and 10-3 were exactly the same and Figure 10-2’s descriptions did not align with the actual graph. Please confirm whether Figure 10-2 is correct. The book is extremely helpful for those of us that are trying to construct the most well thought out architectural patterns. Thank for making this book available!

Note from the Author or Editor:
Confirmed, somehow the picture that should have been 10-2 was copied from 10-3...

Anonymous  Mar 11, 2018  Dec 14, 2018
PDF
Page 123
1st Paragraph

4-KB high-resolution instead of 4-K high-resolution.

Note from the Author or Editor:
The reporter is correct. 4-KB should be 4K resolution display.

I fixed this in atlas.

Anonymous  Nov 19, 2018  Dec 14, 2018