<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="340657" data-post-id="340657">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="jaybe78" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/jaybe78/120/36069_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  jaybe78
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Well I’m kind of a beginner in elixir, I come from nodeJs + I don’t know erlang + I have 6 months ahead of me to release a mvp.<br>
I don’t think I’ll have enough time in that timeframe to learn Erlang and develop my own distributed solution…</p>
<p>That’s why I’m looking for a better solution. I could use Horde but read that some people had a lot of problems with it. May be the easy way out for now is just to save data to a DB or use something like redis ?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="340657" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/processhub-process-distribution-library/58583/32">Post #31</a>
	                </div>
	            </div>
              <div id="likers-container-340657" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="340657"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #31"></div>
  </section>
</div>
    <div class="postbit" id="340662" data-post-id="340662">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="shifters98" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  shifters98
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I can when (if!) its finished/usable - i have restarted 3 times over 5 years, changing the tooling each time.</p>
<p>I have been taking a break from it recently (its more a winter project) so not much to actually share at the moment.</p>
<p>The DSL is very much a ‘in my head’ design rather than something i have coded up yet!  Still reading the Metaprogramming elixir book and looking at other coding examples.</p>
<p>It’s very much a play thing so has no schedule for development etc!</p>
<p>Shifters</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="340662" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/processhub-process-distribution-library/58583/33">Post #32</a>
	                </div>
	            </div>
              <div id="likers-container-340662" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="340662"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #32"></div>
  </section>
</div>
    <div class="postbit" id="340754" data-post-id="340754">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="anuaralfetahe" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/anuaralfetahe/120/29144_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  anuaralfetahe
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I don’t know your specific requirements, which makes it hard to suggest anything.</p>
<p>Horde has been around for a while and is widely used, so I believe it performs well for its intended purpose.</p>
<p>You can also try this library, though it hasn’t been battle-tested yet. It’s still in development, but reported bugs will be addressed.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="340754" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/processhub-process-distribution-library/58583/34">Post #33</a>
	                </div>
	            </div>
              <div id="likers-container-340754" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="340754"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #33"></div>
  </section>
</div>
    <div class="postbit" id="351986" data-post-id="351986">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="anuaralfetahe" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/anuaralfetahe/120/29144_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  anuaralfetahe
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p><strong>New version <code>0.3.0-alpha</code> released!</strong> <img src="https://forum.elixirforum.com/images/emoji/apple/muscle.png?v=15" title=":muscle:" class="emoji" alt=":muscle:" loading="lazy" width="20" height="20"><br>
This release focuses on performance and stability improvements.</p>
<p><strong>Changelog:</strong></p>
<pre data-code-wrap="elixir"><code class="lang-elixir">### Breaking changes
- `Hook.post_children_start()` now returns: `[{child_id(), result(), pid(), [node()]}]`
- Fixed error handling on process startups and stoppings. Returning more information about the failures and partial successes. Example:`ProcessHub.start_children/3`, `ProcessHub.stop_children/3` with `async_wait: true` now on failures return: `{:error, list_of_failures(), list_of_partial_successes()}`. This does not affect successful operations.

### Added
- Added new option `on_failure: :continue | :rollback` to the `ProcessHub.start_children/3`, `ProcessHub.stop_children/3` functions. This option allows the user to specify what should happen if the operation fails.

### Fixed
- `ProcessHub.Strategy.Redundancy.Replication` was not properly updating the redundancy_signal value on some occasions
due to race condition.
- Fixed issue with `ProcessHub.Janitor` not purging the cache properly when using Gossip protocol.
- State passing on hotswap migration with graceful shutdown fixed.
- Timeout option was not properly used in some cases.

