Skip to content

Commit 21914cc

Browse files
committed
Fix seek error thrown when creating read stream in Node 8
Early Node 8 versions have a bug that force a seek upon creation of a read stream. The workaround is to pass the file descriptor directly. See: nodejs/node#19240 Change-Type: patch
1 parent 5e4df74 commit 21914cc

File tree

4 files changed

+45
-3
lines changed

4 files changed

+45
-3
lines changed
File renamed without changes.

Dockerfile.node8.test

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
FROM resin/intel-nuc-node:8
2+
3+
VOLUME /var/lib/docker
4+
5+
RUN apt-get update \
6+
&& apt-get install -y aufs-tools rsync iptables \
7+
&& rm -rf /var/lib/apt/lists/*
8+
9+
ENV DOCKER_VERSION 1.11.2
10+
RUN wget -q -O /tmp/docker-${DOCKER_VERSION}.tgz https://get.docker.com/builds/Linux/x86_64/docker-${DOCKER_VERSION}.tgz \
11+
&& tar xvfz /tmp/docker-${DOCKER_VERSION}.tgz -C /tmp \
12+
&& cp -r /tmp/docker/* /usr/bin/ \
13+
&& rm -rf /tmp/docker \
14+
&& chmod +x /usr/bin/docker*
15+
16+
WORKDIR /usr/src/app
17+
18+
COPY package.json /usr/src/app/
19+
20+
RUN npm install --unsafe-perm && npm cache clean --force
21+
22+
COPY . /usr/src/app
23+
24+
COPY test/services/ /etc/systemd/system/
25+
26+
ENV INITSYSTEM on
27+
28+
RUN systemctl enable docker
29+
CMD docker info

lib/rsync.coffee

+9-1
Original file line numberDiff line numberDiff line change
@@ -43,4 +43,12 @@ exports.createRsyncStream = (src, dest) ->
4343
ps.stderr.pipe(process.stderr)
4444
ps.stdout.pipe(process.stdout)
4545

46-
resolve(fs.createReadStream(pipePath).on('close', cleanup))
46+
# Early Node 8 versions have a bug that force a seek upon creation of
47+
# a read stream. The workaround is to pass the file descriptor directly.
48+
# See: https://github.com/nodejs/node/issues/19240
49+
fs.open pipePath, 'r', (err, fd) ->
50+
if err
51+
cleanup()
52+
reject(err)
53+
else
54+
resolve(fs.createReadStream(undefined, fd: fd).on('close', cleanup))

test.sh

+7-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,12 @@ function cleanup() {
77
}
88
trap cleanup EXIT
99

10-
docker build -f Dockerfile.test -t localhost/docker-delta-test .
10+
docker build -f Dockerfile.node6.test -t localhost/docker-delta-node6-test .
11+
docker run --privileged --name deltatest -d localhost/docker-delta-node6-test
12+
docker exec deltatest bash -c "npm run lint && ./node_modules/.bin/mocha --compilers coffee:coffee-script/register"
13+
1114
cleanup
12-
docker run --privileged --name deltatest -d localhost/docker-delta-test
15+
16+
docker build -f Dockerfile.node8.test -t localhost/docker-delta-node8-test .
17+
docker run --privileged --name deltatest -d localhost/docker-delta-node8-test
1318
docker exec deltatest bash -c "npm run lint && ./node_modules/.bin/mocha --compilers coffee:coffee-script/register"

0 commit comments

Comments
 (0)