turning to the drawings , wherein like reference numerals refer to like elements , the present invention is illustrated as being implemented in a suitable computing environment . the following description is based on embodiments of the invention and should not be taken as limiting the invention with regard to alternative embodiments that are not explicitly described herein . in the description that follows , the present invention is described with reference to acts and symbolic representations of operations that are performed by one or more computing devices , unless indicated otherwise . as such , it will be understood that such acts and operations , which are at times referred to as being computer - executed , include the manipulation by the processing unit of the computing device of electrical signals representing data in a structured form . this manipulation transforms the data or maintains them at locations in the memory system of the computing device , which reconfigures or otherwise alters the operation of the device in a manner well understood by those skilled in the art . the data structures where data are maintained are physical locations of the memory that have particular properties defined by the format of the data . however , while the invention is being described in the foregoing context , it is not meant to be limiting as those of skill in the art will appreciate that various of the acts and operations described hereinafter may also be implemented in hardware . the present invention provides a rollback - free method for performing multi - step procedures in the presence of possible failure . fig1 presents a computing environment 100 that introduces the actors in the present discussion . in the computing environment 100 are a directory server 102 and two clients 104 and 106 . when the client 104 asks the directory server 102 for a resource , the request is forwarded on to whichever resource server , 108 or 110 , hosts the appropriate resource . although fig1 depicts clients and servers , the methods of the present invention are also fully applicable to peer - to - peer networking environments . the present invention is also not restricted to procedures that provide resources , but is generally applicable to multi - step procedures of any kind . the computing environment of fig1 is merely illustrative . those familiar with modern client / server techniques may note that the simplified computing environment 100 leaves out several interesting aspects such as security , authentication , redundant communications , and server administration . these details , while important in a particular implementation , are well known in the art , and their presence here would merely confuse the description of the present invention . any of the devices of fig1 may need to perform a multi - step procedure . while the methods of the present invention are applicable in the simplest case where the procedure occurs entirely on one device , the following examples focus on the more interesting case where several devices must cooperate in order to perform the procedure . for example , when a resource is moved from the resource server 108 to the other resource server 110 , the procedure must coordinate the activities of both of those resource servers along with the activities of the directory server 102 and of the potential clients 104 and 106 . this particular example is presented in greater detail below in reference to fig7 a and 7 b . the server 102 and the client 104 of fig1 may be of any architecture . fig2 is a block diagram generally illustrating an exemplary computer system that supports the present invention . the computer system of fig2 is only one example of a suitable environment and is not intended to suggest any limitation as to the scope of use or functionality of the invention . neither should the computing device 102 be interpreted as having any dependency or requirement relating to any one or combination of components illustrated in fig2 . the invention is operational with numerous other general - purpose or special - purpose computing environments or configurations . examples of well known computing systems , environments , and configurations suitable for use with the invention include , but are not limited to , personal computers , servers , hand - held or laptop devices , tablet devices , multiprocessor systems , microprocessor - based systems , set - top boxes , programmable consumer electronics , network pcs , minicomputers , mainframe computers , and distributed computing environments that include any of the above systems or devices . in its most basic configuration , the computing device 102 typically includes at least one processing unit 200 and memory 202 . the memory 202 may be volatile ( such as ram ), non - volatile ( such as rom or flash memory ), or some combination of the two . this most basic configuration is illustrated in fig2 by the dashed line 204 . the computing device 102 may have additional features and functionality . for example , the computing device 102 may include additional storage ( removable and non - removable ) including , but not limited to , magnetic and optical disks and tape . such additional storage is illustrated in fig2 by removable storage 206 and non - removable storage 208 . computer - storage media include volatile and non - volatile , removable and non - removable media implemented in any method or technology for storage of information such as computer - readable instructions , data structures , program modules , or other data . memory 202 , removable storage 206 , and non - removable storage 208 are all examples of computer - storage media . computer - storage media include , but are not limited to , ram , rom , eeprom , flash memory , other memory technology , cd - rom , digital versatile disks , other optical storage , magnetic cassettes , magnetic tape , magnetic disk storage , other magnetic storage devices , and any other media that can be used to store the desired information and that can be accessed by the device 102 . any such computer - storage media may be part of the device 102 . the device 102 may also contain communications channels 210 that allow the device 102 to communicate with other devices . communications channels 210 are examples of communications media . communications media typically embody computer - readable instructions , data structures , program modules , or other data in a modulated data signal such as a carrier wave or other transport mechanism and include any information delivery media . the term “ modulated data signal ” means a signal that has one or more of its characteristics set or changed in such a manner as to encode information in the signal . by way of example , and not limitation , communications media include wired media , such as wired networks and direct - wired connections , and wireless media such as acoustic , rf , infrared , and other wireless media . the term “ computer - readable media ” as used herein includes both storage media and communications media . the computing device 102 may also have input devices 212 such as a keyboard , mouse , pen , voice - input device , tablet , touch - input device , etc . output devices 214 such as a display ( which may be integrated with a touch - input device ), speakers , and printer may also be included . all these devices are well known in the art and need not be discussed at length here . to clearly distinguish the present invention from the prior art , fig3 presents the well known , prior art two - phase commit technique for recovering from failures . when a multi - step procedure needs to update more than one database , the two - phase commit technique is often used to ensure that the databases remain synchronized . the procedure begins in state 300 . in the example of fig3 , two databases are in their initial , pre - procedure , states 302 when they are requested to move to their requested states 308 . the request can be , for example , a simple change in the value of a variable that is stored in both databases . it can also be a more complicated move of a resource from one database to the other . in any event , each database attempts to comply with the request . for example , in transition 310 one of the databases attempts to move from its initial state 306 to the requested state 314 . if successful , the database , for the moment , marks the change as temporary . it may happen , on the other hand , that one or both of the databases is unsuccessful in trying to move to its requested state . for example , instead of successfully performing the transition 310 , the database may revert in transition 316 to its pre - procedure , initial state 306 . in state 318 , a monitoring agent queries all of the databases involved in the procedure to find out whether they have successfully made their transitions . if all of them have , then each database is told to mark its change as permanent in state 320 . the update procedure has been successfully performed , and all of the databases are in their requested , post - procedure states 308 . if , however , at least one database could not comply with the request , then each database is told to “ back out ” of the request , that is , to discard the change it marked as temporary . here , the update procedure has failed , but , because of the back - out enabled by the two - phase commit technique , the databases are still synchronized , albeit in their pre - procedure initial states 302 . because the databases are synchronized , the procedure can be retried or can be abandoned with safety . this two - phase commit technique is readily applicable to the environment of fig1 only if all of the servers 102 , 108 , and 110 use the same type of database . ( a two - phase commit technique can be developed that will work across different database types , but it would carry a significant cost in development time and in complexity .) as networked devices and as providers of networked devices proliferate , that requirement is daily becoming more difficult to meet . in contrast , the methods of the present invention are applicable across database types and even for devices that do not have a database . fig4 presents a second widely used , prior art technique for failure recovery : rollback upon failure . this technique is often useful in environments that do not share a common database type . the procedure begins at its initial state 400 and attempts to progress through intermediate states 404 , 408 , and 412 until successfully reaching its final state 416 . the vertically downward pointing transitions , such as 402 , show the course of the procedure in the absence of failure . if any transition fails , however , the previous results are “ rolled back ” or undone . for example , if the procedure of fig4 successfully progresses to state 408 but fails to perform the transition to state 412 , then the intermediate results ( if any ) of the attempt to transition to state 412 are undone in the rollback transition 414 . the previously performed successful transition from 404 to state 408 is then rolled back in the transition 410 . finally , the rollback transition 406 takes the procedure back to its initial state 400 . with all of the intermediate results undone , it is now safe to either retry the procedure or to abandon it , as appropriate . unfortunately , the rollback technique of fig4 can be horrendously complex to implement . each rollback transition , such as 406 , can take as much time to develop as the corresponding forward transition , such as 402 . also , if a rollback transition fails , it may in turn need to be rolled back . thus , the rollback technique compounds the complexity of an already complex multi - step procedure . contrast the prior art techniques of fig3 and 4 with the embodiment of the present invention illustrated in fig5 a . in the absence of failure , the multi - step procedure of fig5 a is identical to that of fig4 : beginning at the initial state 400 , the procedure progresses through the intermediate states 404 , 408 , and 412 until it successfully reaches the final state 416 . when a failure is detected , however , the technique illustrated in fig5 a does not attempt to rollback the previous results . instead , regardless of where in the procedure the error occurred , the procedure is redirected , as in the transition 500 , to a “ retry ” or “ recovery coordination ” state 502 . from this state 502 , the procedure is sent back directly to its initial state 400 and retried . no rollback transitions need be developed , nor does this technique depend upon common database characteristics . fig5 b shows a slight variation on the rollback - free technique of fig5 a . in fig5 b , if the procedure fails at its very first transition 402 , then instead of moving to the recovery coordination state 502 , the procedure simply reverts through transition 504 to its initial state 400 . this simplification is possible because the failure occurs before any intermediate results are created . still , it may be preferred to always transition to the recovery coordination state 502 in the event of failure , as in fig5 a , in order to generate error messages , track error statistics , and the like . in order for the rollback - free techniques of the present invention to work properly , the procedure should be tolerant of having its transitions performed multiple times without causing a loss of data integrity . this aspect is discussed below , especially in relation to step 610 of fig6 and in relation to fig7 a and 7 b . an embodiment of the rollback - free technique illustrated in fig5 a and 5 b is presented in detail in fig6 . the technique begins in step 600 by setting up a failure monitor . in some embodiments , this step is only implied and actually does nothing . in other embodiments , the recovery coordination state 502 of fig5 a is initialized here . step 602 is included for the sake of completeness . it corresponds to setting the initial state 400 of fig5 a . the presence of this step is to show that the procedure begins at its initial state ( of course ). the procedure is actually performed in step 604 which corresponds to the states 404 , 408 , 412 , and 416 and their failure - free transitions of fig5 a . step 606 is where failures are detected . step 606 does not actually follow step 604 but occurs in conjunction with that step . that is simply to say that as the procedure is performed , it is monitored for failures . if no failure is detected , then the procedure terminates successfully in step 612 . if a failure is detected during the performance of the procedure , however , the procedure stops , and control passes to step 608 ( which corresponds to the recovery coordination state 502 of fig5 a ). as appropriate , an error message can be generated in this step . the number of failed attempts can be compared against a pre - determined threshold and the procedure abandoned if the threshold is reached . error statistics can be gathered which become especially useful when the same failure monitoring is performed on multiple procedures . avoiding rollbacks , the rollback - free failure recovery technique begins in step 610 to retry the procedure from the beginning . if some of the transitions specified by the procedure were successfully completed before the failure occurred , then those transitions can be skipped . alternatively , those successful transitions can be re - executed . this is an important point : the procedure should be designed so that , as much as possible , its transitions can be re - executed without causing a loss of data integrity . in developing a procedure that has this property , it helps to consider the database concept of “ idempotence .” a database update or a transition in a procedure is said to be idempotent if it can be invoked multiple times and produce the same result every time . for example , consider the case of a variable x with an initial value of 1 . two functions are defined that alter the value of x : increment ( x ) gives x a final value 1 more than its previous value , while assign ( 2 , x ) gives x the final value of 2 . clearly , increment ( x ) produces a new value for x every time it is run , while assign ( 2 , x ) always leaves x with the final value of 2 . assign ( 2 , x ) is idempotent , and increment ( x ) is not . because the techniques of the present invention do not rollback previously created intermediate results , the procedures should be developed with idempotence in mind . strict idempotence is not always necessary , but the procedure should be able to be performed even in the face of inconsistent data caused by previously created intermediate results . as another simple example , the procedure should be able to intelligently ignore an error message saying that the requested transition has already been performed . an example of such a procedure is discussed below in relation to fig7 a and 7 b . in any case , the procedure begins again at its initial state ( 400 of fig5 a ) and progresses through its transitions until it reaches the point of the previous failure . the previously failing transition is retried , possibly with better results . the procedure continues in this fashion until it either successfully reaches its final state 416 or is abandoned . fig7 a , 7 b , 8 a , and 8 b illustrate a procedure developed to work with the rollback - free failure recovery techniques of the present invention . fig7 a and 7 b together form a flowchart of the procedure , while fig8 a and 8 b show the values of state variables in one embodiment of the same procedure . this procedure moves a resource from the resource server 108 to the other resource server 110 . it coordinates these two resources servers along with the directory server 102 . note that this procedure is meant to be illustrative , not limiting : the techniques of the present invention are not restricted to this particular procedure . step 602 of fig6 sets a procedure &# 39 ; s actors to their initial state . for the particular procedure of fig7 a and 7 b , the details of step 602 are given in steps 700 , 702 , and 704 . in this resource - moving procedure , the directory server 102 uses two flags : a current resource server flag indicates where the resource currently resides , and a target resource server flag indicates where the resource is going , if anywhere . in steps 700 and 702 , the current resource server flag is set to indicate that the resource resides on the first resource server 108 , and the target resource server flag is set to a value that does not indicate any resource server , such as the null shown in fig8 a . in this particular embodiment , each of the resource servers 108 and 110 has a boolean moveaway flag . in step 704 , the first resource server 108 moveaway flag is set to false to indicate that the resource - moving procedure has not yet begun . note that these steps 700 , 702 , and 704 are not really part of the resource - moving procedure : they are shown to illustrate the state of the actors before the procedure actually begins . in general , the procedure is actually performed in step 604 of fig6 while being monitored for failures in step 606 . in the detailed example of fig7 a and 7 b , the resource - moving procedure begins in step 706 when the directory server 102 &# 39 ; s target resource server flag is set to indicate the second resource server 110 . notice that this step , like most of the steps of this procedure , involves the change of only one variable on only one computing device . this eliminates the possibility of a half - completed step and the attendant loss of data integrity . then , in step 708 , the moveaway flag of the first resource server 108 is set to true to indicate that the resource will soon be leaving . in step 710 of fig7 b , the resource is actually copied to the second resource server 110 . while this step can certainly fail part - way through , with only some of the resource copied over , note that no state variables are changed in this step . the state of the resource - moving procedure is always easily recoverable because the state variables are always kept consistent . in step 712 , the moveaway flag of the second resource server 110 is set to false indicating that the just arrived resource is expected to stay a while . in some embodiments , the resource takes up server memory . in these embodiments , the first resource server 108 can delete its copy of the resource in step 714 in order to free up its memory . once the procedure completes successfully , only the second resource server 110 will ever receive a request for the resource . finally , in step 716 , the directory server 102 sets its current resource server flag to indicate that the resource is now on the second resource server 110 and sets its target resource server flag so that it does not indicate any resource server . the latter flag is used to indicate that the resource is not currently being moved . in the illustrated embodiment , these two flags are set in one indivisible ( or “ atomic ”) operation so that their values remain consistent at all times . fortunately , some operating systems provide the ability to change exactly two variables in one operation . the atomic operation of step 716 either succeeds with respect to both variables or fails with respect to both so that their values remain consistent . some operating systems do not provide the ability to change two variables in one atomic operation . if that is the case , then the current resource server flag and the target resource server flag are simply set in consecutive steps . if a failure is detected at any time during the resource - moving procedure of fig7 a and 7 b , the recovery technique of fig6 takes over at step 608 . the transitions of the resource - moving procedure are all designed to prevent a loss of data integrity if they are re - executed as part of the recovery technique . in view of the many possible embodiments to which the principles of the present invention may be applied , it should be recognized that the embodiments described herein with respect to the drawing figures are meant to be illustrative only and should not be taken as limiting the scope of the invention . for example , those of skill in the art will recognize that the illustrated embodiments can be extended to cover other , non - illustrated multi - step procedures without departing from the spirit of the invention . although the invention is described in terms of software modules or components , those skilled in the art will recognize that such may be equivalently replaced by hardware components . therefore , the invention as described herein contemplates all such embodiments as may come within the scope of the following claims and equivalents thereof .