From b014225b73bbad8b286340531a3604f50e1d9ae5 Mon Sep 17 00:00:00 2001 From: Wyatt Johnson Date: Tue, 1 May 2018 12:02:39 -0600 Subject: [PATCH 1/2] fixes for index creation --- models/index.js | 34 +++++++++++++++++++++ models/schema/index.js | 15 +-------- plugin-api/beta/server/getReactionConfig.js | 2 +- services/mongoose.js | 6 +--- 4 files changed, 37 insertions(+), 20 deletions(-) create mode 100644 models/index.js diff --git a/models/index.js b/models/index.js new file mode 100644 index 000000000..c783f43e7 --- /dev/null +++ b/models/index.js @@ -0,0 +1,34 @@ +const { reduce } = require('lodash'); +const { CREATE_MONGO_INDEXES } = require('../config'); + +const Action = require('./action'); +const Asset = require('./asset'); +const Comment = require('./comment'); +const Migration = require('./migration'); +const Setting = require('./setting'); +const User = require('./user'); + +const schema = { Action, Asset, Comment, Migration, Setting, User }; + +// Provide the schema to each of the plugins so that they can add in indexes if +// it is enabled. +if (CREATE_MONGO_INDEXES) { + const plugins = require('../services/plugins'); + + // Remap all of the models to their driver reference via the `collection` + // field. + const collections = reduce( + schema, + (collections, model, modelName) => { + collections[modelName] = model.collection; + return collections; + }, + {} + ); + + // Defer the instantiation of the index caller functions when we're creating + // indexes. + plugins.defer('server', 'indexes', ({ indexes }) => { + indexes(collections); + }); +} diff --git a/models/schema/index.js b/models/schema/index.js index 976b437c0..c33402078 100644 --- a/models/schema/index.js +++ b/models/schema/index.js @@ -1,5 +1,3 @@ -const { CREATE_MONGO_INDEXES } = require('../../config'); - const Action = require('./action'); const Asset = require('./asset'); const Comment = require('./comment'); @@ -7,15 +5,4 @@ const Migration = require('./migration'); const Setting = require('./setting'); const User = require('./user'); -const schema = { Action, Asset, Comment, Migration, Setting, User }; - -// Provide the schema to each of the plugins so that they can add in indexes if -// it is enabled. -if (CREATE_MONGO_INDEXES) { - const plugins = require('../../services/plugins'); - plugins.get('server', 'indexes').map(({ indexes }) => { - indexes(schema); - }); -} - -module.exports = schema; +module.exports = { Action, Asset, Comment, Migration, Setting, User }; diff --git a/plugin-api/beta/server/getReactionConfig.js b/plugin-api/beta/server/getReactionConfig.js index da075d76c..68dc3dd5d 100644 --- a/plugin-api/beta/server/getReactionConfig.js +++ b/plugin-api/beta/server/getReactionConfig.js @@ -128,7 +128,7 @@ function getReactionConfig(reaction) { return { typeDefs, indexes: ({ Comment }) => { - Comment.index( + Comment.ensureIndex( { created_at: 1, [`action_counts.${sc(reaction)}`]: 1, diff --git a/services/mongoose.js b/services/mongoose.js index 4e242cf47..48cd34012 100644 --- a/services/mongoose.js +++ b/services/mongoose.js @@ -63,10 +63,6 @@ module.exports = mongoose; // here. No point also in importing this if we're not actually doing any // indexing now. if (CREATE_MONGO_INDEXES) { - require('../models/action'); - require('../models/asset'); - require('../models/comment'); - require('../models/setting'); - require('../models/user'); + require('../models'); require('./migration'); } From d12310026bcc02847f05d21d766b837e8c4ed881 Mon Sep 17 00:00:00 2001 From: Wyatt Johnson Date: Tue, 1 May 2018 15:41:05 -0600 Subject: [PATCH 2/2] Fixes to shema loading --- models/index.js | 34 ------------------ plugin-api/beta/server/getReactionConfig.js | 38 ++++++++------------- services/mongoose.js | 7 +++- 3 files changed, 20 insertions(+), 59 deletions(-) delete mode 100644 models/index.js diff --git a/models/index.js b/models/index.js deleted file mode 100644 index c783f43e7..000000000 --- a/models/index.js +++ /dev/null @@ -1,34 +0,0 @@ -const { reduce } = require('lodash'); -const { CREATE_MONGO_INDEXES } = require('../config'); - -const Action = require('./action'); -const Asset = require('./asset'); -const Comment = require('./comment'); -const Migration = require('./migration'); -const Setting = require('./setting'); -const User = require('./user'); - -const schema = { Action, Asset, Comment, Migration, Setting, User }; - -// Provide the schema to each of the plugins so that they can add in indexes if -// it is enabled. -if (CREATE_MONGO_INDEXES) { - const plugins = require('../services/plugins'); - - // Remap all of the models to their driver reference via the `collection` - // field. - const collections = reduce( - schema, - (collections, model, modelName) => { - collections[modelName] = model.collection; - return collections; - }, - {} - ); - - // Defer the instantiation of the index caller functions when we're creating - // indexes. - plugins.defer('server', 'indexes', ({ indexes }) => { - indexes(collections); - }); -} diff --git a/plugin-api/beta/server/getReactionConfig.js b/plugin-api/beta/server/getReactionConfig.js index 68dc3dd5d..e90a06122 100644 --- a/plugin-api/beta/server/getReactionConfig.js +++ b/plugin-api/beta/server/getReactionConfig.js @@ -2,23 +2,24 @@ const { SEARCH_OTHER_USERS } = require('../../../perms/constants'); const { ErrNotFound, ErrAlreadyExists } = require('../../../errors'); const pluralize = require('pluralize'); const sc = require('snake-case'); -// const { CREATE_MONGO_INDEXES } = require('../../../config'); +const { CREATE_MONGO_INDEXES } = require('../../../config'); +const Comment = require('models/comment'); function getReactionConfig(reaction) { reaction = reaction.toLowerCase(); - // if (CREATE_MONGO_INDEXES) { - // // Create the index on the comment model based on the reaction config. - // CommentModel.collection.createIndex( - // { - // created_at: 1, - // [`action_counts.${sc(reaction)}`]: 1, - // }, - // { - // background: true, - // } - // ); - // } + if (CREATE_MONGO_INDEXES) { + // Create the index on the comment model based on the reaction config. + Comment.collection.createIndex( + { + created_at: 1, + [`action_counts.${sc(reaction)}`]: 1, + }, + { + background: true, + } + ); + } const reactionPlural = pluralize(reaction); const Reaction = reaction.charAt(0).toUpperCase() + reaction.slice(1); @@ -127,17 +128,6 @@ function getReactionConfig(reaction) { return { typeDefs, - indexes: ({ Comment }) => { - Comment.ensureIndex( - { - created_at: 1, - [`action_counts.${sc(reaction)}`]: 1, - }, - { - background: true, - } - ); - }, context: { Sort: () => ({ Comments: { diff --git a/services/mongoose.js b/services/mongoose.js index 48cd34012..167b0d45b 100644 --- a/services/mongoose.js +++ b/services/mongoose.js @@ -63,6 +63,11 @@ module.exports = mongoose; // here. No point also in importing this if we're not actually doing any // indexing now. if (CREATE_MONGO_INDEXES) { - require('../models'); + require('../models/action'); + require('../models/asset'); + require('../models/comment'); + require('../models/migration'); + require('../models/setting'); + require('../models/user'); require('./migration'); }