Skip to content

Broken Pipe is not an error; it's a feature #962

Description

@roberthadow

Programming embedded systems is no easy feat. Getting an MCU to do the right thing is easy. Making sure that it can gracefully recover from every anomoly is the art. When we hang a solar node on a tower, we expect it to recover from cloudy days and heavy traffic. The Meshtastic development team has done a good job supporting a wide variety of devices.

I have been putting my stable of Heltec devices through its paces, working them hard and putting them up wet.

Here's a snippet of what I asked a node to do 2000 times.

for ((i=0; i<loops; i++))
do
  echo " "
  echo "Series $i of $loops"
  meshtastic --tcp $DUTIP --get security.public_key
  meshtastic --tcp $DUTIP --nodes --show-fields user.shortName,user.publicKey,since
done
 
./test.nodes.analysis.sh

That generated 32 MB of terminal output, mostly error messages, dominated by BrokenPipeError: [Errno 32] Broken pipe. It wasn't an error at all. The next line was Connected to Radio. Then my request was fulfilled correctly.

Sure, somethig went wrong, but the system recovered and did what it was asked to do. Broken Pipe isn't an error. It's a condition that occurred 93% of the time in the course of doing what the user asked.

Test series planned:             2000  
Series completed:                2000
Meshtastic commands executed:    4000
All Broken pipes:                3737
Unexpected OS Error, Errno 104:  5
--reset No route:                0
PKI_UNKNOWN_PUBKEY:              0
PKI_SEND_FAIL_PUBLIC_KEY:        0
NO_CHANNEL:                      0
 
security.public_key gotten okay: 1997
nodelist gotten okay:            1996

Ninety-three percent (93.4%) of these two simple meshtastic commands generate [Errno 32]. There is no significant difference between responses to the two commands.

Yes, there are still 0.5% of these two commands failing. That will require some more sleuthing.

In the mean time, since Broken Pipe isn't a showstopper, let's rename it and bury the messages. It is, apparentlty, part of normal operation.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions