My goal: Workflows starts successfully and workflows can be run via the UI using Retool-managed Temporal.
Issue: We have two instances of Retool Self-Hosted and on one of the instances workflows-worker-1 fails to start and repeatedly restarts. See error log below.
Retool version & hosting setup (Docker, K8s, cloud provider, etc.): 3.196.0-stable, Docker on AWS EC2 with a PostgreSQL database.
Error message(s) or screenshots:
workflows-worker-1 | sed: can't read ./dist/*.js: No such file or directory
workflows-worker-1 | sed: can't read ./dist/**/*.html: No such file or directory
workflows-worker-1 | [WARN tini (7)] Tini is not running as PID 1 and isn't registered as a child subreaper.
workflows-worker-1 | Zombie processes will not be re-parented to Tini, so zombie reaping won't work.
workflows-worker-1 | To fix the problem, use the -s option or set the environment variable TINI_SUBREAPER to register Tini as a child subreaper, or run Tini as PID 1.
workflows-worker-1 | {"level":"info","message":"Not configuring StatsD...","timestamp":"2025-07-24T08:49:44.780Z"}
workflows-worker-1 | {"level":"info","message":"[process service types] WORKFLOW_TEMPORAL_WORKER","timestamp":"2025-07-24T08:49:45.509Z"}
workflows-worker-1 | {"level":"info","message":"Not configuring StatsD...","timestamp":"2025-07-24T08:49:46.924Z"}
workflows-worker-1 | {"level":"info","message":"Not configuring StatsD...","timestamp":"2025-07-24T08:49:46.925Z"}
workflows-worker-1 | (node:10) [DEP0005] DeprecationWarning: Buffer() is deprecated due to security and usability issues. Please use the Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() methods instead.
workflows-worker-1 | (Use `node --trace-deprecation ...` to show where the warning was created)
workflows-worker-1 | {"level":"info","message":"installing temporal runtime","timestamp":"2025-07-24T08:49:47.043Z"}
workflows-worker-1 | {"level":"info","message":"Rechecking license status...","timestamp":"2025-07-24T08:49:47.047Z"}
workflows-worker-1 | (node:10) NOTE: We are formalizing our plans to enter AWS SDK for JavaScript (v2) into maintenance mode in 2023.
workflows-worker-1 |
workflows-worker-1 | Please migrate your code to use AWS SDK for JavaScript (v3).
workflows-worker-1 | For more information, check the migration guide at https://a.co/7PzMCcy
workflows-worker-1 | {"level":"info","message":"license check http response code: 200","timestamp":"2025-07-24T08:49:47.343Z"}
workflows-worker-1 | {"level":"info","message":"License key feature flag overrides: {}","timestamp":"2025-07-24T08:49:47.387Z"}
workflows-worker-1 | {"level":"info","message":"Updated license status from licensing server","timestamp":"2025-07-24T08:49:47.390Z"}
workflows-worker-1 | {"err":{"message":"Cannot read properties of undefined (reading 'sid')","stack":"TypeError: Cannot read properties of undefined (reading 'sid')\n at MQ6 (/retool_backend/bundle/main.js:218:16930)\n at $i (/retool_backend/bundle/main.js:218:17307)\n at Onr (/retool_backend/bundle/main.js:255:3353)\n at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n at async Object.GsT (/retool_backend/bundle/main.js:11238:14317)"},"level":"error","message":"ANALYTICS_TRACKING_ERROR","stack":"TypeError: Cannot read properties of undefined (reading 'sid')\n at MQ6 (/retool_backend/bundle/main.js:218:16930)\n at $i (/retool_backend/bundle/main.js:218:17307)\n at Onr (/retool_backend/bundle/main.js:255:3353)\n at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n at async Object.GsT (/retool_backend/bundle/main.js:11238:14317)","timestamp":"2025-07-24T08:49:47.390Z"}
workflows-worker-1 | [withRequestId] called from outside an async context
workflows-worker-1 | {"level":"info","message":{"http":{"method":"GET","url_path":"http://code-executor:3004/api/checkHealth"},"type":"CLIENT_REQUEST"},"timestamp":"2025-07-24T08:49:47.415Z"}
workflows-worker-1 | (node:10) [DEP0106] DeprecationWarning: crypto.createDecipher is deprecated.
workflows-worker-1 | {"level":"info","message":{"http":{"method":"GET","request":{"time":0.01703752600000007},"url_path":"http://code-executor:3004/api/checkHealth"},"status":200,"type":"CLIENT_FINISH"},"timestamp":"2025-07-24T08:49:47.432Z"}
workflows-worker-1 | {"level":"info","message":"creating temporal worker connection","timestamp":"2025-07-24T08:49:47.570Z"}
workflows-worker-1 | /retool_backend/node_modules/.pnpm/@temporalio+worker@1.11.6_@swc+helpers@0.5.3_metro@0.80.9_encoding@0.1.13_metro-minify-terser@0.80.9_/node_modules/@temporalio/worker/lib/connection.js:58
workflows-worker-1 | throw new core_bridge_1.TransportError(err.message);
workflows-worker-1 | ^
workflows-worker-1 |
workflows-worker-1 | TransportError: Failed to call GetSystemInfo: status: Unknown, message: "transport error", details: [], metadata: MetadataMap { headers: {} }
workflows-worker-1 | at NativeConnection.connect (/retool_backend/node_modules/.pnpm/@temporalio+worker@1.11.6_@swc+helpers@0.5.3_metro@0.80.9_encoding@0.1.13_metro-minify-terser@0.80.9_/node_modules/@temporalio/worker/lib/connection.js:58:23)
workflows-worker-1 | at async $W (/retool_backend/bundle/main.js:2959:17389)
workflows-worker-1 | at async uts (/retool_backend/bundle/main.js:11238:9746)
workflows-worker-1 | at async Object.GsT (/retool_backend/bundle/main.js:11238:14445)
workflows-worker-1 |
workflows-worker-1 | Node.js v20.18.1
workflows-worker-1 exited with code 1
What I’ve tried so far:
Restart the server using sudo docker-compose up -d
I submitted this to Retool support and they provided a resolution.
The summary is that we have 2 instances of Retool and the database for the 2nd instance was created using a copy of the 1st. This resulted in both instances sharing the same temporal namespace.
Worker identities must be unique within a Temporal cluster and therefore your worker can't start up.