From 856110c4cec063b0932cfdd95879182e222900a2 Mon Sep 17 00:00:00 2001 From: ekatek Date: Sun, 14 Sep 2014 17:02:10 -0700 Subject: [PATCH] when talking to the package server, try to reconnect --- tools/commands-packages.js | 33 +++++++++++++-------- tools/package-client.js | 58 +++++++++++++++++++++++++------------ tools/service-connection.js | 2 ++ 3 files changed, 63 insertions(+), 30 deletions(-) diff --git a/tools/commands-packages.js b/tools/commands-packages.js index 92c5327e8e..cd019a1155 100644 --- a/tools/commands-packages.js +++ b/tools/commands-packages.js @@ -847,9 +847,11 @@ main.registerCommand({ var uploadInfo; try { if (!relConf.patchFrom) { - uploadInfo = conn.call('createReleaseVersion', record); + uploadInfo = packageClient.callPackageServer( + conn, 'createReleaseVersion', record); } else { - uploadInfo = conn.call('createPatchReleaseVersion', record, relConf.patchFrom); + uploadInfo = packageClient.callPackageServer( + conn, 'createPatchReleaseVersion', record, relConf.patchFrom); } } catch (err) { packageClient.handlePackageServerConnectionError(err); @@ -2079,16 +2081,20 @@ main.registerCommand({ if (options.add) { process.stdout.write("Adding a maintainer to " + name + "...\n"); if (fullRecord.release) { - conn.call('addReleaseMaintainer', name, options.add); + packageClient.callPackageServer( + conn, 'addReleaseMaintainer', name, options.add); } else { - conn.call('addMaintainer', name, options.add); + packageClient.callPackageServer( + conn, 'addMaintainer', name, options.add); } } else if (options.remove) { process.stdout.write("Removing a maintainer from " + name + "...\n"); if (fullRecord.release) { - conn.call('removeReleaseMaintainer', name, options.remove); + packageClient.callPackageServer( + conn, 'removeReleaseMaintainer', name, options.remove); } else { - conn.call('removeMaintainer', name, options.remove); + packageClient.callPackageServer( + conn, 'removeMaintainer', name, options.remove); } process.stdout.write(" Done!\n"); } @@ -2333,8 +2339,9 @@ main.registerCommand({ } try { - conn.call('setBannersOnReleases', bannersData.track, - bannersData.banners); + packageClient.callPackageServer( + conn, 'setBannersOnReleases', + bannersData.track, bannersData.banners); } catch (e) { packageClient.handlePackageServerConnectionError(e); return 1; @@ -2384,12 +2391,12 @@ main.registerCommand({ try { if (options.unrecommend) { process.stdout.write("Unrecommending " + name + "@" + version + "...\n"); - conn.call('unrecommendVersion', name, version); + packageClient.callPackageServer(conn, 'unrecommendVersion', name, version); process.stdout.write("Done!\n " + name + "@" + version + " is no longer a recommended release\n"); } else { process.stdout.write("Recommending " + options.args[0] + "...\n"); - conn.call('recommendVersion', name, version); + packageClient.callPackageServer(conn, 'recommendVersion', name, version); process.stdout.write("Done!\n " + name + "@" + version + " is now a recommended release\n"); } @@ -2443,7 +2450,8 @@ main.registerCommand({ + options.args[0] + " to " + ecv + "...\n"); var versionInfo = { name : name, version : version }; - conn.call('_setEarliestCompatibleVersion', versionInfo, ecv); + packageClient.callPackageServer(conn, + '_setEarliestCompatibleVersion', versionInfo, ecv); process.stdout.write("Done!\n"); } catch (err) { packageClient.handlePackageServerConnectionError(err); @@ -2487,7 +2495,8 @@ main.registerCommand({ process.stdout.write( "Changing homepage on " + name + " to " + url + "...\n"); - conn.call('_changePackageHomepage', name, url); + packageClient.callPackageServer(conn, + '_changePackageHomepage', name, url); process.stdout.write("Done!\n"); } catch (err) { packageClient.handlePackageServerConnectionError(err); diff --git a/tools/package-client.js b/tools/package-client.js index 7b24d58b0a..7ac5d9bd8e 100644 --- a/tools/package-client.js +++ b/tools/package-client.js @@ -43,6 +43,19 @@ var emptyCachedServerDataJson = function () { }; }; +// Given a connection, makes a call to the package server. (Checks to see if +// the connection is connected, and reconnectes if needed -- a workaround for +// the fact that connections in the tool do not reconnect) +exports.callPackageServer = function (conn) { + if (!conn.connected) { + conn.close(); + conn = exports.loggedInPackagesConnection(); + } + var args = _.values(arguments) + .slice(1, arguments.length); + return conn.call.apply(conn, args); +}; + // Load the package data that was saved in the local data.json // collection from the last time we did a sync to the server. Takes an // optional `packageStorageFile` argument (defaults to @@ -109,11 +122,11 @@ var loadRemotePackageData = function (conn, syncToken, _optionsForTest) { } var collectionData; if (syncOpts) { - collectionData = conn.call( - 'syncNewPackageData', syncToken, syncOpts); + collectionData = exports.callPackageServer(conn, + 'syncNewPackageData', syncToken, syncOpts); } else { - collectionData = conn.call( - 'syncNewPackageData', syncToken); + collectionData = exports.callPackageServer(conn, + 'syncNewPackageData', syncToken); } return collectionData; }; @@ -460,10 +473,11 @@ var createAndPublishBuiltPackage = function (conn, unipackage) { return; process.stdout.write('Creating package build...\n'); - var uploadInfo = conn.call('createPackageBuild', { - packageName: unipackage.name, - version: unipackage.version, - buildArchitectures: unipackage.buildArchitectures() + var uploadInfo = exports.callPackageServer(conn, + 'createPackageBuild', { + packageName: unipackage.name, + version: unipackage.version, + buildArchitectures: unipackage.buildArchitectures() }); process.stdout.write('Uploading build...\n'); @@ -471,7 +485,8 @@ var createAndPublishBuiltPackage = function (conn, unipackage) { bundleResult.buildTarball); process.stdout.write('Publishing package build...\n'); - conn.call('publishPackageBuild', + exports.callPackageServer(conn, + 'publishPackageBuild', uploadInfo.uploadToken, bundleResult.tarballHash, bundleResult.treeHash); @@ -655,9 +670,10 @@ exports.publishPackage = function (packageSource, compileResult, conn, options) if (options.new) { process.stdout.write('Creating package...\n'); try { - var packageId = conn.call('createPackage', { - name: packageSource.name - }); + var packageId = exports.callPackageServer(conn, + 'createPackage', { + name: packageSource.name + }); } catch (err) { process.stderr.write(err.message + "\n"); return 3; @@ -691,7 +707,12 @@ exports.publishPackage = function (packageSource, compileResult, conn, options) dependencies: packageDeps }; try { - var uploadInfo = conn.call('createPackageVersion', uploadRec); +console.log(conn.connected); +//var conn2 = exports.loggedInPackagesConnection(); +//console.log(conn2.connection); + + var uploadInfo = exports.callPackageServer(conn, + 'createPackageVersion', uploadRec); } catch (err) { process.stderr.write("ERROR " + err.message + "\n"); return 3; @@ -706,10 +727,11 @@ exports.publishPackage = function (packageSource, compileResult, conn, options) process.stdout.write('Publishing package version...\n'); try { - conn.call('publishPackageVersion', - uploadInfo.uploadToken, - { tarballHash: sourceBundleResult.tarballHash, - treeHash: sourceBundleResult.treeHash }); + exports.callPackageServer(conn, + 'publishPackageVersion', + uploadInfo.uploadToken, + { tarballHash: sourceBundleResult.tarballHash, + treeHash: sourceBundleResult.treeHash }); } catch (err) { process.stderr.write("ERROR " + err.message + "\n"); return 3; @@ -734,7 +756,7 @@ exports.amIAuthorized = function (name, conn, isRelease) { (isRelease ? "Release" : "Package"); try { - conn.call(methodName, name); + exports.callPackageServer(conn, methodName, name); } catch (err) { if (err.error === 401) { return false; diff --git a/tools/service-connection.js b/tools/service-connection.js index ed4531cafd..760d28dde6 100644 --- a/tools/service-connection.js +++ b/tools/service-connection.js @@ -36,6 +36,7 @@ var ServiceConnection = function (Package, endpointUrl, options) { connectTimeoutMs: 15000, retry: false, onConnected: function () { + self.connected = true; if (!self.currentFuture) throw Error("nobody waiting for connection?"); if (self.currentFuture !== connectFuture) @@ -51,6 +52,7 @@ var ServiceConnection = function (Package, endpointUrl, options) { // 10-second timeout built into our DDP client). var connectFuture = self.currentFuture = new Future; self.connection._stream.on('disconnect', function (error) { + self.connected = false; if (error && error.errorType === "DDP.ForcedReconnectError") { // OK, we requested this, probably due to version negotation failure. //