### Changed
- Improved typespecs across the codebase.
- Improved overall performance of start/stop/hotswap migration operations which involved synchronization and large
amount of message passing by using bulk operations.
</code></pre>
<p>I also conducted performance tests, and the results show that synchronous operations and migrations are now multiple orders of magnitude faster.<br>
Many potential issues have also been resolved.</p>
<p>There’s still a lot to improve, but here are the results for spawning <code>X</code> distributed processes across a 10-node cluster and stopping them synchronously:</p>
<p>This includes all distribution logic, registry updates, hooks, event dispatching, and result messages for startups and shutdowns etc.</p>
<p>Up until 10k distributed processes in a 10 node cluster the library does okay imo. On average 2.6 seconds to start and stop everything synchronously. After 20k processes the jump is pretty big.</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">Operating System: Linux
CPU Information: Intel(R) Core(TM) i7-8650U CPU @ 1.90GHz
Number of Available Cores: 8
Available memory: 31.23 GB
Elixir 1.17.1
Erlang 27.0
JIT enabled: true
</code></pre>
<ul>
<li>10 nodes, 10 children</li>
</ul>
<pre data-code-wrap="elixir"><code class="lang-elixir">Name                                         ips        average  deviation         median         99th %
start_&amp;_stop_processes-0.2.10-alpha        27.43       36.46 ms    ±67.09%       33.20 ms       84.64 ms
start_&amp;_stop_processes-0.3.0-alpha        290.82        3.44 ms    ±46.01%        3.26 ms        6.51 ms


Memory usage statistics:

Name                                       average  deviation         median         99th %
start_&amp;_stop_processes-0.2.10-alpha        2.31 MB    ±31.30%        2.83 MB        2.83 MB
start_&amp;_stop_processes-0.3.0-alpha         2.08 MB    ±36.49%        2.82 MB        2.82 MB
</code></pre>
<ul>
<li>10 nodes, 100 children</li>
</ul>
<pre data-code-wrap="elixir"><code class="lang-elixir">Name                                         ips        average  deviation         median         99th %
start_&amp;_stop_processes-0.2.10-alpha         2.50      400.57 ms    ±62.90%      421.35 ms      863.76 ms
start_&amp;_stop_processes-0.3.0-alpha         57.59       17.36 ms    ±47.88%       18.34 ms       35.52 ms

Memory usage statistics:

Name                                       average  deviation         median         99th %
start_&amp;_stop_processes-0.2.10-alpha       31.32 MB    ±12.02%       32.24 MB       32.24 MB
start_&amp;_stop_processes-0.3.0-alpha        24.02 MB    ±33.93%       32.13 MB       32.13 MB
</code></pre>
<ul>
<li>10 nodes, 1000 children</li>
</ul>
<pre data-code-wrap="elixir"><code class="lang-elixir">Name                                         ips        average  deviation         median         99th %
start_&amp;_stop_processes-0.2.10-alpha         0.22         4.49 s    ±27.37%         4.42 s         5.76 s
start_&amp;_stop_processes-0.3.0-alpha          7.00      142.89 ms    ±50.88%      172.62 ms      297.17 ms

Memory usage statistics:

Name                                       average  deviation         median         99th %
start_&amp;_stop_processes-0.2.10-alpha      326.14 MB     ±0.01%      326.14 MB      326.34 MB
start_&amp;_stop_processes-0.3.0-alpha       248.12 MB    ±32.89%      324.90 MB      324.94 MB
</code></pre>
<ul>
<li>10 nodes, 10000 children</li>
</ul>
<pre data-code-wrap="elixir"><code class="lang-elixir">Name                                         ips        average  deviation         median         99th %
start_&amp;_stop_processes-0.2.10-alpha       0.0116       1.44 min     ±0.00%       1.44 min       1.44 min
start_&amp;_stop_processes-0.3.0-alpha          0.38         2.60 s    ±40.86%         3.09 s         3.11 s

Memory usage statistics:

Name                                       average  deviation         median         99th %
start_&amp;_stop_processes-0.2.10-alpha        3.48 GB
start_&amp;_stop_processes-0.3.0-alpha         3.04 GB    ±28.03%        3.47 GB        3.47 GB
</code></pre>
<p>At this point the testing the old version took too much time and I just tested the newer version.</p>
<ul>
<li>10 nodes, 20000 children</li>
</ul>
<pre data-code-wrap="elixir"><code class="lang-elixir">Name                                         ips        average  deviation         median         99th %
start_&amp;_stop_processes-0.3.0-alpha         0.193         5.18 s   ±111.63%         5.18 s         9.27 s

Memory usage statistics:

