1. 03 Aug, 2018 3 commits
  2. 18 Jun, 2018 1 commit
  3. 08 May, 2018 1 commit
  4. 07 May, 2018 1 commit
  5. 26 Apr, 2018 4 commits
    • Jameson Rollins's avatar
    • Jameson Rollins's avatar
      update TODO · d0680a94
      Jameson Rollins authored
    • Jameson Rollins's avatar
      daemon: tweak loop timing diagnostics · d31ed108
      Jameson Rollins authored
      clarify int microseconds.
    • Jameson Rollins's avatar
      don't update cas driver PV values after every setitem · 0478c9e6
      Jameson Rollins authored
      Here we do batch updating of the driver PVs, rather than after every setitem.
      driver.updatePVs is a heavy operation, proving to be most of the CPU load
      during profiling.  Batch updating reduces the number of updatePVs calls by an order of magnitude, from
      roughly 100 per cycle (when coupled with cas.__setitem__) to roughly 10 in
      the current implementation.
      Unfortunately there's some way that updatePVs seems to affect client writes
      that is not yet understood.  We should only have to call updatePVs twice in
      the main loop to push out all updates.  But some weird behavior was observed,
      where client writes didn't seem to take affect.  This needs to be investigated
      more, but in the mean time calling updatePVs around process seems to behave
      The ordering in the channel updates as seen by the tests changes slightly,
      since all updates happen as a batch rather than individually when they are
  6. 25 Apr, 2018 5 commits
  7. 21 Apr, 2018 1 commit
  8. 20 Apr, 2018 7 commits
    • Jameson Rollins's avatar
      Release 1.2.0 · 9444aa5e
      Jameson Rollins authored
    • Jameson Rollins's avatar
      run tests before release · d56a204f
      Jameson Rollins authored
    • Jameson Rollins's avatar
      daemon: add records for daemon loop times · a670f517
      Jameson Rollins authored
      Track time in main part of daemon loop (MAINTIME) and full loop time
    • Jameson Rollins's avatar
    • Jameson Rollins's avatar
      single thread: move CAS processing out of separate thread into main daemon thread thread · 4c853b8b
      Jameson Rollins authored
      This is a fairly large overhaul of the original threading model that had
      the pcaspy portable channel access server in a separate thread.  We here
      bring the cas back in to the main thread, and process it's select loop at
      the top of the daemon main loop.
      Digging into the seg faults [0] with an instrumented address sanitizer
      versions of python and pcaspy we discovered that pcaspy is not thread safe.
      When run in a separate thread pcaspy was producing a strncpy
      heap-use-after-free when pushing the unit CTRL sub-record (gdb showed that
      it was in strncpy of the string "seconds", where the only use of "seconds"
      in guardian is in unit sub-record for EXECTIME).  Attempts to wrap guardian's
      reading and writing to cas driver records was not sufficient, and cas does
      not provide any hooks to locks for it's access either.  So why not try to
      get rid of the separate cas thread altogether...
      The cas.process() is moved in to the dead time at the top of the main daemon
      loop, where it was waiting for the clock tick. This has the side affect of actually
      synchonizing to the wall clock microsecond step (good?).
      The rest of the patch is just cleanup to remove all the old thread/lock
      stuff that is no longer needed, and to simplify the relevant interfaces.
      [0] https://alog.ligo-wa.caltech.edu/aLOG/index.php?callRep=40765
    • Jameson Rollins's avatar
      guardctrl: default GUARDCTRL_HOST = ${IFO}guardian · 6a553dc4
      Jameson Rollins authored
      remove the numeric suffix since we'll be using this base address to point
      to the correct host via DNS
    • Jameson Rollins's avatar
      test: more aggressive subprocess cleanup · 5e03fd74
      Jameson Rollins authored
      It looks like a lot of the test failures were due to "kill && wait" not
      actually/properly killing the backgrounded processes from the test, even
      though the test "completed" successfully.  The wait the never returns,
      and the whole test is then killed by timeout, which is equivalent to a fail.
      Here add a kill_jobs function to the local lib which aggressively kills
      all background processes.  This seems to have reduced spurious test failures
  9. 17 Apr, 2018 5 commits
  10. 15 Apr, 2018 7 commits
  11. 23 Mar, 2018 1 commit
  12. 21 Mar, 2018 1 commit
    • Jameson Rollins's avatar
      archive: context manager for repo · 260b7c30
      Jameson Rollins authored
      In some versions of git-python, the repo will hold open files in
      "git cat-file" subprocess calls.  The solution seems to be to delete the
      Repo object after use.
      This hopefully closes #4
  13. 20 Mar, 2018 2 commits
  14. 16 Mar, 2018 1 commit
    • Jameson Rollins's avatar
      guardview: ncurses multi-node status view · ab252c80
      Jameson Rollins authored
      This is an urwid/ncurses based EPICS client program to show a status
      overview of many clients at once.  Connections for many nodes should happen
      fast, with status updates happening in callbacks.
      Needs some work, but mostly works as needed.