Skip to content
This repository has been archived by the owner on Oct 30, 2018. It is now read-only.

Isomorphic BridgeClient #628

Merged

Conversation

retrohacker
Copy link
Contributor

Supersedes:
#626 and #627

retrohacker and others added 3 commits January 19, 2017 12:20
@coveralls
Copy link

Coverage Status

Coverage decreased (-1.2%) to 98.81% when pulling a9e6640 on retrohacker:isomorphic-bridge-client into 0bf62e2 on Storj:master.

@coveralls
Copy link

Coverage Status

Coverage decreased (-1.07%) to 98.932% when pulling fe1ff6f on retrohacker:isomorphic-bridge-client into 0bf62e2 on Storj:master.

@retrohacker retrohacker changed the title Isomorphic bridge client [WIP] Isomorphic BridgeClient Jan 19, 2017
@retrohacker
Copy link
Contributor Author

This PR has several changes wound up into one.

  • bridge-client/blacklist
    • Library is now implemented using abstract-blob-store, allowing the blacklist object to be persisted to any datastore.
    • API Change: blacklist now expects a blobstore. This should be fine since the module appears to be internal to BridgeClient.
    • API Change: Since we are persisting to generic datastores, we can't use *Sync functions, requiring the blacklist API to break the event loop. Many of the methods were converted to error-first callbacks.
    • Blacklist is lazy loaded to avoid making the constructor async. This allows us to keep backwards compatibility.
  • bridge-client
    • Library is now implemented using abstract-blob-store.
    • Library now accepts either a readable stream or a path to a file, supporting backwards compatibility with the old API.
    • fileSize is computed upfront by consuming the entire stream and persisting it to a temporary entry in the blob store.

@retrohacker
Copy link
Contributor Author

@dylanlott is finishing up some of the changes to bride-client/index.js connecting the temporary blob through the demuxer and into the farmer.

@coveralls
Copy link

Coverage Status

Coverage decreased (-0.5%) to 99.451% when pulling ee3cc5b on retrohacker:isomorphic-bridge-client into 0bf62e2 on Storj:master.

// Cleanup stale references and return the file
return cb(null, self._reap(self.blacklist));
});
rs.pipe(cs);
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we need to handle an error on cs?

* @param {String} [options.blacklistFolder] - The folder that blacklist
* entries will be persisted to if using the default fs-store
* @param {Object} [options.store] - The store that blacklist enteries will be
* persisted to if using the default fs-store
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Documentation is borked after merge.

'Supplied store must implement abstract-blob-store');

assert.ok(typeof options.store.createReadStream === 'function',
'Supplied store must implement abstract-blob-store');
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We also need to check for .exists() which will be used in UploadState.cleanup

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Resolved

}

if (file instanceof Readable) {
var ws = self._store.createWriteStream(fileName);
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we need to handle the error event on ws?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Resolved :-)

@@ -493,27 +580,28 @@ BridgeClient.prototype._shardUploadWorker = function(task, done) {
* @param {Object} frame - Frame object returned from bridge
* @param {UploadState} state - The upload state machine
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We need to update the method signatures to match the new options object.

//turn filePath into a readable Stream
if (typeof filePath === 'string') {
options.fileSize = fs.statSync(filePath).size;
filePath = fs.createReadStream(filePath);
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We need to handle errors on filePath if we weren't passed a store.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we are passed a store, the user should be handling errors.

package.json Outdated
@@ -16,7 +16,7 @@
"build": "./node_modules/.bin/browserify index.js -s storj -o dist/storj.browser.js",
"make-docs": "mkdir -p ./jsdoc && rm -r ./jsdoc && ./node_modules/.bin/jsdoc index.js lib -r -R README.md -u ./doc -c .jsdoc.json --verbose -d ./jsdoc && cp -r doc/assets jsdoc/assets",
"publish-docs": "npm run make-docs && node script/publishdoc.js"
},
},
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Extra whitespace

Copy link
Contributor

@tacticalchihuahua tacticalchihuahua left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Preliminary review shows many style guide inconsistencies. Be sure to have read https://github.com/Storj/core/blob/master/CONTRIBUTING.md#style-guide and follow it.

