You are on page 1of 10

Orphan Elimination in Distributed Object-Oriented

Systems
Ahmed E<. Ezzat
He,wlett-PacEard Laboratories
1501 Page M i l l Rd.
Palo Alto, CA 94303
ezzat @hplabs.hp.com

Abstract sively in the distributed transaction management con-


text [Herlihy 87, Herlihy 89, Liskov 87, McICendry 86,
T l i c orpknn deiectaon a i i d elzniziintioii asslie has been ad- Mueller 83, Walker 841 and inore recent,ly in the dis-
dressed eriensrziely an t h e dasirzbuted transaction mnn-
o g c i n e n t c o n i e x t a n d more r e c e n t l y a n t h e distributed tributed systems context within the RPC frame-
sysleins context w i t h t h e RYC framework. Aiz or- work [Birrell 83, Casey 86, Lainpson 81, Panzieri 88,
p h n i i in n distrabzited object-oriented npplacaizons eiiva-
ronineni as ai1 ohject tuhtcli is created by n i i a p p l a c a t f o n Ravindran 89, Shrivastava 831.
ani1 con t a n u e s to ed isi beyond t h e applacataon’s lifelame.
This puper addresses o i p h a i i d e t e c t i o n a n d e l i m i n a t i o n A widely accepted approa.ch in constructing reli-
l o r applac(rtioiis an n distrzbutcd ol)jcct-orzeiited systeni.
able distributed programs is the use of atomic actions
Mrc a p p l y o a r m o d e l f o r n disiribuied U n i ~ / / / c + + eiiiia-
roiiiiwiit, but the model t s g e i c m z l a n d can be applzed to (also called tra.nsactions). Atomicity encompa.sses three
o t 11 r dastrz h 11 1 ed o b j cct- o ri e TI 1 c.d 51/ s t e ni s
properties: serializahilit,y, rec.overability, and permu-
nence of effect. S e r i n l i s a b i l i t y [Gray 78, Bernstein 81,
Papadiinit,riou 791 iiiea.iis that the execution of one ac-
1 Introduction
t8ivitynever appea.rs to over1a.p or contain the execution
of another activity. Recozrerubility niea.iis that the over-
A tl i st,ri 11 11t e d sy st ein consists of inu 1ti ple computers
all effect of an a.ct,ivityis all-or-nothing, and p e r m a n e n c e
(called host,s) that, communicate t,hrough a network. A of effeci means that once an act,ioii comniited its effect
tlist,ributed applicat>ionis one whose components reside
will survive fa.ilures [Bernstein 83, Att,ar 84, Gray 811.
and esecut,e at multiple hosk in a distributed syst,em. In
a dist,ribut,ed object,-orient,ed a.pplicat,ion environment, In a distributed transaction system, ac orphan can be
we envision the objec,t-oriented programming language created because of crashes or aborted transactions. Or-
to lie t,he view of the application programmer in a pos- phans in such an environment are undesirable because
sihly heterogeneous distribut,ed object, system. they are an activit,y executing on behalf of an aborted
transaction, and they can introduce unnecessary delay
An orphan in a distrihut,ed object-oriented applica-
or deadlock by holding locks needed by nonorphans. In
tion environment is a nowpersistent object which is
that sense, it is not only desirable to eliminate orphans,
created by an application and continues to exist be-
but also it should be done in a tiniely manner.
yond t,he application’s lifetime. The orphan detec-
tion and elimination issue has been addressed exten- There have been many algorithms for orphan elim-

4M
0 1990 IEEE
0-8186-2088-9/90/0000/0403/$01.00
in;ilt.io:? iii n distribute~ltransact~ioi~
cnvironnwnt: en- responsible for ensuring that transient incmsistencies in
ye7 algorit3hms [Herlihy 89, McICeiidry 861 which use the atomic components do not produce permanent in-
real-time clodis to ensure t,liat orphans are eliminated consistencies in the nonatomic components. An orphan
within a fixed durat,ion, lazy aIgorit,hms [Herlihy 89, elimination scheme based on Walker's method has been
McIiendry S6] which use !ogical clocks to ensure that implemented as part of the Argus system [Liskov 871 to
orphans are eventually eliminated as information prop- deal with that issue.
agates through the syst,em, and a topological change al-
This paper addresses orphan detection and eiimina-
gorithm suita.ble for dealing with orphans resulting from
net:work pa.rtit,ioning [Mueller 831 in a dist,ributed trans- tion for applications in a dist,rihut,edobject-oriented sys-

act,ion system. Muelier's algorithm is driven by both the tems. We apply our model for a distributed lJnix/C++

t,ransactionhome sites and tlie transaction synclironiza- environment., but the model is general and ca.n be ap-
plied to other distributed object-oriented systems. The
tion sites (TSS) for the different, files opened from the
1 ransaction.
paper is organized as follows. Section 2 describes the
background for this work and gives definitions for the
Outside t>h.etransaction doniain, t,he orphan elimina- terminology used in t,he paper. Section 3 presents the
tion problem was first identified by Birrell [Birrell 831, problem definition. Section 4 discusses our model. Sec-
and solutions based on timeouts have been proposed by tion 5 uses a simple example in a distributed Unix/C++
Lampson [Larnpson 811 and Ra.jdoot [Panzieri 881. De- enviroiiment, to describe our model in more detail, and
pending on h e RPC semant,ics in a dist,ributed system, we conclude hy a siimn-iary in Sect,ion 6.
additional requirements might) be needed for correct,ness
criteria. In particular, for ut niost once calls, not only
should orphans be aborted, t,he almtioii must include 2 Background and terminology
undoing of a.ny side effects that inay have been pro-
duced [Panzieri 881. Wallw [Wallter 841 has proposed a
In this section, we define sonie t r r n ~ sused by our model
transaction-based orphan elimina.tion scheme that dy-
in this paper.
namically tracks dependencies a.mong transactions. His
scheme uses timeouts to keep the information sent in
messages t,o a ma,nageable level.
2.1 Iiiiplenientatioii set
In a conveiitioiial transaction system, orphans have no
impact, on d a t a consistency, where a transaction does An implementmationset is an object with a well defined
not interact with the outside world until it commits. interface representing the traditional Unix process ab-
However, in a general purpose distributed system, such straction in an object-oriented system environment. An
inconsistencies may he more prohlema.tic. For exam- iniplementation set contains many objects (persistent
ple, the Argus system [Liskov S3] supports a method- a.nd non-persistent), and exports operations to admin-
ology in which user-defined a.tornic data, types are ini- ister these objects as well as control migrating objects
plernent,ed by a mixture of atomic and nonatomic data between different implementation sets. Implementat'ion
types at a lower level. In t,he absence of an orphan sets are uniquely identified in the system by a unique
elimination sc.heme, the implementor of such a. type is I S - i d , i.e., corresponding to Unix process-id.

404
2.2 Distributed thread of control tories are responsible only for creating objects2 of a spe-
cific class. The interface to a factory object has one
'Traditional threads [Cooper 881 will be referred to as method ( c r e a t e ( ) ) , which creates insta.nces of a partic-
physical threads in this paper as they have their own ular class in the same address space where the factory
physical stacks. Typically, a physical thread is uniquely is. The c r e a t e ( ) method can be thought of as a wrap-
identified within a process by a t h r e a d - i d . Distributed ping to the n e w 0 operator in C++. Once the program-
thread (dtlwead) represents the sequence (flow) of events mer has a reference to a factory object, the programmer
or invocations by an application (one or more physical can create objects of that specific class by invoking the
threa.ds) in a distributed system, i.e., the dthread notion c r e a t e ( ) method on t8hat factory independent of the
is a virtual thread of control and it does not own private factory location.
physical stacks, rather it uses potentially many of the
st,acks belonging to existing physical threads. 2.4 Persistent objects
Ilthreads are created upon invoking operations on ob-
Persistent objects are objects whose lifetime is indepen-
jects asynchronously, i.e., an application might have
dent of the lifetime of the thread which created them.
a tree of distributed threads. A distributed thread
On the other hand, non-persistent object's lifetime is
terminates when the method originally invoked asyn-
tied to the lifetime of the thread which created them, for
chronously terminates.
example, in traditional Unix/C++ environment objects
The not,ion of dthread is used to help in tracing events are deleted automatically when the process terminates.
and cleaning orphans later. Each dthread'has a unique
identifier in the syst,em (dthrea.d-id) assigned at. cre-
3 Problem statement
ation time in a decentralized manner using the tuple
<machine-id : IS-id : thread-id>'.
The current memory management model for C++ is
to reclaim memory for all objects in a given process
2.3 Factories (address space) upon process termination. This model
would not, apply for persistent objects as by definition a
Fact,ories are objects specialized in creating objects of a persistent object's lifetime is independent of the lifetime
spwific class, i.e., interface and implementation. They of the dthread which created it.
provide a uniform model for creating objects in a dis-
On the other hand, applying the current C++ mem-
tribukd environment. This model allows the program-
ory management model to non-persistent objects is a
mer to create objects t,he same way independently of
much more difficult problem and needs to be resolved.
where they are created (i.e., in the local address space
For example, consider a dthread that creates a remote
or in a different one).
non-persistent object and then terminates. This remote
In traditional C++, the operator new(> creates a.n object becomes an orphan and needs to be reclaimed.
jnstance of a class only in the same address space. Fac- Next section presents a lazy scheme where orphans are
In a Unix context, machine-id corresponds to a host-id, IS-id 2Notice that factories only create objects and do not delete or
corresponds to a process-id, and thread-id is a unique ident.ifier manage them. Deleting an object will be dealt with in this paper
to a physical thread within that process. in a later section.

405
guaranteed t o be eliiilinated ai the termination of the cal &rectory interface declaration. Referring to
dthread which created them. figure 3 , an entry in the local directory object’s
database in IS2 is described below:

0 Dthread-id: is the identification of the dthread


(dthreadl) which created this object ( o b j e c t l )
The issue of managing the application objects’ st>orage in this implementation set (IS2).
is fortunately limited only to two scenarios. an applica-
0 IS-id: is the iniplenientation set (El) from
tion object created as a result of remote invocation on
which the dtliread initiated the creation of this
a factory object, and an object migrating from one im-
object (objectl).
plementation set to another. We envision one approach
e GID: is the object (objectl) global unique-id.
for dealing with both scenarios and in our discussions
we will focus only on the factory invocation scenario 0 Local object reference: is a reference to the
local object (objectl) iri this implementation
To administer globally the storage of dist,ributed ap-
set (IS2).
plication objects, we are adding two objects per imple-
mentation sets to help in performing this administrative The a d d - e n t r y ( ) method inserts a tuple in t.he lo-
function. These two objects are either created trans- cal direct,ory’sstate about how a local object in this
parently as part of initializing new implementation sets implementalion set was created.
or explicitly by requiring applications to call a library
The different flavors of the d e l e t e - e n t r y ( )
function from main(). Each of tthe two ohjects has a
method delete the appropriate local object(s) in
database as part of their s t a k representing the infor-
this implenientatio 1 set and clean their correspond-
mation about a subset of the objects in the syst,eni, and
ing entries in this local directory object.
each object has a set of methods to query their database.
These two object,s enable tracking where dt,hrea.ds had 2. Remote directory (RD) object: this is an oh-
created objects and how lo get t,o them. The operation ject per implementation set. The object’s state
of how they are used is discussed in det,ail next, section contains information about remotely created ob-
through a simple example. The following is a descrip- jects from this implementation set. An entry
tion of these two objects and their interfaces’ methods in this object’s database is represented as a tu-
description. plecdthread-id : G I D : remote LD r e f e r e n c e
: remote o b j e c t r e f e r e n c e > . Figure 2 repre-
1. Local directory (LD) object: t,his is an ob- sents the remofe direct0 y interface declaration.
ject per implementation set. The object’s state Referring t o figure 3, an entry in the remote di-
contains informat,ion about all local objects in rectory object’s database in IS1 is described below:
this implementation set which are created in re-
0 Dthread-id: is the identification of the dthread
sponse to requests from other implementation sets.
(dthreadl) which created the remote object
An entry in this object’s database is represented
(objectl).
as a tuple <dthread-id : IS-id : GID : local

o b j e c t r e f e r e n c e > . Figure 1 represents t,he lo- 0 GID: is the object (object ) global unique-id.

406
inteif acc loc,al-directory =
add-entry(dthread-id ID, IS-id IS, gid-t GID, ref -t LCL-OBJ-REF) ,
delete-entry(ref-t LCL-OBJ-REF) ,
delete-entry(gid-t GID),
delete-entry(dthread-id ID, IS-id IS);

Figure 1: A local directory interface declaration

interface remote-directory =
add-entry(dthread-id ID, gid-t GID, ref-t RMT-LD-REF, ref -t RHT-OBJ-REF) ,
delete-entry(ref-t RMT-OBJ-REF),
delete-entries(ref-t RMT-LD-REF),
check(dthread-id ID) ;

Figure 2: A remote directory interface declaration

e R,eiriot,e LD reference: is a remote reference to to get to them to delete t8he111. Access to these two
the loml directory object, in the implement,;?- directory objects is transpa.rent to the application pro-
tion set, where objectl is (i.e., LU2). granimer (i.e., the application need not t o do explicit

e Re1not.e object reference: is a. remote reference operations on these directory objects) and they are only

to t8heact,ual object (i.e., objectl) in 1’32. accessed from system funct,ions. The following a.re three
scenarios illustrat<ingwhen these directory objects are
The add-entry() method insert#sa tuple in t,he re-
a.ccessed:
mote directory’s st,ate about, a.n ol,ject, creat,ed re-
iiiot,ely from this iniplemeii tation set,.
o On creating a remote object, the factory’s
The delete-entry() inet.hod delet,es a reiiiot,e oh- create() method initializes an entry in the Iocal
ject and cleans the appropriate direct,ory entries. directory object, for the implementation set where
The delete-entries() method deletes all entries the factCoryis. Back on the client side, the c r e a t e 0
i n t,liis remote direct,ory object, for objects created method will initialize an entry in the remote di-
from this implenientlation set in a specific remote rectory object, before returning a reference to the
implenientmationset. applicatioii.

The check() met,hod returns an eiit,ry from the re-


0 On dthread termination, the terminate0 library
motmedirect,ory object corresponding to a specific
funct,ion invokes operations on the appropriat,e di-
dt,hread-id.
rectory objects to track and delete orphans, and
then clean the appropriate entries from these di-
A new t,wo library functions are supplied as part of the
rectory objects’ state.
system, one is t,o eliminate orphan objects on dt,hread
teriilina.tion (terminate()) a n d the other is used for es- 0 On explicit object deletion, the kill() library
plicit object, deletion (kill()). These library functions function invokes operations on the appropriate di-
will invoke operations on the appropriate directory ob- rectory objects to track and delete the object (i.e.,
jects to track where dt,lireads created objects a.nd how if the object is remote), and to clean the appropri-
ate ciitries from thc dizectory objects’ statme. in the remote directory object’> datahaFe in IS1
c d t h r e a d i : G I D : *LD2 : * o b j e c t l > .

5 Example o A reference to the remote object o b j e c t l is re-


turned to the applications.
‘To illustrate how an implemented version of our model
will work in a distributed l i n i x / C + t environment, we 5.2 Dthread teriiiination
use a simple example (figure 3) where, dthreadl created
ir, IS1 creates (objectl) in IS2, and t,hen terminates. In In the above example, upon dthreadl termination in
this simple example, we assume that the application IS1, the t e r m i n a t e ( ) library function is called to elini-
has already a reference to f n c l o r y l . The example will inate all non-persistent objects created by dthreacll
discuss in detail how remote objects are created, how in the system which otherwise become orphans. The
orphans are eliminated ;it dthread termination, and how t e r m i n a t e ( ) function checks (see figure 4) if there are
objects are deletmeclexplicitly. entries in the remote directory object ( R D l ) belonging
to dthreadl. If 110 entries are found, then dtlireadl ter-
5.1 Remote object creation minates and we are done.

For every entry found in the RD1 object belonging


Objects axe created by iiivolting the c r e a t e ( ) method
to dtlireadl, t*he check(1D) operation ret,urns a refer-
on the appropriate factory. Jn this example (see figure
ence (RMTLD-REF) corresponding to a local directory ob-
3): dthreadl in IS1 invokes the c r e a t e ( ) method on
ject (i.e., LD2). The t e r m i n a t e 0 function invokes t,he
factory1 in JS2 and as a result, objcct,l is created in
delete-entry(G1D) method on the local directory ob-
IS2, and a reference to t,he remote object, is ret#uriieclt,o
ject, in the remote implementation set (IS2). This will
dthreadl. In order to keep track of remote objects, ap-
result in deleting object1 and t8hecorresponding ent,ry
propriate entries in the direct’ory ohjects are initialized
from t,he local directory object in IS2. With no en-
as follows: The following steps occur t,ransparent,lyto
tries in t,he remotmedirect,ory object, in IS2 correspond-
[#heapplication:
ing to dthreadl, the d e l e t e w e n t r y ( )operat.ion is coni-
pleted. Finally, t,he t e r m i n a t e ( ) function invokes the
T ~ Ifactory
P in IS2 after creating the desired object
d e l e t e - e n t r i e s ( 1 method on the remote directory oh-
(ohjrctl) will invoke the a d d - e n t r y ( ) operation 011
ject in I s 1 t,o clean all entries with RMTLDAEF field
LD2 object. This will add an entry ill the local di-
equal t o the returned reference from the check() oper-
rectory object’s database in IS2 ( d t h r e a d l : IS1
ation (i.e., LD2).
: GID : * o b j e c t i > .
Notice that the d e l e t e - e n t r y ( ) operation on the lo-
In the RPC message returning the reference to ob-
cal directory object after completing its work in IS2, it
jectl, the factory will add a reference to LD2 in the
checks if there are entries in the remote directory object
mess age.
at IS2 belonging t o dthreadl. If there are entries. the
On crossing machine boundary t,o IS1, An d e l e t e - e n t r y ( ) is invoked on the new local directory
add-entry() operation is invoked on the remote object as we discussed earlier. This will take care of
directory object in IS1. This will add an entry nested object creation across multiple implementation

408
l o c a l d i r e c t o r y o b j e c t (LDI)
l o c a l d i r e c t o r y object(LD2)

I remote d i r e c t o r y
o b j e c t (RDl) 1 I \
\
I I
dthr I I 4
'
remote d i r e c t o r y

!
I

0: I
obj e c t (RD2 )
: 0: I

---*a
0
I
._----
I

I
I
I
I I
I

I
I
I
I
J
I
I
I
I I I / I
' I I I J
I / I / I
I I I / I
I f I / I

. n a tE

\ completed o r p h a n s
elimination

IS1 IS2

Figure 3: Creating a remote object and orphan reclaimation

409
terminat,e(dthread-id ID)
begin

ref-t RMT-LD-REF;

while(RMT-.LD-REF : = remote-directory->check(ID))(
I1MT_LL)_REF->delete_entry(ID, IS);
remote_directory->delete-entries(RMT-LD-REF);
3
end ;

Figure 4: The terminate library function

sel,s in a distributed system. tory object in tjhis implerneritatiori set (i.e., IS2). The
net result is deleting the object (objectl) and cleaning
5.3 Explicit object deletion the appropriate entry i n the local directory object (i.e.,
IS2).
Factories are used to provide a uniform method of crest,-
ing objects in a distributed system. They are responsi-
6 Conclusion
ble for creat,ing objects and iiot, for managing or deleting
them. This is because we believe that the programnier
The orphan detection and elimination issue has been
should not have to remember the factory reference in
investigated extensively in the distributed transaction
order to be able to delete an object. Iiistead, we intro-
contest as well as in the distributed system cont,ext
duce a new kill() function to replace the delete()
within t,he R P C framework. In this paper we ex-
function in C++.
tended this investigation to a general distributed object-
If the object t o be deleted is remote (i.e., oriented application environment. Orphans in a dis-
d t h r m d l in IS1 is deleting o b j e d l in 1S2, the tributed object-oriented application environment are
kill(obj2ef) function (see figures 3, 5) invokes the objects which are created by the application and con-
delete-entry(obj2ef) method 011 the remote direc- tinue to exist beyond the application’s lifetime. Orphan
tory (R,Dl) in this implementation set (El). This in objects in a distributed object-oriented application en-
turn invokes the delete-entry(G1D) method on the ap- vironment correspond t o activities which continue to ex-
propria.te remot,e LD object (i.e., LD2). The net result ecute on behalf of aborted transactions in a distributed
is deleting t,he remote object (objectl) and cleaning the transaction system.
appropriate entries in the directory objects, i.e., an en-
We presented a simple and a general model for de-
t8ryin the local directory object in IS2 and a n entry in
tecting arid eliminating orphans in a distributed object-
the remote directory object in IS1.
oriented application environment. Also, we presented a
On the other hand, if t,he object, is local (e.g., simple example to illustrate how our model would work
dthreadl in IS2 is deleting object 1 and obj -ref is a ref- in a distributed Unix/C++ application environment.
erence to objectl), the kill(objxef) function invokes An implenientsatlionof our model should not add much
the delete-entry(objief) method on the local direc- overhead; we are planning t o implement this model in

410
void* kill(ref,t obj-ref)
begin
i f (obj-ref->is-remote())
remote-directory->delete-entry(obj-ref) ;
else
local-directory->delete-entry ( o b j - r e f ) ;

end;

Figure 5: The kill function

the near future as soon as the necessary platform envi- Systenas-an Advanced Course, R.
Ijayer, R..M. Graham, and G. Seeg-
ronment is completed. muller, Springer Verlag, New York,
pp. 393-48 1, ( 1978).

References [Gray 811 -1. Ciriiy, 1’. McJones, M. Rlasgen, n.


I,ilrtlsiLy, 11.. Imic, T. Price, F. Put,-
is0111 iltl(l I . Tkaiger, “The Recovery
[Attar 841 R. Attar, P.A. Bernstein and N. MiLtl;l.gf:r of the System R. Database
Goodman, “Site Initializa.tion, Re- M ~ L I iI ~ g c,”r A CM Computing Sur-
covery, and Backup in a Distributed vey.~, vol. 13, NO. 2, pp. 223-242,
Database System,” IEEE Trans. on (.Iiiric 1981).
Soft. Eng, vol.SE-10, No. 6, pp.
645-650, (Nov. 1984). [Herlihy 871 MA’. IIerlihy, N. Lynch, M. Mer-
ritt,, arid W . Weihl, “On the Cor-
[Bernstein 811 P.A. Bernstein and N . Good- rectness oi Orphan Elimination Al-
man, “Concurrency Control in Dis- gorithms,” Symp. on Fault Toleraiit
tributed Database Systems,” ACM Computing, pp. 8-13, (1987).
Computing Surveys, vol. 13, No. 2,
pp. 185-221, (June 1981). [Herlihy 891 M.P. Herlihy, M.S. McKendry,
“Timestamps-Based Orphan Elimi-
[nernstein 831 P.A. Bernstein, N . Goodman and nation,” IEEE Trans. on Soft.Eng,
V. Hadzilacos, “Recovery Algo- vol. 15, NO. 7, pp. 825-831, (July
rithms for Database Systems,” 1989).
Proc. of the IFIP 9th World
Computer Congress, pp. 799-807, [Lampson 811 B. Lampson, “Remote Procedure
(1983). Calls,” Lecture Notes in Computer
Science 105, Berlin: Springer-
[Birrell 831 A.D. Birrell and B.J. Nelson, Verlag, pp. 365-370, (1981).
“Implementing Remote Procedure
Calls,” Operating Systems Review, [Liskov 831 B. Liskov and R. Scheifler,
vol. 17, no. 5, (Oct. 1983). “Guardians and Actions: Lingus-
tic support for robust, distributed
[Casey 861 L.M. Casey, “Comments on ”The progran?s,” ACM Trans. Program.
Design of a Reliable Remote Pro- Lung. and Syst., vol. 5, No. 3, pp.
cedure Call Mechanism” ,” IEEE 381-404, (July 1983).
Trans. on Computers, vol. c-35,
No. 3, pp. 283-285, (March 1986). [Liskov 871 B. Liskov and R. Scheifler, E.
Walker, W.E. Weihl, “Orphan de-
[Cooper 881 E. Cooper and R. Draves, “C- tection,” 17th Symp. Fault Tolerant
Threads,” Carnegie-Mellon Univer- Computer Systems (FTCS), pp. 2-
sity, Tech. Rep. CMU-CS-88-154, 7 , (July 1987).
(March 1988).
[McKendry 861 M.S. McKendry and M. Her-
[Gray 781 J.N. Gray, “Notes on Data Base lihy, “Time-Driven Orphan Elim-
Operating Systems,” in Operating ination,” Fifth Symp. on Relia-

411
hility in Distrihted Sofi.ware a n d Updates,” J. ACM, vol. 26, No. 4.
Database Sysiems, pp. 42-, (Jaii- pp. 631-653, (Oct,ober 1979).
uary 1986).
[Ravindran 891 I<. Ravindran and S.T. Chanson,
[Mueller 831 E.T. Mueller, J.D. Moore, and “Failure Transparency in Remote
G.J. Popek, “A Nested Transaction Procedure Calls,” IEEE Trans.
Mechanism for LOCUS,” Proc. of Compt., vol. 38, No. 8, pp. 1173-
the Ninth AGM Symp. o n Operat- 1187, (August 1989).
ing Systems Principles, pp. 71-85,
(October 1983). [Shrivastava 831 S. Shrivastava, “On the Treatment
of Orphans in a Distributed Sys-
[Paiizieri 881 F. Panzieri and S. Shrivastava, tem,” Third Symp. 07). Reliability in
“Rajdoot: A Remote Procedure Distributed Soflutare and Database
Call mechanism Supporting Or- Sysfems, pp. 155-162, (Nov. 1983).
phan Detection and Killing,” I E E E
Trans. on Soft. Eng, vol. 14, No. I , [Walker 811 E.F. Walker, “Orphan detection in
pp. 30-37. (January 1988). t,he Argus system,” Massachusetts
Inst. technol., Lab. Comput. Sci.,
[Papadimitriou 791 C.H. Papadimitriou, “The Serializ- Tech. Rep. TR-326, (June 1984).
ability of Concurrent IIat,abasc

412

You might also like