hyperdrive icon indicating copy to clipboard operation
hyperdrive copied to clipboard

Checkout TypeError: Cannot read property 'download' of null

Open eu1444 opened this issue 6 years ago • 3 comments

I am reporting:

  • [x] a bug or unexpected behavior
  • [ ] general feedback
  • [ ] feature request
  • [ ] security issue

Bug Report

Please give us details about your installation to assist you. Run dat -v to see the version of Dat you are using.

  • Operating system: Debian GNU/Linux 9 (stretch) 64-bit
  • Node Version: v8.7.0
  • dat-node Version: 3.5.12

Expected behavior

I have a gist (https://gist.github.com/mistersdevelopment/4dcb5d98efbe3f48233d08bc0254c7be) that generates a Dat server/client pair. The server Dat has one file making its version 1. The client Dat's archive performs a checkout of the server at version 1. I expect the client Dat's archive to now be a read only copy of the server at version 1.

Actual behavior

As the logs below show the checkout operation fails with "TypeError: Cannot read property 'download' of null".

Debug Logs

DEBUG=dat* node dat-checkout.js
  dat-node archive ready. version: 0 +0ms
  dat-node importFiles() { watch: true,
  dereference: true,
  count: true,
  indexing: true,
  ignore: [Function: ignore] } +0ms
  dat-node IMPORT ignore: / +63ms
  dat-node IMPORT ignore: /.dat +1ms
  dat-node IMPORT ignore: /.dat/content.bitfield +3ms
  dat-node IMPORT ignore: /.dat/content.key +0ms
  dat-node IMPORT ignore: /.dat/content.signatures +1ms
  dat-node IMPORT ignore: /.dat/content.tree +0ms
  dat-node IMPORT ignore: /.dat/metadata.bitfield +0ms
  dat-node IMPORT ignore: /.dat/metadata.data +0ms
  dat-node IMPORT ignore: /.dat/metadata.key +0ms
  dat-node IMPORT ignore: /.dat/metadata.ogd +1ms
  dat-node IMPORT ignore: /.dat/metadata.signatures +0ms
  dat-node IMPORT ignore: /.dat/metadata.tree +0ms
  dat-node IMPORT put: /test-0.txt +1ms
dat-server - {
  "files": 1,
  "byteLength": 13,
  "length": 1,
  "version": 1
}
  dat-node IMPORT ignore: /.dat/content.signatures +16ms
  dat-node IMPORT ignore: /.dat/content.tree +0ms
  dat-node IMPORT ignore: /.dat/content.bitfield +0ms
  dat-node IMPORT ignore: /.dat/metadata.data +1ms
  dat-node IMPORT ignore: /.dat/metadata.signatures +0ms
  dat-node IMPORT ignore: /.dat/metadata.tree +0ms
  dat-node IMPORT ignore: /.dat/metadata.bitfield +0ms
Created Dat "d752e62e7447ffc324afbaaf593e38fe9a89e8b8bdb866cf913dcb72adc5d3db" with storage "dat-server".
  dat-node archive ready. version: 0 +8s
  dat-node Stream close +0ms
  dat-node Stream close +1ms
dat-client - undefined
dat-client - {
  "files": 1,
  "byteLength": 13,
  "length": 1,
  "version": 1,
  "downloaded": 0
}
dat-client - undefined
  dat-network Downloaded data: 109 +0ms
  dat-network Uploaded data: 109 +95ms
  dat-network Downloaded data: 109 +405ms
  dat-network Uploaded data: 109 +95ms
  dat-network Downloaded data: 109 +406ms
  dat-network Uploaded data: 109 +95ms
  dat-network Downloaded data: 109 +406ms
  dat-network Uploaded data: 109 +95ms
  dat-network Downloaded data: 109 +405ms
  dat-network Uploaded data: 109 +96ms
  dat-network Downloaded data: 109 +405ms
  dat-network Uploaded data: 109 +95ms
  dat-network Downloaded data: 109 +406ms
  dat-network Uploaded data: 109 +96ms
  dat-network Downloaded data: 109 +404ms
  dat-network Uploaded data: 109 +97ms
  dat-network Downloaded data: 109 +404ms
  dat-network Uploaded data: 109 +97ms
  dat-network Downloaded data: 109 +404ms
  dat-node Stream close +5s
  dat-node Stream close +8ms
  dat-network Uploaded data: 109 +97ms
  dat-network Downloaded data: 109 +404ms
  dat-network Uploaded data: 109 +97ms
  dat-network Downloaded data: 109 +404ms
  dat-network Uploaded data: 109 +97ms
  dat-network Downloaded data: 109 +404ms
  dat-network Uploaded data: 109 +97ms
  dat-network Downloaded data: 109 +404ms
  dat-network Uploaded data: 109 +97ms
  dat-network Downloaded data: 109 +404ms
  dat-network Uploaded data: 109 +97ms
  dat-network Downloaded data: 109 +403ms
  dat-network Uploaded data: 109 +98ms
  dat-network Downloaded data: 109 +403ms
  dat-network Uploaded data: 109 +98ms
  dat-network Downloaded data: 109 +402ms
Created Dat "d752e62e7447ffc324afbaaf593e38fe9a89e8b8bdb866cf913dcb72adc5d3db" with storage "dat-client".
dat-checkout/node_modules/hyperdrive/index.js:368
    self.content.download({start, end}, function () {
                 ^

TypeError: Cannot read property 'download' of null
    at downloadFile (dat-checkout/node_modules/hyperdrive/index.js:368:18)
    at dat-checkout/node_modules/hyperdrive/index.js:345:33
    at dat-checkout/node_modules/hyperdrive/index.js:701:5
    at Tree._get (dat-checkout/node_modules/append-tree/index.js:299:12)
    at dat-checkout/node_modules/append-tree/index.js:164:10
    at _combinedTickCallback (internal/process/next_tick.js:141:11)
    at process._tickCallback (internal/process/next_tick.js:180:9)

eu1444 avatar Aug 27 '18 19:08 eu1444

After talking with @joehand it looks like the issue is that I wasn't waiting for the 'content' event to be emitted from the archive. The README.md might need to be updated to reflect this. The documentation shows calling archive.checkout(version).download() as the way to download a checked out archive but given the errors I encountered this is not correct.

eu1444 avatar Aug 28 '18 14:08 eu1444

Were you able to resolve this @mistersdevelopment? If so, would you mind sharing your code so the documentation could be updated?

I'm struggling with the version downloads atm too.

chartgerink avatar Apr 02 '19 10:04 chartgerink

Hey @chartgerink, I believe waiting for the content event (https://github.com/mafintosh/hyperdrive/blob/master/index.js#L127) helped but I can't find any documentation of that in the test scripts I kept around so I don't have any code to share. Sorry about that.

eu1444 avatar Apr 09 '19 18:04 eu1444