A problem was discovered with cm_Analyze when serverRef instances are
marked offline. cm_CheckOfflineVolume() was not resetting the serverRef
state. cm_Analyze was also waiting in sleep calls when it was it is
clear that waiting would not result in a change of state.
cm_CheckOfflineVolume() was updated to always reset the serverRef state
and indicate that the volume should be considered online for the purpose
of retrying when the serverRef state is reset to srv_not_busy.
The problems identified in the MIT dev.mit.edu stress test environment
are resolved by these changes.
"It is actually the detection of a "cell" in the mount point string
which triggers the (loosely consistent) fakestat handling - it's
treated like a foreign cell and the mount point is never "completely
evaluated", i.e. logically replaced by the root directory of the
volume in question. As a result, callbacks are ignored, as they go
against the directory and not the mount point."
3. Add CM_VOLUMEFLAG_UPDATING_VL flag to prevent multiple threads
from performing volume update calls at the same time on the same
volume set.
4. Convert the .rw, .ro, and .bk cm_vol_state_t members of cm_volume_t
to an array of cm_vol_state_t members indexed using the pre-existing
RWVOL, ROVOL and BACKVOL preprocessor symbols. This will permit
consolidation of code and make it easier to add new volume types
to the volume set in the future.
Do not set the DV on the rootSCachep because doing so disables
the use of MergeStatus().
Do not remove the rootSCachep from the hash table because doing
so makes causes a second cm_scache_t object for that fid to be created
that is not the root.
Add a -noresolve option to all vos commands. This permits the display
of servers by IP address instead of DNS name. Very useful when 127.0.0.1
is registered as the server address or when trying to eliminate
multi-homed addresses.
Add support for building with VS2005 Runtime Libraries.
For the release build use the vcredist_<arch>.exe package.
For the debug build, build an msi from the merge modules
and then install that package.
1. During the conversion to hash based FID comparisons the cm_GetSCache()
lookups from the cm_ioctl.c (CM_IOCTL_QOPTS_HAVE_FID) and from FIDs
returned by cm_LookupSearchProc() were broken.
2. In cm_LookupInternal(), ensure that an error is returned if rock.found
is FALSE. A failure to return an error was resulting in cm_GetSCache()
producing an object for FIDs with vnode=0,unique=0
3. cm_GetSCache(), remove the warning check for vnode=0,unique=0
4. reapply the synchronization logic to async store requests in cm_SyncOp().
The lack of synchronization is causing requests to complete out of order
which is confusing the SMB redirector when under heavy load.
the idea is to preclude multiple copies of a volume replica on a server,
as there's nothing to indicate which copy is correct and you can end up serving
stale data when you think you've just released and are serving something good
====================
This delta was composed from multiple commits as part of the CVS->Git migration.
The checkin message with each commit was inconsistent.
The following are the additional commit messages.
====================
LICENSE MIT
Two recent changes to the AFS/Kerberos landscape have been causing
problems for aklog and related modules. First, the support for multiple
local realms for the cell has broken the pts auto-registration code
when the realm used for the token acquisition does not match the
realm belonging to the selected vldb server. Second, Kerberos referrals
prevents detection of the realm of the vldb server.
This commit adds a new method of searching for the afs service principal.
The first attempt is for afs/<cell>@<CLIENT-REALM>. If found, the
<CLIENT-REALM> is used as the realm of the cell.
The patch adds error handling for KRB5_ERR_HOST_REALM_UNKNOWN which is
returned when krb5_get_host_realm() can't determine the realm.
Duplicate queries are also avoided and copy_realm_of_ticket() is
properly employed.
1. return CM_ERROR_NOSUCHFILE when attempting to remove a symlink or
mount point that does not exist
2. When adding a new symlink or mountpoint, be sure to increment the
number of local mount points
3. When re-initializing the fake root.cell the unique value is always
one, not two. Use cm_FidCmp() to compare fids. The use of the
value two prevented the invalidation of existing values because all
of the directory entries are created with the unique set to one.
because of when fds are NULL'd in file_table this should work except when one process has the same file open for read and for write in different FDs; otherwise, the last write fd to close collects the error.
Windows Error Reports indicate that sometimes the krb5_cc_default()
call must be failing because krb5_cc_principal is being called with
a NULL ccache value. Perform error checking and cleanup that was
not previously implemented.
Protect against invalid data being passed into ParseAcl and
corrupting the stack. This affects both fs.exe and the explorer
shell extension.
Windows Error Reporting in recent weeks has begun to report several
instances of stack corruption in the explorer shell extension from
Denmark and Germany.
this will dump the current dafs vlru state on kill -XCPU (just as we dump other fileserver state)
that state is
VLRU is a garbage collection facility which automatically offlines
volumes in the background. The purpose of this facility is to
proactively offline infrequently used volumes to improve shutdown and
salvage times. The process of offlining a volume from the "attached"
state to the "pre-attached" state is called soft detachment.
VLRU works in a manner similar to a generational garbage collector.
There are five queues on which volumes can reside: new, intermediate,
old, held, and candidate:
held:
queue for volumes which are administratively barred from VLRU activity
candidate:
queue for volumes which have not been accessed recently, and are thus
candidates for soft detachment
new, intermediate, old:
generational queues for active volumes; state transitions controlled by
inactivity timers.
State transition timeouts are as follows:
candidate->new activity present
new->candidate (1*vlruthresh) minutes since last transition; no activity
new->mid (2*vlruthresh) minutes since last transition; activity
present
mid->old (4*vlruthresh) minutes since last transition; activity
present
old->mid (2*vlruthresh) minutes since last transition; no activity
mid->new (1*vlruthresh) minutes since last transition; no activity
The pts program has a command 'source' to read commands from
a file. In the interactive "shell" mode, this command works,
reading and executing commands until the end of the file and
then returning to the command shell.
This command is valid for use as a command line option, but
does not work. It requires a valid filename as an argument,
but does not process the file, instead just dropping the user
into the interactive mode.
When given as a command line option, pts source SHOULD read
the file, execute the commands and then exit, according to
the documentation. It does not currently do this and should
be fixed.
keep accurate tabs on whether a volume is "in use" so we don't end up with volume state that's nonsensical.
====================
This delta was composed from multiple commits as part of the CVS->Git migration.
The checkin message with each commit was inconsistent.
The following are the additional commit messages.
====================
LICENSE IPL10
keep accurate tabs on whether a volume is "in use" so we don't end up with volum
e state that's nonsensical.
====================
LICENSE IPL10
keep accurate tabs on whether a volume is "in use" so we don't end up with volum
e state that's nonsensical.
The cm_scache structure has included a reference to the associated cm_volume_t,
volp. By doing so the reference count on the cm_volume_t objects never hits
zero unless all of the cm_scache_t objects in that volume have been reused.
This prevents cm_volume object recycling.
This commit removes the hard reference and instead adds a function
cm_GetVolumeByFID which obtains a reference to the cm_volume that matches
the cm_scache fid value as needed.
A new "Volumes" registry value is added to permit explicit specification
of the number of volume objects to be allocated.
Update the fileserver documentation for demand-attach and add documentation
of other missing options and notes where some options are only applicable
with particular builds.
Introduce a new set of macros that can be used to permit either mutex
based protection or Interlocked operation protection increments,
decrements, or additions.
adapted from marc dionne's patch, but works more directly like the darwin port,
further, i'm guessing iget_locked will go away evewntually. maybe this is
too conservative?