typedef int VASResult;
enum TxStatus { Stale, Active, Prepared, Aborting,
Committing, Ended, NoTx };
enum error_type { ET_USER=0x1, ET_VAS=0x2, ET_FATAL=0x4000 };
struct Status {
int vasresult;
int vasreason;
int smresult;
int smreason;
int unixreason;
TxStatus txstate;
};
void shore_vas::perr(
const char *message,
int line = -1, // not printed if <0
const char *filename=0,// not printed if null
error_type ekind = ET_VAS // not printed if
// ekind == ET_USER and !this->printusererrors
) const;
void shore_vas::perr(
ostream &out,
const char *message,
int line = -1, // not printed if <0
const char *filename=0,// not printed if null
error_type ekind = ET_VAS // not printed if
// ekind == ET_USER and !this->printusererrors
) const;
static const char* p_status(unsigned int x);
static bool unp_status(const char *msg, unsigned int *res) ;
If the condition is discovered by the SVAS, status.vasresult is SVAS_FAILURE or SVAS_WARNING, status.vasreason has a value from the list below, and the fields status.smresult, status.smreason, status.osreason have the value zero.
If the condition is discovered by the Storage Manager, status.vasresult is SVAS_FAILURE or SVAS_WARNING, status.vasreason has the value SVAS_SmFailure, and the fields status.smresult, status.smreason, status.osreason have nonzero values, which indicate the reason for the problem.
The field status.osreason takes its values from the list found in <errno.h>.
The functions perr(...) can be called to print a message that interprets the SVAS's status member. The message argument is any string that the caller wishes to be printed along with the interpretive messages (similar to the C library's perror() ).
The function p_status interprets its argument as a candidate for status.vasreason, and if the value is one of those that the SVAS can return in the circumstance of an error, p_status returns the string name of the error condition.
The function unp_status converts a string name to an integer error code. If the string is associated with an error condition, the integer error code is returned in *res, and the Boolean value TRUE is returned. If the string is not associated with any error condition, the Boolean value FALSE is returned and *res, is unchanged.
SVAS_WARNING
SVAS_FAILURE
SVAS_OK
SVAS_NotImplemented - function or feature isn't implemented yet
SVAS_TxNotAllowed - this method cannot be called inside a transaction
SVAS_TxRequired - this method must be called inside a transaction
SVAS_Missing - object with the given OID does not exist
SVAS_Already - function has already been completed (e.g., format)
SVAS_CantFormat - volume cannot be formatted
SVAS_SmFailure - Storage Manager discovered an error
SVAS_RpcFailure - network failure, server crashed
SVAS_WrongObjectType - tried to use an object as if it were
a type other than what it is
SVAS_NotFound - could not find object with the given path name
SVAS_BadParam1 - problem with first argument to method
SVAS_BadParam2 - problem with second argument to method
SVAS_BadParam3 - problem with third argument to method
SVAS_BadParam4 - problem with fourth argument to method
SVAS_BadParam5 - problem with fifth argument to method
SVAS_BadParam6 - problem with sixth argument to method
SVAS_BadParam7 - problem with seventh argument to method
SVAS_BadParam8 - problem with eighth argument to method
SVAS_BadParam9 - problem with ninth argument to method
SVAS_InUse - volume cannot be unmounted because it is in use
by some user
SVAS_TxNotActive - the current transaction was not found to be
in the active state, as expected.
SVAS_MallocFailure - internal error: server could not malloc space
SVAS_BadRange - the given range of bytes is inappropriate for the
object being read or written
SVAS_IntegrityBreach - the integrity of the type system has been compromised,
or would be compromised if this were to completed and the
transaction were to commit
SVAS_IndexScanIsOpen - this function cannot be invoked during an index scan
SVAS_PoolScanIsOpen - this function cannot be invoked during a pool scan
SVAS_ScanNotInProgress - a scan must be opened before this function can
be invoked
SVAS_CantChangeCoreSize - an attempt to truncate an object would have
removed part of the object's core.
SVAS_NotAPool - this function applies to a pool, and the object
given is not a pool
SVAS_BadPathSyntax - the string given does not have proper syntax
for a pathname
SVAS_BadFileNameSyntax - the string given does not have proper
syntax for a file name
SVAS_IsAnonymous - the object referenced is anonymous; the function
applies to registered objects
SVAS_VolumesDontMatch - an attempt to create an object with a given,
preallocated OID failed because the OID was created on a volume
different from the volume on which the pool resides.
SVAS_XdrError - the object could not be byte-swapped
SVAS_ShmError - the SVAS could not allocate or attach shared memory
SVAS_InternalError - unspecified internal error
SVAS_BadType - an attempt to operate on the object's type object
failed, possibly because the type object's OID is bad
SVAS_AuthenticationFailure - could not authenticate the client to the server
SVAS_UnixFailure - a failure was returned from a Unix library function,
such as getpwuid()
SVAS_BadSerial - this is an internal error
SVAS_UserAbort - the reason for aborting the transaction is that
the user (caller, client, application) requested it
SVAS_NotMounted - the directory requested is not on a mounted file system
SVAS_NotADirectory - this function applies to directories; the object
named is not a directory
SVAS_IsADirectory - this function does not apply to directories; the object
named is a directory
SVAS_NotEmpty - an attempt to remove something failed because the
object was not empty (e.g., a directory)
SVAS_NotOwner - you have to be the owner of the object to do this
SVAS_PermissionDenied - you don't have the necessary permission
(read/write/execute) to do this
SVAS_ReadOnlyFS - an attempt to update an object failed because the
object resides on a read-only file system
SVAS_TooManySymlinks - while expanding symbolic links during path
-resolution, too many symbolic links were encountered (possibly a loop)
SVAS_TooManyLinks - an attempt to create a hard link to an object failed
- because the maximum number of links per object was reached
SVAS_PathTooLong - after expansion of symbolic links, the pathname
exceeds the maximum length permitted
SVAS_CrossDeviceRef - you cannot make cross-references or links across
devices (volumes, file system)
SVAS_AlreadyExists - an attempt to create an object with a pre-allocated
OID failed because there is already an object with that OID
SVAS_BadAddress - the caller gave an invalid address for an argument