Improving Reliability of Dynamic Software Updating Using Runtime Recovery

Dynamic software updating (DSU) is a technique that can update running software systems without stopping them. Most existing approaches require programmer participation to guarantee the correctness of dynamic updating. However, manually preparing dynamic updating is error-prone and time-consuming. Therefore, other approaches prefer to aggressively perform updating without programmer intervention, which may definitely lead to unanticipated runtime errors. To reduce human effort and enhance the reliability for dynamic updating, we leverage automatic runtime recovery (ARR) techniques to recover runtime errors caused by improper dynamic updating. This paper presents ADSU, a fully automatic DSU system using ARR. We evaluate ADSU with real updates from widely used open source software systems, i.e., Apache Tomcat, Apache FTP Server and jEdit. The preliminary results have shown that ADSU succeeds in automatically applying 11 of 16 real-world updates that existing counterparts cannot.

[1]  Liuba Shrira,et al.  Modular Software Upgrades for Distributed Systems , 2006, ECOOP.

[2]  Xiaoxing Ma,et al.  Low-disruptive dynamic updating of Java applications , 2014, Inf. Softw. Technol..

[3]  Scott Nettles,et al.  Dynamic software updating , 2001, PLDI '01.

[4]  Claire Le Goues,et al.  Automatically finding patches using genetic programming , 2009, 2009 IEEE 31st International Conference on Software Engineering.

[5]  Jeffrey S. Foster,et al.  Efficient systematic testing for dynamically updatable software , 2009, HotSWUp '09.

[6]  Jeff Magee,et al.  The Evolving Philosophers Problem: Dynamic Change Management , 1990, IEEE Trans. Software Eng..

[7]  Michael Hicks,et al.  Evaluating Dynamic Software Update Safety Using Systematic Testing , 2012, IEEE Transactions on Software Engineering.

[8]  Rida A. Bazzi,et al.  Immediate Multi-Threaded Dynamic Software Updates Using Stack Reconstruction , 2009, USENIX Annual Technical Conference.

[9]  Jian Lu,et al.  Javelus: A Low Disruptive Approach to Dynamic Software Updates , 2012, 2012 19th Asia-Pacific Software Engineering Conference.

[10]  Fan Long,et al.  Automatic runtime error repair and containment via recovery shepherding , 2014, PLDI.

[11]  Haibo Chen,et al.  POLUS: A POwerful Live Updating System , 2007, 29th International Conference on Software Engineering (ICSE'07).

[12]  Yuanyuan Zhou,et al.  Rx: treating bugs as allergies---a safe method to survive software failures , 2005, SOSP '05.

[13]  Jaechang Nam,et al.  Automatic patch generation learned from human-written patches , 2013, 2013 35th International Conference on Software Engineering (ICSE).

[14]  Theo D'Hondt,et al.  Tranquility: A Low Disruptive Alternative to Quiescence for Ensuring Safe Dynamic Updates , 2007, IEEE Transactions on Software Engineering.

[15]  Rajiv Gupta,et al.  Self-recovery in server programs , 2009, ISMM '09.

[16]  Alessandra Gorla,et al.  Automatic recovery from runtime failures , 2013, 2013 35th International Conference on Software Engineering (ICSE).

[17]  Deepak Gupta,et al.  A Formal Framework for On-line Software Version Change , 1996, IEEE Trans. Software Eng..

[18]  Varmo Vene,et al.  A thousand years of productivity: the JRebel story , 2014, Softw. Pract. Exp..

[19]  Daniel M. Roy,et al.  Enhancing Server Availability and Security Through Failure-Oblivious Computing , 2004, OSDI.

[20]  Angelos D. Keromytis,et al.  ASSURE: automatic software self-healing using rescue points , 2009, ASPLOS.

[21]  Thomas Würthinger Dynamic code evolution for Java , 2010, PPPJ.

[22]  M. Frans Kaashoek,et al.  Ksplice: automatic rebootless kernel updates , 2009, EuroSys '09.

[23]  Elisa Bertino,et al.  Efficient systematic clustering method for k-anonymization , 2011, Acta Informatica.

[24]  Michael Hicks,et al.  Automating object transformations for dynamic software updating , 2012, OOPSLA '12.

[25]  Gang Chen,et al.  A Framework for Practical Dynamic Software Updating , 2016, IEEE Transactions on Parallel and Distributed Systems.

[26]  M. Dmitriev Towards Flexible and Safe Technology for Runtime Evolution of Java Language Applications , 2001 .

[27]  Luciano Baresi,et al.  Version-consistent dynamic reconfiguration of component-based distributed systems , 2011, ESEC/FSE '11.

[28]  Manuel Oriol,et al.  Practical dynamic software updating for C , 2006, PLDI '06.

[29]  Michael Hicks,et al.  Specifying and Verifying the Correctness of Dynamic Software Updates , 2012, VSTTE.

[30]  Luís Veiga,et al.  Rubah: DSU for Java on a stock JVM , 2014, OOPSLA.

[31]  Zhendong Su,et al.  Automatic runtime recovery via error handler synthesis , 2016, 2016 31st IEEE/ACM International Conference on Automated Software Engineering (ASE).

[32]  Hongyu Zhang,et al.  ABOR: An Automatic Framework for Buffer Overflow Removal in C/C++Programs , 2014, ICEIS.

[33]  Abhik Roychoudhury,et al.  Angelix: Scalable Multiline Program Patch Synthesis via Symbolic Analysis , 2016, 2016 IEEE/ACM 38th International Conference on Software Engineering (ICSE).

[34]  Kathryn S. McKinley,et al.  Dynamic software updates: a VM-centric approach , 2009, PLDI '09.

[35]  Iulian Neamtiu,et al.  Safe and timely updates to multi-threaded programs , 2009, PLDI '09.

[36]  Jian Lu,et al.  CURE: Automated Patch Generation for Dynamic Software Update , 2016, 2016 23rd Asia-Pacific Software Engineering Conference (APSEC).

[37]  Jeffrey S. Foster,et al.  Kitsune: efficient, general-purpose dynamic software updating for C , 2012, OOPSLA '12.