Name                                       average  deviation         median         99th %
start_&amp;_stop_processes-0.3.0-alpha         5.75 GB    ±46.80%        5.75 GB        7.65 GB
</code></pre>
<ul>
<li>10 nodes, 30000 children</li>
</ul>
<pre data-code-wrap="elixir"><code class="lang-elixir">Name                                         ips        average  deviation         median         99th %
start_&amp;_stop_processes-0.3.0-alpha        0.0277        36.09 s     ±0.00%        36.09 s        36.09 s

Memory usage statistics:

Name                                  Memory usage
start_&amp;_stop_processes-0.3.0-alpha        11.47 GB
</code></pre>
<ul>
<li>10 nodes, 40000 children</li>
</ul>
<pre data-code-wrap="elixir"><code class="lang-elixir">Name                                         ips        average  deviation         median         99th %
start_&amp;_stop_processes-0.3.0-alpha       0.00925       1.80 min     ±0.00%       1.80 min       1.80 min

Memory usage statistics:

Name                                  Memory usage
start_&amp;_stop_processes-0.3.0-alpha        15.95 GB
</code></pre>
<p>Future releases will address the memory allocations.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="351986" data-batch-url="/posts/batch_likers">
                        4
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/processhub-process-distribution-library/58583/35">Post #34</a>
	                </div>
	            </div>
              <div id="likers-container-351986" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="351986"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #34"></div>
  </section>
