Error Virtualization: Building a Reactive Immune System for Software Services