Chapter 4. ClusterPlugin Interface

Table of Contents

Introduction

ClusterJuggler has been designed in such a way to make itself very extensible The idea is to provide the plugins with all functionality needed to operate on a cluster of machines. As a result, it is very easy for someone to extend the system by creating their own ClusterJuggler plugin. Below is the interface for the plugins and the brief description of the tools that they have access to.

Introduction

In order to create a modular system we wanted to allow the user to add any number of additional components to ClusterJuggler in a simple way. We have provided a ClusterNetwork layer to handle all low level communication and the ClusterManager to take care of all synchronization details. This allows the user to concentrate on their specific clustering need without worrying about the difficult low level issues. In order to create a plugin a programmer must only implement a few methods. In return they get run-time reconfiguration, synchronization, and a cluster network abstraction to handle all communication. ClusterJuggler also comes with a few commonly used plug ins, RemoteInputManager, ApplicationDataManager, and SwapLockManager. These plug ins serve both as the base for VR based clustering in VR Juggler and as examples for others to build new plug ins from.

Note

As new configuration information is added to the system it is delivered to the correct layer or plugin by the ClusterManager. In order to accomplish this we require that all cluster plugins and the ClusterNetwork implement the jccl::ConfigElementHandler abstract base class.

Figure 4.1. Interface ClusterPlugin

Interface ClusterPlugininterfaceClusterPlugin

Plugins have a very simple interface that allows the user a high level of specialization. As you can see in Figure 4.1, “Interface ClusterPlugin”, they only need to implement preDraw(), postPostFrame() configCanHandle(), configAdd(), and configRemove(). Since these plugins are simply additions to the ClusterJuggler core they are loaded dynamically at runtime. This allows the sharing of plugin libraries which do not require the developer to recompile ClusterJuggler.