* @param {Object} options.logger - Logger instance
* @param {Object} options.store - The store that blacklist enteries will be
* persisted to. This object must be compatible with the API of
* [abstract-blob-store](https://github.com/maxogden/abstract-blob-store)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For links in JSDoc comments, use {@link https://github.com/maxogden/abstract-blob-store|abstract-blob-store} to render it properly on the docs sits.

var self = this;

// If we already have a blacklist, return it
if(self.blacklist !== undefined) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Keep consistent with style conventions - always add space between if and ().

}
Blacklist.prototype._saveToStore = function(cb) {
var ws = this._store.createWriteStream(this.blacklistKey);
ws.end(JSON.stringify(this.blacklist), function (e) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Style, remove space between function and (e).

var ws = this._store.createWriteStream(this.blacklistKey);
ws.end(JSON.stringify(this.blacklist), function (e) {
// Throw to maintain compatibility with fs.writeFileSync
if(e) { throw e; }
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Style, space between if and (e) and always use a newline for blocks.

var self = this;
var rs = self._store.createReadStream(self.blacklistKey);
// If the file doesn't exist, return an empty object.
rs.on('error', function () {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Style: remove space between function and ()

@@ -681,7 +728,12 @@ describe('BridgeClient', function() {
it('should return error if file is unsupported size', function(done) {
var StubbedClient = proxyquire('../../lib/bridge-client', {
fs: {
statSync: sinon.stub().returns({ size: 0 })
createReadStream: function () {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Style, remove space between function and (...)

statSync: sinon.stub().returns({ size: 0 })
createReadStream: function () {
var rs = new Readable();
rs._read = function () {};
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Style, remove space between function and (...)

expect(_retry.called).to.equal(true);
done();
// Make sure callback is triggered to avoid race
client._blacklist.push('foo', function () {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Style, remove space between function and (...)

}
var StubbedClient = proxyquire('../../lib/bridge-client', {});

function createReadStream () {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Style, remove space between function functionName and (...)

return this.push(null);
}
var StubbedClient = proxyquire('../../lib/bridge-client', {});
function createReadStream () {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Style, remove space between function functionName and (...)

@coveralls
Copy link

Coverage Status

Coverage decreased (-0.2%) to 99.85% when pulling 4a582dc on retrohacker:isomorphic-bridge-client into c90149a on Storj:master.

@coveralls
Copy link

Coverage Status

Coverage decreased (-0.03%) to 99.97% when pulling d4691a7 on retrohacker:isomorphic-bridge-client into c90149a on Storj:master.

@coveralls
Copy link

Coverage Status

Coverage decreased (-0.03%) to 99.97% when pulling d4691a7 on retrohacker:isomorphic-bridge-client into c90149a on Storj:master.

@coveralls
Copy link

Coverage Status

Coverage remained the same at 100.0% when pulling 764df34 on retrohacker:isomorphic-bridge-client into c90149a on Storj:master.

}

// TODO: pass size into constructor for file
// TODO for this._source pass in readableStream from blob store
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Both of these TODOs have been done. Remove before merge. LONG TERM TODO can be removed in favor of opening an issue.

}
});
async.each(this.cleanQueue, function(options, cb) {
options.store.exists(options.key, function(err, exists) {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we set options.key anywhere? Looks like we are leaving the temporary files behind.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

key is set in bridge-client/index.js

return done(err);
}
return _shardTransferComplete();
});
};

/**
* Transfers a shard to a specified farmer
* @private
* @param {events.EventEmitter} emitter - For getting status events
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

emitter -> evt


self._logger.info('Hash for this shard is: %s', hash);

function _handleError(err) {
self._logger.warn('Failed to upload shard...');
state.cleanup();
return state.callback(err);
state.cleanup(function(err2){
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does err2 contain all failures or only one?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It only includes the most recent error. This should be acceptable for now.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note though, an error here means that we were unable to remove a file from a blobstore for whatever reason.

var self = this;
var fileSize = fs.statSync(file).size;
var fileHash = crypto.randomBytes(6).toString('hex');
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Calling this a hash might be misleading.

@coveralls
Copy link

Coverage Status

Coverage remained the same at 100.0% when pulling 441b3a9 on retrohacker:isomorphic-bridge-client into c90149a on Storj:master.

@coveralls
Copy link

Coverage Status

Coverage remained the same at 100.0% when pulling 441b3a9 on retrohacker:isomorphic-bridge-client into c90149a on Storj:master.

@tacticalchihuahua tacticalchihuahua changed the title [WIP] Isomorphic BridgeClient Isomorphic BridgeClient Feb 13, 2017
@tacticalchihuahua
Copy link
Contributor

@retrohacker awesome, will run this through integration and confirm no regressions. if all is good it will get merged tomorrow! 🍺

@tacticalchihuahua
Copy link
Contributor

tacticalchihuahua commented Feb 13, 2017

@retrohacker regression on uploading/downloading files larger than a single shard. (https://github.com/retrohacker/core/blob/master/lib/utils.js#L504).

I was, however, able to upload single-shard files and download single-shard files.

Uploading Multi-shard File

$ storj upload-file 8d07d238f2b273d471f011f0 /home/bookchin/Videos/the-cloud-is-dead.mp4
 [Mon Feb 13 2017 18:26:44 GMT-0500 (EST)] [info]   1 file(s) to upload.
 [...]  > Enter your passphrase to unlock your keyring  >  ********

 [Mon Feb 13 2017 18:26:46 GMT-0500 (EST)] [info]   Generating encryption key...
 [Mon Feb 13 2017 18:26:46 GMT-0500 (EST)] [warn]   Request failed, reason: File not found - retrying(false)...
 [Mon Feb 13 2017 18:26:46 GMT-0500 (EST)] [info]   [ the-cloud-is-dead.mp4 ] Creating storage token... (retry: 0)
 [Mon Feb 13 2017 18:26:46 GMT-0500 (EST)] [info]   Encrypting file "/home/bookchin/Videos/the-cloud-is-dead.mp4"
 [Mon Feb 13 2017 18:26:47 GMT-0500 (EST)] [info]   [ the-cloud-is-dead.mp4 ] Encryption complete
 [Mon Feb 13 2017 18:26:47 GMT-0500 (EST)] [info]   [ the-cloud-is-dead.mp4 ] Storing file, hang tight!
 [Mon Feb 13 2017 18:26:47 GMT-0500 (EST)] [info]   Creating file staging frame
 [Mon Feb 13 2017 18:26:47 GMT-0500 (EST)] [info]   Trying to upload shard b74ad1d4a913 index 0
 [Mon Feb 13 2017 18:26:47 GMT-0500 (EST)] [info]   Trying to upload shard b74ad1d4a913 index 1
 [Mon Feb 13 2017 18:26:47 GMT-0500 (EST)] [info]   Hash for this shard is: ccbb6c9309570d9b26856f3ce21bb0574918e984
 [Mon Feb 13 2017 18:26:48 GMT-0500 (EST)] [info]   Hash for this shard is: a0da107ff59fd04fe2e2e9301d8ec28d40390818
 [Mon Feb 13 2017 18:26:48 GMT-0500 (EST)] [info]   Trying to upload shard b74ad1d4a913 index 2
 [Mon Feb 13 2017 18:26:48 GMT-0500 (EST)] [info]   Audit generation for shard done.
 [Mon Feb 13 2017 18:26:48 GMT-0500 (EST)] [info]   Waiting on a storage offer from the network...
 [Mon Feb 13 2017 18:26:48 GMT-0500 (EST)] [info]   Querying bridge for contract for ccbb6c9309570d9b26856f3ce21bb0574918e984 (retry: 0)
 [Mon Feb 13 2017 18:26:48 GMT-0500 (EST)] [info]   Audit generation for shard done.
 [Mon Feb 13 2017 18:26:48 GMT-0500 (EST)] [info]   Waiting on a storage offer from the network...
 [Mon Feb 13 2017 18:26:48 GMT-0500 (EST)] [info]   Querying bridge for contract for a0da107ff59fd04fe2e2e9301d8ec28d40390818 (retry: 0)
 [Mon Feb 13 2017 18:26:48 GMT-0500 (EST)] [info]   Hash for this shard is: c1f3921d1cff5579cd650256a2ef76d3791073a1
 [Mon Feb 13 2017 18:26:48 GMT-0500 (EST)] [info]   Audit generation for shard done.
 [Mon Feb 13 2017 18:26:48 GMT-0500 (EST)] [info]   Waiting on a storage offer from the network...
 [Mon Feb 13 2017 18:26:48 GMT-0500 (EST)] [info]   Querying bridge for contract for c1f3921d1cff5579cd650256a2ef76d3791073a1 (retry: 0)
 [Mon Feb 13 2017 18:26:50 GMT-0500 (EST)] [info]   Contract negotiated with: {"userAgent":"6.1.2","protocol":"1.1.0","address":"86.144.178.180","port":59191,"nodeID":"c32eb25b03d1092dddf4e8756910760d63e7db06","lastSeen":1487028409892}
/home/bookchin/Code/storj-lib/lib/utils.js:504
      this._uploader.end();
                    ^

TypeError: Cannot read property 'end' of undefined
    at Transform.flush [as _flush] (/home/bookchin/Code/storj-lib/lib/utils.js:504:21)
    at Transform.<anonymous> (/home/bookchin/Code/storj-lib/node_modules/readable-stream/lib/_stream_transform.js:115:49)
    at Transform.g (events.js:291:16)
    at emitNone (events.js:86:13)
    at Transform.emit (events.js:185:7)
    at prefinish (/home/bookchin/Code/storj-lib/node_modules/readable-stream/lib/_stream_writable.js:503:12)
    at finishMaybe (/home/bookchin/Code/storj-lib/node_modules/readable-stream/lib/_stream_writable.js:511:7)
    at endWritable (/home/bookchin/Code/storj-lib/node_modules/readable-stream/lib/_stream_writable.js:523:3)
    at Transform.Writable.end (/home/bookchin/Code/storj-lib/node_modules/readable-stream/lib/_stream_writable.js:493:41)
    at ReadStream.onend (_stream_readable.js:511:10)
    at ReadStream.g (events.js:291:16)
    at emitNone (events.js:91:20)
    at ReadStream.emit (events.js:185:7)
    at endReadableNT (_stream_readable.js:974:12)
    at _combinedTickCallback (internal/process/next_tick.js:74:11)
    at process._tickCallback (internal/process/next_tick.js:98:9)

Downloading Multi-shard File

$ storj download-file 8d07d238f2b273d471f011f0 693dc24cb8d86d4b68750da4 tcid.mp4
 [Mon Feb 13 2017 18:31:52 GMT-0500 (EST)] [info]   Name: the-cloud-is-dead.mp4, Type: video/mp4, Size: 156253683 bytes, ID: 693dc24cb8d86d4b68750da4
 [...]  > Enter your passphrase to unlock your keyring  >  ********

 [Mon Feb 13 2017 18:31:54 GMT-0500 (EST)] [info]   Creating retrieval token...
 [Mon Feb 13 2017 18:31:55 GMT-0500 (EST)] [info]   Resolving 6 file pointers...
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Creating retrieval token...
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Resolving 6 file pointers...
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 23446 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 41490 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 63698 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 81742 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 131072 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 152521 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 169177 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 189997 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 214981 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 235801 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 245517 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 263552 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 280208 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 302416 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 321848 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 384308 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 405119 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 407895 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 495339 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 511995 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 532806 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 556402 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 578610 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 586938 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 609146 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 625802 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 646622 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 667433 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 685477 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 727117 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 746549 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 747937 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 768757 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 785413 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 803448 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 821492 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 846476 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 868684 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 892280 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 917504 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 924195 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 947791 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 964447 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 985267 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 1004699 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 1026907 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 1046339 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 1067150 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 1090746 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 1111566 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 1128222 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 1143490 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 1164310 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 1182345 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 1201777 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 1223985 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 1248969 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 1269789 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 1294773 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 1316972 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 1335016 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 1355836 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 1382208 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 1401640 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 1418296 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 1441792 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 1459927 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 1479359 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 1500179 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 1523775 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 1545983 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 1564027 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 1593166 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 1622314 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 1633418 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 1652850 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 1672282 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 1694490 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 1716689 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 1737509 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 1756941 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 1774985 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 1798581 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 1818013 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 1837436 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 1849928 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 1879076 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 1897120 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 1919328 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 1944312 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 1965132 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 1988719 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 2012315 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 2040075 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 2060895 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 2077551 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 2097152 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 2116406 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 2138614 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 2160822 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 2183030 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 2202462 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 2224670 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 2252421 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 2271853 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 2292673 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 2312105 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 2342641 of 156253683 bytes
 [Mon Feb 13 2017 18:31:56 GMT-0500 (EST)] [info]   Received 2350969 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Downloading file slice from 4 channels.
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Creating retrieval token...
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 2370392 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 2389824 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 2413420 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 2437016 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 2457836 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 2480044 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 2503631 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 2525839 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 2550823 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 2571643 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 2648274 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 2699330 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 2724314 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 2743746 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 2761781 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 2779825 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 2800645 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 2820077 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 2845061 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 2864493 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 2883584 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 2903348 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 2922780 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 2929720 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Resolving 6 file pointers...
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 2951928 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 2969972 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 2989404 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 3010224 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 3031035 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 3051855 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 3075451 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 3111539 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 3135135 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 3155946 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 3178154 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 3218406 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 3247554 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 3261434 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 3286409 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 3307229 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 3330825 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 3351645 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 3369689 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 3389121 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 3409932 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 3430752 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 3454348 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 3476556 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 3494600 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 3515420 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 3538944 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 3561215 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 3583423 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 3598691 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 3618123 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 3636167 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 3656987 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 3679186 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 3702782 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 3723602 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 3743034 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 3762466 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 3783286 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 3801088 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 3813813 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 3834633 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 3852677 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 3873497 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 3891541 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 3912361 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 3933172 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 3953992 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 3974812 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 3998408 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 4019228 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 4063232 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 4076127 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 4095559 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 4112215 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 4131647 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 4159407 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 4177451 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 4195486 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 4220470 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 4245454 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 4267662 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 4298198 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 4319018 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 4339829 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 4359261 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 4360649 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 4382857 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 4399513 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 4420333 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 4439765 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 4459188 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 4477232 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 4496664 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 4518872 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 4548020 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 4575780 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 4597979 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 4614635 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 4636843 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 4659051 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 4679871 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 4697915 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 4718592 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 4745098 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 4756202 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 4779798 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 4797842 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 4818662 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 4838094 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 4860293 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 4879725 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 4897769 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 4915813 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 4935245 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 4956065 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 4960229 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 4980736 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 5000472 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 5026844 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 5050440 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 5069872 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 5089304 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 5111808 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 5135099 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 5154531 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 5182291 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 5204499 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 5228095 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 5247518 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 5257234 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 5280830 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 5297486 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 5319694 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 5339126 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 5359946 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [warn]   Failed to download shard, reason: Shard failed integrity check
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 5373952 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [info]   Received 5415442 of 156253683 bytes
 [Mon Feb 13 2017 18:31:57 GMT-0500 (EST)] [error]  Failed to download file

Copy link
Contributor

@tacticalchihuahua tacticalchihuahua left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See latest comments regarding upload/dowload regressions.

@retrohacker
Copy link
Contributor Author

Ah, something weird is happening in the transform stream, seems like transform is never being invoked on the second shard but flush is.

@nginnever
Copy link
Contributor

nginnever commented Feb 14, 2017

Confirmed repro on downloading and uploading. Though uploading seems inconsistent. Sometimes it works, and sometimes it throws this err where _shardTransferComplete() is calling done too many times.

 [Tue Feb 14 2017 20:30:32 GMT-0800 (PST)] [info]   1 file(s) to upload.
 [...]  > Enter your passphrase to unlock your keyring  >  **********

 [Tue Feb 14 2017 20:30:36 GMT-0800 (PST)] [info]   Generating encryption key...
 [Tue Feb 14 2017 20:30:38 GMT-0800 (PST)] [warn]   Request failed, reason: File not found - retrying(false)...
 [Tue Feb 14 2017 20:30:38 GMT-0800 (PST)] [info]   [ BitcoinMOOCLecture5.pptx ] Creating storage token... (retry: 0)
 [Tue Feb 14 2017 20:30:39 GMT-0800 (PST)] [info]   Encrypting file "/Users/voxelot/Documents/presentation/NGinnever_LectureNotes/BitcoinMOOCLecture5.pptx"
 [Tue Feb 14 2017 20:30:39 GMT-0800 (PST)] [info]   [ BitcoinMOOCLecture5.pptx ] Encryption complete
 [Tue Feb 14 2017 20:30:39 GMT-0800 (PST)] [info]   [ BitcoinMOOCLecture5.pptx ] Storing file, hang tight!
 [Tue Feb 14 2017 20:30:39 GMT-0800 (PST)] [info]   Creating file staging frame
 [Tue Feb 14 2017 20:30:39 GMT-0800 (PST)] [info]   Trying to upload shard 9bf95fb2174b index 0
 [Tue Feb 14 2017 20:30:40 GMT-0800 (PST)] [info]   Hash for this shard is: af30cbaef49e1d510358e6e4d4db0ea33c7c43c7
 [Tue Feb 14 2017 20:30:40 GMT-0800 (PST)] [info]   Trying to upload shard 9bf95fb2174b index 1
 [Tue Feb 14 2017 20:30:40 GMT-0800 (PST)] [info]   Hash for this shard is: 608f9b5f62a1b50d28a7e5ead0e84e62da463ef0
 [Tue Feb 14 2017 20:30:40 GMT-0800 (PST)] [info]   Trying to upload shard 9bf95fb2174b index 2
 [Tue Feb 14 2017 20:30:40 GMT-0800 (PST)] [info]   Audit generation for shard done.
 [Tue Feb 14 2017 20:30:40 GMT-0800 (PST)] [info]   Waiting on a storage offer from the network...
 [Tue Feb 14 2017 20:30:40 GMT-0800 (PST)] [info]   Querying bridge for contract for af30cbaef49e1d510358e6e4d4db0ea33c7c43c7 (retry: 0)
 [Tue Feb 14 2017 20:30:40 GMT-0800 (PST)] [info]   Hash for this shard is: f6b29f0fdecd63cd00a20d4f3cc9db62b8922aff
 [Tue Feb 14 2017 20:30:40 GMT-0800 (PST)] [info]   Audit generation for shard done.
 [Tue Feb 14 2017 20:30:40 GMT-0800 (PST)] [info]   Waiting on a storage offer from the network...
 [Tue Feb 14 2017 20:30:40 GMT-0800 (PST)] [info]   Querying bridge for contract for 608f9b5f62a1b50d28a7e5ead0e84e62da463ef0 (retry: 0)
 [Tue Feb 14 2017 20:30:41 GMT-0800 (PST)] [info]   Audit generation for shard done.
 [Tue Feb 14 2017 20:30:41 GMT-0800 (PST)] [info]   Waiting on a storage offer from the network...
 [Tue Feb 14 2017 20:30:41 GMT-0800 (PST)] [info]   Querying bridge for contract for f6b29f0fdecd63cd00a20d4f3cc9db62b8922aff (retry: 0)
 [Tue Feb 14 2017 20:30:42 GMT-0800 (PST)] [info]   Contract negotiated with: {"userAgent":"6.1.2","protocol":"1.1.0","address":"207.242.114.130","port":4100,"nodeID":"af545e5570a7f6a3b9bebbc07fa0c97fd39ed51b","lastSeen":1487133041446}
 [Tue Feb 14 2017 20:30:42 GMT-0800 (PST)] [info]   Contract negotiated with: {"userAgent":"6.1.3","protocol":"1.1.0","address":"a.storj.eu","port":47003,"nodeID":"60e4182755e3ac20df6341987c6c0a3e05b1f0da","lastSeen":1487133041991}
 [Tue Feb 14 2017 20:30:43 GMT-0800 (PST)] [info]   Contract negotiated with: {"userAgent":"6.1.2","protocol":"1.1.0","address":"storj.lksmith.net","port":46000,"nodeID":"8f1ceb74f86be83056f1bcfc73de11bd83da6520","lastSeen":1487133043041}
 [Tue Feb 14 2017 20:30:44 GMT-0800 (PST)] [info]   Shard transfer completed! 2 remaining...
 [Tue Feb 14 2017 20:30:44 GMT-0800 (PST)] [info]   sending exchange report
 [Tue Feb 14 2017 20:30:44 GMT-0800 (PST)] [warn]   Failed to transfer shard, reason: Calculated hash does not match the expected result
 [Tue Feb 14 2017 20:30:44 GMT-0800 (PST)] [info]   Shard transfer failed 0 times, getting another contract...
 [Tue Feb 14 2017 20:30:44 GMT-0800 (PST)] [info]   Adding NodeID af545e5570a7f6a3b9bebbc07fa0c97fd39ed51b to blacklist
 [Tue Feb 14 2017 20:30:44 GMT-0800 (PST)] [info]   Hash for this shard is: af30cbaef49e1d510358e6e4d4db0ea33c7c43c7
 [Tue Feb 14 2017 20:30:44 GMT-0800 (PST)] [info]   Waiting on a storage offer from the network...
 [Tue Feb 14 2017 20:30:44 GMT-0800 (PST)] [info]   Querying bridge for contract for af30cbaef49e1d510358e6e4d4db0ea33c7c43c7 (retry: 0)
 [Tue Feb 14 2017 20:30:45 GMT-0800 (PST)] [info]   Shard transfer completed! 1 remaining...
 [Tue Feb 14 2017 20:30:45 GMT-0800 (PST)] [info]   sending exchange report
 [Tue Feb 14 2017 20:30:46 GMT-0800 (PST)] [info]   Contract negotiated with: {"userAgent":"6.1.2","protocol":"1.1.0","address":"91.244.10.249","port":54166,"nodeID":"afa8a6f68fda8fa458e5b70c1b856a772d6f5a82","lastSeen":1487133046376}
 [Tue Feb 14 2017 20:30:47 GMT-0800 (PST)] [info]   Shard transfer completed! 0 remaining...
 [Tue Feb 14 2017 20:30:47 GMT-0800 (PST)] [info]   Shard transfer completed! -1 remaining...
/Users/voxelot/Github/storj/stage/atlanta/altretro/final/again/core/node_modules/async/dist/async.js:837
        if (fn === null) throw new Error("Callback was already called.");
                         ^

Error: Callback was already called.
    at /Users/voxelot/Github/storj/stage/atlanta/altretro/final/again/core/node_modules/async/dist/async.js:837:32
    at BridgeClient._shardTransferComplete (/Users/voxelot/Github/storj/stage/atlanta/altretro/final/again/core/lib/bridge-client/index.js:782:12)
    at EventEmitter.<anonymous> (/Users/voxelot/Github/storj/stage/atlanta/altretro/final/again/core/lib/bridge-client/index.js:757:10)
    at EventEmitter.g (events.js:291:16)
    at emitNone (events.js:86:13)
    at EventEmitter.emit (events.js:185:7)
    at UploadState._handleStateKilled (/Users/voxelot/Github/storj/stage/atlanta/altretro/final/again/core/lib/bridge-client/index.js:840:9)
    at emitNone (events.js:91:20)
    at UploadState.emit (events.js:185:7)
    at UploadState.cleanup (/Users/voxelot/Github/storj/stage/atlanta/altretro/final/again/core/lib/bridge-client/upload-state.js:75:8)
    at BridgeClient._shardTransferComplete (/Users/voxelot/Github/storj/stage/atlanta/altretro/final/again/core/lib/bridge-client/index.js:806:9)
    at EventEmitter.<anonymous> (/Users/voxelot/Github/storj/stage/atlanta/altretro/final/again/core/lib/bridge-client/index.js:757:10)
    at EventEmitter.g (events.js:291:16)
    at emitNone (events.js:86:13)
    at EventEmitter.emit (events.js:185:7)
    at Transform.<anonymous> (/Users/voxelot/Github/storj/stage/atlanta/altretro/final/again/core/lib/bridge-client/index.js:873:9)

@nginnever
Copy link
Contributor

nginnever commented Feb 16, 2017

It seems the calculated hash for each file is different which is also triggering a new err coming from blacklist after failing to transfer shard due to Failed to transfer shard, reason: Calculated hash does not match the expected result. Sometimes the upload succeeds but this err msg is always thrown and that node is added to the blacklist.

 [Thu Feb 16 2017 13:28:18 GMT-0800 (PST)] [info]   Generating encryption key...
 [Thu Feb 16 2017 13:28:18 GMT-0800 (PST)] [warn]   Request failed, reason: Error: File not found
 - retrying(false)...
 [Thu Feb 16 2017 13:28:18 GMT-0800 (PST)] [info]   [ justWillItDemo3.mov ] Creating storage token... (retry: 0)
 [Thu Feb 16 2017 13:28:18 GMT-0800 (PST)] [info]   Encrypting file "/Users/voxelot/Documents/justWillItDemo3.mov"
 [Thu Feb 16 2017 13:28:18 GMT-0800 (PST)] [info]   [ justWillItDemo3.mov ] Encryption complete
 [Thu Feb 16 2017 13:28:18 GMT-0800 (PST)] [info]   [ justWillItDemo3.mov ] Storing file, hang tight!
 [Thu Feb 16 2017 13:28:18 GMT-0800 (PST)] [info]   Creating file staging frame
 [Thu Feb 16 2017 13:28:18 GMT-0800 (PST)] [info]   Trying to upload shard 77a36da8640d index 0
 [Thu Feb 16 2017 13:28:18 GMT-0800 (PST)] [info]   Trying to upload shard 77a36da8640d index 1
 [Thu Feb 16 2017 13:28:19 GMT-0800 (PST)] [info]   Hash for this shard is: d997b3556a97733b5cce518f81bf033118d1cb06
 [Thu Feb 16 2017 13:28:19 GMT-0800 (PST)] [info]   Hash for this shard is: 8ce2600cbb3bade2428f7f0e8ec6f8f842fa0923
 [Thu Feb 16 2017 13:28:19 GMT-0800 (PST)] [info]   Audit generation for shard done.
 [Thu Feb 16 2017 13:28:19 GMT-0800 (PST)] [info]   Waiting on a storage offer from the network...
 [Thu Feb 16 2017 13:28:19 GMT-0800 (PST)] [info]   Querying bridge for contract for d997b3556a97733b5cce518f81bf033118d1cb06 (retry: 0)
 [Thu Feb 16 2017 13:28:19 GMT-0800 (PST)] [info]   Audit generation for shard done.
 [Thu Feb 16 2017 13:28:19 GMT-0800 (PST)] [info]   Waiting on a storage offer from the network...
 [Thu Feb 16 2017 13:28:19 GMT-0800 (PST)] [info]   Querying bridge for contract for 8ce2600cbb3bade2428f7f0e8ec6f8f842fa0923 (retry: 0)
 [Thu Feb 16 2017 13:28:21 GMT-0800 (PST)] [info]   Contract negotiated with: {"userAgent":"6.0.15","protocol":"1.1.0","address":"localhost","port":9200,"nodeID":"4bb49fb779e9233f9ed14f6ef34e29048911f018","lastSeen":1487280501763}
 [Thu Feb 16 2017 13:28:21 GMT-0800 (PST)] [info]   Contract negotiated with: {"userAgent":"6.0.15","protocol":"1.1.0","address":"localhost","port":9200,"nodeID":"4bb49fb779e9233f9ed14f6ef34e29048911f018","lastSeen":1487280501765}
 [Thu Feb 16 2017 13:28:22 GMT-0800 (PST)] [info]   Shard transfer completed! 1 remaining...
 [Thu Feb 16 2017 13:28:22 GMT-0800 (PST)] [info]   sending exchange report
 [Thu Feb 16 2017 13:28:22 GMT-0800 (PST)] [warn]   Failed to transfer shard, reason: Calculated hash does not match the expected result
 [Thu Feb 16 2017 13:28:22 GMT-0800 (PST)] [info]   Shard transfer failed 0 times, getting another contract...
 [Thu Feb 16 2017 13:28:22 GMT-0800 (PST)] [info]   Adding NodeID 4bb49fb779e9233f9ed14f6ef34e29048911f018 to blacklist
 [Thu Feb 16 2017 13:28:22 GMT-0800 (PST)] [info]   Hash for this shard is: d997b3556a97733b5cce518f81bf033118d1cb06
 [Thu Feb 16 2017 13:28:22 GMT-0800 (PST)] [info]   Waiting on a storage offer from the network...
 [Thu Feb 16 2017 13:28:22 GMT-0800 (PST)] [info]   Querying bridge for contract for d997b3556a97733b5cce518f81bf033118d1cb06 (retry: 0)
 [Thu Feb 16 2017 13:28:22 GMT-0800 (PST)] [warn]   Failed to transfer shard, reason: Shard exceeds the amount defined in the contract
 [Thu Feb 16 2017 13:28:22 GMT-0800 (PST)] [info]   Shard transfer failed 0 times, getting another contract...
 [Thu Feb 16 2017 13:28:22 GMT-0800 (PST)] [info]   Adding NodeID 4bb49fb779e9233f9ed14f6ef34e29048911f018 to blacklist
events.js:160
      throw er; // Unhandled 'error' event
      ^

Error: write EPIPE
    at exports._errnoException (util.js:1026:11)
    at WriteWrap.afterWrite (net.js:799:14)
voxelots-MacBook-4:core-cli voxelot$ 

@nginnever
Copy link
Contributor

@bookchin @retrohacker latest commit should fix things. It seems we were simply not creating a new random number for each new shard.

@coveralls
Copy link

Coverage Status

Coverage remained the same at 100.0% when pulling b380e71 on retrohacker:isomorphic-bridge-client into c90149a on Storj:master.

@tacticalchihuahua
Copy link
Contributor

@nginnever I can confirm that large downloads are now working, however I'm still not able to upload large files:

$ storj upload-file 8d07d238f2b273d471f011f0 tcid.mp4                                                                                                                                                       ⬢ 6.9.1
 [Sun Feb 19 2017 13:31:22 GMT-0500 (EST)] [info]   1 file(s) to upload.
 [...]  > Enter your passphrase to unlock your keyring  >  ********

 [Sun Feb 19 2017 13:31:24 GMT-0500 (EST)] [info]   Generating encryption key...
 [Sun Feb 19 2017 13:31:25 GMT-0500 (EST)] [warn]   Request failed, reason: File not found - retrying(false)...
 [Sun Feb 19 2017 13:31:25 GMT-0500 (EST)] [info]   [ tcid.mp4 ] Creating storage token... (retry: 0)
 [Sun Feb 19 2017 13:31:25 GMT-0500 (EST)] [info]   Encrypting file "tcid.mp4"
 [Sun Feb 19 2017 13:31:26 GMT-0500 (EST)] [info]   [ tcid.mp4 ] Encryption complete
 [Sun Feb 19 2017 13:31:26 GMT-0500 (EST)] [info]   [ tcid.mp4 ] Storing file, hang tight!
 [Sun Feb 19 2017 13:31:26 GMT-0500 (EST)] [info]   Creating file staging frame
 [Sun Feb 19 2017 13:31:26 GMT-0500 (EST)] [info]   Trying to upload shard 53b556f6ed1b index 0
 [Sun Feb 19 2017 13:31:26 GMT-0500 (EST)] [info]   Trying to upload shard 53b556f6ed1b index 1
 [Sun Feb 19 2017 13:31:27 GMT-0500 (EST)] [info]   Hash for this shard is: ab3819256c00de788d982bb483e2bf981a965b9a
 [Sun Feb 19 2017 13:31:27 GMT-0500 (EST)] [info]   Hash for this shard is: be3dc1a21105d13613d01f057f049d848ed9ba6f
 [Sun Feb 19 2017 13:31:27 GMT-0500 (EST)] [info]   Trying to upload shard 53b556f6ed1b index 2
 [Sun Feb 19 2017 13:31:27 GMT-0500 (EST)] [info]   Audit generation for shard done.
 [Sun Feb 19 2017 13:31:27 GMT-0500 (EST)] [info]   Waiting on a storage offer from the network...
 [Sun Feb 19 2017 13:31:27 GMT-0500 (EST)] [info]   Querying bridge for contract for ab3819256c00de788d982bb483e2bf981a965b9a (retry: 0)
 [Sun Feb 19 2017 13:31:27 GMT-0500 (EST)] [info]   Audit generation for shard done.
 [Sun Feb 19 2017 13:31:27 GMT-0500 (EST)] [info]   Waiting on a storage offer from the network...
 [Sun Feb 19 2017 13:31:27 GMT-0500 (EST)] [info]   Querying bridge for contract for be3dc1a21105d13613d01f057f049d848ed9ba6f (retry: 0)
 [Sun Feb 19 2017 13:31:27 GMT-0500 (EST)] [info]   Hash for this shard is: e263ab8a9758fd2fff0807d89d10a259d11d437e
 [Sun Feb 19 2017 13:31:27 GMT-0500 (EST)] [info]   Audit generation for shard done.
 [Sun Feb 19 2017 13:31:27 GMT-0500 (EST)] [info]   Waiting on a storage offer from the network...
 [Sun Feb 19 2017 13:31:27 GMT-0500 (EST)] [info]   Querying bridge for contract for e263ab8a9758fd2fff0807d89d10a259d11d437e (retry: 0)
 [Sun Feb 19 2017 13:31:27 GMT-0500 (EST)] [warn]   Request failed, reason: Channel closed - retrying(false)...
 [Sun Feb 19 2017 13:31:27 GMT-0500 (EST)] [info]   Querying bridge for contract for ab3819256c00de788d982bb483e2bf981a965b9a (retry: 1)
 [Sun Feb 19 2017 13:31:27 GMT-0500 (EST)] [warn]   Request failed, reason: Channel closed - retrying(false)...
 [Sun Feb 19 2017 13:31:27 GMT-0500 (EST)] [info]   Querying bridge for contract for e263ab8a9758fd2fff0807d89d10a259d11d437e (retry: 1)
 [Sun Feb 19 2017 13:31:28 GMT-0500 (EST)] [warn]   Request failed, reason: Channel closed - retrying(false)...
 [Sun Feb 19 2017 13:31:28 GMT-0500 (EST)] [info]   Querying bridge for contract for e263ab8a9758fd2fff0807d89d10a259d11d437e (retry: 2)
 [Sun Feb 19 2017 13:31:28 GMT-0500 (EST)] [info]   Contract negotiated with: {"userAgent":"6.1.2","protocol":"1.1.0","address":"216.146.251.13","port":4010,"nodeID":"ab900b39899e36bd84ffba171d8f8da99e5c5137","lastSeen":1487529088504}
/home/bookchin/Code/storj-lib/lib/utils.js:504
      this._uploader.end();
                    ^

TypeError: Cannot read property 'end' of undefined
    at Transform.flush [as _flush] (/home/bookchin/Code/storj-lib/lib/utils.js:504:21)
    at Transform.<anonymous> (/home/bookchin/Code/storj-lib/node_modules/readable-stream/lib/_stream_transform.js:115:49)
    at Transform.g (events.js:291:16)
    at emitNone (events.js:86:13)
    at Transform.emit (events.js:185:7)
    at prefinish (/home/bookchin/Code/storj-lib/node_modules/readable-stream/lib/_stream_writable.js:503:12)
    at finishMaybe (/home/bookchin/Code/storj-lib/node_modules/readable-stream/lib/_stream_writable.js:511:7)
    at endWritable (/home/bookchin/Code/storj-lib/node_modules/readable-stream/lib/_stream_writable.js:523:3)
    at Transform.Writable.end (/home/bookchin/Code/storj-lib/node_modules/readable-stream/lib/_stream_writable.js:493:41)
    at ReadStream.onend (_stream_readable.js:511:10)
    at ReadStream.g (events.js:291:16)
    at emitNone (events.js:91:20)
    at ReadStream.emit (events.js:185:7)
    at endReadableNT (_stream_readable.js:974:12)
    at _combinedTickCallback (internal/process/next_tick.js:74:11)
    at process._tickCallback (internal/process/next_tick.js:98:9)

It looks like we are having some trouble with the bridge, but I can still upload single shard files:

$ storj upload-file 8d07d238f2b273d471f011f0 README.md                                                                                                                                                      ⬢ 6.9.1
 [Sun Feb 19 2017 13:33:33 GMT-0500 (EST)] [info]   1 file(s) to upload.
 [...]  > Enter your passphrase to unlock your keyring  >  ********

 [Sun Feb 19 2017 13:33:35 GMT-0500 (EST)] [info]   Generating encryption key...
 [Sun Feb 19 2017 13:33:35 GMT-0500 (EST)] [warn]   Request failed, reason: File not found - retrying(false)...
 [Sun Feb 19 2017 13:33:35 GMT-0500 (EST)] [info]   [ README.md ] Creating storage token... (retry: 0)
 [Sun Feb 19 2017 13:33:36 GMT-0500 (EST)] [info]   Encrypting file "README.md"
 [Sun Feb 19 2017 13:33:36 GMT-0500 (EST)] [info]   [ README.md ] Encryption complete
 [Sun Feb 19 2017 13:33:36 GMT-0500 (EST)] [info]   [ README.md ] Storing file, hang tight!
 [Sun Feb 19 2017 13:33:36 GMT-0500 (EST)] [info]   Creating file staging frame
 [Sun Feb 19 2017 13:33:36 GMT-0500 (EST)] [info]   Trying to upload shard 9a4ad1a03082 index 0
 [Sun Feb 19 2017 13:33:36 GMT-0500 (EST)] [info]   Hash for this shard is: 33982562972686cb655128dab4ffad57d08737d1
 [Sun Feb 19 2017 13:33:36 GMT-0500 (EST)] [info]   Audit generation for shard done.
 [Sun Feb 19 2017 13:33:36 GMT-0500 (EST)] [info]   Waiting on a storage offer from the network...
 [Sun Feb 19 2017 13:33:36 GMT-0500 (EST)] [info]   Querying bridge for contract for 33982562972686cb655128dab4ffad57d08737d1 (retry: 0)
 [Sun Feb 19 2017 13:33:46 GMT-0500 (EST)] [warn]   Request failed, reason: ESOCKETTIMEDOUT - retrying(true)...
 [Sun Feb 19 2017 13:33:57 GMT-0500 (EST)] [warn]   Request failed, reason: ESOCKETTIMEDOUT - retrying(true)...
 [Sun Feb 19 2017 13:33:58 GMT-0500 (EST)] [info]   Querying bridge for contract for 33982562972686cb655128dab4ffad57d08737d1 (retry: 1)
 [Sun Feb 19 2017 13:34:00 GMT-0500 (EST)] [info]   Contract negotiated with: {"userAgent":"6.1.3","protocol":"1.1.0","address":"163.storj.eu","port":8634,"nodeID":"3397c8521722c44d1ee384a21f412e279de8b729","lastSeen":1487529239031}
 [Sun Feb 19 2017 13:34:00 GMT-0500 (EST)] [info]   Shard transfer completed! 0 remaining...
 [Sun Feb 19 2017 13:34:00 GMT-0500 (EST)] [info]   sending exchange report
 [Sun Feb 19 2017 13:34:00 GMT-0500 (EST)] [info]   Transfer finished, creating entry.. (retry: 0)
 [Sun Feb 19 2017 13:34:00 GMT-0500 (EST)] [info]   [ README.md ] Cleaning up...
 [Sun Feb 19 2017 13:34:00 GMT-0500 (EST)] [info]   [ README.md ] Finished cleaning!
 [Sun Feb 19 2017 13:34:00 GMT-0500 (EST)] [info]   [ README.md ] Encryption key saved to keyring.
 [Sun Feb 19 2017 13:34:00 GMT-0500 (EST)] [info]   [ README.md ] File successfully stored in bucket.
 [Sun Feb 19 2017 13:34:00 GMT-0500 (EST)] [info]   Name: README.md, Type: text/x-markdown, Size: 3466 bytes, ID: aeda96096a56ff002118dd0f
 [Sun Feb 19 2017 13:34:00 GMT-0500 (EST)] [info]   1 of 1 files uploaded
 [Sun Feb 19 2017 13:34:00 GMT-0500 (EST)] [info]   Done.

That particular error, I followed back and found that it's not related to your changes, but rather it's a bug in the uploader utility where if nothing is written to the transform stream before ending, you'll get that null reference. The reason that is happening lies between the issues we already knew we had with the state management/retry logic that needs to be rewritten and the current production issues we are having with the bridge.

So all of that said, I'm good to merge this PR. Excellent work! 🎉

@tacticalchihuahua tacticalchihuahua merged commit 904acbb into storj-archived:master Feb 19, 2017
@tacticalchihuahua
Copy link
Contributor

Will tag v6.2.0 shortly

@retrohacker
Copy link
Contributor Author

🎉 🌮 🍻 🎉

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants