Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • Effectively, you can only develop MPS History Server inside Eclipse on lcls-builder.
  • Check out the CVS module physics/mps/mpshist into your workspace in the LCLS VLAN
    • From now on, the root of project is referred to as $MPSHIST_ROOT
  • Use ant to build the jars.
  • Stop the production version of mpshist and run the version in your workspace.
  • After you are done, remember to stop you version and run the production version

Dependencies

  • ezJCA (version R0-0-10)
  • javainterfaces (current version)
  • MPS Config
  • xal4lcls
    • ext.jar (current version)
    • xal.jar (current version)

...

  • Select $MPSGUI_ROOT/src/edu.stanford.slac.mpshist/MpsHistManager
  • Right-click => select Run As... => Java Application
  • If you run the app for the first time, it should fail
    • Go to Run in the Window menu
    • Select "Open Run Dialog..."
    • Select "MpsHistManager" in the window on the left
    • Select the "Arguments" tab
    • Enter the following arguments:

      Code Block
      
      /usr/local/lcls/epics/iocTop/MachineProtection/mpsConfiguration/database/XYZ/mpsdb.sqlite3 password
      
      • XYZ - the current Config version (caget IOC:BSY0:MP01:DBVERS)
      • password - the current password (see also #Launch Script)
        in the "Program arguments" area.
      • Stop the production server (see #Start / Stop)
      • Start an instance of MPS GUI
    • Press "Run"
  • "Poke" MPS

    Code Block
    
    caput POSI:EP02:400:MTLM_LGC_BYPV 1
    

    wait 10 seconds!

    Code Block
    
    caput POSI:EP02:400:MTLM_LGC_BYPV 0
    
  • Check the HistoryViewer tab on the MPS GUI
  • Stop MpsHistManager
  • Important: start the production server (see #Start / Stop)

...

  • Java representation of an MPS message
Code Block

///****************************************************************************
// * Data Pointers
// ****************************************************************************/
///* Note: The history message header begins at the first byte of TCP Data
// */
// 
//#define HISTORY_MESSAGE_HEADER_SECTION_POINTER(_pointerToFullMessage)      ((epicsInt8  *)(_pointerToFullMessage)   + 0)
//#define HISTORY_MESSAGE_PROTOCOL_VERSION_POINTER(_pointerToHistoryHeader)  ((epicsUInt8 *)(_pointerToHistoryHeader) + 0)
//#define HISTORY_MESSAGE_TYPE_POINTER(_pointerToHistoryHeader)              ((epicsUInt8 *)(_pointerToHistoryHeader) + 1)
//#define HISTORY_MESSAGE_DATA_SECTION_POINTER(_pointerToHistoryHeader)      ((epicsInt8  *)(_pointerToHistoryHeader) + 2)
//
//#define HISTORY_MESSAGE_PROTOCOL_VERSION(_pointerToHistoryHeader)          (*HISTORY_MESSAGE_PROTOCOL_VERSION_POINTER(_pointerToHistoryHeader))
//#define HISTORY_MESSAGE_TYPE(_pointerToHistoryHeader)                      (*HISTORY_MESSAGE_TYPE_POINTER(_pointerToHistoryHeader))
//
///****************************************************************************
// * Super Message
// ****************************************************************************/
///* All history message struct data.
// */
//
//
//
//#define HISTORY_SUPER_MESSAGE_SIZE                                           (16 + MPSHistoryProtocolHeaderSize)
//
//#define HISTORY_SUPER_TIMESTAMP_SECPASTEPOCH_POINTER(_pointerToHistoryData)  ((epicsUInt32 *)((_pointerToHistoryData) +  0))
//#define HISTORY_SUPER_TIMESTAMP_NSEC_PULSEID_POINTER(_pointerToHistoryData)  ((epicsUInt32 *)((_pointerToHistoryData) +  4))
//#define HISTORY_SUPER_TIMESLOT_POINTER(_pointerToHistoryData)                ((epicsUInt8  *)((_pointerToHistoryData) +  8))
//#define HISTORY_SUPER_TYPE_POINTER(_pointerToHistoryData)                    ((epicsUInt8  *)((_pointerToHistoryData) +  9))
//#define HISTORY_SUPER_ID_POINTER(_pointerToHistoryData)                      ((epicsUInt32 *)((_pointerToHistoryData) + 10))
//#define HISTORY_SUPER_OLD_VALUE_POINTER(_pointerToHistoryData)               ((epicsUInt32 *)((_pointerToHistoryData) + 14))
//#define HISTORY_SUPER_NEW_VALUE_POINTER(_pointerToHistoryData)               ((epicsUInt32 *)((_pointerToHistoryData) + 18))
//
//#define HISTORY_SUPER_TIMESTAMP_SECPASTEPOCH(_pointerToHistoryData)          (*HISTORY_SUPER_TIMESTAMP_SECPASTEPOCH_POINTER(_pointerToHistoryData))
//#define HISTORY_SUPER_TIMESTAMP_NSEC_PULSEID(_pointerToHistoryData)          (*HISTORY_SUPER_TIMESTAMP_NSEC_PULSEID_POINTER(_pointerToHistoryData))
//#define HISTORY_SUPER_TIMESLOT(_pointerToHistoryData)                        (*HISTORY_SUPER_TIMESLOT_POINTER(_pointerToHistoryData))
//#define HISTORY_SUPER_TYPE(_pointerToHistoryData)                            (*HISTORY_SUPER_TYPE_POINTER(_pointerToHistoryData))
//#define HISTORY_SUPER_ID(_pointerToHistoryData)                              (*HISTORY_SUPER_ID_POINTER(_pointerToHistoryData))
//#define HISTORY_SUPER_OLD_VALUE(_pointerToHistoryData)                       (*HISTORY_SUPER_OLD_VALUE_POINTER(_pointerToHistoryData))
//#define HISTORY_SUPER_NEW_VALUE(_pointerToHistoryData)                       (*HISTORY_SUPER_NEW_VALUE_POINTER(_pointerToHistoryData))

...

  • An instance of Runnable that periodically saves messages to the Oracle DB

  • Eli wrote a PL/SQL procedure that hides (almost) all the details

    Code Block
    
    BEGIN MPS_HISTORY.MPS_HISTORY_PKG.DML_%s1 (%s2); END;
    
    • %s1 = table name
    • %s2 = CSVs in the same order as in the schema with following caveats:
      • top-to-bottom = left-to-right
      • ignore the ID column
      • replace the FKs with enums from the referenced table

...

  • Contains (almost) all parameters and settings for the module
    • Including the address of the MPS IOC that sends messages

      Code Block
      
      public static final InetSocketAddress SOCKET_ADDRESS = new InetSocketAddress("ioc-bsy0-mp01.slac.stanford.edu", 30000);
      

...

  • Add a note in $MPSHIST_ROOT/RELEASE_NOTES
    • Increment the tag version accordingly
  • Commit to CVS
  • Tag with mpshist-R#-#-#
  • Check out the tagged version into production

    Code Block
    
    cd $PHYSICS_TOP/release
    cvs co -r mpshist-R#-#-# -d mpshist-R#-#-# physics/mps/mpshist
    
  • Select File => New Java project => Create project from existing source
  • Select $PHYSICS_TOP/release/mpshist-R#-#-#
  • Name the project mpshist-R#-#-#
  • Press "Finish"
  • Right-click on the new project mpshist-R#-#-# => Export...
  • Select Java => JAR file
  • Check mpshist-R#-#-# in "Resources to export"
  • Check "Export generated class files and resources"
  • As the export destination, type (and/or select)

    Code Block
    
    $PHYSICS_TOP/release/mpshist-R#-#-#/jar/mpshist.jar
    
  • Press "Finish"
  • Move the symbolic link

    Code Block
    
    cd $PHYSICS_TOP/
    rm -rf mpshist; ln -s release/mpshist-R#-#-# mpshist
    

...

  • Only one MPS History Server is active at any time
  • To start a new server, you must login as laci on lcls-daemon2

    Code Block
    
    /etc/rc3.d/S99st.mpshist start
    
  • To stop a production server, type

    Code Block
    
    /etc/rc3.d/S99st.mpshist stop
    
    • Wait 10 seconds!

...

  • To check for cmlog messages, specify "MPS History" as facility.

Is the server running?

  • To test whether the Server is running, go as laci to lcls-daemon2

    Code Block
    
    ps -ef | grep mpshist
    
  • Also, check nohup.out in laci's home directory

Is the server working?

  • To test whether the server is working, use POSI:EP02:400:MTLM_LGC_BYPV, e.g.

    Code Block
    
    caput POSI:EP02:400:MTLM_LGC_BYPV 1
    caput POSI:EP02:400:MTLM_LGC_BYPV 0
    

    Verify that there is a message in the MPS GUI (not in cmlog).

Reboot

...