@harperfast/harper 5.2.4 → 5.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/bin/restart.ts +48 -23
  2. package/bin/restartExitWatchdog.ts +99 -0
  3. package/bin/run.ts +16 -10
  4. package/components/status/crossThread.ts +69 -44
  5. package/components/status/types.ts +1 -0
  6. package/dist/bin/restart.js +39 -21
  7. package/dist/bin/restart.js.map +1 -1
  8. package/dist/bin/restartExitWatchdog.d.ts +5 -0
  9. package/dist/bin/restartExitWatchdog.js +100 -0
  10. package/dist/bin/restartExitWatchdog.js.map +1 -0
  11. package/dist/bin/run.d.ts +2 -0
  12. package/dist/bin/run.js +17 -10
  13. package/dist/bin/run.js.map +1 -1
  14. package/dist/components/status/crossThread.d.ts +1 -0
  15. package/dist/components/status/crossThread.js +57 -41
  16. package/dist/components/status/crossThread.js.map +1 -1
  17. package/dist/components/status/types.d.ts +1 -0
  18. package/dist/resources/DatabaseTransaction.d.ts +46 -1
  19. package/dist/resources/DatabaseTransaction.js +173 -9
  20. package/dist/resources/DatabaseTransaction.js.map +1 -1
  21. package/dist/resources/LMDBTransaction.d.ts +2 -0
  22. package/dist/resources/LMDBTransaction.js +7 -1
  23. package/dist/resources/LMDBTransaction.js.map +1 -1
  24. package/dist/resources/Resource.js +5 -4
  25. package/dist/resources/Resource.js.map +1 -1
  26. package/dist/resources/ResourceInterface.d.ts +20 -0
  27. package/dist/resources/ResourceInterface.js.map +1 -1
  28. package/dist/resources/Table.js +56 -9
  29. package/dist/resources/Table.js.map +1 -1
  30. package/dist/resources/indexes/HierarchicalNavigableSmallWorld.d.ts +11 -0
  31. package/dist/resources/indexes/HierarchicalNavigableSmallWorld.js +153 -51
  32. package/dist/resources/indexes/HierarchicalNavigableSmallWorld.js.map +1 -1
  33. package/dist/resources/transaction.js +4 -2
  34. package/dist/resources/transaction.js.map +1 -1
  35. package/dist/server/itc/serverHandlers.js +2 -1
  36. package/dist/server/itc/serverHandlers.js.map +1 -1
  37. package/dist/server/threads/manageThreads.d.ts +2 -0
  38. package/dist/server/threads/manageThreads.js +37 -5
  39. package/dist/server/threads/manageThreads.js.map +1 -1
  40. package/dist/utility/processManagement/processManagement.js +21 -3
  41. package/dist/utility/processManagement/processManagement.js.map +1 -1
  42. package/npm-shrinkwrap.json +2 -2
  43. package/package.json +1 -1
  44. package/resources/DESIGN.md +19 -18
  45. package/resources/DatabaseTransaction.ts +187 -17
  46. package/resources/LMDBTransaction.ts +7 -1
  47. package/resources/Resource.ts +6 -5
  48. package/resources/ResourceInterface.ts +20 -0
  49. package/resources/Table.ts +60 -8
  50. package/resources/indexes/HierarchicalNavigableSmallWorld.ts +153 -54
  51. package/resources/transaction.ts +5 -3
  52. package/schema.graphql +8 -3
  53. package/server/DESIGN.md +6 -0
  54. package/server/itc/serverHandlers.js +2 -1
  55. package/server/threads/manageThreads.js +34 -5
  56. package/studio/web/assets/{Chat-BvOlYIhe.js → Chat-BNHY84-Z.js} +1 -1
  57. package/studio/web/assets/{FloatingChat-fCJiJCH2.js → FloatingChat-BbztUci0.js} +3 -3
  58. package/studio/web/assets/{apiToken-bKwPv0uN.js → apiToken-D0x_S8Wq.js} +1 -1
  59. package/studio/web/assets/{applications-BZ47njJ_.js → applications-BU83fSEG.js} +1 -1
  60. package/studio/web/assets/{index-DF1fSnXV.js → index-BQB9R8Ug.js} +4 -4
  61. package/studio/web/assets/{index.lazy-DWt8ubrr.js → index.lazy-CtErm5q7.js} +3 -3
  62. package/studio/web/assets/{notifications-B5ZBOni1.js → notifications-B8rDagJM.js} +1 -1
  63. package/studio/web/assets/{notifications-gVx0lA8H.js → notifications-CPwYKDDH.js} +1 -1
  64. package/studio/web/assets/{profile-D7g0x28A.js → profile-D0hB1xdm.js} +1 -1
  65. package/studio/web/assets/{regions-DRkhlkiD.js → regions-y_jxsBpN.js} +1 -1
  66. package/studio/web/assets/{setComponentFile-DQkkobG5.js → setComponentFile-DSHbURTI.js} +1 -1
  67. package/studio/web/assets/{setup-nf-EOheW.js → setup-J5SrM1Kp.js} +1 -1
  68. package/studio/web/assets/{status-B2tOM3RF.js → status-IoJkDzlx.js} +1 -1
  69. package/studio/web/assets/{swagger-ui-react-UktCouQ0.js → swagger-ui-react-BlgSS25O.js} +1 -1
  70. package/studio/web/assets/{useEntityRestURL-alqAn3dT.js → useEntityRestURL-qfahJnvr.js} +1 -1
  71. package/studio/web/index.html +1 -1
  72. package/utility/processManagement/processManagement.js +19 -3
