Skip to content

Commit

Permalink
Bump node.js from v14.21.3 to v18.15.0
Browse files Browse the repository at this point in the history
Revert "add node fiber to improve performance (opensearch-project#2319)"
Revert "[CVE-2022-25758] Use dart-sass instead of node-sass (opensearch-project#2054)"
Revert back to use node-sass and bump to 8.0.0
Change lmdb-store to lmdb
Bump node.js to 18 and fix errors

Issue Resolved:
opensearch-project#3601

Signed-off-by: Anan Zhuang <ananzh@amazon.com>
  • Loading branch information
ananzh committed Mar 15, 2023
1 parent 1e127b0 commit 94320cb
Show file tree
Hide file tree
Showing 28 changed files with 486 additions and 162 deletions.
2 changes: 1 addition & 1 deletion .node-version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
14.21.3
18.15.0
2 changes: 1 addition & 1 deletion .nvmrc
Original file line number Diff line number Diff line change
@@ -1 +1 @@
14.21.3
18.15.0
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
ARG NODE_VERSION=14.20.1
ARG NODE_VERSION=18.15.0
FROM node:${NODE_VERSION} AS base

ENV HOME '.'
Expand Down
1 change: 1 addition & 0 deletions config/node.options
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@

## max size of old space in megabytes
#--max-old-space-size=4096
--openssl-legacy-provider
8 changes: 4 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@
"url": "https://github.com/opensearch-project/opensearch-dashboards.git"
},
"resolutions": {
"**/@types/node": "^14.17.32",
"**/@types/node": "18.11.18",
"**/ansi-regex": "^5.0.1",
"**/async": "^3.2.3",
"**/d3-color": "^3.1.0",
Expand Down Expand Up @@ -165,7 +165,7 @@
"deep-freeze-strict": "^1.1.1",
"del": "^6.1.1",
"dns-sync": "^0.2.1",
"elastic-apm-node": "^3.7.0",
"elastic-apm-node": "^3.43.0",
"elasticsearch": "^16.7.0",
"http-aws-es": "6.0.0",
"execa": "^4.0.2",
Expand Down Expand Up @@ -300,7 +300,7 @@
"@types/mock-fs": "^4.10.0",
"@types/moment-timezone": "^0.5.12",
"@types/mustache": "^0.8.31",
"@types/node": "^14.17.32",
"@types/node": "18.11.18",
"@types/node-forge": "^1.0.1",
"@types/normalize-path": "^3.0.0",
"@types/pegjs": "^0.10.1",
Expand Down Expand Up @@ -467,7 +467,7 @@
"zlib": "^1.0.5"
},
"engines": {
"node": "^14.20.1",
"node": "^18.15.0",
"yarn": "^1.22.10"
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions packages/osd-dev-utils/src/proc_runner/proc.ts
Original file line number Diff line number Diff line change
Expand Up @@ -153,15 +153,15 @@ export function startProc(name: string, options: ProcOptions, log: ToolingLog) {
await withTimeout(
async () => {
log.debug(`Sending "${signal}" to proc "${name}"`);
await treeKillAsync(childProcess.pid, signal);
await treeKillAsync(childProcess.pid!, signal);
await outcomePromise;
},
STOP_TIMEOUT,
async () => {
log.warning(
`Proc "${name}" was sent "${signal}" didn't emit the "exit" or "error" events after ${STOP_TIMEOUT} ms, sending SIGKILL`
);
await treeKillAsync(childProcess.pid, 'SIGKILL');
await treeKillAsync(childProcess.pid!, 'SIGKILL');
}
);

Expand Down
2 changes: 1 addition & 1 deletion packages/osd-interpreter/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
"del": "^6.1.1",
"getopts": "^2.2.5",
"pegjs": "0.10.0",
"sass-loader": "^10.2.0",
"sass-loader": "^10.4.1",
"style-loader": "^1.1.3",
"supports-color": "^7.0.0",
"url-loader": "^2.2.0",
Expand Down
2 changes: 1 addition & 1 deletion packages/osd-monaco/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"main": "./target/index.js",
"license": "Apache-2.0",
"scripts": {
"build": "node ./scripts/build.js",
"build": "export NODE_OPTIONS=--openssl-legacy-provider && node ./scripts/build.js",
"osd:bootstrap": "yarn build --dev"
},
"dependencies": {
Expand Down
7 changes: 3 additions & 4 deletions packages/osd-optimizer/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,16 +25,15 @@
"dedent": "^0.7.0",
"del": "^6.1.1",
"execa": "^4.0.2",
"fibers": "^5.0.3",
"jest-diff": "^27.5.1",
"js-yaml": "^3.14.0",
"json-stable-stringify": "^1.0.1",
"lmdb-store": "^1.6.11",
"lmdb": "^2.7.10",
"node-sass": "^8.0.0",
"normalize-path": "^3.0.0",
"pirates": "^4.0.1",
"postcss": "^8.4.5",
"rxjs": "^6.5.5",
"sass": "~1.26.11",
"source-map-support": "^0.5.19",
"terser-webpack-plugin": "^2.1.2",
"tinymath": "1.2.1",
Expand All @@ -54,7 +53,7 @@
"loader-utils": "^2.0.4",
"postcss-loader": "^4.2.0",
"raw-loader": "^4.0.2",
"sass-loader": "^10.2.0",
"sass-loader": "^10.4.1",
"style-loader": "^1.1.3",
"url-loader": "^2.2.0",
"val-loader": "^2.1.2",
Expand Down

Large diffs are not rendered by default.

24 changes: 12 additions & 12 deletions packages/osd-optimizer/src/node/cache.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ import Path from 'path';
import { Writable } from 'stream';

import chalk from 'chalk';
import * as LmdbStore from 'lmdb-store';
import * as LmdbStore from 'lmdb';
import { getMatchingRoot } from '@osd/cross-platform';

const GLOBAL_ATIME = `${Date.now()}`;
Expand Down Expand Up @@ -96,8 +96,8 @@ export class Cache {
// keys which haven't been used in 30 days. We use `unref()` to
// make sure this timer doesn't hold other processes open
// unexpectedly
this.timer = setTimeout(() => {
this.pruneOldKeys();
this.timer = setTimeout(async () => {
await this.pruneOldKeys();
}, 30 * MINUTE);

// timer.unref is not defined in jest which emulates the dom by default
Expand Down Expand Up @@ -134,12 +134,13 @@ export class Cache {
async update(path: string, file: { mtime: string; code: string; map: any }) {
const key = this.getKey(path);

await Promise.all([
this.safePut(this.atimes, key, GLOBAL_ATIME),
this.safePut(this.mtimes, key, file.mtime),
this.safePut(this.codes, key, file.code),
this.safePut(this.sourceMaps, key, JSON.stringify(file.map)),
]);
this.safePut(this.atimes, key, GLOBAL_ATIME);
this.safePut(this.mtimes, key, file.mtime);
this.safePut(this.codes, key, file.code);

if (file.map != null) {
this.safePut(this.sourceMaps, key, JSON.stringify(file.map));
}
}

close() {
Expand Down Expand Up @@ -172,9 +173,9 @@ export class Cache {
}
}

private async safePut<V>(db: LmdbStore.Database<V, string>, key: string, value: V) {
private safePut<V>(db: LmdbStore.Database<V, string>, key: string, value: V) {
try {
await db.put(key, value);
db.putSync(key, value);
this.debug('PUT', db, key);
} catch (error) {
this.logError('PUT', db, key, error);
Expand Down Expand Up @@ -204,7 +205,6 @@ export class Cache {
const validKeys: string[] = [];
const invalidKeys: string[] = [];

// @ts-expect-error See https://github.com/DoctorEvidence/lmdb-store/pull/18
for (const { key, value } of this.atimes.getRange()) {
const atime = parseInt(`${value}`, 10);
if (Number.isNaN(atime) || atime < ATIME_LIMIT) {
Expand Down
1 change: 1 addition & 0 deletions packages/osd-optimizer/src/optimizer/observe_worker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ function usingWorkerProc<T>(
? [`${inspectFlag}=${inspectPortCounter++}`]
: []),
...(config.maxWorkerCount <= 3 ? ['--max-old-space-size=2048'] : []),
'--openssl-legacy-provider',
],
buffer: false,
stderr: 'pipe',
Expand Down
6 changes: 5 additions & 1 deletion packages/osd-optimizer/src/optimizer/optimizer_config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@

import Path from 'path';
import Os from 'os';
import { existsSync } from 'fs';

import {
Bundle,
Expand Down Expand Up @@ -179,9 +180,12 @@ export class OptimizerConfig {
Path.resolve(repoRoot, 'src/plugins'),
Path.resolve(repoRoot, 'plugins'),
...(examples ? [Path.resolve('examples')] : []),
Path.resolve(repoRoot, 'opensearch-dashboards-extra'),
];

if (existsSync(Path.resolve(repoRoot, 'opensearch-dashboards-extra'))) {
pluginScanDirs.push(Path.resolve(repoRoot, 'opensearch-dashboards-extra'));
}

if (!pluginScanDirs.every((p) => Path.isAbsolute(p))) {
throw new TypeError('pluginScanDirs must all be absolute paths');
}
Expand Down
5 changes: 2 additions & 3 deletions packages/osd-optimizer/src/worker/webpack.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -176,12 +176,11 @@ export function getWebpackConfig(bundle: Bundle, bundleRefs: BundleRefs, worker:
)};\n${content}`;
},
webpackImporter: false,
implementation: require('sass'),
implementation: require('node-sass'),
sassOptions: {
outputStyle: 'compressed',
outputStyle: 'nested',
includePaths: [Path.resolve(worker.repoRoot, 'node_modules')],
sourceMapRoot: `/${bundle.type}:${bundle.id}`,
fiber: require('fibers'),
},
},
},
Expand Down
1 change: 0 additions & 1 deletion packages/osd-pm/dist/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -27300,7 +27300,6 @@ function getProjectPaths({
projectPaths.push(Object(path__WEBPACK_IMPORTED_MODULE_0__["resolve"])(rootPath, 'plugins/*/packages/*'));
projectPaths.push(Object(path__WEBPACK_IMPORTED_MODULE_0__["resolve"])(rootPath, 'plugins/*/plugins/*'));
}

return projectPaths;
}

Expand Down
2 changes: 1 addition & 1 deletion packages/osd-pm/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
"@types/lodash": "^4.14.170",
"@types/log-symbols": "^2.0.0",
"@types/ncp": "^2.0.1",
"@types/node": "^14.17.32",
"@types/node": "18.11.18",
"@types/ora": "^1.3.5",
"@types/read-pkg": "^4.0.0",
"@types/strip-ansi": "^5.2.1",
Expand Down
2 changes: 1 addition & 1 deletion packages/osd-ui-framework/Gruntfile.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
* under the License.
*/

const sass = require('sass');
const sass = require('node-sass');
const postcss = require('postcss');
const postcssConfig = require('@osd/optimizer/postcss.config.js');

Expand Down
2 changes: 1 addition & 1 deletion packages/osd-ui-framework/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
"grunt-babel": "^8.0.0",
"grunt-contrib-clean": "^2.0.0",
"grunt-contrib-copy": "^1.0.0",
"sass": "~1.26.11",
"node-sass": "^8.0.0",
"postcss": "^8.4.5",
"sinon": "^7.4.2"
}
Expand Down
4 changes: 2 additions & 2 deletions packages/osd-ui-shared-deps/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
"private": true,
"license": "Apache-2.0",
"scripts": {
"build": "node scripts/build",
"osd:bootstrap": "node scripts/build --dev",
"build": "node --openssl-legacy-provider scripts/build",
"osd:bootstrap": "node --openssl-legacy-provider scripts/build --dev",
"osd:watch": "node scripts/build --dev --watch"
},
"dependencies": {
Expand Down
3 changes: 2 additions & 1 deletion scripts/bwc/opensearch_dashboards_service.sh
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ function setup_dashboards() {
[ $SECURITY_ENABLED == "false" ] && echo "server.host: 0.0.0.0" >> config/opensearch_dashboards.yml
echo "csp.warnLegacyBrowsers: false" >> config/opensearch_dashboards.yml
echo "--max-old-space-size=5120" >> config/node.options
echo "--openssl-legacy-provider" >> config/node.options
}

# Starts OpenSearch Dashboards
Expand All @@ -29,4 +30,4 @@ function check_dashboards_status {
cd "$DIR"
check_status $DASHBOARDS_PATH "$DASHBOARDS_MSG" $DASHBOARDS_URL "$OPENSEARCH_ARGS" >> /dev/null 2>&1
echo "OpenSearch Dashboards is up!"
}
}
6 changes: 4 additions & 2 deletions src/core/server/bootstrap.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,13 @@
*/

import chalk from 'chalk';
import { isMaster as isClusterManager } from 'cluster';
import cluster from 'cluster';
import { CliArgs, Env, RawConfigService } from './config';
import { Root } from './root';
import { CriticalError } from './errors';

let isClusterManager = cluster.isMaster;

interface OpenSearchDashboardsFeatures {
// Indicates whether we can run OpenSearch Dashboards in a so called cluster mode in which
// OpenSearch Dashboards is run as a "worker" process together with optimizer "worker" process
Expand Down Expand Up @@ -97,7 +99,7 @@ export async function bootstrap({
// in order to be able to reload the log configuration
// under the cluster mode
process.on('message', (msg) => {
if (!msg || msg.reloadLoggingConfig !== true) {
if (!msg || (msg as any).reloadLoggingConfig !== true) {
return;
}

Expand Down
2 changes: 1 addition & 1 deletion src/core/server/http/router/validator/validator.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ describe('Router validator', () => {
expect(() => validator.getParams({})).toThrowError('[foo]: Not a string');

expect(() => validator.getParams(undefined)).toThrowError(
`Cannot read property 'foo' of undefined`
`Cannot read properties of undefined (reading 'foo')`
);
expect(() => validator.getParams({}, 'myField')).toThrowError('[myField.foo]: Not a string');

Expand Down
4 changes: 2 additions & 2 deletions src/core/server/status/plugins_status.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ interface Deps {

export class PluginsStatusService {
private readonly pluginStatuses = new Map<PluginName, Observable<ServiceStatus>>();
private readonly update$ = new BehaviorSubject(true);
private readonly update$ = new BehaviorSubject<boolean>(true);
private readonly defaultInheritedStatus$: Observable<ServiceStatus>;

constructor(private readonly deps: Deps) {
Expand Down Expand Up @@ -121,7 +121,7 @@ export class PluginsStatusService {

return combineLatest(pluginStatuses).pipe(
map((statuses) => Object.fromEntries(statuses)),
distinctUntilChanged(isDeepStrictEqual)
distinctUntilChanged<Record<PluginName, ServiceStatus>>(isDeepStrictEqual)
);
})
);
Expand Down
4 changes: 2 additions & 2 deletions src/core/server/status/status_service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ export class StatusService implements CoreService<InternalStatusServiceSetup> {
this.logger.debug(`Recalculated overall status`, { status: summary });
return summary;
}),
distinctUntilChanged(isDeepStrictEqual),
distinctUntilChanged<ServiceStatus<unknown>>(isDeepStrictEqual),
shareReplay(1)
);

Expand Down Expand Up @@ -149,7 +149,7 @@ export class StatusService implements CoreService<InternalStatusServiceSetup> {
opensearch: opensearchStatus,
savedObjects: savedObjectsStatus,
})),
distinctUntilChanged(isDeepStrictEqual),
distinctUntilChanged<CoreStatus>(isDeepStrictEqual),
shareReplay(1)
);
}
Expand Down
2 changes: 1 addition & 1 deletion src/dev/ci_setup/setup_env.sh
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ cacheDir="$HOME/.opensearch_dashboards"
RED='\033[0;31m'
C_RESET='\033[0m' # Reset color

export NODE_OPTIONS="$NODE_OPTIONS --max-old-space-size=4096"
export NODE_OPTIONS="$NODE_OPTIONS --max-old-space-size=4096 --openssl-legacy-provider"

###
### Since the Jenkins logging output collector doesn't look like a TTY
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1003,7 +1003,7 @@ describe('migration visualization', () => {
`);
expect(logMsgArr).toMatchInlineSnapshot(`
Array [
"Exception @ migrateGaugeVerticalSplitToAlignment! TypeError: Cannot read property 'gauge' of undefined",
"Exception @ migrateGaugeVerticalSplitToAlignment! TypeError: Cannot read properties of undefined (reading 'gauge')",
"Exception @ migrateGaugeVerticalSplitToAlignment! Payload: {\\"type\\":\\"gauge\\"}",
]
`);
Expand Down
Loading

0 comments on commit 94320cb

Please sign in to comment.