private void RaiseAvailabilityGuard(AvailabilityRequirement requirement) { // it is possible for the local database to be created and stopped right after that to perform a store copy // in this case we need to impose new requirement and drop the old one _availabilityGuard.require(requirement); if (_currentRequirement != null) { DropAvailabilityGuard(); } _currentRequirement = requirement; }
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#: //ORIGINAL LINE: private synchronized void stopWithRequirement(org.neo4j.kernel.availability.AvailabilityRequirement requirement) throws Throwable private void StopWithRequirement(AvailabilityRequirement requirement) { lock (this) { _log.info("Stopping, reason: " + requirement()); RaiseAvailabilityGuard(requirement); _databaseHealth = null; _localCommit = null; _dataSourceManager.stop(); } }
private string BuildNormalizedVector(bool addEmptyValues) { var param = new List <string> { $"AV:{AttackVector.StringValue()}", $"AC:{AttackComplexity.StringValue()}", $"PR:{PrivilegesRequired.StringValue()}", $"UI:{UserInteraction.StringValue()}", $"S:{Scope.StringValue()}", $"C:{ConfidentialityImpact.StringValue()}", $"I:{IntegrityImpact.StringValue()}", $"A:{AvailabilityImpact.StringValue()}" }; void AddConditional(string key, string value) { if (!string.IsNullOrEmpty(value)) { param.Add($"{key}:{value}"); } else if (addEmptyValues) { param.Add($"{key}:X"); } } AddConditional("E", ExploitCodeMaturity?.StringValue()); AddConditional("RL", RemediationLevel?.StringValue()); AddConditional("RC", ReportConfidence?.StringValue()); AddConditional("CR", ConfidentialityRequirement?.StringValue()); AddConditional("IR", IntegrityRequirement?.StringValue()); AddConditional("AR", AvailabilityRequirement?.StringValue()); AddConditional("MAV", ModifiedAttackVector?.StringValue()); AddConditional("MAC", ModifiedAttackComplexity?.StringValue()); AddConditional("MPR", ModifiedPrivilegesRequired?.StringValue()); AddConditional("MUI", ModifiedUserInteraction?.StringValue()); AddConditional("MS", ModifiedScope?.StringValue()); AddConditional("MC", ModifiedConfidentialityImpact?.StringValue()); AddConditional("MI", ModifiedIntegrityImpact?.StringValue()); AddConditional("MA", ModifiedAvailabilityImpact?.StringValue()); StringBuilder sb = new StringBuilder(); sb.Append(VectorPrefix); foreach (var current in param) { sb.Append('/'); sb.Append(current); } return(sb.ToString()); }
public override bool Equals(object o) { if (this == o) { return(true); } if (o == null || this.GetType() != o.GetType()) { return(false); } AvailabilityRequirement that = ( AvailabilityRequirement )o; return(Objects.Equals(_requirementDescription, that())); }
public override void Fulfill(AvailabilityRequirement requirement) { if (!_blockingRequirements.remove(requirement)) { return; } lock ( _requirementCount ) { if (_requirementCount.AndDecrement == 1 && !_isShutdown.get()) { _log.info(DATABASE_AVAILABLE_MSG, requirement(), _databaseName); _listeners.notify(AvailabilityListener.available); } } }
public override void Require(AvailabilityRequirement requirement) { if (!_blockingRequirements.Add(requirement)) { return; } lock ( _requirementCount ) { if (_requirementCount.AndIncrement == 0 && !_isShutdown.get()) { _log.info(DATABASE_UNAVAILABLE_MSG, requirement(), _databaseName); _listeners.notify(AvailabilityListener.unavailable); } } }
private void DropAvailabilityGuard() { _availabilityGuard.fulfill(_currentRequirement); _currentRequirement = null; }
internal void CalculateScores() { double ImpactSubScore(Scope scope, double subScore) { switch (scope) { case Scope.Unchanged: return(6.42 * subScore); case Scope.Changed: return(7.52 * (subScore - 0.029) - 3.25 * Math.Pow(subScore - 0.02, 15)); default: throw new ArgumentOutOfRangeException(nameof(Scope), Scope, "Invalid scope"); } } double Score(Scope scope, double impactSub, double exploitSub) { if (impactSub <= 0) { return(0); } switch (scope) { case Scope.Unchanged: return(Math.Min(impactSub + exploitSub, 10).RoundUp(1)); case Scope.Changed: return(Math.Min(1.08 * (impactSub + exploitSub), 10).RoundUp(1)); default: throw new ArgumentOutOfRangeException(nameof(Scope), Scope, "Invalid scope"); } } double TempScore(double baseScore) { return((baseScore * ExploitCodeMaturity.NumericValue() * RemediationLevel.NumericValue() * ReportConfidence.NumericValue()).RoundUp(1)); } var impactSubScoreBase = 1 - (1 - ConfidentialityImpact.NumericValue()) * (1 - IntegrityImpact.NumericValue()) * (1 - AvailabilityImpact.NumericValue()); var impactSubScore = ImpactSubScore(Scope, impactSubScoreBase); var exploitabilitySubScore = 8.22 * AttackVector.NumericValue() * AttackComplexity.NumericValue() * PrivilegesRequired.NumericValue(Scope) * UserInteraction.NumericValue(); BaseScore = Score(Scope, impactSubScore, exploitabilitySubScore); //Temporal TemporalScore = TempScore(BaseScore); //Environmental var impactSubScoreModified = Math.Min(0.915, 1 - (1 - ModifiedConfidentialityImpact.Modified(ConfidentialityImpact, EnumExtensions.NumericValue) * ConfidentialityRequirement.NumericValue()) * (1 - ModifiedIntegrityImpact.Modified(IntegrityImpact, EnumExtensions .NumericValue) * IntegrityRequirement.NumericValue()) * (1 - ModifiedAvailabilityImpact.Modified(AvailabilityImpact, EnumExtensions.NumericValue) * AvailabilityRequirement.NumericValue())); var modifiedImpactSubScore = ImpactSubScore(ModifiedScope ?? Scope, impactSubScoreModified); var modifiedExploitabilitySubScore = 8.22 * ModifiedAttackVector.Modified(AttackVector, EnumExtensions.NumericValue) * ModifiedAttackComplexity.Modified(AttackComplexity, EnumExtensions.NumericValue) * ModifiedPrivilegesRequired.Modified(PrivilegesRequired, required => required.NumericValue(ModifiedScope ?? Scope)) * ModifiedUserInteraction.Modified(UserInteraction, EnumExtensions.NumericValue); EnvironmentalScore = TempScore( Score(ModifiedScope ?? Scope, modifiedImpactSubScore, modifiedExploitabilitySubScore)); }