Ver Fonte

Merge pull request #3263 from weseek/master

release v4.2.5
Yuki Takei há 5 anos atrás
pai
commit
eaa57b9f2c

+ 9 - 0
CHANGES.md

@@ -1,5 +1,10 @@
 # CHANGES
 # CHANGES
 
 
+## v4.2.5-RC
+
+* Improvement: Invoke garbage collection when reindex all pages by elasticsearch
+* Fix: MathJax rendering does not work
+
 ## v4.2.4
 ## v4.2.4
 
 
 * Fix: Fixed an error when creating a new page with `Ctrl-S`
 * Fix: Fixed an error when creating a new page with `Ctrl-S`
@@ -48,6 +53,10 @@
     * migrate-mongo
     * migrate-mongo
     * mongoose
     * mongoose
 
 
+## v4.1.13
+
+* Fix: MathJax rendering does not work
+
 ## v4.1.12
 ## v4.1.12
 
 
 * Fix: Adjust line-height for pre under li
 * Fix: Adjust line-height for pre under li

+ 2 - 2
package.json

@@ -1,6 +1,6 @@
 {
 {
   "name": "growi",
   "name": "growi",
-  "version": "4.2.4-RC",
+  "version": "4.2.5-RC",
   "description": "Team collaboration software using markdown",
   "description": "Team collaboration software using markdown",
   "tags": [
   "tags": [
     "wiki",
     "wiki",
@@ -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",

+ 1 - 1
resource/cdn-manifests.js

@@ -39,7 +39,7 @@ module.exports = {
     },
     },
     {
     {
       name: 'mathjax',
       name: 'mathjax',
-      url: 'https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js',
+      url: 'https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js',
       args: {
       args: {
         async: true,
         async: true,
         integrity: '',
         integrity: '',

+ 1 - 1
src/client/js/components/Navbar/GrowiSubNavigation.jsx

@@ -44,7 +44,7 @@ const PagePathNav = ({
   }
   }
 
 
   const copyDropdownId = `copydropdown${isCompactMode ? '-subnav-compact' : ''}-${pageId}`;
   const copyDropdownId = `copydropdown${isCompactMode ? '-subnav-compact' : ''}-${pageId}`;
-  const copyDropdownToggleClassName = 'd-block text-muted bg-transparent btn-copy border-0';
+  const copyDropdownToggleClassName = 'd-block text-muted bg-transparent btn-copy border-0 py-0';
 
 
   return (
   return (
     <div className="grw-page-path-nav">
     <div className="grw-page-path-nav">

+ 2 - 2
src/client/js/components/Page/RevisionBody.jsx

@@ -42,8 +42,8 @@ export default class RevisionBody extends React.PureComponent {
     //   So, before MathJax is initialized, execute renderMathJaxWithDebounce again.
     //   So, before MathJax is initialized, execute renderMathJaxWithDebounce again.
     //   Avoiding initialization of MathJax of draw.io solves the problem.
     //   Avoiding initialization of MathJax of draw.io solves the problem.
     //   refs: https://github.com/jgraph/drawio/pull/831
     //   refs: https://github.com/jgraph/drawio/pull/831
-    if (MathJax != null && MathJax.Hub != null) {
-      MathJax.Hub.Queue(['Typeset', MathJax.Hub, this.element]);
+    if (MathJax != null) {
+      MathJax.typesetPromise([this.element]);
     }
     }
     else {
     else {
       this.renderMathJaxWithDebounce();
       this.renderMathJaxWithDebounce();

+ 1 - 1
src/client/js/components/SearchForm.jsx

@@ -75,7 +75,7 @@ class SearchForm extends React.Component {
     }
     }
 
 
     if (!isShownHelp) {
     if (!isShownHelp) {
-      return null;
+      return <></>;
     }
     }
 
 
     return (
     return (

+ 2 - 1
src/client/styles/scss/_on-edit.scss

@@ -139,7 +139,8 @@ body.on-edit {
       .grw-tag-labels.form-inline {
       .grw-tag-labels.form-inline {
         flex-flow: row nowrap;
         flex-flow: row nowrap;
         width: 100%;
         width: 100%;
-        overflow-x: scroll;
+        overflow-x: auto;
+        scrollbar-width: thin;
       }
       }
     }
     }
   }
   }

+ 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) {