</div>
    <div class="postbit" id="352503" data-post-id="352503">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="venkatd" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/venkatd/120/9419_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  venkatd
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Hi, we are currently running on a single node and due to scaling challenges (good problem to have!) we are looking at ProcessHub to move to a multi-node setup.</p>
<p>Here is the meat of our code that uses <code>DynamicSupevisor</code> and <code>Registry</code>:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">  @doc """
  Start a child process or return an existing one by the given key
  - If the process is already exists for the key, it is returned
  - If the process doesn't exist for the key, it will be created with config in `{mod, opts}`
  """
  @spec start_child(
          supervisor(),
          term(),
          {module(), keyword()}
        ) :: pid()
  def start_child(supervisor, key, {mod, opts}) do
    # the registry is actually the name of the supervisor
    registry = supervisor

    case lookup_child(registry, key) do
      # Process already exists, just return it
      pid when is_pid(pid) -&gt;
        pid

      nil -&gt;
        {:ok, dynamic_supervisor} = Registry.meta(registry, :dynamic_supervisor)
        via = {:via, Registry, {registry, key}}

        # The child will need to be registered with a via tuple so that we
        # have a stable process name to reference
        opts = Keyword.merge(opts, name: via, restart: :temporary)

        case DynamicSupervisor.start_child(dynamic_supervisor, {mod, opts}) do
          {:ok, pid} -&gt; pid
          {:error, {:already_started, pid}} -&gt; pid
        end
    end
  end
</code></pre>
<p>If I wanted to swap to using ProcessHub, what things would I use to replace <code>DynamicSupervisor</code> and <code>Registry</code>?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="352503" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/processhub-process-distribution-library/58583/36">Post #35</a>
	                </div>
	            </div>
              <div id="likers-container-352503" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="352503"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #35"></div>
  </section>
</div>
    <div class="postbit" id="352547" data-post-id="352547">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="anuaralfetahe" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/anuaralfetahe/120/29144_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  anuaralfetahe
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Hi, something like this should work:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">  @spec start_child(
          atom() | binary(),
          {module(), function(), list()}
        ) :: pid() | {:error, term()}
  def start_child(key, {mod, func, args}) do
    hub_id = :my_hub

    case ProcessHub.get_pid(hub_id, key) do
      pid when is_pid(pid) -&gt;
        pid

      nil -&gt;
        child_spec = %{
          id: key,
          start: {mod, func, args},
          restart: :temporary
        }

        start_res =
          ProcessHub.start_child(hub_id, child_spec, async_wait: true)
          |&gt; ProcessHub.await()

        case start_res do
          {:ok, res} -&gt;
            # Should be in this format: {"somekey", ["node1@127.0.0.1": #PID&lt;0.225.0&gt;]}
            # Or get the pid from the registry
            # `ProcessHub.get_pid(hub_id, key)`
            elem(res, 1) |&gt; List.first() |&gt; elem(1)

          {:error, msg} -&gt;
            {:error, msg}
        end
    end
  end
</code></pre>
<p>I also changed few things:</p>
<ul>
<li>No need to pass registry and supervisor references. You may want to pass the <code>hub_id</code> if you would like it to be dynamic or you’re running multiple hubs on the same node.</li>
<li>We need to construct <code>Supervisor.child_spec()</code> before sending to the ProcessHub (maybe in the future release  {mod, args} will also be supported).</li>
<li>We no longer return only the <code>pid</code> but may also return <code>{:error, msg}</code> because this operation may involve message passing between nodes and at this point you never know what may go wrong.</li>
</ul>
<p>Let me know if anythings unclear.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="352547" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/processhub-process-distribution-library/58583/37">Post #36</a>
	                </div>
	            </div>
              <div id="likers-container-352547" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="352547"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #36"></div>
  </section>
</div>
    <div class="postbit" id="352635" data-post-id="352635">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="venkatd" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/venkatd/120/9419_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  venkatd
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Thanks! I will give this a try <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="352635" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/processhub-process-distribution-library/58583/38">Post #37</a>
	                </div>
	            </div>
              <div id="likers-container-352635" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="352635"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #37"></div>
  </section>
</div>
    <div class="postbit" id="360944" data-post-id="360944">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="shifters98" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  shifters98
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Have you seen Partisan (<a href="https://github.com/lasp-lang/partisan" class="inline-onebox" rel="noopener nofollow ugc">GitHub - lasp-lang/partisan: High-performance, high-scalability distributed computing for the BEAM. · GitHub</a>) as an alternative mechanism for communication between nodes?</p>
<p>Shifters</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="360944" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/processhub-process-distribution-library/58583/39">Post #38</a>
	                </div>
	            </div>
              <div id="likers-container-360944" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="360944"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #38"></div>
  </section>
</div>
    <div class="postbit" id="361535" data-post-id="361535">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="anuaralfetahe" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/anuaralfetahe/120/29144_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  anuaralfetahe
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>This is interesting. In theory, it could work with ProcessHub out of the box if node monitoring is set up similarly. Something to perhaps try.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="361535" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/processhub-process-distribution-library/58583/40">Post #39</a>
	                </div>
	            </div>
              <div id="likers-container-361535" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="361535"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #39"></div>
  </section>
</div>
    <div class="postbit" id="362741" data-post-id="362741">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="anuaralfetahe" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/anuaralfetahe/120/29144_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  anuaralfetahe
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>New version released <code>0.3.2-alpha</code> <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"></p>
<pre data-code-wrap="elixir"><code class="lang-elixir">## v0.3.2-alpha - 2025-04-16
Includes new feature and a breaking change. Minor improvements on documentations and other fixes.

### Breaking changes
- The process state handover has been unified for different types of migrations. Users who previously used HotSwap migration with process state handover and implemented their own custom callbacks instead of using the provided macro, will need to update their callback functions. See `ProcessHub.Strategy.Migration.HotSwap` for examples. This also removes the need to have a separate callback to handle `{:process_hub, :get_state, cid, from}` graceful shutdown migrations.

### Fixed
- Improved error handling. Single child start/stop operation error result no longer returns list.
- Fix: Prevent mix tasks from being included in production build. [https://github.com/alfetahe/process-hub/issues/10]
- Documentation typespecs and some comments.
- Minor code refactors.

### Added
- Adjusted `HookManager` documentation to allow `String.t()` as hook handler keys.
- Added new function `ProcessHub.promote_to_node/2` to handle updating the process registry after turning node node into distributed node. Useful when the node has been started as none distributed and later made into one by calling `Node.start/3` function.
</code></pre> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="362741" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/processhub-process-distribution-library/58583/41">Post #40</a>
	                </div>
	            </div>
              <div id="likers-container-362741" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="362741"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #40"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <a class="load-more-button" data-turbo-stream="true" href="/topics/58583/load_more?page=5">Load more posts (8 remaining)</a>
</div></template></turbo-stream>