MultipleServerConnections
From ParaQ Wiki
Jump to navigationJump to search
Overview
In ParaView, ServerManager works with VTK objects on 3 entities: DataServer, RenderServer or Client. Once connections are established between N RenderServer nodes and first N DataServer nodes, they are bound together. Thus, DataServer and RenderServer always go together. Now, we want to enable the client to connect to multiple such DataServer-RenderServer groups (which we will call ServerCouple). This document discusses the design for enabling the same. For sake of simplicity, we can treat the Client as a special kind of ServerCouple.
Assumptions
- For now, we assume that each ServerCouple is vanilla i.e. it cannot have any VTK objects created on it, when the client connects to it. This assumption ensures that there are no object ID conflicts between the Client and the ServerCouple.
Requirements
- It must be possible for ServerManager to specify which ServerCouple it wants to access.
- It must be possible to query the ProcessModule to determine if a ServerCouple connection is active.
Design
- Multiple ServerCouples can exists only on the Client side. ProcessModules on the server worry about just 1 ServerCouple.
- Each ServerCouple is assigned a Unique Id. The ID cannot merely be the index of the ServerCouple connection since this would make it difficult to detect case when a ServerCouple disconnects and another one connects. Hence, we assure that when a ServerCouple disconnects, its ID is not reused until max(vtkIdType) (or whatever datatype we use for the Id) ServerCouples connect with the client.
- Just like each Proxy keeps this->Servers which tells it what servers it's created on, should it also keep this->ServerCouples? Thus giving the proxy the knowledge about its location?
- SendStream() will take the ServerCouple Id as well. To send the stream to multiple servercouples, the caller must call SendStream multiple times with different ServerCouple each time. For this to work, Client must be treated as a special ServerCouple. Otherwise, (simply extending current ParaView design), Client will be a part of each ServerCouple and any stream could be sent to client on multiple ServerCouples, which is absurd!
- May be, for sake of backwards compatibility, we can have a overloaded SendStream() with prototype same as current ParaView, which would imply send to all active ServerCouples (except Client). Client will be included only if vtkProcessModule::CLIENT flag is set in the server flags provided.