summaryrefslogtreecommitdiff
path: root/TAO/tests/Bug_3154_Regression/test.idl
blob: e4ec773839e48ca71637102434fb9483787d6988 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
// $Id$

// The next include is TAO specific.
#include "orbsvcs/FT_CORBA_ORB.idl"

#include "orbsvcs/CosNotification.idl"
#include "orbsvcs/PortableGroup.idl"

#pragma prefix "omg.org"

/**
* This module describes interfaces and data types of the CORBA
* Fault Tolerance service.
*/

module FT
{
  /// Specification for the Common Types and Exceptions for
  /// ReplicationManager

  /// Forward declarations
  interface GenericFactory;
  interface FaultNotifier;

  /// Useful typedefs.
  typedef CORBA::RepositoryId _TypeId;
  typedef Object ObjectGroup;

  typedef any Value;

  /**
   * @struct Property
   *
   * @brief A property name and a value association.
   */
  struct Property {
    Value val;
  };

  /// Some mor euseful typedefs.
  typedef sequence<Property> Properties;
  typedef Properties Criteria;

  /**
   * @struct FactoryInfo
   *
   * @brief <@todo>
   *
   */
  struct FactoryInfo {
    GenericFactory the_factory;
    Criteria the_criteria;
  };

  typedef sequence<FactoryInfo> FactoryInfos;

  typedef long ReplicationStyleValue;
  const ReplicationStyleValue STATELESS = 0;
  const ReplicationStyleValue COLD_PASSIVE = 1;
  const ReplicationStyleValue WARM_PASSIVE = 2;
  const ReplicationStyleValue ACTIVE = 3;
  const ReplicationStyleValue ACTIVE_WITH_VOTING = 4;
  typedef long MembershipStyleValue;
  const MembershipStyleValue MEMB_APP_CTRL = 0;
  const MembershipStyleValue MEMB_INF_CTRL = 1;
  typedef long ConsistencyStyleValue;
  const ConsistencyStyleValue CONS_APP_CTRL = 0;
  const ConsistencyStyleValue CONS_INF_CTRL = 1;
  typedef long FaultMonitoringStyleValue;
  const FaultMonitoringStyleValue PULL = 0;
  const FaultMonitoringStyleValue PUSH = 1;
  const FaultMonitoringStyleValue NOT_MONITORED = 2;
  typedef long FaultMonitoringGranularityValue;
  const FaultMonitoringGranularityValue MEMB = 0;
  const FaultMonitoringGranularityValue LOC = 1;
  const FaultMonitoringGranularityValue LOC_AND_TYPE = 2;
  typedef FactoryInfos FactoriesValue;
  typedef unsigned short InitialNumberReplicasValue;
  typedef unsigned short MinimumNumberReplicasValue;

  typedef TimeBase::TimeT CheckpointIntervalValue;
  exception InterfaceNotFound {};
  exception ObjectGroupNotFound {};
  exception MemberNotFound {};
  exception MemberAlreadyPresent {};
  exception BadReplicationStyle {};
  exception ObjectNotCreated {};
  exception ObjectNotAdded {};
  exception PrimaryNotSet {};
  exception UnsupportedProperty {
    Value val;
  };

  exception InvalidProperty {
    Value val; };

  exception NoFactory {
    _TypeId type_id; };

  exception InvalidCriteria {
    Criteria invalid_criteria; };

  exception CannotMeetCriteria {
    Criteria unmet_criteria; };

  // Specification of PropertyManager Interface
  // which ReplicationManager Inherits

  interface PropertyManager {

    void set_default_properties(in Properties props)
      raises (InvalidProperty, UnsupportedProperty);
    Properties get_default_properties();

    void remove_default_properties(in Properties props)
      raises (InvalidProperty, UnsupportedProperty);

    void set_type_properties(in _TypeId type_id,
                             in Properties overrides)
      raises (InvalidProperty, UnsupportedProperty);

    Properties get_type_properties(in _TypeId type_id);

    void remove_type_properties(in _TypeId type_id,
                                in Properties props)
      raises (InvalidProperty, UnsupportedProperty);

    void set_properties_dynamically(in ObjectGroup object_group,
                                    in Properties overrides)
      raises(ObjectGroupNotFound, InvalidProperty, UnsupportedProperty);

    Properties get_properties(in ObjectGroup object_group)
      raises(ObjectGroupNotFound); };

  // Specification of ObjectGroupManager Interface
  // which ReplicationManager Inherits
  /**
    * This interface provides operations that allow an application to add, remove
    * and locate members of an object group and to obtain the current reference and
    * identifier for an object group.
    *
    */

  interface ObjectGroupManager {
     /**
      * This operation allows the application to exercise explicit control over the
      * creation of a member of an object group, and to determine where the member
      * is created.
      *
      * @param object_group Reference for the object group to which the member is 
      * to be added.
      * @param the_location The physical location.
      * @param type_id The repository identifier for the type of the object.
      * @param the_criteria Parameters to be passed to the factory, which the factory
      * evaluates before creating the object.
      *
      * @return The object group reference of the object group with the member added.
      */
    ObjectGroup create_member(in ObjectGroup object_group,
                              in _TypeId type_id,
                              in Criteria the_criteria)
      raises(ObjectGroupNotFound,
             MemberAlreadyPresent,
             NoFactory,
             ObjectNotCreated,
             InvalidCriteria,
             CannotMeetCriteria);

