Transforming VLC into an SA-Aware Application Telecommunications Software Engineering Lab Concordia University Presenters: Anik Mishra and Ali Kanso
Overview Objective of the Work VLC Design of a SAF Compliant VLC Introduction Workflow Design of a SAF Compliant VLC Choosing components Levels of Integration Sample system configuration Evaluation of the Work
Objective of the Work Go through the steps of modifying a regular application for High Availability and Service Continuity using SAF standards Have a running application for testing and analyzing configuration and upgrade campaign generation Document methodology/lessons learned Contrast results achieved with effort required
Introduction to VLC Started as an academic project in 1996 at the École Centrale Paris Intended to consist of a client and server to stream videos across a campus network Server portion later integrated with client Now managed by the VideoLAN non-profit organization
VLC Workflow RTSP server Control module «create» Internet «create» VLM (as needed) File IO, demux, RTP send
Choosing Components Multiple criteria for choosing components: Unit of failure detection and/or recovery One aspect of components is failure detection and recovery Components must be able to be started separately Unit of service At what granularity is the service request? VLC: highly threaded design Each RTP stream in its own thread However, threads are not separable Therefore Two possible configurations
Choosing Components VLC as a Container component: Broadcast: streams as a contained component Each CSI represents one stream VoD: RTSP servers as contained components (?) Each RTSP server is its own CSI? Each different media stream is its own CSI? Container components not supported by OpenSAF at design time VLC as single component Unit of failure: only one process
VLC Component: Arguments VLC needs to be configured Objective: simplest configuration possible One argument: VLC Configuration File Non-proxied non-SA aware SA-aware specified as a command line argument specified as CSI Attribute
Levels of Integration Higher availability & complexity VLC Non-SA Aware Non-proxied VLC SA Aware VLC (no service continuity) VLC with checkpointed positions VLC
Target Configuration Two components IP address VLC Comp category: Non-proxied non-sa-aware: no state SA Aware Dependency: none Depends on IP address component
Configuration Application SG Node 1 SU 1 Node 2 SU 2 IP-Comp IP-Comp VLC-Comp VLC-Comp SI IP-CSI Video-CSI
Redundancy Model Redundancy model should be based on component capabilities and desired availability In our case: Non-proxied Non-SaAware: non-preinstantiable SaAware: 1_active_or_1_standby Chosen redundancy models: Non-proxied Non-SaAware : NoRed SaAware: 2N
Evaluation: Non-Preinstantiable SAF Managed Component Client experience after administrative action Broadcast: video restarts after client resynchronisation timeout (~10 seconds for VLC GUI) VoD: Client required to re-request video stream Benefits: Managed by SAF Administrative functions (like locking) Benefits w/IP component Broadcast: None VoD: Server immediately available at same IP after management operation
Non-Preinstantiable SAF Managed Component: Implementation Problems: VLC failures not detected by OpenSAF (no monitoring) Passive monitoring needed Difficulty: Low Effort: “3” lifecycle commands IMM XML: VLC component: ~295 “lines” IP components: +110 “lines” No changes to VLC needed
Non-Preinstantiable SAF Managed Component: VLC CLC CLI Instantiate: cvlc --daemon --pidfile /var/run/vlc/vlc.pid Terminate kill "$(< /var/run/vlc/vlc.pid)“ Cleanup kill -9 "$(< /var/run/vlc/vlc.pid)“ rm /var/run/vlc/vlc.pid
Non-Preinstantiable SAF Managed Component: IP CLC CLI Instantiate: ip addr add $ip dev $dev arping -U -c 1 –I $dev $ip Terminate/Cleanup ip addr del $ip dev $dev
Evaluation: SA Aware Client Experience: Added Benefits: Same as Non-Preinstantiable However, VLC crashes are noticed (and corrected) without passive monitoring Added Benefits: Program crashes detected by SAF; extra healthchecks possible Configuration through CSI Arguments Faster recovery after failure (executable already pre-instantiated)
SA Aware: Implementation Difficulty: Medium (VLC architecture knowledge needed) Changes to VLC needed: Additional control module Effort: Control module: ~400 lines + 30 lines build system Only “2” lifecycle commands IMM XML: Roughly the same
SA Aware: Control Module Implements VLC’s control module interface Also implements AMF’s callback interface saAmfCSISetCallback saAmfCSIRemoveCallback saAmfComponentTerminateCallback CSI Set can receive 4 states STANDBY ACTIVE QUIESCED QUIESCING
Evaluation: Checkpointing Broadcast Streams Client Experience After Failure: Video resumes at roughly the same position after a brief pause Added Benefits: Better user experience Difficulty: High, edits to main VLC code needed
Checkpointing: Implementation Changes to VLC needed: Edits to VL Manager: Move over current configuration Restart streams at a specific offset Edits to RTP stream_out to bind specific source IP/port Effort: Control module: +~390 LoC VLM and RTP changes: ~150 LoC
VLC modified workflow Control module (OpenSAF) Internet Playlist VLM Video status Video status File IO, demux, RTP send
Non-proxied Non-SaAware VLC Summary Integration level Effort Added benefit Shortcoming Non-proxied Non-SaAware VLC Lowest No changes to VLC SAF managed Redundant server is available after failure (After a failure) User experiences service outage User has to request the video again (VoD) SaAware VLC Higher New VLC control module Crashes automatically detected by AMF Faster recovery No service continuity (the video starts over after failure) With Checkpointing Highest Additional changes to control module Synchronization through checkpoint service Better user experience (after a failure the video resumes at roughly the same position after a brief pause) −
Work done in context of MAGIC MAGIC: Modeling and Automatic Generation of Information and upgrade Campaigns for Service Availability A collaboration between Ericsson and Concordia Funded by NSERC and Ericsson
Discussion?