|
@@ -1,15 +1,29 @@
|
|
|
|
|
+const loggerFactory = require('@alias/logger');
|
|
|
|
|
+
|
|
|
const { ReconnectContext, nextTick } = require('../service/search-reconnect-context/reconnect-context');
|
|
const { ReconnectContext, nextTick } = require('../service/search-reconnect-context/reconnect-context');
|
|
|
|
|
|
|
|
|
|
+const logger = loggerFactory('growi:middlewares:auto-reconnect-to-search');
|
|
|
|
|
+
|
|
|
module.exports = (crowi) => {
|
|
module.exports = (crowi) => {
|
|
|
const { searchService } = crowi;
|
|
const { searchService } = crowi;
|
|
|
const reconnectContext = new ReconnectContext();
|
|
const reconnectContext = new ReconnectContext();
|
|
|
- const reconnectHandler = () => {
|
|
|
|
|
- searchService.reconnectClient();
|
|
|
|
|
|
|
+
|
|
|
|
|
+ const reconnectHandler = async() => {
|
|
|
|
|
+ try {
|
|
|
|
|
+ logger.info('Auto reconnection is started.');
|
|
|
|
|
+ await searchService.reconnectClient();
|
|
|
|
|
+ }
|
|
|
|
|
+ catch (err) {
|
|
|
|
|
+ logger.error('Auto reconnection failed.');
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
return searchService.isReachable;
|
|
return searchService.isReachable;
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
return (req, res, next) => {
|
|
return (req, res, next) => {
|
|
|
if (searchService != null && !searchService.isReachable) {
|
|
if (searchService != null && !searchService.isReachable) {
|
|
|
|
|
+ // NON-BLOCKING CALL
|
|
|
|
|
+ // for the latency of the response
|
|
|
nextTick(reconnectContext, reconnectHandler);
|
|
nextTick(reconnectContext, reconnectHandler);
|
|
|
}
|
|
}
|
|
|
|
|
|