public void Initialize(StorageEnvironment environment, TransactionContextPool contextPool) { try { _licenseStorage.Initialize(environment, contextPool); var firstServerStartDate = _licenseStorage.GetFirstServerStartDate(); if (firstServerStartDate == null) { firstServerStartDate = SystemTime.UtcNow; _licenseStorage.SetFirstServerStartDate(firstServerStartDate.Value); } _licenseStatus.FirstServerStartDate = firstServerStartDate.Value; var license = _serverStore.LoadLicense(); if (license == null) { return; } _leaseLicenseTimer = new Timer(state => AsyncHelpers.RunSync(LeaseLicense), null, 0, (int)TimeSpan.FromHours(24).TotalMilliseconds); _licenseStatus.Attributes = LicenseValidator.Validate(license, RSAParameters); _licenseStatus.Error = false; _licenseStatus.Message = null; } catch (Exception e) { _licenseStatus.Attributes = null; _licenseStatus.Error = true; _licenseStatus.Message = e.Message; if (Logger.IsInfoEnabled) { Logger.Info("Could not validate license", e); } var alert = AlertRaised.Create( "License manager initialization error", "Could not intitalize the license manager", AlertType.LicenseManager_InitializationError, NotificationSeverity.Warning, details: new ExceptionDetails(e)); _serverStore.NotificationCenter.Add(alert); } }
private static void BeforeSchemaUpgrade(StorageEnvironment storageEnvironment, ServerStore serverStore) { // doing this before the schema upgrade to allow to downgrade in case we cannot start the server using (var contextPool = new TransactionContextPool(storageEnvironment, serverStore.Configuration.Memory.MaxContextSizeToKeep)) { var license = serverStore.LoadLicense(contextPool); if (license == null) { return; } var licenseStatus = LicenseManager.GetLicenseStatus(license); if (licenseStatus.Expiration >= RavenVersionAttribute.Instance.ReleaseDate) { return; } var licenseStorage = new LicenseStorage(); licenseStorage.Initialize(storageEnvironment, contextPool); var errorMessage = $"Cannot start the RavenDB server because the expiration date of this license ({FormattedDateTime(licenseStatus.Expiration ?? DateTime.MinValue)}) " + $"is before the release date of this version ({FormattedDateTime(RavenVersionAttribute.Instance.ReleaseDate)})"; var buildInfo = licenseStorage.GetBuildInfo(); if (buildInfo != null) { errorMessage += $" You can downgrade to the latest build that was working ({buildInfo.FullVersion})"; } throw new LicenseExpiredException(errorMessage);
private static void BeforeSchemaUpgrade(StorageEnvironment storageEnvironment, ServerStore serverStore) { // doing this before the schema upgrade to allow to downgrade in case we cannot start the server using (var contextPool = new TransactionContextPool(storageEnvironment, serverStore.Configuration.Memory.MaxContextSizeToKeep)) { var license = serverStore.LoadLicense(contextPool); if (license == null) { return; } var licenseStatus = LicenseManager.GetLicenseStatus(license); if (licenseStatus.Expiration >= RavenVersionAttribute.Instance.ReleaseDate) { return; } string licenseJson = null; var fromPath = false; if (string.IsNullOrEmpty(serverStore.Configuration.Licensing.License) == false) { licenseJson = serverStore.Configuration.Licensing.License; } else if (File.Exists(serverStore.Configuration.Licensing.LicensePath.FullPath)) { try { licenseJson = File.ReadAllText(serverStore.Configuration.Licensing.LicensePath.FullPath); fromPath = true; } catch { // expected } } var errorMessage = $"Cannot start the RavenDB server because the expiration date of current license ({FormattedDateTime(licenseStatus.Expiration ?? DateTime.MinValue)}) " + $"is before the release date of this version ({FormattedDateTime(RavenVersionAttribute.Instance.ReleaseDate)})"; string expiredLicenseMessage = ""; if (string.IsNullOrEmpty(licenseJson) == false) { if (LicenseHelper.TryDeserializeLicense(licenseJson, out License localLicense)) { var localLicenseStatus = LicenseManager.GetLicenseStatus(localLicense); if (localLicenseStatus.Expiration >= RavenVersionAttribute.Instance.ReleaseDate) { serverStore.LicenseManager.OnBeforeInitialize += () => serverStore.LicenseManager.TryActivateLicenseAsync(throwOnActivationFailure: false).Wait(serverStore.ServerShutdown); return; } var configurationKey = fromPath ? RavenConfiguration.GetKey(x => x.Licensing.LicensePath) : RavenConfiguration.GetKey(x => x.Licensing.License); expiredLicenseMessage = localLicense.Id == license.Id ? ". You can update current license using the setting.json file" : $". The license '{localLicense.Id}' obtained from '{configurationKey}' with expiration date of '{FormattedDateTime(localLicenseStatus.Expiration ?? DateTime.MinValue)}' is also expired."; } else { errorMessage += ". Could not parse the license from setting.json file."; throw new LicenseExpiredException(errorMessage); } } var licenseStorage = new LicenseStorage(); licenseStorage.Initialize(storageEnvironment, contextPool); var buildInfo = licenseStorage.GetBuildInfo(); if (buildInfo != null) { errorMessage += $" You can downgrade to the latest build that was working ({buildInfo.FullVersion})"; } if (string.IsNullOrEmpty(expiredLicenseMessage) == false) { errorMessage += expiredLicenseMessage; } throw new LicenseExpiredException(errorMessage);