Replica administration without data loss in a store and forward replication enterprise5787247Abstract A system and method for replica administration without data loss is disclosed. In a replication environment where data is replicated around a network and where any system can make changes to the data, data loss may occur if one copy of the data is deleted before changes made to that copy are replicated to other systems in the network. The present invention describes a robust administration environment which prevents inadvertent data loss by verifying that changes made to a local copy of the data reside on at least one other system in the network. The system and method of the present invention also provide a mechanism to allow an administrator to bypass such safeguards in appropriate circumstances in order to handle special cases such as total removal of the data from the network. The replica administration environment is implemented by defining various states that represent the level of participation in the replication of the data. For example, an active state can indicate full participation while a deleted state can indicate no participation. In addition to an active state and a deleted state, one or more intermediate states may be defined. The checks and safeguards can be performed in these intermediate states. In appropriate circumstances, an administrator may force the transition from certain of the intermediate states to either the active state in order to return a system to full participation or to the deleted state in order to bypass the safeguards of the present invention. Claims What is claimed and desired to be secured by United States Letters Patent is: Description BACKGROUND OF THE INVENTION
______________________________________
Data Set List
______________________________________
Data Set No. 1
Data Set No. 2
.cndot.
.cndot.
.cndot.
Data Set No. n
______________________________________
Each data set is defined by a set of properties. These properties describe or define important features of the data set. Each entry in the data set list comprises the data set properties of a data set. For example, in one preferred embodiment, each data set (and each entry in the data set list) comprises: ##STR1## The data set name is a common name for the data set that is displayed to users. The data set ID is an identifier that uniquely identifies the data set across the replication enterprise. Any type or form of ID will suffice for this purpose. For example, if the enterprise had synchronized clock values available, each ID could be drawn from the globally synchronized clock value or have the globally synchronized clock value as part of the ID. As another example, one of the replica nodes in the enterprise could be responsible for issuing ID values to all other replica nodes. Other methods could be developed and any method will work. All that is required is the ability to distinguish one replica node from another. One presently preferred method involves generating a Globally Unique ID (GUID) and concatenating it with a local counter value to form a Fast Unique ID (FUID). The GUID is a unique 16 byte value created by concatenating a 60 bit system value, a 4 bit version number identifying which version of the ID generating program is used, a 16 bit clock sequence number that is incremented every time an ID is assigned, and a 48 bit network address drawn from the network hardware of the replica node. A FUID is created by concatenating a GUID value with a local counter value that is incremented every time an ID value is assigned. More details of generating GUIDs and FUIDs can be found in the Store and Forward Application, previously incorporated by reference. The change number is an identifier that essentially acts as a version number for the data set properties. The change number uniquely identifies the change number assigned when the data set properties were last changed. Any type or format of identifiers may be utilized for the change number as long as each change number is unique across the enterprise. In one preferred embodiment, a FUID is used for the change number. The time last modified is the local time that the properties were last modified. The replica list is the list of replica nodes having a copy of a populated version of the data set. The replica list acts as a distribution list for replication packets containing changes to the contents of a data set. The replica list may also contain other information, such as a replica state indicating the level of participation of each replica node on the list in the replication of the data set and a time last modified stamp indicating the time that the replica state was last modified. Although not typically utilized, it would also be possible to have distribution lists for various data set properties. In this way, the location (and even existence) of certain data sets could be kept hidden from certain replica nodes. In conjunction with security measures which restrict access to hidden data sets, the ability to hide data sets from certain replica nodes may be useful in situations where certain users only access the enterprise through a limited number of replica nodes and access to certain data sets by these users is to be restricted. Collectively, the distribution lists used for either data objects or data set properties are referred to as "replica object distribution lists." Finally each entry in the data set list may have a pointer to a list of data objects. This list of data objects is the contents of the data set. For replica nodes having a populated data set, the pointer will point to the list of data objects. For replica nodes having an unpopulated data set, the pointer will be null. Other information may also be included in the data set properties. For example, for conflict detection and resolution, it may be desirable to include a predecessor change list that contains a change history of the data set properties. As another example, for hierarchically structured data, a parent property and/or a path property could be included to define the hierarchy of the data sets. Conflict detection and resolution is covered in greater detail in copending U.S. patent application Ser. No. 08/673,161, entitled "System and Method for Distributed Conflict Resolution Between Data Objects Replicated Across a Computer Network,"(hereinafter the "Conflict Resolution Application"), incorporated herein by reference. Replication of hierarchically structured data is covered in greater detail in copending U.S. patent application Ser. No. 08/679,209, entitled "System and Method for the Distribution of Hierarchically Structured Data," (hereinafter the "Hierarchical Data Replication Application"), incorporated herein by reference. To further illustrate the replication of populated and unpopulated data sets, consider that one replica node might receive only replication packets containing data set properties. Assuming that this replica node received the replication packets containing data set properties for all data sets in the enterprise, this replica node will then have a copy of the data set list (or "set of data sets") available in the enterprise. The data objects associated with each entry in the data set list are not available locally, however. This replica node has unpopulated data sets. Another replica node may receive both replication packets containing data set properties and replication packets containing data objects. Assuming that this replica node received all such replication packets, this replica node has copies of both the data set list and the data objects associated with each entry in the data set list. This replica node has populated data sets. It is rare that a replica node has either all populated or all unpopulated data sets. Typically, a replica node will receive replication packets containing data set properties for all data sets and replication packets containing data objects for some data sets. These replica nodes have a complete data set list with some populated data sets and some unpopulated data sets. In order to track the changes that are made to either the data set properties or the data objects, each change is assigned a unique change number. By assigning a unique change number to any change that is made to a particular replica object, it is easy to track various changes across the enterprise. For example, change numbers may be used to identify if two copies of a particular replica object are the same. If two copies of a given replica object contain the same changes, then the replica objects are the same. The change numbers which form the basis of the present state of a replica object may be stored in a change set. A change set contains one or more groups of changes. Change numbers and change sets may also be used to identify any changes which are missing from a replica object. As discussed in greater detail hereafter, being able to identify whether particular changes form the basis for a particular replica object is useful for the present invention. Change numbers and change sets can also be used for other purposes such as recovery of changes missing from a particular replica object and identifying conflicts between two copies of the same replica object. Utilizing change numbers and change sets to recover data missing from a replica object is described in greater detail in copending U.S. patent application Ser. No. 08/670,588, entitled "System and Method for Discovery Based Data Recovery in a Store and Forward Replication Process" (hereinafter the "Backfill Application"), incorporated herein by reference. Utilizing change sets and change numbers to identify and resolve conflicts between two copies of the same replica object is discussed in the copending Conflict Resolution Application, previously incorporated herein by reference. More information about general use of change numbers in a store and forward replication process can be found in the copending Store and Forward Application, previously incorporated by reference. Because copies of a single data set are located at various replica nodes throughout the enterprise, a situation inevitably arises where it becomes necessary to change the locations of copies of a data set. For example, it may become necessary to add a copy of a data set to a replica node, either because a new data set is being created or because it is necessary to add a new copy of an existing data set. Additionally, it may become necessary to move a copy of a data set from one replica node to another, or to delete a copy of a data set from a replica node. Collectively these activities, as well as others, are referred to as "replica administration. " When making changes such as these, care must be taken to prevent inadvertent data loss. Because multiple copies of the same data set exist, and because any one of the copies can be changed at any replica node where they reside, if a local copy of a data set is removed before the changes made to the local copy have been sent to other replica nodes, then those changes will be lost. 2. Summary of Replica Administration Without Data Loss Although the present invention will be described in terms of administering a group of objects (a data set), the principles of the present invention can be applied to a single data object. Thus, the present invention does not distinguish between dealing with a group of data objects or with only a single data object. The present invention thus embraces replica administration where a data set is defined in broad terms which encompasses any amount or format of data which is replicated as a single unit across an enterprise. Referring now to FIG. 2, a simplified conceptual block diagram of one embodiment of the present invention is presented. As previously described, the present invention relies on message transport agent 20 to transport message packets to and from various replica nodes in the enterprise. Furthermore, as previously described, the present invention involves replica administration of data sets replicated across an enterprise by a replication process. Thus, although not part of the present invention, a replication process is presumed. In FIG. 2, the replication process is shown generally as 22 and is located within dashed box 24. The present invention will work with virtually any type of replication process although the preferred replication process is a store and forward replication process, as previously summarized. The preferred replication process distributes both data objects and data set properties, although this is not strictly required as long as some mechanism exists for distributing certain types of data set property information. In FIG. 2, a generic replication process is illustrated by replication processing block 26. As illustrated in FIG. 2, replication processing block 26 transmits and receives message packets via MTA 20. The received and transmitted packets are illustrated in FIG. 2 by received packet 28 and transmit packet 30. Depending on the type of replication process utilized, received packet 28 and transmit packet 30 can represent a wide variety of message packets that are utilized by replication processing block 26 in order to accomplish data replication and other associated functions. For example, the copending Backfill Application describes four packet types which are used to recover data missing from a replica object. These packet types are a data packet, a data request packet, an information packet and an information request packet. The present invention as described herein presumes that replication processing block 26 replicates both populated and unpopulated data sets (e.g., data objects and data set properties). Although such a replication process is desired, it is not strictly necessary as long as certain types of data set property information can be shared among replica nodes. The required capability is discussed in greater detail below. Replication processing block 26 replicates data objects contained in one or more data sets. As illustrated in FIG. 2, a replica node may have a plurality of data sets, one of which is illustrated by replica 32. As previously indicated, a replica comprises copies of one or more data objects which are replicated at various replica nodes throughout the enterprise as a unit. In other words, a replica is a particular copy of a data set located at a particular replica node. A set of properties may be associated with each data set. These properties, often referred to as "data set properties," include such information as a name and/or other identifying information, access control information such as a list of users which can access the contents of a data set or the properties of the data set, and a list of replica nodes (a replica list) which have the contents of a data set. In addition, data set properties may include other information as described in greater detail below. Because data set properties are associated with each data set, the data set properties provide a convenient location to store information which is needed by the present invention. As described in greater detail hereafter, the present invention utilizes a "replica state" to indicate the level of participation of each replica node in the data replication of each data set. For example, the replica state could indicate that a replica node was actively participating in the replication for a particular data set. In addition, the replica state could indicate that the replica node had deleted its local copy of the data set. Finally, the replica state could indicate that the replica node was in the process of deleting its local copy of the data set. In fact, a replica state can be established for any level of participation in the replication of a particular data set. The replica states defined in this application are designed to fulfill the goals of replica administration without data loss. The replica states allow such administration functions as adding a replica, deleting a replica, or moving a replica, while preventing inadvertent data loss and fulfilling the goals of the present invention. Embodiments within the scope of the present invention can comprise means for tracking the replica state of a replica node. By way of example, and not limitation, such means can comprise replica list 34. Since the store and forward replication process maintains a replica list that contains all the replica nodes which are participating in the replication of a particular data set, the replica list provides a convenient location to store replica state information. One such replica list is illustrated in FIG. 2 as replica list 34. In one preferred embodiment, each entry in the replica list comprises: ##STR2## The replica node ID is an identifier which uniquely identifies a particular replica node in the enterprise. Any type or form of ID value may be utilized for the replica node ID as long as the identifier is capable of uniquely identifying a particular replica node in the enterprise. One suitable method for generating a unique replica node ID is summarized later in this application and is more particularly disclosed in the copending Store and Forward Application, previously incorporated by reference. The replica state is the current replica state of the replica node identified by the replica node ID. The time last modified is a time stamp value which indicates the time that the replica state was last modified. The time last modified stamp is utilized in replica list maintenance, discussed below. Because the present invention utilizes the replica list to store information about the replica state of a particular replica node with regards to a particular data set, and because such replica lists are replicated around the enterprise by replication processing block 26, care must be taken to properly maintain the replica lists, such as replica list 34. In FIG. 2, such a maintenance function is performed by replica list maintenance block 36. Replica list maintenance block 36 is responsible for ensuring that replica list 34 is properly updated as new information is received via replication processing block 26. Such updating includes the resolution of any conflicts which may arise during the replication of replica lists. Because data set properties, including replica lists, are replicated across the enterprise, and because changes may occur to these data set properties at any replica node, a situation may arise where one copy of the data set properties on one replica node is changed so as to be in conflict with another copy of the data set properties on another replica node. For example, suppose the data set properties included a data set name which could be changed by a user. Now suppose user 1 connected to one replica node changed the name of a data set from A to B. Suppose that, simultaneously, user 2 connected to a different replica node changed the data set name from A to C. In this situation, a conflict between the names would arise and would have to be resolved when copies of the data set properties were exchanged during replication. Similar conflicts can arise with regard to other data set properties in the replica list. Any conflicts which arise must be resolved in a manner that does not create problems for the present invention. Replica list maintenance block 36 can be part of the present invention, or may be part of another component of the replication process. In essence, all that is required by the present invention is that replica list 34 is updated so that the most recent entries reside in replica list 34 and so that no entries are lost during any conflict resolution process which is utilized. These two requirements may be met by utilizing the time last modified time stamp of the replica list. As previously described, the time last modified time stamp indicates the time which the replica state was list modified. When new information is received via replication processing block 26, replica list maintenance block 36 should compare the received replica list with replica list 34. As corresponding replica list entries are compared, the replica list entry with the later time stamp may be taken as the most current entry. Furthermore, entries having no corresponding entry in the other replica list can be merged into the final list. For example, consider replica list 1 which has entries as follows:
______________________________________
A Active T.sub.1
D Deleted T.sub.2
G Active T.sub.3
______________________________________
and replica list 2 which has entries:
______________________________________
A Active T.sub.1
D Active T.sub.4
______________________________________
Now assuming that the higher numbered timed stamps are later in time so that T.sub.4 is the latest time stamp and T.sub.1 <T.sub.2 <T.sub.3 <T.sub.4, then an updated list containing the most current information from either list 1 or list 2 would be:
______________________________________
A Active T.sub.1
D Active T.sub.4
G Active T.sub.3
______________________________________
When the lists are merged, the A entry is identical in both tables and so it is kept without change. The D entry of list 2 has a time stamp of T.sub.4 which is later than the D entry of list 1 which has a T.sub.2 time stamp. Thus, the D entry of list 2 is taken and the D entry of list 1 is eliminated. The G entry exists only in list 1 and has no corresponding entry in list 2 so the G entry of list 1 is included in the final updated list. A much more detailed algorithm for detecting and resolving conflicts between different copies of the properties of a data set is disclosed in the copending Conflict Resolution Application, previously incorporated by reference. The conflict resolution process as disclosed in the Conflict Resolution Application is suitable for use in replica list maintenance block 36. When a conflict is recognized and resolved by replica list maintenance block 36, it may be desirable to inform one or more users that a conflict has been recognized and resolved. Embodiments within the scope of the present invention may comprise means for notifying one or more users of a conflict. In FIG. 2 such means is illustrated, for example, tby conflict notification packet 37. The information in conflict notification 37 can be simple, such as a notification that a conflict was noted and resolved, or can be more detailed, such as a detailed explanation of what the conflict included and how it was resolved. Also, notification may be sent to any number of individuals. For example, it may make sense in some implementations to send notification to an "owner" of the data set and to the individuals which made the changes that created the conflict. Other combinations are possible. As explained in greater detail in the Conflict Resolution Application, many conflict resolution processes are structured so that each replica node will recognize and resolve the conflict in exactly the same way. If such an algorithm is used, care must be taken not to send multiple notifications of the same conflict. Therefore, when such a process is used, it may be desirable to designate one replica node as a data set's "home server" and let only that replica node send conflict notification. More details about such a scheme can be found in the copending Conflict Resolution Application, previously incorporated herein by reference. Because the replica state represents the level of participation in the replication process of a particular data set by a particular replica node, the process of administering data sets will involve changing the replica state of a replica node. As described in greater detail hereafter, replica administration functions such as adding a copy of the data set to a replica node, deleting a copy of a data set on a replica node, and moving a copy of a data set from one replica node to another, involve an orderly transition from one replica state to another replica state, with certain functions being performed in each replica state. Embodiments within the scope of the present invention can therefore comprise means for changing the replica state of a replica. By way of example, and not limitation, in FIG. 2 such means can comprise local processing block 38 and/or replica state monitoring/update block 40. As defined in greater detail below, state transition is initiated when a certain event occurs or when one or more conditions are satisfied. In FIG. 2, as such events or conditions occur, the replica states stored in replica list 34 may be updated or modified by local processing block 38 or replica state monitoring/update block 40. As the replica states are updated and stored in replica list 34, replication processing block 26 will distribute the changes to other replica nodes in the enterprise. Thus, other replica nodes in the enterprise will have an updated replica list illustrating the current replica state of the replica nodes on the replica list. Embodiments within the scope of the present invention can comprise means for monitoring the replica state in order to detect transitions from one state to another. By way of example, and not limitation, in FIG. 2 such means as illustrated by replica state monitoring/update block 40. If a state change is initiated at another replica node and received via replication processing block 26, or if the local replica state is changed via local processing block 38, then a process must be in place to monitor the local state change and take appropriate action. Such a monitoring function may be performed by replica state monitoring/update block 40. Replica state monitoring/update block 40 can then pass the replica state information to replica state processing block 44 to perform the appropriate processing. As disclosed in greater detail hereafter, before a copy of the data set is removed from a replica node, in order to guard against inadvertent data loss a predefined series of steps are taken. In one embodiment, the series of steps includes forcing replication of changes which have been made to local replica 32 and/or the data set properties associated with replica 32 (including replica list 34). Embodiments within the scope of this invention can therefore comprise means for initiating replication of changes which have been made but which have not yet been previously replicated. In FIG. 2, such means can comprise, for example, control 42. As illustrated in FIG. 2 control 42 provides a mechanism for replica state processing block 44 to direct replication processing block 26 to initiate replication of the changes which have been made but which have not yet been replicated. In FIG. 2, replica state processing block 44 is responsible for the main processing which takes place during replica administration. For example, replica state processing block 44 will receive notification of a state change from replica state monitoring/update block 40 and then take appropriate action according to the replica state. Another step in one process to remove a copy of a data set from a replica node is to verify that the changes which reside locally, as for example in replica 32, also reside somewhere else in the enterprise. If it can be determined that the changes which reside locally also reside somewhere else in the enterprise, then the copy of the data set contained in replica 32 may be safely deleted without risk of inadvertent data loss. As described more fully hereafter, this process may involve a handshaking procedure. Such a procedure may be accomplished by sending and receiving various information packets. Thus, embodiments within the scope of this invention can comprise means for verifying that the changes which are held locally reside elsewhere in the enterprise. By way of example, in FIG. 2 such means can comprise replica delete pending packet 46 and verification packet 48. As described in greater detail below, a handshaking procedure between the local replica node and other replica nodes in the enterprise may involve the sending and receiving of information packets. For example, the local replica node can send a packet asking if the locally held changes reside elsewhere in the enterprise. If those changes reside elsewhere, then a response may be sent. By sending and receiving such requests and responses, the verification process may proceed. Other ways are available to accomplish this same verification process, as described in greater detail below. If during the verification procedure the local replica node is unable to determine whether the locally held change resides elsewhere in the network, then it may be desirable to inform an administrator that the verification process was unsuccessful. Embodiments within the scope of this invention can therefore comprise means for notifying an administrator if attempts to verify that the changes made to the local copy of the data set reside on at least one other replica node are unsuccessful. By way of example, and not limitation, such means can comprise administrator notification packet 50. The above description has presented the various components which can be used to implement an embodiment of the present invention. However, the description above has not focused on specific administration functions. The section below describes the administration functions and the processing which occurs to achieve these functions in greater detail. 3. Description of Replica Administration Without Data Loss One goal of the present invention is to create a process for replica administration which prevents inadvertent data loss during replica administration in general and during replica removal in particular. In order to accomplish this goal, embodiments within the scope of this invention can comprise means for defining various replica states that reflect the status of the replica node. For example, embodiments of this invention can comprise means for defining an active state of a replica node where changes made to a local copy of a data set by the replica node are transmitted to at least one other replica node and where changes made to a copy of the data set stored at another replica node are transmitted to the local replica node. In other words, such an active state indicates that the local replica node is filly participating in replication of a particular data set. Embodiments within the scope of the present invention may also comprise means for defining a deleted state where the local copy of a data set has been removed from the local replica node so that the local replica node no longer holds a copy of the date set. In other words, such a deleted state would indicate that a replica node is no longer participating in the replication of a particular data set. Embodiments within the scope of this invention may also comprise means for defining at least one intermediate state of a local replica node where the local replica node flushes any unreplicated changes to at least one other replica node in the enterprise and then verifies that all information in the local copy of a data object resides on at least one other replica node. In other words, one or more intermediate states would indicate various steps in the removal process. As explained below, one embodiment comprises two intermediate states. By defining various states and then replicating the state information among replica nodes in an enterprise, each replica node receiving such information can be informed of the status or participation of all other replica nodes in the enterprise with respect to the various data sets which are being replicated in the enterprise. In short, such state information is an example of means for tracking the replica state of a replica node with respect to a data set. Such information is also an example of means for informing other replica nodes of the degree of participation of a particular replica node with respect to a particular data set. It will be understood by those with skill in the art that such state information can be used not only to inform other replica nodes of the degree of participation in the replication of a particular data set, but may also be used to define an orderly process to achieve replica administration. States can therefore describe the function or activity of a replica node with respect to the replication of a particular data set. Referring now to FIG. 3, a state transition diagram describing one preferred embodiment of the present invention is illustrated. As previously mentioned, embodiments within the present invention can comprise means for defining an active state of a replica node. In FIG. 3, such means is illustrated by active state 52. When a replica node is in the active state with respect to a particular data set, the replica node is fully participating in the replication of that data set. The active state thus represents the state of normal participation in the replication process. Referring briefly to FIG. 2, in the active state replication processing block 26 is functioning normally and is replicating data set objects and/or data set properties throughout the enterprise as previously described. Embodiments within the scope of this invention can comprise means for initiating transition from one state to another. By way of example and not limitation, in FIG. 3 such means is illustrated by state transition events 54, 56, 58, and 60. In FIG. 3 state transition events 54, 56, 58, and 60 illustrate events or conditions which initiate transition from one state to another state. In FIG. 3 state transition event 54 is labeled "add replica," state transition event 56 is labeled "remove replica," state transition event 58 is labeled "changes verified," and state transition event 60 is labeled "data deleted." State transition controls 54 and 56 represent events which are typically initiated by an administrator as, for example, through local processing block 38 of FIG. 2. State transition controls 58 and 60 represent other events which are generated when certain conditions are met, as, for example, by replica state monitoring/update block 40 of FIG. 2 or by replica state processing block 44 of FIG. 2. Returning for a moment to FIG. 2, as previously described replica list 34 is preferably part of the data set properties which are replicated across the enterprise by replication processing block 26. In one preferred embodiment, replication processing block 26 represents a store and forward replication process. As previously described, the store and forward replication process will replicate copies of data sets to replica nodes on the replica list for that particular data set. Additionally, in one preferred embodiment, data set properties are replicated to every replica node in the enterprise. This means that all replica nodes in the enterprise have available to them the replica list for each data set which is being replicated across the enterprise. Each replica node in the enterprise therefore knows which data sets are being replicated across the enterprise, which replica nodes have copies of the data sets, and the replica state for each replica node on each replica list. If each replica node on the enterprise has available the replica state for the replica nodes involved in replicating each data set across the enterprise, then the replica state can be used to initiate a change from one replica state to another replica state. In one preferred embodiment, a system administrator does not change the replica state directly but only issues add or remove commands to change the replica state information in replica list 34 for a particular replica node. In FIG. 2, such a change can occur via local processing block 38. If the administrator generates a state change event (such as add replica event 54 or remove replica event 56 of FIG. 3), then the state information in replica list 34 can be changed by local processing block 38. If the replica state information in replica list 34 pertains to the local replica node, then replica state monitoring/update block 40 will recognize that a state change has occurred and will notify replica state processing block 44 to take appropriate action. If, however, the change made to the replica state pertains to another replica node in the enterprise, then when the data set properties (including replica list 34) are replicated via replication processing block 26 and received by the appropriate replica node, its replica state monitoring/update block will recognize the state change and also take appropriate action. Replicating data properties in this manner creates two fundamental advantages. First it allows each replica node to receive any changes made to their replica state regardless of where the change originates. This allows an administrator to perform replica administration for any replica node while connected to any other replica node. The second advantage is that by replicating data set properties, including replica state information, each replica node knows how to treat other replica nodes. For example, if a user is connected to a replica node which does not have a local copy of a particular data set that the user wishes to access, then the replica node can check the replica list for that data set and discover which replica nodes have an active copy of the data set. Access to the data set is thus gained indirectly. Such an approach provides a highly robust administration and information network which allows users connected to any replica node to quickly gain access to the information they desire while allowing the local replica node to handle the details of where to find and access the desired information. Such a scheme hides the details of the replication enterprise from the user and requires no knowledge on the part of the user other than the knowledge of which data set he or she wishes to access. There is no cumbersome hunting for information that resides "somewhere" out there in the network. a. Remove Replica Process FIGS. 3 through 6 will now be used to describe a replica removal process of the present invention. This process is designed to remove a replica while providing safeguards which prevent inadvertent data loss during the removal process. The removal of a replica in accordance with this process requires several steps. The steps may be summarized as: 1. Initiate the replica removal process; 2. Terminate user access to the replica; 3. Flush unreplicated changes; 4. Verify that the local data set contents are available at another replica; 5. Remove the contents of the local data set; and 6. Remove the replica from the replica list. In FIG. 3, the functions disclosed in the list above are broken up between delete pending state 52, delete now state 64, and deleted state 66. In the discussion below, reference is sometimes made to the fact that a replica node will enter a particular replica state. Those skilled in the art will recognize that such a statement means that the particular data set on that particular replica node is in the designated replica state. Put another way, the statement means that a particular replica node is in the designated replica state with respect to the designated data set. Other data sets on the same replica node may be in different replica states. Suppose, for example, that a replica node was in the active state for a particular data set. In FIG. 3, the replica node would then be in state 52. Furthermore, the data set properties for that particular data set would have an "active" replica state identifier for that particular replica node. Now suppose an administrator initiates a remove replica command. The local replica node, once it receives that event, must then make the transition for that particular data set from the active state to another state where the replica removal process is initiated. It is undesirable to jump directly from the active state to a state where the replica is deleted. As previously explained, this creates a situation where data loss may occur. Embodiments within the scope of this invention may therefore comprise means for defining at least one intermediate state between the active state and the deleted state where certain functions and checks are done to prevent inadvertent data loss. In FIG. 3, two intermediate states are shown, delete pending state 62 and delete now state 64. When a replica node is in active state 52 and receives a remove replica event, remove replica event 56 indicates that the replica node transitions from active state 52 to delete pending state 62. As previously described, this may occur when replica state monitoring/update block 40 of FIG. 2 recognizes a state change for the local replica node in replica list 34 and passes that information to replica state processing block 44 of FIG. 2. When the replica node transitions to delete pending state 62, the replica node will perform the steps 2-4 listed above: terminate user access to the replica; flush unreplicated changes; and verify that the local data set contents reside at another replica node. In addition, if the transition from the active state to the delete pending state was made locally, the replication engine must also broadcast the locally made change to the data set's replica list. The initiation of the replica removal process occurs when the transition to delete pending state 62 is initiated. FIG. 4 illustrates the processing which occurs in one preferred embodiment upon entering delete pending state 62. When delete pending state 62 is entered, the first step is to terminate user access to the local copy of the data set which will be removed. This is indicated in FIG. 4 by step 66. It is important to terminate user access when a replica is to be removed. This importance flows from two considerations. The first consideration is that since the local copy of the data object is about to be removed it would be unwise to allow a user to continue to make changes to the local copy of the data set. Since one goal of the present invention is to allow the removal of a local copy of a data set without data loss, if a user were to continue to make changes to a data set, the process of the present invention would have to continually ensure that those changes were preserved so they would not be lost. If a user continually made changes to the data set, a situation may arise where the system is unable to remove the local copy of the data set. At some point then, user access to the local copy of the data set must be terminated. Terminating access to the local copy of the data set early in the process allows the orderly removal of the data set to occur in the shortest period of time while also providing a simplified removal process. The second consideration in terminating user access flows from what the user will see on his or her computer screen as the data set is removed. Since the data set exists on the system to provide information needed by a user, it is reasonable to assume that the user will at some point access the information. Perhaps the user will have displayed on his or her computer screen a listing of data sets or data objects. If the user was allowed to continually view the local copy of the data set when the data set was removed, the user would see the data set simply disappear from his or her computer screen without any explanation or indication as to what happened to the data set. By terminating access to the data set, the user will be forced to access a different copy of the information on a different replica node. As previously described, users may access a data set either locally or indirectly through another replica node. Because it is likely that copies of a particular data set only reside at certain locations in the network, then all access to that data set must be at one of the locations where a copy of the data set resides. If a user is connected to a replica node which does not have a copy of the data set, then the replica node will access a copy of a data set on another replica node in the enterprise. This creates a situation where access to a particular Copy of the replica node may either be locally, for users connected to the local replica node, or remotely, for users connected to other replica nodes not having a copy of the data set. When terminating user access to a copy of a data set, both types of access must be terminated. This may be accomplished in several ways. One way is for the local replica node to refuse connections to the local copy of the data set. Access requests from other replica nodes can then be returned as unfillable because access is prevented. Local access can be prevented in much the same way. Indirect access to the local replica may also be prevented by screening access requests at the remote replica node. Since the replica state information is preferably available at all replica nodes, each replica node will know when the replica at another replica node enters the delete pending state. Access requests to that replica node can then be halted. An error message can then be sent to users which are accessing that copy of the data set. The users can then close the data set and reopen it to establish a connection to another valid copy of the data set. In a preferred embodiment, access requests to a data set or the contents of a data set, always check the replica list property to see if the folder is accessible. Other issues exist which must be addressed when a replica node enters the delete pending state. The delete pending state is an intermediate state which indicates that a replica node has initiated the process of removing its local copy of the data set. However, the local copy of the data set has not yet been removed. Furthermore, an examination of FIG. 3 will reveal that if a replica node is in the delete pending state and receives an add replica command, then the replica node will return to the active replica state. In other words, the delete pending state represents a state where the replica node is likely to proceed and delete its local copy of the data set, but may also return to the active replica state. This creates a question as to whether continued changes to the local copy of the data set should be replicated to a replica node in the delete pending state. On the one hand if changes made by other replica nodes to the local copy of the data set are sent to a replica node in the delete pending state, and if the replica node uses those changes to update its local copy of the data set, then if the replica node proceeds to delete its copy of the data set entering those changes has, in some sense, been wasted. On the other hand, if changes made by other replica nodes are not sent to a replica node in the delete pending state, and if the replica node then returns to the active replica state, its local copy of the data set will be missing all the changes which have occurred while the replica node was in the delete pending state. Either way of treating a replica node in the delete pending state will probably work as long as a mechanism exists in the replication process to recover any changes which are missing from the local copy of the data set. Such processes are described in the copending Backfill Application, previously incorporated herein by reference. In one preferred embodiment, changes made to a data set are sent to replica nodes in the delete pending state. In another preferred embodiment, changes made to a data set are not sent to a replica node in the delete pending state. The next step in the removal process is to force any changes which have been made to the local copy of the data set to be replicated via the replication process, such as replication processing block 26 of FIG. 2. Embodiments within the scope of this invention can, therefore, comprise means for initiating replication of changes which have been made but which have not yet been previously replicated. In FIG. 4 such means is illustrated, for example, by step 70. In order to flush any unreplicated changes to be replicated out to the enterprise, it may be desirable to provide a mechanism which causes the replication process to transmit any unreplicated changes. For example, in FIG. 2 such a structure is illustrated, by control 42 running between replica state processing block 44 and replication processing block 26. Forcing the replication of changes places those changes in the enterprise so they will not be lost when the local copy of the data set is removed. In order to prevent data loss during the removal process, embodiments within the scope of this invention can comprise means for verifying that the changes which have been made to the local copy of the data set reside on at least one other replica node in the enterprise. For example, in FIG. 4 such means is represented by step 72. Any mechanism which allows a local replica node to ascertain whether the information contained in the local copy of the data set which is about to be removed resides somewhere on the enterprise can be used for such means. In order to verify that locally held changes reside elsewhere in the enterprise, a handshaking procedure can be used to verify whether the local changes do, in fact, reside in the enterprise. Such a handshaking procedure generally involves the sending and receiving of one or more messages which allow the exchange of information necessary to make the appropriate determination. In one preferred embodiment, the means for transmitting a message to at least one other replica node in order to make this determination involves selecting one or more replica nodes to receive the message, transmitting a message to the selected replica node(s) and then waiting for a response. The means for verifying that the changes which have been made locally reside on at least one other replica node in the network can, therefore, comprise means for transmitting to at least one other replica node a message to determine whether the local changes reside in the enterprise. In FIG. 2, for example, such means is illustrated by replica delete pending packet 46. The message which is transmitted is called a replica delete pending packet such as replica delete pending packet 46 of FIG. 2. The replica delete pending packet may be either a special type of packet or may be one of the other types of packets used during data replication. In one embodiment, an information request packet, such as those described in the copending Backfill Application, previously incorporated by reference, is used. A replica delete pending packet preferably comprises: ##STR3## The local replica node ID is a name or other identifying information which allows other replica nodes in the enterprise to uniquely identify which replica node is sending the packet. Any form or type of ID will work as long as it uniquely identifies the local replica node. In one embodiment, a GUID value is used for the replica node ID. The data set ID is any identifying information that corresponds to the data set, a copy of which is to be removed from the local replica node. Any type of identifying information can be used as long as it allows other replica nodes in the enterprise to uniquely identify the relevant data set. In one embodiment, a FUID value is used for the data set ID. The request type is used to identify the type of request packet being sent and received. In the instant case, request type is "replica delete pending" or a value which is interpreted as a replica delete pending packet. This field is particularly useful if this packet is one type of a general class of messages. For example, the Backfill Application, previously incorporated by reference, defines an information request packet. The replica delete pending packet may be a type of information request packet. The local change set is the set of changes held by the local replica node for this data set. As illustrated above, replica nodes or data sets must often be identified uniquely across the replication enterprise. Any type or form of name or ID may be utilized as long as the selected identifier can uniquely distinguish either the replica node or the data set across the entire replication enterprise. For example, if the enterprise had synchronized clock values available, each ID could be drawn from the globally synchronized clock or have the globally synchronized clock value as part of the ID. As another example, one of the nodes in the enterprise could be responsible for issuing ID values to all other nodes. Other methods could be developed, and any method which generates unique IDs fitting the specified criteria will work. All that is required is the ability to distinguish local replica nodes or data sets uniquely among the enterprise. In one preferred embodiment, IDs for date sets are generated by concatenating a unique replica node ID value with a counter value that is incremented every time an ID value is assigned. The unique replica node ID portion is sometimes referred to as a Globally Unique ID (GUID). The GUID value is typically generated through a process that is somewhat lengthy and may have various components which help to form the GUID. Such components can include a system time value, a clock sequence or counter value, a network address value, and so forth. In the case of the replica node ID value described above, one preferred embodiment utilizes a GUID for the local replica node ID. Further details of one way to generate GUID values are contained in the copending Store and Forward Application, previously incorporated herein by reference. In some cases, perhaps for data set ID values, it may be desirable to concatenate a local counter value with a GUID value to create the resultant ID value. Such a local counter value could be incremented every time an ID value was assigned by a particular replica node. This type of ID is sometimes referred to as a Fast Unique ID (FUID). Thus, when a data set is created on a replica node by a user, then a data set ID could be assigned to that data set by creating a FUID by concatenating a local counter value with the replica node ID for that replica node. This data set ID could then be replicated among all other replica nodes and would uniquely identify the data set. Such a scheme has many advantages and creates a simplified method of rapidly creating ID values which are unique across the enterprise. FUID values can be rapidly created because a counter only needs to be incremented to achieve the next unique ID value. FUID values are unique across the replication enterprise because the replica node ID is unique across the enterprise and because the counter value is incremented every time an ID value is assigned. Thus, the same ID value will never by used twice. Further details of this method can also be found in the copending Store and Forward Application, previously incorporated by reference. In one preferred embodiment the replica delete pending packet also comprises the local change set. As discussed previously, the local change set contains information which allows other replica nodes in the enterprise to determine the changes contained in the local copy of the data set. When a replica node receives a replica delete pending packet, the replica node compares the change set contained in the replica delete pending packet to its own local change set. This comparison will reveal whether the local change set contains at least the changes in the change set of the replica delete pending packet. In one preferred embodiment, a replica node receiving a replica delete pending packet will respond if the local change set contains at least the changes in the change set received in the replica delete pending packet. When the replica node that is deleting its local copy of the data set receives such an acknowledgement, it will know that it can safely delete its local copy of the data set. In FIG. 2, the packet which is sent in response to a replica delete pending packet is illustrated by verification packet 48. As in the case of replica delete pending packet 46, verification packet 48 may be a special type of packet or may be a type of a general class of packets. For example, the copending Backfill Application describes an information packet. This information packet contains, among other things, the change set of the replica node sending the information packet. Verification packet 48 of FIG. 2 may be implemented using an information packet like the information packets described in the copending Backfill Application. Any type of packet will work as long as the replica node receiving the verification packet can identify that the verification is in response to the replica delete pending packet or if the verification packet has sufficient information to allow the local replica node to ascertain that the changes held vocally reside on one or more other replica nodes in the enterprise. For certain implementations of replication processing block 26 of FIG. 2, special consideration must be given to the handshaking process. For example, certain replication processes implement the concept of time-based expiration of data. Time-based expiration of data refers to deleting data that is older than a specified time. One area where time-based expiration of data may be useful is in the area of E-mail messages. The utility of E-mail messages typically declines with increasing age. Messages that are several months old are typically of no further use to their intended recipient. In order to eliminate data which is not useful as it ages, time-based expiration may be used. When a given data object is older than a set time, as for example two weeks, the data object is deleted automatically. In a replication environment, time-based expiration results in a situation where changes older than a certain time are deleted from a replica node. Because an enterprise comprises many different replica nodes, each replica node may expire data at a different time. For example, one replica node may delete all data older than one week. Another replica node may delete all data older than six months. Still another replica node may never delete old data. In such an enterprise, if the replica node which never expired data wanted to delete its local copy of a data set, it would send a replica delete pending packet to the other replica nodes in the enterprise. A question then exists as to whether a replica node that once held changes but has now expired and deleted them should respond to a replica delete pending packet requesting verification that the changes which have expired exist in the network. On the one hand, if a replica node that once held the changes but which has now expired and deleted them responds to a replica delete pending packet, a situation may arise where the changes which are deleted do not in fact reside in the enterprise. On the other hand, if replica nodes which have once held changes but have now expired and deleted them do not respond to a replica delete pending packet, a situation may arise where a replica node wishing to delete its local copy of the data set may never be able to verify that the changes exist in the enterprise. This situation represents a design choice in the implementation of the verification process and each choice has its own advantages and disadvantages. Either way of implementing the verification process in the face of expired data will work, but each will have different consequences in the operation of the replication enterprise. In one embodiment of the present invention, replica nodes will respond if they once held the changes in the replica delete pending packet even though those changes have now expired and have been deleted. Other embodiments of the present invention may implement a handshaking procedure where only those replica nodes which currently have the changes will respond. In order to maximize the probability of receiving a response to a replica delete pending packet, it is preferred that replica nodes receiving a replica delete pending packet treat such a packet as a high priority request and respond to such requests in a relatively short period of time. Although the preceding section has described a verification process wherein the replica node which is about to delete a local copy of a data set sends a packet requesting other replica nodes to respond if they have at least the information that is about to be deleted, other handshaking methodologies which verify that the information that is about to be deleted resides on the enterprise can be utilized. For example, a verification process where a replica node responds to a request if the replica node has at least the information that is about to be deleted can, under certain circumstances, fail to detect that the data that is about to be deleted collectively resides in the enterprise. For example, consider replica node A where the local copy of the data set has changes 1, 2, and 3. Now consider replica node B that has changes 1 and 2 and replica node C that has changes 2 and 3. In such a situation, if A was about to delete its local copy of the data set, it would send a replica delete pending packet to replica nodes B and C. Replica nodes B and C would respond if they had at least the changes held by replica node A. In this example, neither replica node B nor C will respond since replica node B does not have change 3 and replica node C does not have change 1. In actuality, however, all the necessary changes do, in fact, reside on the enterprise. In order to detect such a situation, a verification process could be developed in which replica nodes B and C send their change sets to replica node A rather than the other way around. In such a verification process the replica node that is about to delete its local copy of the data set could send request packets to various replica nodes throughout the enterprise. These replica nodes would then respond with their own local change set. The replica node which is about to delete its local copy of the data set can then determine whether the relevant changes collectively reside on the enterprise. Such a scheme will likely generate more message traffic on the network than a method where replica nodes respond if they have at least the changes which are to be deleted. However, this example illustrates that a wide variety of verification processes can be developed that have sufficient capability to be utilized with the present invention. The above situation could also be resolved by including a data recovery component, such as that described in the copending Backfill Application. Such a backfill mechanism will allow nodes B and C to synchronize their changes so that each has a complete set of changes. Either B or C could then respond to node A so that node A could then delete its local copy of the data set. Returning now to FIG. 4, decision block 74 tests whether the changes which form the basis for the local copy of the data set resides in the enterprise. If the changes do not reside in the enterprise, then step 76 indicates that appropriate action should be taken. The question becomes what appropriate action should be taken. Step 76 is reached if the local replica node cannot verify that the changes that reside locally also reside on the enterprise. In this situation, four basic options are available. The first option which is available is to take no action at all. If this option is chosen, little adverse effects are incurred and data loss is prevented. When a replica node is in the replica delete pending state, all user access to the local copy of the data set has been terminated. Thus, no user can access or utilized the data in the local copy of the data set. In fact, as previously described, no other replica nodes will try and access the local copy of the data set and so, for all intents and purposes, such a data set is effectively placed beyond reach. It is apparent, however, that the final step of removing the local copy of the data set has not yet been completed. So, if no action is taken, then the primary adverse effect is that the disk space occupied by the local copy of the data set has not been reclaimed. Obviously, if data sets are rather large, then disk space could be eaten up fairly quickly if it is not reclaimed. Furthermore, if the selected implementation continues to replicate data to data sets in the delete pending state, the amount of disk space used can increase over time. On the other hands the data still physically resides on the replica node and can be recovered if desired. A second option would be to automatically force the replica node back to an active replica state. This would place the data back into use and allow users to access the local copy of the data set. Although this option has the benefit of preventing data loss, it may also frustrate the intent of an administrator who desires to remove the local copy of the data set from the replica node. Rather than automatically forcing the replica node back to an active state, another option is to automatically force the replica node into the delete now replica state. As explained below, in the delete now replica state the local copy of the data set is deleted. Thus, forcing a replica node into the delete now state would create a risk of inadvertent data loss. On the other hand, it would guarantee that all disk space occupied by the local copy of the data set will be reclaimed. A final option would be to notify the administrator that the replica node was unable to verify that its changes reside in the enterprise. An administrator could then examine the situation and make a determination what should be done. In such a situation, the administrator may choose to do nothing, force the replica node into the active state, or force the replica node into the delete now state. Referring to FIG. 3, the state diagram indicates that from delete pending state 62 if an add replica event is received, the replica node would transition into active replica state 52. This is indicated in FIG. 3 by add replica event 54. If, however, a remove replica command is received, then remove replica event 56 indicates that the transition would be from delete pending state 62 to delete now state 64. In the above, option 1 (do nothing) and option 4 (notify the administrator) are identical except for the notification of an administrator. In either case, nothing is done with the data set until further direction is received. In one case, an administrator is left to discover that the replica node is perpetually in the delete pending state while in the other option the administrator is notified that the replica node is perpetually in the delete pending state. Any of the above four options can be utilized with the present invention and which option is chosen is a design choice. When making such a design choice, however, careful consideration should be given to the effects of each of the above choices. There are situations and times where it is desirable to allow an administrator to bypass the safeguards put in place by the present invention, as for example if a replica node becomes stuck in delete pending state 62 of FIG. 3. Embodiments within the scope of this invention can, therefore, comprise means for bypassing the verification process so that the local copy of the data set can be deleted without verifying that the changes reside on at least one other replica node. In FIG. 3, such means is indicated by remove replica event 56. As previously described, an administrator can issue a command to generate a remove replica event. If such an event is received while the replica node is in delete pending state 62 of FIG. 3, then remove replica event 56 indicates that the replica node would transition from delete pending state 62 to delete now state 64. Although not shown explicitly in FIG. 4, if a remove replica event is received, then processing is suspended and the delete now state is entered. A remove replica event would cause the replica state in replica list 34 of FIG. 2 to change to "delete now" (in accordance with FIG. 3). Replica state monitoring/update block 40 could then inform replica state processing block 44 of the state change. Replica state processing block 44 can then perform the relevant processing. As indicated in FIG. 3, delete pending state 62 may also be exited and delete now state 64 entered when the changes are verified. This is indicated in FIG. 3 by changes verified event 58. Returning now to FIG. 4, if the changes in the local copy of the data set reside elsewhere in the enterprise, decision block 74 indicates that the next step would be to initiate a transition to the delete now state. This is illustrated in FIG. 4 by step 78. When this step is reached, replica state processing block 44 of FIG. 2 could direct replica state monitoring/update block 40 to change the replica state in replica list 34 to "delete now." Replica state processing block 44 could then transition to the delete now state. Embodiments within the scope of this invention can, therefore, comprise means for initiating transition from one intermediate state to another intermediate state. Such means may comprise, for example, changes verified event 58 or remove replica event 56 of FIG. 3. Such means may also comprise, for example, the structures of FIG. 2 which initiate a state transition by modifying the replica state in replica list 34 such as local processing block 38 and replica state monitoring/update block 40. FIG. 5 presents the processing which occurs in one preferred embodiment when the delete now state is entered. This state removes the local copy of the data set. As illustrated in FIG. 5, the first step is to lock the local copy of the data set to prevent all access to the data set. Embodiments in the present invention can, therefore, comprise means for preventing all access to a data set. By way of example, and not limitation, this is indicated in FIG. 5 by step 80. This step is different from step 68 of FIG. 4 which terminates user access to the local copy of the data set. Step 80 of FIG. 5 locks all access to the local copy of the data set just prior to removal. Such a step is necessary because under certain circumstances it may be useful to allow other processes to access the local copy of the data set even though user access to the local copy of the data set has already been terminated. One example of such a situation has previously been described. If changes made to a data set are replicated to nodes in the delete pending state, access by the process which updates the local copy of the data set will be allowed even through user access has been terminated. Such access by other processes is terminated by step 80. After all access to the local copy of the data set has been terminated, the next step is to physically delete the local copy of the data set. Embodiments of the present invention can, therefore, comprise means to delete the local copy of the data set. This is illustrated, for example, in FIG. 5 by step 82. Such a delete process can be any of the variations utilized by computer systems when they remove computer files from local storage media such as a local hard disk. After the local copy of the data set has been deleted, the next step is to initiate the transition to the deleted state. This is illustrated in FIG. 5 by step 84. FIG. 3 illustrates that data deleted event 60 causes the transition from deleted now state 64 to deleted state 66. Data deleted event 60 represents the fact that step 82 of FIG. 5 has been accomplished and the transition from delete now state 64 to deleted state 66 should be accomplished as indicated in FIG. 5 by step 84. An examination of FIG. 3 reveals that the only way to transition from delete now state 64 to deleted state 66 is via data deleted event 60. Furthermore, note that the only transition out of delete now state 64 leads to deleted state 66. This means that if any other events occur such as remove replica event 56 or add replica event 54, they will have no effect on a replica node in delete now state 64. This is consistent with the basic purpose of delete now state 64 which is to ensure that once the computer files which make up the date set begin to be deleted that nothing interrupts the process until all computer files have been deleted. One scenario which should be prevented is the partial removal of a data set. Such a scenario can leave a data set in an unstable and unrecoverable state. For this reason, it is desirable to carry out the removal of information associated with a local copy of a data set without interruption. As with previous state transitions, replica state processing block 44 of FIG. 2 can inform replica state monitoring/update block 40 to modify the replica state of replica list 34 from delete now to deleted. It is apparent from FIG. 5 that the delete now state is relatively short lived and transitory. This means that once the replica state of replica list 34 in FIG. 2 is modified, the likelihood of that state being replicated to other replica nodes via replication processing block 26 is small. However, if such a state is replicated to other replica nodes in the enterprise, then no unforeseen effects need be created. If other replica nodes in the enterprise treat the delete now state just as they would treat either the delete pending state or the deleted state, then operation of the replication environment should be predictable and consistent with whichever state is selected. When deleted state 66 of FIG. 3 is entered, very little processing need be performed. The processing of deleted state 66 is illustrated in FIG. 6. As illustrated therein, only a single processing step is performed. As illustrated in step 86, when deleted state 66 of FIG. 3 is entered, the entry in the replica list is set to the deleted state. As previously described in conjunction with other replica state changes, replica state processing block 44 of FIG. 2 can direct replica state monitoring/update block 40 to modify the replica state in replica list 34 to deleted. This deleted state will then be replicated via replication processing block 26 to other replica nodes in the enterprise. b. Add Replica Process Returning now to FIG. 3, active state 52 can be entered either from deleted state 66 or delete pending state 62 upon add replica event 54. The processing which occurs when active state 52 is entered is illustrated in FIG. 7. The first step toward active participation in the replication for a data object is to obtain an unpopulated data set. This is indicated in FIG. 7 by step 88. Obtaining a copy of an unpopulated data set is nothing more than obtaining the data set properties for a particular data set. As previously described, a data set can be thought of as a container which holds one or more data objects. The container or unpopulated data set is described and defined by the data set properties. How a replica node obtains a copy of an unpopulated data set will be dependent upon the implementation of the replication process. For example, in one preferred embodiment of the store and forward replication process described in the copending Store and Forward Application, previously incorporated by reference, the data set properties for all data sets are replicated to each replica node in the enterprise. In such an environment, if a replica node has been added to the replication enterprise, it already has a copy of all data set properties. A method of adding a replica node to a replication enterprise is described in the copending Backfill Application, previously incorporated by reference. A procedure such as the one disclosed in the Backfill Application may be utilized to obtain a copy of the unpopulated data set if necessary. Basically, any procedure which allows the data set properties to be obtained will suffice for step 88. After the unpopulated data set has been obtained, the next step is to populate the data set with copies of the data set objects. This step is illustrated in FIG. 7 by step 90. The goal of this step is to obtain current copies of the data objects which contain all changes made to the data objects. This can be accomplished by requesting current copies from one or more replica nodes in the enterprise. If step 90 is thought of as obtaining data which is missing from the current copy of the data set, then any procedure which is used to recover missing data may be used to populate the data set. The copending Backfill Application describes a process whereby missing data is requested via data request packets from one or more other replica nodes having the desired data. Such a procedure is entirely adequate for populating the data set. Any other procedure which is compatible with the implemented replication process may also be utilized. Once the data set properties and the data objects associated with those data set properties have been obtained, a replica node is in a position to begin active replication of the data set. This is illustrated in FIG. 5 by step 92. Note, however, that as soon as a replica node learns that it is to now carry a copy of the data set, users may start connecting to this replica, even though it is not populated. Users may also begin adding data to the local copy of the data set. As previously discussed, add replica events are typically initiated by an administrator. An administrator directs that a copy of a data set be located on a particular replica node. Local processing block 38 of FIG. 2 can then respond to the add replica event by modifying the replica state in replica list 34 to active. If the local replica node is being moved to the active state, then replica state monitoring/update block 40 will note the state change in replica list 34 and inform replica state processing block 44 which can then take appropriate action. On the other hand, if the replica state change pertains to another replica node, when replica list 34 is replicated via replication processing block 26, the other replica node will receive the state change and take similar actions. C. Move Replica Process When a copy of the data set is to be moved from one replica node to another, the replica administrator can initiate a move process. Moving a copy of a data set from one replica node to another consists of two operations. The first operation is an add operation on the target replica node (the replica node which will receive the copy of the data set). The next operation is a remove operation on the source replica node (the replica node which will no longer have a copy of the data set). The add process and remove process previously described can be utilized unchanged for the move operation. Furthermore, since the remove operation checks to ensure that the contents of the data set which is to be removed resides on at least one other replica node in the enterprise, the add operation and remove operation can be issued simultaneously. 4. Summary The present invention discloses a system and method of replica administration which provides a robust environment for replica administration. Safeguards are incorporated to prevent inadvertent data loss when copies of a data set are removed from a replica node or moved from one replica node to another replica node. Safeguards are also included which prevent only partial removal of a copy of a data set. Such safeguards prevent the system from being left in an unstable and unrecoverable state. In order to prevent inadvertent data loss, t | ||||||
