Move 'ns not found' into mongo adapter. (#1541)

This commit is contained in:
Drew
2016-04-18 17:06:51 -07:00
parent ab0ea09067
commit cecb2a1cb1
4 changed files with 12 additions and 27 deletions

View File

@@ -70,8 +70,15 @@ export class MongoStorageAdapter {
});
}
dropCollection(name: string) {
return this.collection(this._collectionPrefix + name).then(collection => collection.drop());
dropCollection(className: string) {
return this.collection(this._collectionPrefix + className).then(collection => collection.drop())
.catch(error => {
// 'ns not found' means collection was already gone. Ignore deletion attempt.
if (error.message == 'ns not found') {
return Promise.resolve();
}
return Promise.reject(error);
});
}
// Used for testing only right now.

View File

@@ -44,10 +44,6 @@ DatabaseController.prototype.collectionExists = function(className) {
return this.adapter.collectionExists(className);
};
DatabaseController.prototype.dropCollection = function(className) {
return this.adapter.dropCollection(className);
};
DatabaseController.prototype.validateClassName = function(className) {
if (this.skipValidation) {
return Promise.resolve();

View File

@@ -70,7 +70,7 @@ var removeJoinTables = (database, mongoSchema) => {
.filter(field => mongoSchema[field].startsWith('relation<'))
.map(field => {
let collectionName = `_Join:${field}:${mongoSchema._id}`;
return database.dropCollection(collectionName);
return database.adapter.dropCollection(collectionName);
})
);
};
@@ -94,17 +94,7 @@ function deleteSchema(req) {
return removeJoinTables(req.config.database, document);
});
})
.then(() => {
// Success
return { response: {} };
}, error => {
if (error.message == 'ns not found') {
// If they try to delete a non-existent class, that's fine, just let them.
return { response: {} };
}
return Promise.reject(error);
});
.then(() => ({ response: {} }));
}
export class SchemasRouter extends PromiseRouter {

View File

@@ -541,15 +541,7 @@ class SchemaController {
if (this.data[className][fieldName].type == 'Relation') {
//For relations, drop the _Join table
return database.adapter.deleteFields(className, [fieldName], [])
.then(() => database.dropCollection(`_Join:${fieldName}:${className}`))
.catch(error => {
// 'ns not found' means collection was already gone. Ignore deletion attempt.
// TODO: 'ns not found' is a mongo implementation detail. Move it into mongo adapter.
if (error.message == 'ns not found') {
return Promise.resolve();
}
return Promise.reject(error);
});
.then(() => database.adapter.dropCollection(`_Join:${fieldName}:${className}`));
}
const fieldNames = [fieldName];