     /**
      * This operation allows an application to add an existing object to an object 
      * group at a particular location.
      *
      * @param object_group Reference for the object group to which the existing object 
      * is to be added.
      * @param the_location The physical location of the object to be added.
      * @param member The reference of the object to be added.
      *
      * @return The object group reference of the object group with the object added.
      */
    ObjectGroup add_member(in ObjectGroup object_group,
                           in Object member)
      raises(ObjectGroupNotFound,
             MemberAlreadyPresent,
             ObjectNotAdded);

     /**
      * This operation allows an application to remove a member from an object 
      * group at a particular location.
      *
      * @param object_group Reference for the object group to which the member 
      * is to be removed.
      * @param the_location The physical location of the member to be removed.
      *
      * @return The object group reference of the member removed.
      */
    ObjectGroup remove_member(in ObjectGroup object_group)
      raises(ObjectGroupNotFound,
             MemberNotFound);
     
     /**
      * This operation allows the application to select the member of the object group 
      * that is to be the primary.
      *
      * @param object_group Reference for the object group whose primary is to be 
      * determined.
      * @param the_location The physical location of the member that is to become 
      * the primary.
      *
      * @return The object group reference with the primary member at the given 
      * location.
      */
    ObjectGroup set_primary_member(in ObjectGroup object_group)
      raises(ObjectGroupNotFound,
             MemberNotFound,
             PrimaryNotSet,
             BadReplicationStyle);

    ObjectGroupId get_object_group_id(in ObjectGroup object_group)
      raises(ObjectGroupNotFound);

    ObjectGroup get_object_group_ref(in ObjectGroup object_group)
      raises(ObjectGroupNotFound);

    Object get_member_ref(in ObjectGroup object_group)
      raises(ObjectGroupNotFound, MemberNotFound); };


  // Specification of GenericFactory Interface
  // which ReplicationManager Inherits and Application Objects Implement
  /**
    * This interface allows the creation/deletion of replicated objects (object groups),
    * replicas (members of object groups), and unreplicated objects.
    */
  interface GenericFactory {
    typedef any FactoryCreationId;

     /**
      * This operation creates an object or an object group, using the type_id 
      * parameter to determine which type of object to create and the_criteria
      * parameter to determine restrictions on how and where to create the object. 
      *
      * @param type_id The repository identifier of the object to be created by 
      * the factory.
      * 
      * @param the_criteria Information passed to the factory, which the factory
      * evaluates before creating the object. Examples of criteria are initialization
      * values, constraints on the object, preferred location of the object, fault
      * tolerance properties for an object group, etc.
      * 
      * @param factory_creation_id An identifier that allows the factory to delete
      * the object subsequently.
      *
      * @return The reference to the object created by the GenericFactory. When the
      * GenericFactory interface is implemented by the application’s local factory
      * object, the create_object() operation returns an object reference as a result.
      * When the GenericFactory interface is inherited by the Replication Manager, the
      * create_object() operation returns an object group reference as a result.
      *
      * @exception NoFactory Raised if the factory cannot create an individual object
      * of the type_id at the location.
      * @exception ObjectNotCreated Raised if the factory cannot create the object.
      * @exception InvalidCriteria Raised if the factory does not understand the criteria.
      * @exception InvalidProperty Raised if a property passed in as criteria is invalid.
      * @exception CannotMeetCriteria Raised if the factory understands the criteria but
      * cannot satisfy it.
      */
    Object create_object(in _TypeId type_id,
                         in Criteria the_criteria,
                         out FactoryCreationId factory_creation_id)
      raises (NoFactory,
              ObjectNotCreated,
              InvalidCriteria,
              InvalidProperty,
              CannotMeetCriteria); };

  // Specification of ReplicationManager Interface
  interface ReplicationManager : PropertyManager,
    ObjectGroupManager,
    GenericFactory {
    void register_fault_notifier(in FaultNotifier fault_notifier);
    FaultNotifier get_fault_notifier()
      raises (InterfaceNotFound); };

    // Specification of FaultNotifier Interface
    interface FaultNotifier {
    typedef unsigned long long ConsumerId;

    void push_structured_fault(
        in CosNotification::StructuredEvent event);

    void push_sequence_fault(
        in CosNotification::EventBatch events);

    };

  // Specifications for Logging and Recovery
  typedef sequence<octet> State;

  exception NoStateAvailable {};
  exception InvalidState {};

  exception NoUpdateAvailable {};
  exception InvalidUpdate {};

  // Specification of Checkpointable Interface
  // which Updateable and Application Objects Inherit
  interface Checkpointable { State get_state()
                               raises(NoStateAvailable);
  void set_state(in State s) raises(InvalidState); };

  // Specification of Updateable Interface
  // which Application Objects Inherit
  interface Updateable : Checkpointable { State get_update()
                                            raises(NoUpdateAvailable);
  void set_update(in State s) raises(InvalidUpdate);
  };

};