You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by hu...@apache.org on 2021/08/06 06:47:53 UTC

[dubbo-js] branch master updated: refactor: dubbo-service port

This is an automated email from the ASF dual-hosted git repository.

hufeng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/dubbo-js.git


The following commit(s) were added to refs/heads/master by this push:
     new db7564a  refactor: dubbo-service port
db7564a is described below

commit db7564a27e4d8a24094825aa5baf618f380a781f
Author: hufeng <fe...@gmail.com>
AuthorDate: Fri Aug 6 14:47:29 2021 +0800

    refactor: dubbo-service port
---
 package.json                       |  1 +
 packages/dubbo-service/src/port.ts | 22 ++++++++++++----------
 2 files changed, 13 insertions(+), 10 deletions(-)

diff --git a/package.json b/package.json
index 3d54199..a4ce2df 100644
--- a/package.json
+++ b/package.json
@@ -22,6 +22,7 @@
     "@types/node-zookeeper-client": "^0.2.6",
     "@types/prettier": "^2.2.3",
     "@types/uuid": "3.4.3",
+    "@types/proper-lockfile": "^4.1.2",
     "chalk": "^4.1.1",
     "glob": "^7.1.7",
     "husky": "^6.0.0",
diff --git a/packages/dubbo-service/src/port.ts b/packages/dubbo-service/src/port.ts
index 3e8c207..a8dcccb 100644
--- a/packages/dubbo-service/src/port.ts
+++ b/packages/dubbo-service/src/port.ts
@@ -33,17 +33,13 @@ export class PortManager {
     if (this.isMasterProcess) {
       // create dubbo lock file
       fs.ensureFileSync(LOCK_FILE)
-    } else {
-      this.clearPidPort()
     }
+    // listen process exit event
+    // and clean port/pid file content
+    this.clearPidPort()
   }
 
   async getReusedPort(): Promise<number> {
-    if (this.isMasterProcess) {
-      this.port = await this.getFreePort()
-      return this.port
-    }
-
     try {
       // set file lock
       const release = await lockfile.lock(LOCK_FILE, {
@@ -58,9 +54,9 @@ export class PortManager {
       for (let portPid of portPidFiles) {
         const file = fs.readFileSync(path.join(ROOT, portPid)).toString()
         if (file === '') {
-          release()
           fs.writeFileSync(path.join(ROOT, portPid), String(process.pid))
           this.port = Number(portPid)
+          await release()
           return this.port
         } else {
           excludes.push(Number(portPid))
@@ -69,7 +65,7 @@ export class PortManager {
 
       this.port = await this.getFreePort(excludes)
       fs.writeFileSync(path.join(ROOT, String(this.port)), String(process.pid))
-      release()
+      await release()
       return this.port
     } catch (err) {
       throw err
@@ -85,7 +81,11 @@ export class PortManager {
     }
 
     const availablePort = ports.filter((port) => !exclude.includes(port))[0]
-    dlog('get random port %d in master mode', availablePort)
+    dlog(
+      'get random port %d in %s mode',
+      availablePort,
+      this.isMasterProcess ? 'master' : 'worker'
+    )
     return availablePort
   }
 
@@ -100,9 +100,11 @@ export class PortManager {
       'SIGINT',
       'SIGUSR2',
       'SIGUSR1',
+      'SIGKILL',
       'SIGTERM',
       'uncaughtException'
     ].forEach((event) => {
+      dlog('bind %s event', event)
       process.on(event, cleanup)
     })
   }