@@ -1 +1 @@
1
- import{n as e}from"./authStore-B3IhXrn6.js";import{k as t,z as n}from"./vendor-tanstack-FsM5XZNE.js";import{a as r}from"./pollUnlessForbidden-DIDXGBc5.js";import{nn as i}from"./index-DF1fSnXV.js";function a(e){return new URL(e.match(/^https?:\/\//i)?e:`https://${e}`).toString()}function o(e){if(e?.domains){for(let t of e.domains)if(t.domain)return a(t.domain)}return e?.fqdn?a(e.fqdn):null}function s(){let{clusterId:a,instanceId:s}=t({strict:!1}),c=r(),{data:l}=n(i(a));return a&&e.checkForFabricConnect(a)||s&&e.checkForFabricConnect(s)||l&&!s?o(l):c.defaults.baseURL?c.defaults.baseURL.replace(/:9925\/?/,``):null}export{s as t};
1
+ import{n as e}from"./authStore-B3IhXrn6.js";import{k as t,z as n}from"./vendor-tanstack-FsM5XZNE.js";import{a as r}from"./pollUnlessForbidden-DIDXGBc5.js";import{nn as i}from"./index-BQB9R8Ug.js";function a(e){return new URL(e.match(/^https?:\/\//i)?e:`https://${e}`).toString()}function o(e){if(e?.domains){for(let t of e.domains)if(t.domain)return a(t.domain)}return e?.fqdn?a(e.fqdn):null}function s(){let{clusterId:a,instanceId:s}=t({strict:!1}),c=r(),{data:l}=n(i(a));return a&&e.checkForFabricConnect(a)||s&&e.checkForFabricConnect(s)||l&&!s?o(l):c.defaults.baseURL?c.defaults.baseURL.replace(/:9925\/?/,``):null}export{s as t};
@@ -21,7 +21,7 @@
21
21
  } catch (e) {}
22
22
  })();
23
23
  </script>
24
- <script type="module" crossorigin src="/assets/index-DF1fSnXV.js"></script>
24
+ <script type="module" crossorigin src="/assets/index-BQB9R8Ug.js"></script>
25
25
  <link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-B0Z9INg1.js">
26
26
  <link rel="modulepreload" crossorigin href="/assets/vendor-core-CddkYGh5.js">
27
27
  <link rel="modulepreload" crossorigin href="/assets/vendor-datadog-XDrpA25D.js">
@@ -10,6 +10,8 @@ const path = require('node:path');
10
10
  const { setTimeout: delay } = require('node:timers/promises');
11
11
  const { execFile, fork } = require('node:child_process');
12
12
 
13
+ const INIT_PROCESS_NAMES = new Set(['catatonit', 'docker-init', 'dumb-init', 'init', 's6-svscan', 'systemd', 'tini']);
14
+
13
15
  module.exports = {
14
16
  start,
15
17
  restart,
@@ -119,13 +121,27 @@ function getHdbPid() {
119
121
  if (!harperPath) return;
120
122
  const pidFile = path.join(harperPath, hdbTerms.HDB_PID_FILE);
121
123
  const hdbPid = readPidFile(pidFile);
122
- // If the pid file doesn't exist or the pid is the same as the current process, return.
123
- // In a Docker container, the pid is usually 1, and so if a previous process crashed, there will still
124
- // be a pid file with 1, even though this process is also 1 (and is running, but is not another harper process).
125
124
  if (!hdbPid || hdbPid === process.pid) return;
125
+ // A persistent volume from an older image may contain PID 1 after the current image puts an init at that PID.
126
+ if (hdbPid === 1 && isInitProcess(hdbPid)) return;
126
127
  if (isProcessRunning(hdbPid)) return hdbPid;
127
128
  // return undefined
128
129
  }
130
+
131
+ function isInitProcess(pid) {
132
+ try {
133
+ const executable = path.basename(fs.readlinkSync(`/proc/${pid}/exe`)).replace(/ \(deleted\)$/, '');
134
+ if (INIT_PROCESS_NAMES.has(executable)) return true;
135
+ } catch {
136
+ // Some procfs configurations expose the process name but restrict the executable symlink.
137
+ }
138
+ try {
139
+ return INIT_PROCESS_NAMES.has(fs.readFileSync(`/proc/${pid}/comm`, 'utf8').trim());
140
+ } catch {
141
+ // Fail closed: an unidentified live PID still blocks a second Harper process.
142
+ return false;
143
+ }
144
+ }
129
145
  function kill() {
130
146
  for (let process of childProcesses) {
131
147
  process.kill();