Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / Log / System / IO / Log / LogPolicy.cs / 1 / LogPolicy.cs
//------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------------------------
namespace System.IO.Log
{
public sealed class LogPolicy
{
[Flags]
enum ModifiedFields
{
None = 0x00,
MinimumExtentCount = 0x01,
MaximumExtentCount = 0x02,
GrowthRate = 0x04,
PinnedTailThreshold = 0x08,
AutoShrinkPercentage = 0x10,
NewExtentPrefix = 0x20,
NextExtentSuffix = 0x40,
AutoGrow = 0x80,
}
LogStore store;
ModifiedFields modifiedFields;
int minimumExtentCount;
int maximumExtentCount;
PolicyUnit growthRate;
PolicyUnit pinnedTailThreshold;
int autoShrinkPercentage;
string newExtentPrefix;
long nextExtentSuffix;
bool autoGrow;
internal LogPolicy(LogStore logStore)
{
this.store = logStore;
Refresh();
}
public bool AutoGrow
{
get { return this.autoGrow; }
set
{
this.autoGrow = value;
this.modifiedFields |= ModifiedFields.AutoGrow;
}
}
public int MinimumExtentCount
{
get { return this.minimumExtentCount; }
set
{
if (value < 2)
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ArgumentOutOfRange("value"));
this.minimumExtentCount = value;
this.modifiedFields |= ModifiedFields.MinimumExtentCount;
}
}
public int MaximumExtentCount
{
get { return this.maximumExtentCount; }
set
{
if (value < 2)
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ArgumentOutOfRange("value"));
this.maximumExtentCount = value;
this.modifiedFields |= ModifiedFields.MaximumExtentCount;
}
}
public PolicyUnit GrowthRate
{
get { return this.growthRate; }
set
{
this.growthRate = value;
this.modifiedFields |= ModifiedFields.GrowthRate;
}
}
public PolicyUnit PinnedTailThreshold
{
get { return this.pinnedTailThreshold; }
set
{
this.pinnedTailThreshold = value;
this.modifiedFields |= ModifiedFields.PinnedTailThreshold;
}
}
public int AutoShrinkPercentage
{
get { return this.autoShrinkPercentage; }
set
{
if ((value < 0) || (value > 100))
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ArgumentOutOfRange("value"));
this.autoShrinkPercentage = value;
this.modifiedFields |= ModifiedFields.AutoShrinkPercentage;
}
}
public string NewExtentPrefix
{
get { return this.newExtentPrefix; }
set
{
#pragma warning suppress 56507
if (value == null)
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ArgumentNull("value"));
#pragma warning suppress 56507
if ((value.Length == 0) || (value.Length > Const.MAX_PATH))
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ArgumentOutOfRange("value"));
this.newExtentPrefix = value;
this.modifiedFields |= ModifiedFields.NewExtentPrefix;
}
}
public long NextExtentSuffix
{
get { return this.nextExtentSuffix; }
set
{
if (value < 0)
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ArgumentOutOfRange("value"));
this.nextExtentSuffix = value;
this.modifiedFields |= ModifiedFields.NextExtentSuffix;
}
}
public void Commit()
{
CommitMaximumSize();
CommitMinimumSize();
CommitGrowthRate();
CommitPinnedTailThreshold();
CommitAutoShrinkPercentage();
CommitAutoGrow();
CommitNewExtentPrefix();
CommitNextExtentSuffix();
}
public void Refresh()
{
RefreshMaximumSize();
RefreshMinimumSize();
RefreshGrowthRate();
RefreshPinnedTailThreshold();
RefreshAutoShrinkPercentage();
RefreshAutoGrow();
RefreshNewExtentPrefix();
RefreshNextExtentSuffix();
}
void CommitAutoGrow()
{
if (0 != (this.modifiedFields & ModifiedFields.AutoGrow))
{
CLFS_MGMT_POLICY_AUTOGROW policy;
policy = new CLFS_MGMT_POLICY_AUTOGROW(
Const.LOG_POLICY_OVERWRITE | Const.LOG_POLICY_PERSIST);
policy.Enabled = (uint)(this.autoGrow ? 1 : 0);
UnsafeNativeMethods.InstallLogPolicy(this.store.Handle,
ref policy);
this.modifiedFields &= ~ModifiedFields.AutoGrow;
}
}
void CommitMaximumSize()
{
if (0 != (this.modifiedFields & ModifiedFields.MaximumExtentCount))
{
CLFS_MGMT_POLICY_MAXIMUMSIZE policy;
policy = new CLFS_MGMT_POLICY_MAXIMUMSIZE(
Const.LOG_POLICY_OVERWRITE | Const.LOG_POLICY_PERSIST);
policy.Containers = (uint)this.maximumExtentCount;
UnsafeNativeMethods.InstallLogPolicy(this.store.Handle,
ref policy);
this.modifiedFields &= ~ModifiedFields.MaximumExtentCount;
}
}
void CommitMinimumSize()
{
if (0 != (this.modifiedFields & ModifiedFields.MinimumExtentCount))
{
CLFS_MGMT_POLICY_MINIMUMSIZE policy;
policy = new CLFS_MGMT_POLICY_MINIMUMSIZE(
Const.LOG_POLICY_OVERWRITE | Const.LOG_POLICY_PERSIST);
policy.Containers = (uint)this.minimumExtentCount;
UnsafeNativeMethods.InstallLogPolicy(this.store.Handle,
ref policy);
this.modifiedFields &= ~ModifiedFields.MinimumExtentCount;
}
}
void CommitGrowthRate()
{
if (0 != (this.modifiedFields & ModifiedFields.GrowthRate))
{
CLFS_MGMT_POLICY_GROWTHRATE policy;
policy = new CLFS_MGMT_POLICY_GROWTHRATE(
Const.LOG_POLICY_OVERWRITE | Const.LOG_POLICY_PERSIST);
if (this.growthRate.Type == PolicyUnitType.Extents)
{
policy.AbsoluteGrowthInContainers = (uint)this.growthRate.Value;
policy.RelativeGrowthPercentage = 0;
}
else
{
policy.RelativeGrowthPercentage = (uint)this.growthRate.Value;
policy.AbsoluteGrowthInContainers = 0;
}
UnsafeNativeMethods.InstallLogPolicy(this.store.Handle,
ref policy);
this.modifiedFields &= ~ModifiedFields.GrowthRate;
}
}
void CommitPinnedTailThreshold()
{
if (0 != (this.modifiedFields & ModifiedFields.PinnedTailThreshold))
{
CLFS_MGMT_POLICY_LOGTAIL policy;
policy = new CLFS_MGMT_POLICY_LOGTAIL(
Const.LOG_POLICY_OVERWRITE | Const.LOG_POLICY_PERSIST);
if (this.pinnedTailThreshold.Type == PolicyUnitType.Extents)
{
policy.MinimumAvailableContainers = (uint)this.pinnedTailThreshold.Value;
policy.MinimumAvailablePercentage = 0;
}
else
{
policy.MinimumAvailablePercentage = (uint)this.pinnedTailThreshold.Value;
policy.MinimumAvailableContainers = 0;
}
UnsafeNativeMethods.InstallLogPolicy(this.store.Handle,
ref policy);
this.modifiedFields &= ~ModifiedFields.PinnedTailThreshold;
}
}
void CommitAutoShrinkPercentage()
{
if (0 != (this.modifiedFields & ModifiedFields.AutoShrinkPercentage))
{
CLFS_MGMT_POLICY_AUTOSHRINK policy;
policy = new CLFS_MGMT_POLICY_AUTOSHRINK(
Const.LOG_POLICY_OVERWRITE | Const.LOG_POLICY_PERSIST);
policy.Percentage = (uint)this.autoShrinkPercentage;
UnsafeNativeMethods.InstallLogPolicy(this.store.Handle,
ref policy);
this.modifiedFields &= ~ModifiedFields.AutoShrinkPercentage;
}
}
void CommitNewExtentPrefix()
{
if (0 != (this.modifiedFields & ModifiedFields.NewExtentPrefix))
{
CLFS_MGMT_POLICY_NEWCONTAINERPREFIX policy;
policy = new CLFS_MGMT_POLICY_NEWCONTAINERPREFIX(
Const.LOG_POLICY_OVERWRITE | Const.LOG_POLICY_PERSIST);
// The prefix length should not include the NULL terminator.
// Including NULL terminator will cause the CLFS container
// name to have embedded NULL and container creation will fail.
policy.PrefixLengthInBytes = (ushort)((this.newExtentPrefix.Length) * 2);
policy.PrefixString = this.newExtentPrefix;
UnsafeNativeMethods.InstallLogPolicy(this.store.Handle,
ref policy);
this.modifiedFields &= ~ModifiedFields.NewExtentPrefix;
}
}
void CommitNextExtentSuffix()
{
if (0 != (this.modifiedFields & ModifiedFields.NextExtentSuffix))
{
CLFS_MGMT_POLICY_NEXTCONTAINERSUFFIX policy;
policy = new CLFS_MGMT_POLICY_NEXTCONTAINERSUFFIX(
Const.LOG_POLICY_OVERWRITE | Const.LOG_POLICY_PERSIST);
policy.NextContainerSuffix = (ulong)this.nextExtentSuffix;
UnsafeNativeMethods.InstallLogPolicy(this.store.Handle,
ref policy);
this.modifiedFields &= ~ModifiedFields.NextExtentSuffix;
}
}
void RefreshAutoGrow()
{
CLFS_MGMT_POLICY_AUTOGROW policy;
UnsafeNativeMethods.QueryLogPolicy(this.store.Handle, out policy);
this.autoGrow = (policy.Enabled != 0);
this.modifiedFields &= ~ModifiedFields.AutoGrow;
}
void RefreshMaximumSize()
{
CLFS_MGMT_POLICY_MAXIMUMSIZE policy;
UnsafeNativeMethods.QueryLogPolicy(this.store.Handle, out policy);
this.maximumExtentCount = (int)policy.Containers;
this.modifiedFields &= ~ModifiedFields.MaximumExtentCount;
}
void RefreshMinimumSize()
{
CLFS_MGMT_POLICY_MINIMUMSIZE policy;
UnsafeNativeMethods.QueryLogPolicy(this.store.Handle, out policy);
this.minimumExtentCount = (int)policy.Containers;
this.modifiedFields &= ~ModifiedFields.MinimumExtentCount;
}
void RefreshGrowthRate()
{
CLFS_MGMT_POLICY_GROWTHRATE policy;
UnsafeNativeMethods.QueryLogPolicy(this.store.Handle, out policy);
if (policy.AbsoluteGrowthInContainers != 0)
{
this.growthRate = PolicyUnit.Extents(
(int)policy.AbsoluteGrowthInContainers);
}
else
{
this.growthRate = PolicyUnit.Percentage(
(int)policy.RelativeGrowthPercentage);
}
this.modifiedFields &= ~ModifiedFields.GrowthRate;
}
void RefreshPinnedTailThreshold()
{
CLFS_MGMT_POLICY_LOGTAIL policy;
UnsafeNativeMethods.QueryLogPolicy(this.store.Handle, out policy);
if (policy.MinimumAvailablePercentage != 0)
{
this.pinnedTailThreshold = PolicyUnit.Percentage(
(int)policy.MinimumAvailablePercentage);
}
else
{
this.pinnedTailThreshold = PolicyUnit.Extents(
(int)policy.MinimumAvailableContainers);
}
this.modifiedFields &= ~ModifiedFields.PinnedTailThreshold;
}
void RefreshAutoShrinkPercentage()
{
CLFS_MGMT_POLICY_AUTOSHRINK policy;
UnsafeNativeMethods.QueryLogPolicy(this.store.Handle, out policy);
this.autoShrinkPercentage = (int)policy.Percentage;
this.modifiedFields &= ~ModifiedFields.AutoShrinkPercentage;
}
void RefreshNewExtentPrefix()
{
CLFS_MGMT_POLICY_NEWCONTAINERPREFIX policy;
UnsafeNativeMethods.QueryLogPolicy(this.store.Handle, out policy);
this.newExtentPrefix = policy.PrefixString;
this.modifiedFields &= ~ModifiedFields.NewExtentPrefix;
}
void RefreshNextExtentSuffix()
{
CLFS_MGMT_POLICY_NEXTCONTAINERSUFFIX policy;
UnsafeNativeMethods.QueryLogPolicy(this.store.Handle, out policy);
this.nextExtentSuffix = (long)policy.NextContainerSuffix;
this.modifiedFields &= ~ModifiedFields.NextExtentSuffix;
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ReferencedAssembly.cs
- StringPropertyBuilder.cs
- PasswordTextNavigator.cs
- _ScatterGatherBuffers.cs
- WebPartConnectionsConnectVerb.cs
- TextBlockAutomationPeer.cs
- QilValidationVisitor.cs
- System.Data_BID.cs
- PropertyItem.cs
- SingleConverter.cs
- XamlDesignerSerializationManager.cs
- TypeValidationEventArgs.cs
- ScrollViewer.cs
- InheritanceService.cs
- MdiWindowListItemConverter.cs
- SafeProcessHandle.cs
- TextDecorationCollection.cs
- SendActivityDesignerTheme.cs
- DragDeltaEventArgs.cs
- ManagementClass.cs
- Mapping.cs
- SqlDataSourceEnumerator.cs
- SecurityToken.cs
- StringUtil.cs
- SettingsSection.cs
- BitmapData.cs
- ValidationErrorEventArgs.cs
- BehaviorDragDropEventArgs.cs
- ToolStrip.cs
- PointHitTestResult.cs
- WebBrowserEvent.cs
- Configuration.cs
- OleDbCommandBuilder.cs
- HexParser.cs
- PageSettings.cs
- XmlWriter.cs
- MetadataArtifactLoaderResource.cs
- ResourcePermissionBaseEntry.cs
- PropertyToken.cs
- SqlParameterizer.cs
- Bidi.cs
- ProfileService.cs
- CookielessHelper.cs
- ObjectStorage.cs
- dsa.cs
- WorkflowPageSetupDialog.cs
- ReadOnlyPropertyMetadata.cs
- FactoryId.cs
- InputReferenceExpression.cs
- EditorPart.cs
- UpdateRecord.cs
- Region.cs
- BaseDataBoundControl.cs
- ResumeStoryboard.cs
- RequestSecurityTokenResponseCollection.cs
- pingexception.cs
- HttpInputStream.cs
- Parsers.cs
- InputEventArgs.cs
- WorkflowEventArgs.cs
- IApplicationTrustManager.cs
- RectAnimationBase.cs
- QilPatternVisitor.cs
- DataServiceProcessingPipeline.cs
- SamlAuthorizationDecisionClaimResource.cs
- MemberAssignment.cs
- BufferedGenericXmlSecurityToken.cs
- InternalRelationshipCollection.cs
- FloatMinMaxAggregationOperator.cs
- DispatcherObject.cs
- DesignerResources.cs
- TaskHelper.cs
- CounterCreationDataCollection.cs
- MsmqActivation.cs
- SystemGatewayIPAddressInformation.cs
- NodeFunctions.cs
- DataMemberListEditor.cs
- CustomErrorsSection.cs
- ComNativeDescriptor.cs
- DialogResultConverter.cs
- ImplicitInputBrush.cs
- EdmFunction.cs
- CaseStatement.cs
- XmlDocumentFragment.cs
- RegexCompiler.cs
- DataGridViewCellEventArgs.cs
- BooleanFunctions.cs
- JournalNavigationScope.cs
- RenderDataDrawingContext.cs
- bidPrivateBase.cs
- ProfilePropertySettings.cs
- __FastResourceComparer.cs
- FamilyMap.cs
- FixedPageAutomationPeer.cs
- ImageField.cs
- BindableTemplateBuilder.cs
- TimelineGroup.cs
- sqlpipe.cs
- XmlObjectSerializerReadContext.cs
- NonClientArea.cs