Browse Source

Merge pull request #3248 from weseek/fix/4202-4203-add-gabage-collection

Fix/4202 4203 add gabage collection
itizawa 5 years ago
parent
commit
eda88fea03
2 changed files with 15 additions and 3 deletions
  1. 1 1
      package.json
  2. 14 2
      src/server/service/search-delegator/elasticsearch.js

+ 1 - 1
package.json

@@ -58,7 +58,7 @@
     "i18n-json-merge:noTran": "rs-i18n -lan --",
     "i18n-json-merge:noTran": "rs-i18n -lan --",
     "i18n-json-merge": "npm run i18n-json-merge:withTran --",
     "i18n-json-merge": "npm run i18n-json-merge:withTran --",
     "server:nolazy": "env-cmd -f config/env.dev.js node-dev --nolazy --inspect src/server/app.js",
     "server:nolazy": "env-cmd -f config/env.dev.js node-dev --nolazy --inspect src/server/app.js",
-    "server:dev": "env-cmd -f config/env.dev.js node-dev --inspect src/server/app.js",
+    "server:dev": "env-cmd -f config/env.dev.js node-dev --expose_gc --inspect src/server/app.js",
     "server:prod:ci": "npm run server:prod -- --ci",
     "server:prod:ci": "npm run server:prod -- --ci",
     "server:prod": "env-cmd -f config/env.prod.js node src/server/app.js",
     "server:prod": "env-cmd -f config/env.prod.js node src/server/app.js",
     "server": "npm run server:dev",
     "server": "npm run server:dev",

+ 14 - 2
src/server/service/search-delegator/elasticsearch.js

@@ -344,7 +344,7 @@ class ElasticsearchDelegator {
 
 
   addAllPages() {
   addAllPages() {
     const Page = mongoose.model('Page');
     const Page = mongoose.model('Page');
-    return this.updateOrInsertPages(() => Page.find(), true);
+    return this.updateOrInsertPages(() => Page.find(), { isEmittingProgressEvent: true, invokeGarbageCollection: true });
   }
   }
 
 
   updateOrInsertPageById(pageId) {
   updateOrInsertPageById(pageId) {
@@ -355,7 +355,9 @@ class ElasticsearchDelegator {
   /**
   /**
    * @param {function} queryFactory factory method to generate a Mongoose Query instance
    * @param {function} queryFactory factory method to generate a Mongoose Query instance
    */
    */
-  async updateOrInsertPages(queryFactory, isEmittingProgressEvent = false) {
+  async updateOrInsertPages(queryFactory, option = {}) {
+    const { isEmittingProgressEvent = false, invokeGarbageCollection = false } = option;
+
     const Page = mongoose.model('Page');
     const Page = mongoose.model('Page');
     const { PageQueryBuilder } = Page;
     const { PageQueryBuilder } = Page;
     const Bookmark = mongoose.model('Bookmark');
     const Bookmark = mongoose.model('Bookmark');
@@ -465,6 +467,16 @@ class ElasticsearchDelegator {
           logger.error('addAllPages error on add anyway: ', err);
           logger.error('addAllPages error on add anyway: ', err);
         }
         }
 
 
+        if (invokeGarbageCollection) {
+          try {
+            // First aid to prevent unexplained memory leaks
+            global.gc();
+          }
+          catch (err) {
+            logger.error('fail garbage collection: ', err);
+          }
+        }
+
         callback();
         callback();
       },
       },
       final(callback) {
       final(callback) {