Re: Question about connecting to a node and proposed patch
Bill Clementson <[email protected]> Thu, 28 Jun 2007 08:12:19 -0700
| Newsgroups | gmane.comp.lang.erlang.distel.devel |
|---|---|
| Message-ID | <[email protected]> |
Matthias, Matthias Radestock <[email protected]> writes: > Bill Clementson <[email protected]> writes: > >> Have you tried debugging the erl-check-backend call to determine why >> it's failing to load the distel beam files on the target node or do >> you have any clues as to why it's not working (other than the badrpc >> messages)? > > I have only spent a short time debugging this problem. I have a > workaround (using .erlang) that works ok, and my elisp debugging skills > aren't strong enough to be confident I would be able to fix the issue in a > reasonable time. I'll give it another try though when I have a spare few > hours. > >>> I use "C-c C-d n" for its documented purpose - to select "the nodename >>> to connect to in future.". So, for example, I often use the same node >>> for a long time and frequently restart it, and don't want to have to >>> think about / find out whether the node is up or down when typing "C-c >>> C-d n". >> >> But, since all "C-c C-d n" seems to do is change the current node that >> distel deals with and update the node name in the mode line [...] > > Correct. And that is all it is supposed to do. I want to keep it that > way. > >> However, I agree that my patch doesn't deal with nodes that are >> bumped/restarted. > > That is a major regression. Not from the current state of affairs, > obviously, but from the original design and how things work when not > using the new auto code-loading feature. > >>> As a stop-gap solution, may I suggest another key-bound command >>> "erl-ping" which executes the erl-spawn call from your patch on >>> (erl-target-node), i.e. it will work like most other distel commands by >>> prompting for a node if none is currently selected and performing the >>> action (in this case a call to erlang:node()) on it. >> >> I dislike having a separate "erl-ping" function as it is something >> that one has to manually do (and know when to do it). > > You can invoke that command *instead* of "C-c C-d n" in order to connect > (rather than just select) the first time, and subsequently reconnect > after node bounces. This isn't any more manual than what you currently > do; it's just a different command. ok > To let us switch nodes, we make the command prompt us for a node name > when invoked with a prefix argument (C-u ...) - something I wish all > distel commands did. Give this code a try: > > (defun erl-ping (node) > "Ping the NODE, uploading distel code as a side effect." > (interactive (list (if current-prefix-arg > (erl-choose-nodename) > (erl-target-node)))) > (erl-spawn > (erl-send-rpc node 'erlang 'node nil) > (erl-receive (node) > ((['rex response] > (if (equal node response) > (message "Successfully communicated with remote node %S" > node) > (message "Failed to communicate with node %S: %S" > node response))))))) > > So, to connect and reconnect just run 'M-x erl-ping'. To switch nodes > (and connect) run 'C-u M-x erl-ping'. Works for me. > Any suggestions for a key-binding? 'C-c C-d @' or 'C-c C-d !' perhaps? "C-c C-d @" seems appropriate. - Bill ------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/