Maestro Overview

This document is a part of online Ensemble documentation, under Maestro Open Toolkit.

Maestro is a collection of C++ classes that implement ADT's for essential types (endpoint ID's, messages, threads, etc.) and group-member / client-server abstractions.

The implementation of clients/servers is currently a prototype: All clients and servers join the same Ensemble group, and distinction between them is maintained at the Maestro level. We are planning to provide support for "real" clients (through the same or alsmost the same interface), which will allow for better scalability/performance.

The state-transfer protocol for servers is currently implemented within Maestro. However, we are planning to eventually intergate it with the native state-transfer protocol of Ensemble, and provide support for state transfer with primary views (as in Horus).


Threading issues

Maestro can be run in either multi-threaded or single-threaded mode.

  • In the multi-threaded mode, Ensemble is started in a separate thread, and application can create as many threads as necessary. Methods of group-member objects can be invoked (asynchronously) from user threads.

  • In the single-threaded mode, the application first creates/initializes group-member objects and then makes a (non-returning) call to start Ensemble in the same thread. After initialization of Ensemble, methods of group-member objects can only be invoked from within group callbacks. Therefore, when overloading callbacks/downcalls of group-member classes running in single-threaded mode, special care needs to be taken to prevent deadlocks.

    In both single-threaded and multi-threaded modes, all callback methods are invoked from the Ensemble thread.

    Ensemble/Maestro do not provide a threads package. However, Ensemble defines a System-Independent Threads Interface which can be implemented either directly or by providing a stab to an existing threads package. Ensemble currently supports native threads on NT and Solaris and provides a stub to POSIX pthreads on other systems.


    Index of Maestro Classes

  • Messages
  • Maestro_Message
  • Endpoints
  • Maestro_EndpID
  • Threads
  • Maestro_Thread
  • Maestro_Semaphore
  • Maestro_Lock
  • Maestro_Barrier
  • Group Members
  • Maestro_GroupMember
  • Maestro_GrpMemb_Options
  • Maestro_GrpMemb_ViewData
  • Clients/Servers
  • Maestro_ClSv
  • Maestro_ClSv_Options
  • Maestro_ClSv_MsgOptions
  • Maestro_ClSv_ViewData
  • State Transfer
  • Maestro_CSX
  • Miscellaneous Types
  • Maestro_ErrorHandler
  • Maestro_Base
  • Maestro_String
  • Maestro_OrderedSet

  • send mail to alexey@cs.cornell.edu