alfred: bat-hosts.lua: 'alfred -r' can fail with no output, so retry 3 times
authorGui Iribarren <gui@altermundi.net>
Sun, 7 Aug 2016 22:35:35 +0000 (00:35 +0200)
committerGui Iribarren <gui@altermundi.net>
Tue, 28 Mar 2017 19:41:13 +0000 (16:41 -0300)
Signed-off-by: Gui Iribarren <gui@altermundi.net>
alfred/Makefile
alfred/files/bat-hosts.lua

index 8b2d9e3..b0dffbc 100644 (file)
@@ -12,7 +12,7 @@ include $(TOPDIR)/rules.mk
 #
 PKG_NAME:=alfred
 PKG_VERSION:=2017.0
-PKG_RELEASE:=0
+PKG_RELEASE:=1
 PKG_MD5SUM:=2e9ae897b1d477f14d06389eb7c1f97b
 PKG_HASH:=f8d6d83d2ce30b2238354ce12073285387c0f4ca1a28060390ff50b411b50fa8
 
index 8648caf..f9fe586 100644 (file)
@@ -87,19 +87,24 @@ end
 
 local function receive_bat_hosts()
 -- read raw chunks from alfred, convert them to a nested table and call write_bat_hosts
-  local fd = io.popen("alfred -r " .. type_id)
-    --[[ this command returns something like
-    { "54:e6:fc:b9:cb:37", "00:11:22:33:44:55 ham_wlan0\x0a00:22:33:22:33:22 ham_eth0\x0a" },
-    { "90:f6:52:bb:ec:57", "00:22:33:22:33:23 spam\x0a" },
-    ]]--
-
-  if fd then
-    local output = fd:read("*a")
-    if output then
-      assert(loadstring("rows = {" .. output .. "}"))()
-      write_bat_hosts(rows)
+-- "alfred -r" can fail in slave nodes (returns empty stdout), so:
+-- check output is not null before writing /tmp/bat-hosts, and retry 3 times before giving up.
+  for n = 1, 3 do
+    local fd = io.popen("alfred -r " .. type_id)
+      --[[ this command returns something like
+      { "54:e6:fc:b9:cb:37", "00:11:22:33:44:55 ham_wlan0\x0a00:22:33:22:33:22 ham_eth0\x0a" },
+      { "90:f6:52:bb:ec:57", "00:22:33:22:33:23 spam\x0a" },
+      ]]--
+
+    if fd then
+      local output = fd:read("*a")
+      fd:close()
+      if output and output ~= "" then
+        assert(loadstring("rows = {" .. output .. "}"))()
+        write_bat_hosts(rows)
+        break
+      end
     end
-    fd:close()
   end
 end