public override bool SetupRequestToProperDatabase(RequestManager rm) { if (!RavenFileSystem.IsRemoteDifferentialCompressionInstalled) { throw new HttpException(503, "File Systems functionality is not supported. Remote Differential Compression is not installed."); } var tenantId = FileSystemName; if (string.IsNullOrWhiteSpace(tenantId)) { throw new HttpException(503, "Could not find a file system with no name"); } Task <RavenFileSystem> resourceStoreTask; bool hasDb; try { hasDb = landlord.TryGetOrCreateResourceStore(tenantId, out resourceStoreTask); } catch (Exception e) { var se = e.SimplifyException(); var msg = "Could not open file system named: " + tenantId + ", " + se.Message; Logger.WarnException(msg, e); throw new HttpException(503, msg, e); } if (hasDb) { try { if (resourceStoreTask.Wait(TimeSpan.FromSeconds(30)) == false) { var msg = "The filesystem " + tenantId + " is currently being loaded, but after 30 seconds, this request has been aborted. Please try again later, file system loading continues."; Logger.Warn(msg); throw new HttpException(503, msg); } var args = new BeforeRequestWebApiEventArgs() { Controller = this, IgnoreRequest = false, TenantId = tenantId, FileSystem = resourceStoreTask.Result }; rm.OnBeforeRequest(args); if (args.IgnoreRequest) { return(false); } } catch (Exception e) { var msg = "Could not open file system named: " + tenantId + ", " + e.InnerException.Message; Logger.WarnException(msg, e); throw new HttpException(503, msg, e); } landlord.LastRecentlyUsed.AddOrUpdate(tenantId, SystemTime.UtcNow, (s, time) => SystemTime.UtcNow); } else { var msg = "Could not find a file system named: " + tenantId; Logger.Warn(msg); throw new HttpException(503, msg); } return(true); }