CedarBackup3.peer

Provides backup peer-related objects and utility functions.

Module Attributes

CedarBackup3.peer.DEF_COLLECT_INDICATOR

Name of the default collect indicator file

CedarBackup3.peer.DEF_STAGE_INDICATOR

Name of the default stage indicator file

author

Kenneth J. Pronovici <pronovic@ieee.org>

Module Contents

CedarBackup3.peer.logger
CedarBackup3.peer.DEF_RCP_COMMAND = ['/usr/bin/scp', '-B', '-q', '-C']
CedarBackup3.peer.DEF_RSH_COMMAND = ['/usr/bin/ssh']
CedarBackup3.peer.DEF_CBACK_COMMAND = /usr/bin/cback3
CedarBackup3.peer.DEF_COLLECT_INDICATOR = cback.collect
CedarBackup3.peer.DEF_STAGE_INDICATOR = cback.stage
CedarBackup3.peer.SU_COMMAND = ['su']
class CedarBackup3.peer.LocalPeer(name, collectDir, ignoreFailureMode=None)

Bases: object

Backup peer representing a local peer in a backup pool.

This is a class representing a local (non-network) peer in a backup pool. Local peers are backed up by simple filesystem copy operations. A local peer has associated with it a name (typically, but not necessarily, a hostname) and a collect directory.

The public methods other than the constructor are part of a “backup peer” interface shared with the RemotePeer class.

name
collectDir
ignoreFailureMode
stagePeer(targetDir, ownership=None, permissions=None)

Stages data from the peer into the indicated local target directory.

The collect and target directories must both already exist before this method is called. If passed in, ownership and permissions will be applied to the files that are copied.

Note: The caller is responsible for checking that the indicator exists, if they care. This function only stages the files within the directory.

Note: If you have user/group as strings, call the util.getUidGid function to get the associated uid/gid as an ownership tuple.

Parameters
  • targetDir – Target directory to write data into

  • ownership – Owner and group that files should have, tuple of numeric (uid, gid)

  • permissions – Unix permissions mode that the staged files should have, in octal like 0640

Returns

Number of files copied from the source directory to the target directory

Raises
  • ValueError – If collect directory is not a directory or does not exist

  • ValueError – If target directory is not a directory, does not exist or is not absolute

  • ValueError – If a path cannot be encoded properly

  • IOError – If there were no files to stage (i.e. the directory was empty)

  • IOError – If there is an IO error copying a file

  • OSError – If there is an OS error copying or changing permissions on a file

checkCollectIndicator(collectIndicator=None)

Checks the collect indicator in the peer’s staging directory.

When a peer has completed collecting its backup files, it will write an empty indicator file into its collect directory. This method checks to see whether that indicator has been written. We’re “stupid” here - if the collect directory doesn’t exist, you’ll naturally get back False.

If you need to, you can override the name of the collect indicator file by passing in a different name.

Parameters

collectIndicator – Name of the collect indicator file to check

Returns

Boolean true/false depending on whether the indicator exists

Raises

ValueError – If a path cannot be encoded properly

writeStageIndicator(stageIndicator=None, ownership=None, permissions=None)

Writes the stage indicator in the peer’s staging directory.

When the master has completed collecting its backup files, it will write an empty indicator file into the peer’s collect directory. The presence of this file implies that the staging process is complete.

If you need to, you can override the name of the stage indicator file by passing in a different name.

Note: If you have user/group as strings, call the util.getUidGid function to get the associated uid/gid as an ownership tuple.

Parameters
  • stageIndicator – Name of the indicator file to write

  • ownership – Owner and group that files should have, tuple of numeric (uid, gid)

  • permissions – Unix permissions mode that the staged files should have, in octal like 0640

Raises
  • ValueError – If collect directory is not a directory or does not exist

  • ValueError – If a path cannot be encoded properly

  • IOError – If there is an IO error creating the file

  • OSError – If there is an OS error creating or changing permissions on the file

class CedarBackup3.peer.RemotePeer(name=None, collectDir=None, workingDir=None, remoteUser=None, rcpCommand=None, localUser=None, rshCommand=None, cbackCommand=None, ignoreFailureMode=None)

