blob: 4ae2530a2256e7b0f57c4114bc6ae8e57c6d8865 (
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
|
// -*- IDL -*-
//=============================================================================
/**
* @file FTRT.idl
*
* $Id$
*
* @author Huang-Ming Huang
*/
//=============================================================================
#ifndef FTRT_H
#define FTRT_H
#include "tao/IOP.pidl"
module FTRT
{
typedef long TransactionDepth;
typedef unsigned long SequenceNumber;
const IOP::ServiceId FT_TRANSACTION_DEPTH = 30;
const IOP::ServiceId FT_SEQUENCE_NUMBER = 31;
const IOP::ServiceId FT_FORWARD = 32;
/// this service context is used by FTRT client
/// to information the server the depth of replication
/// which has to be complete before the request returns.
struct FTTransactionDepthServiceContext {
TransactionDepth transaction_depth;
};
/// this service context is used by replicas for detecting
/// the loss of replication messages in soft-replication.
struct FTSequenceNumberServiceContext {
SequenceNumber sequence_number;
};
/// In the FTCORBA standard, if the server receive a request
/// from a client with an object_group_ref_version less than
/// the one known to the server. The server should reply a
/// LOCATION_FORARD_PERM exception. However, if the server is
/// also the primary, the server have to wait until the client
/// issue a new request with the new object_group_ref_version
/// before it can return the result. This will cause unnecessary
/// delay for processing the request. The service context is used
/// by the primary to inform the client the lastest version of
/// IOGR known to the primary in the reply. The client can thus
/// upates the object reference in the next method invocation without
/// extra round trip delay.
struct FTForwardServiceContext {
Object forward;
};
exception OutOfSequence
{
SequenceNumber current;
};
exception TransactionDepthTooHigh
{
};
typedef sequence<octet> State;
exception InvalidUpdate {};
interface Updateable
{
/// used for assured replication
void set_update(in State s)
raises(InvalidUpdate, OutOfSequence, TransactionDepthTooHigh);
/// used for soft replication
oneway void oneway_set_update(in State s);
};
};
#endif
|