when talking to the package server, try to reconnect

This commit is contained in:
ekatek
2014-09-14 17:02:10 -07:00
parent 67b98ffecc
commit 856110c4ce
3 changed files with 63 additions and 30 deletions

View File

@@ -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);

View File

@@ -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;

View File

@@ -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.
//