Bases: object

Backup peer representing a remote peer in a backup pool.

This is a class representing a remote (networked) peer in a backup pool. Remote peers are backed up using an rcp-compatible copy command. A remote peer has associated with it a name (which must be a valid hostname), a collect directory, a working directory and a copy method (an rcp-compatible command).

You can also set an optional local user value. This username will be used as the local user for any remote copies that are required. It can only be used if the root user is executing the backup. The root user will su to the local user and execute the remote copies as that user.

The copy method is associated with the peer and not with the actual request to copy, because we can envision that each remote host might have a different connect method.

The public methods other than the constructor are part of a “backup peer” interface shared with the LocalPeer class.

name
collectDir
workingDir
remoteUser
localUser
rcpCommand
rshCommand
cbackCommand
ignoreFailureMode
stagePeer(targetDir, ownership=None, permissions=None)

Stages data from the peer into the indicated local target directory.

The target directory must already exist before this method is called. If passed in, ownership and permissions will be applied to the files that are copied.

Note: The returned count of copied files might be inaccurate if some of the copied files already existed in the staging directory prior to the copy taking place. We don’t clear the staging directory first, because some extension might also be using it.

Note: If you have user/group as strings, call the util.getUidGid function to get the associated uid/gid as an ownership tuple.

Note: Unlike the local peer version of this method, an I/O error might or might not be raised if the directory is empty. Since we’re using a remote copy method, we just don’t have the fine-grained control over our exceptions that’s available when we can look directly at the filesystem, and we can’t control whether the remote copy method thinks an empty directory is an error.

Parameters
  • targetDir – Target directory to write data into

  • ownership – Owner and group that files should have, tuple of numeric (uid, gid)

  • permissions – Unix permissions mode that the staged files should have, in octal like 0640

Returns

Number of files copied from the source directory to the target directory

Raises
  • ValueError – If target directory is not a directory, does not exist or is not absolute

  • ValueError – If a path cannot be encoded properly

  • IOError – If there were no files to stage (i.e. the directory was empty)

  • IOError – If there is an IO error copying a file

  • OSError – If there is an OS error copying or changing permissions on a file

checkCollectIndicator(collectIndicator=None)

Checks the collect indicator in the peer’s staging directory.

When a peer has completed collecting its backup files, it will write an empty indicator file into its collect directory. This method checks to see whether that indicator has been written. If the remote copy command fails, we return False as if the file weren’t there.

If you need to, you can override the name of the collect indicator file by passing in a different name.

Note: Apparently, we can’t count on all rcp-compatible implementations to return sensible errors for some error conditions. As an example, the scp command in Debian ‘woody’ returns a zero (normal) status even when it can’t find a host or if the login or path is invalid. Because of this, the implementation of this method is rather convoluted.

Parameters

collectIndicator – Name of the collect indicator file to check

Returns

Boolean true/false depending on whether the indicator exists

Raises

ValueError – If a path cannot be encoded properly

writeStageIndicator(stageIndicator=None)

Writes the stage indicator in the peer’s staging directory.

When the master has completed collecting its backup files, it will write an empty indicator file into the peer’s collect directory. The presence of this file implies that the staging process is complete.

If you need to, you can override the name of the stage indicator file by passing in a different name.

Note: If you have user/group as strings, call the util.getUidGid function to get the associated uid/gid as an ownership tuple.

Parameters

stageIndicator – Name of the indicator file to write

Raises
  • ValueError – If a path cannot be encoded properly

  • IOError – If there is an IO error creating the file

  • OSError – If there is an OS error creating or changing permissions on the file

executeRemoteCommand(command)

Executes a command on the peer via remote shell.

Parameters

command – Command to execute

Raises

IOError – If there is an error executing the command on the remote peer

executeManagedAction(action, fullBackup)

Executes a managed action on this peer.

Parameters
  • action – Name of the action to execute

  • fullBackup – Whether a full backup should be executed

Raises

IOError – If there is an error executing the action on the remote peer