Setup

  1. Version of Fedora
    1. 4.5.0 Release

  2. Fedora configuration details
    1. /etc/default/tomcat7

      JAVA_OPTS="-Djava.awt.headless=true -XX:+DisableExplicitGC -Xms512m -Xmx14g -XX:NewSize=256m -XX:MaxNewSize=2g -XX:MetaspaceSize=64m -XX:MaxMetaspaceSize=2g -Dfile.encoding=UTF-8 -Xloggc:/var/log/tomcat7/java-gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Dfcrepo.home=/mnt/test"
  3. System details (OS, memory, processors, hardware specs or virtualization, JVM, etc)
    1. Ubuntu 14.04.4 LTS

      Compute Canada
      60GB RAM, 16 CPUs (virtual)
      $ uname -a
      Linux fcrepo 3.13.0-36-generic #63-Ubuntu SMP Wed Sep 3 21:30:07 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
      
      $ java -version
      java version "1.8.0_77"
      Java(TM) SE Runtime Environment (build 1.8.0_77-b03)
      Java HotSpot(TM) 64-Bit Server VM (build 25.77-b03, mixed mode)
      
      $ ./version.sh
      Using CATALINA_BASE:   /usr/share/tomcat7
      Using CATALINA_HOME:   /usr/share/tomcat7
      Using CATALINA_TMPDIR: /usr/share/tomcat7/temp
      Using JRE_HOME:        /usr
      Using CLASSPATH:       /usr/share/tomcat7/bin/bootstrap.jar:/usr/share/tomcat7/bin/tomcat-juli.jar
      Server version: Apache Tomcat/7.0.52 (Ubuntu)
      Server built:   Jun 19 2015 08:54:46
      Server number:  7.0.52.0
      OS Name:        Linux
      OS Version:     3.13.0-36-generic
      Architecture:   amd64
      JVM Version:    1.8.0_77-b03
      JVM Vendor:     Oracle Corporation
  4. Initial state of the repository
    1. empty
  5. Number of client processes/threads (ideally clients are on a separate machine)
    1. 1
  6. Fedora database
    1. leveldb

Test

Command:

$ date > /home/ubuntu/summary.log; ./jmeter -Dfedora_4_server=localhost -Dfedora_4_context=fcrepo/rest -n -t /home/ubuntu/fcrepo4-jmeter/fedora.jmx >> /home/ubuntu/summary.log; /home/ubuntu/summary.log

 

Results

9 Comments

  1. Nick Ruest, out of curiosity, I would be interested to know the behavior of continuing the load test after restarting your tomcat server following the test failure.

    When I did this, my F4 started up with response times similar to a fresh install, and was able to load a few more million resources...

    1. I still have the machine up, so more that happy to give it a shot.

      1. ...and, that didn't last long.

         

        ubuntu@fcrepo:~$ tail -f summary.log 
        Mon Apr  4 14:30:21 UTC 2016
        Creating summariser <summary>
        Created the tree successfully using /home/ubuntu/fcrepo4-jmeter/fedora.jmx
        Starting the test @ Mon Apr 04 14:30:22 UTC 2016 (1459780222330)
        Waiting for possible shutdown message on port 4445
        summary +    150 in     8s =   19.9/s Avg:    40 Min:    19 Max:   983 Err:     0 (0.00%) Active: 1 Started: 2 Finished: 1
        summary +    754 in    17s =   44.6/s Avg:    19 Min:    13 Max:   319 Err:     1 (0.13%) Active: 0 Started: 2 Finished: 2
        summary =    904 in  24.5s =   37.0/s Avg:    23 Min:    13 Max:   983 Err:     1 (0.11%)
        Tidying up ...    @ Mon Apr 04 14:30:46 UTC 2016 (1459780246934)
        ... end of run
        INFO 14:30:46.894 (FedoraLdp) Ingest with path: /5b/05/a2/56/5b05a256-6a9b-4020-b260-49b6b7defa8e
        ERROR 14:30:46.910 (InvocationContextInterceptor) ISPN000136: Execution error
        org.infinispan.persistence.spi.PersistenceException: java.lang.RuntimeException: Could not open table 193043
            at org.infinispan.persistence.leveldb.LevelDBStore.load(LevelDBStore.java:428) ~[infinispan-cachestore-leveldb-7.2.4.Final.jar:7.2.4.Final]
            at org.infinispan.persistence.manager.PersistenceManagerImpl.loadFromAllStores(PersistenceManagerImpl.java:436) ~[infinispan-core-7.2.4.Final.jar:7.2.4.Final]
            at org.infinispan.persistence.PersistenceUtil.loadAndCheckExpiration(PersistenceUtil.java:116) ~[infinispan-core-7.2.4.Final.jar:7.2.4.Final]
            at org.infinispan.persistence.PersistenceUtil$4.compute(PersistenceUtil.java:100) ~[infinispan-core-7.2.4.Final.jar:7.2.4.Final]
            at org.infinispan.container.DefaultDataContainer$BoundedEquivalentConcurrentExtendedMap$2.apply(DefaultDataContainer.java:539) ~[infinispan-core-7.2.4.Final.jar:7.2.4.Final]
            at org.infinispan.container.DefaultDataContainer$BoundedEquivalentConcurrentExtendedMap$2.apply(DefaultDataContainer.java:536) ~[infinispan-core-7.2.4.Final.jar:7.2.4.Final]
            at org.infinispan.commons.util.concurrent.jdk8backported.BoundedEquivalentConcurrentHashMapV8.compute(BoundedEquivalentConcurrentHashMapV8.java:3378) ~[infinispan-commons-7.2.4.Final.jar:7.2.4.Final]
            at org.infinispan.container.DefaultDataContainer$BoundedEquivalentConcurrentExtendedMap.compute(DefaultDataContainer.java:535) ~[infinispan-core-7.2.4.Final.jar:7.2.4.Final]
            at org.infinispan.container.DefaultDataContainer.compute(DefaultDataContainer.java:255) ~[infinispan-core-7.2.4.Final.jar:7.2.4.Final]
            at org.infinispan.persistence.PersistenceUtil.loadAndStoreInDataContainer(PersistenceUtil.java:90) ~[infinispan-core-7.2.4.Final.jar:7.2.4.Final]
            at org.infinispan.interceptors.CacheLoaderInterceptor.loadIfNeeded(CacheLoaderInterceptor.java:216) ~[infinispan-core-7.2.4.Final.jar:7.2.4.Final]
            at org.infinispan.interceptors.CacheLoaderInterceptor.visitDataCommand(CacheLoaderInterceptor.java:147) ~[infinispan-core-7.2.4.Final.jar:7.2.4.Final]
            at org.infinispan.interceptors.CacheLoaderInterceptor.visitGetKeyValueCommand(CacheLoaderInterceptor.java:101) ~[infinispan-core-7.2.4.Final.jar:7.2.4.Final]
            at org.infinispan.commands.read.GetKeyValueCommand.acceptVisitor(GetKeyValueCommand.java:40) ~[infinispan-core-7.2.4.Final.jar:7.2.4.Final]
            at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:97) ~[infinispan-core-7.2.4.Final.jar:7.2.4.Final]
            at org.infinispan.interceptors.EntryWrappingInterceptor.visitDataReadCommand(EntryWrappingInterceptor.java:130) ~[infinispan-core-7.2.4.Final.jar:7.2.4.Final]
            at org.infinispan.interceptors.EntryWrappingInterceptor.visitGetKeyValueCommand(EntryWrappingInterceptor.java:120) ~[infinispan-core-7.2.4.Final.jar:7.2.4.Final]
            at org.infinispan.commands.read.GetKeyValueCommand.acceptVisitor(GetKeyValueCommand.java:40) ~[infinispan-core-7.2.4.Final.jar:7.2.4.Final]
            at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:97) ~[infinispan-core-7.2.4.Final.jar:7.2.4.Final]
            at org.infinispan.interceptors.locking.PessimisticLockingInterceptor.visitDataReadCommand(PessimisticLockingInterceptor.java:70) ~[infinispan-core-7.2.4.Final.jar:7.2.4.Final]
            at org.infinispan.interceptors.locking.AbstractLockingInterceptor.visitGetKeyValueCommand(AbstractLockingInterceptor.java:70) ~[infinispan-core-7.2.4.Final.jar:7.2.4.Final]
            at org.infinispan.commands.read.GetKeyValueCommand.acceptVisitor(GetKeyValueCommand.java:40) ~[infinispan-core-7.2.4.Final.jar:7.2.4.Final]
            at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:97) ~[infinispan-core-7.2.4.Final.jar:7.2.4.Final]
            at org.infinispan.interceptors.base.CommandInterceptor.handleDefault(CommandInterceptor.java:111) ~[infinispan-core-7.2.4.Final.jar:7.2.4.Final]
            at org.infinispan.commands.AbstractVisitor.visitGetKeyValueCommand(AbstractVisitor.java:86) ~[infinispan-core-7.2.4.Final.jar:7.2.4.Final]
            at org.infinispan.commands.read.GetKeyValueCommand.acceptVisitor(GetKeyValueCommand.java:40) ~[infinispan-core-7.2.4.Final.jar:7.2.4.Final]
            at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:97) ~[infinispan-core-7.2.4.Final.jar:7.2.4.Final]
            at org.infinispan.interceptors.TxInterceptor.enlistReadAndInvokeNext(TxInterceptor.java:346) ~[infinispan-core-7.2.4.Final.jar:7.2.4.Final]
            at org.infinispan.interceptors.TxInterceptor.visitGetKeyValueCommand(TxInterceptor.java:318) ~[infinispan-core-7.2.4.Final.jar:7.2.4.Final]
            at org.infinispan.commands.read.GetKeyValueCommand.acceptVisitor(GetKeyValueCommand.java:40) ~[infinispan-core-7.2.4.Final.jar:7.2.4.Final]
            at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:97) ~[infinispan-core-7.2.4.Final.jar:7.2.4.Final]
            at org.infinispan.interceptors.CacheMgmtInterceptor.visitDataReadCommand(CacheMgmtInterceptor.java:103) ~[infinispan-core-7.2.4.Final.jar:7.2.4.Final]
            at org.infinispan.interceptors.CacheMgmtInterceptor.visitGetKeyValueCommand(CacheMgmtInterceptor.java:91) ~[infinispan-core-7.2.4.Final.jar:7.2.4.Final]
            at org.infinispan.commands.read.GetKeyValueCommand.acceptVisitor(GetKeyValueCommand.java:40) ~[infinispan-core-7.2.4.Final.jar:7.2.4.Final]
            at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:97) ~[infinispan-core-7.2.4.Final.jar:7.2.4.Final]
            at org.infinispan.interceptors.InvocationContextInterceptor.handleAll(InvocationContextInterceptor.java:102) ~[infinispan-core-7.2.4.Final.jar:7.2.4.Final]
            at org.infinispan.interceptors.InvocationContextInterceptor.handleDefault(InvocationContextInterceptor.java:71) ~[infinispan-core-7.2.4.Final.jar:7.2.4.Final]
            at org.infinispan.commands.AbstractVisitor.visitGetKeyValueCommand(AbstractVisitor.java:86) ~[infinispan-core-7.2.4.Final.jar:7.2.4.Final]
            at org.infinispan.commands.read.GetKeyValueCommand.acceptVisitor(GetKeyValueCommand.java:40) ~[infinispan-core-7.2.4.Final.jar:7.2.4.Final]
            at org.infinispan.interceptors.InterceptorChain.invoke(InterceptorChain.java:336) ~[infinispan-core-7.2.4.Final.jar:7.2.4.Final]
            at org.infinispan.cache.impl.CacheImpl.get(CacheImpl.java:430) [infinispan-core-7.2.4.Final.jar:7.2.4.Final]
            at org.infinispan.cache.impl.CacheImpl.get(CacheImpl.java:422) [infinispan-core-7.2.4.Final.jar:7.2.4.Final]
            at org.infinispan.schematic.internal.CacheSchematicDb.get(CacheSchematicDb.java:77) [modeshape-schematic-4.4.0.Final.jar:4.4.0.Final]
            at org.modeshape.jcr.cache.document.LocalDocumentStore.get(LocalDocumentStore.java:71) [modeshape-jcr-4.4.0.Final.jar:4.4.0.Final]
            at org.modeshape.jcr.cache.document.WorkspaceCache.documentFor(WorkspaceCache.java:188) [modeshape-jcr-4.4.0.Final.jar:4.4.0.Final]
            at org.modeshape.jcr.cache.document.WorkspaceCache.documentFor(WorkspaceCache.java:207) [modeshape-jcr-4.4.0.Final.jar:4.4.0.Final]
            at org.modeshape.jcr.cache.document.WorkspaceCache.persistedCache(WorkspaceCache.java:414) [modeshape-jcr-4.4.0.Final.jar:4.4.0.Final]
            at org.modeshape.jcr.cache.document.WritableSessionCache.lockNodes(WritableSessionCache.java:1503) [modeshape-jcr-4.4.0.Final.jar:4.4.0.Final]
            at org.modeshape.jcr.cache.document.WritableSessionCache.save(WritableSessionCache.java:626) [modeshape-jcr-4.4.0.Final.jar:4.4.0.Final]
            at org.modeshape.jcr.JcrSession.save(JcrSession.java:1171) [modeshape-jcr-4.4.0.Final.jar:4.4.0.Final]
            at org.fcrepo.http.api.FedoraLdp.createObject(FedoraLdp.java:583) [fcrepo-http-api-4.5.0.jar:4.5.0]
            at sun.reflect.GeneratedMethodAccessor34.invoke(Unknown Source) ~[na:na]
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_77]
            at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_77]
            at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory$1.invoke(ResourceMethodInvocationHandlerFactory.java:81) [jersey-server-2.13.jar:na]
            at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:151) [jersey-server-2.13.jar:na]
            at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:171) [jersey-server-2.13.jar:na]
            at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:152) [jersey-server-2.13.jar:na]
            at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:104) [jersey-server-2.13.jar:na]
            at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:384) [jersey-server-2.13.jar:na]
            at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:342) [jersey-server-2.13.jar:na]
            at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:101) [jersey-server-2.13.jar:na]
            at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:271) [jersey-server-2.13.jar:na]
            at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271) [jersey-common-2.13.jar:na]
            at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267) [jersey-common-2.13.jar:na]
            at org.glassfish.jersey.internal.Errors.process(Errors.java:315) [jersey-common-2.13.jar:na]
            at org.glassfish.jersey.internal.Errors.process(Errors.java:297) [jersey-common-2.13.jar:na]
            at org.glassfish.jersey.internal.Errors.process(Errors.java:267) [jersey-common-2.13.jar:na]
            at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:297) [jersey-common-2.13.jar:na]
            at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:254) [jersey-server-2.13.jar:na]
            at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1030) [jersey-server-2.13.jar:na]
            at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:373) [jersey-container-servlet-core-2.13.jar:na]
            at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:381) [jersey-container-servlet-core-2.13.jar:na]
            at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:344) [jersey-container-servlet-core-2.13.jar:na]
            at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:221) [jersey-container-servlet-core-2.13.jar:na]
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) [tomcat-catalina-7.0.52.jar:7.0.52]
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) [tomcat-catalina-7.0.52.jar:7.0.52]
            at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) [tomcat-catalina-7.0.52.jar:7.0.52]
            at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) [tomcat-catalina-7.0.52.jar:7.0.52]
            at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) [tomcat-catalina-7.0.52.jar:7.0.52]
            at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) [tomcat-catalina-7.0.52.jar:7.0.52]
            at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) [tomcat-catalina-7.0.52.jar:7.0.52]
            at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) [tomcat-catalina-7.0.52.jar:7.0.52]
            at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) [tomcat-catalina-7.0.52.jar:7.0.52]
            at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) [tomcat-catalina-7.0.52.jar:7.0.52]
            at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041) [tomcat-coyote-7.0.52.jar:7.0.52]
            at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607) [tomcat-coyote-7.0.52.jar:7.0.52]
            at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313) [tomcat-coyote-7.0.52.jar:7.0.52]
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_77]
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_77]
            at java.lang.Thread.run(Thread.java:745) [na:1.8.0_77]
        Caused by: java.lang.RuntimeException: Could not open table 193043
            at org.iq80.leveldb.impl.TableCache.getTable(TableCache.java:91) ~[leveldb-0.7.jar:na]
            at org.iq80.leveldb.impl.TableCache.newIterator(TableCache.java:73) ~[leveldb-0.7.jar:na]
            at org.iq80.leveldb.impl.TableCache.newIterator(TableCache.java:68) ~[leveldb-0.7.jar:na]
            at org.iq80.leveldb.impl.Level.get(Level.java:130) ~[leveldb-0.7.jar:na]
            at org.iq80.leveldb.impl.Version.get(Version.java:164) ~[leveldb-0.7.jar:na]
            at org.iq80.leveldb.impl.VersionSet.get(VersionSet.java:217) ~[leveldb-0.7.jar:na]
            at org.iq80.leveldb.impl.DbImpl.get(DbImpl.java:604) ~[leveldb-0.7.jar:na]
            at org.iq80.leveldb.impl.DbImpl.get(DbImpl.java:565) ~[leveldb-0.7.jar:na]
            at org.infinispan.persistence.leveldb.LevelDBStore.load(LevelDBStore.java:415) ~[infinispan-cachestore-leveldb-7.2.4.Final.jar:7.2.4.Final]
            ... 90 common frames omitted
        Caused by: java.io.FileNotFoundException: /mnt/test/fcrepo.ispn.repo.cache/dataFedoraRepository/193043.sst (Too many open files)
            at java.io.FileInputStream.open0(Native Method) ~[na:1.8.0_77]
            at java.io.FileInputStream.open(FileInputStream.java:195) ~[na:1.8.0_77]
            at java.io.FileInputStream.<init>(FileInputStream.java:138) ~[na:1.8.0_77]
            at org.iq80.leveldb.impl.TableCache$TableAndFile.<init>(TableCache.java:116) ~[leveldb-0.7.jar:na]
            at org.iq80.leveldb.impl.TableCache$TableAndFile.<init>(TableCache.java:106) ~[leveldb-0.7.jar:na]
            at org.iq80.leveldb.impl.TableCache$1.load(TableCache.java:61) ~[leveldb-0.7.jar:na]
            at org.iq80.leveldb.impl.TableCache$1.load(TableCache.java:58) ~[leveldb-0.7.jar:na]
            at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3527) ~[guava-18.0.jar:na]
            at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2319) ~[guava-18.0.jar:na]
            at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2282) ~[guava-18.0.jar:na]
            at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2197) ~[guava-18.0.jar:na]
            at com.google.common.cache.LocalCache.get(LocalCache.java:3937) ~[guava-18.0.jar:na]
            at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3941) ~[guava-18.0.jar:na]
            at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4824) ~[guava-18.0.jar:na]
            at org.iq80.leveldb.impl.TableCache.getTable(TableCache.java:84) ~[leveldb-0.7.jar:na]
            ... 98 common frames omitted
        WARN 14:30:46.915 (RepositoryExceptionMapper) Caught repository exception: org.infinispan.persistence.spi.PersistenceException: java.lang.RuntimeException: Could not open table 193043
        
        
        1. too many open files... what is your "max file handles" value set to?

          ulimit -a

          ...http://ubuntuforums.org/showthread.php?t=1961208

          1. $ ulimit -a
            core file size          (blocks, -c) 0
            data seg size           (kbytes, -d) unlimited
            scheduling priority             (-e) 0
            file size               (blocks, -f) unlimited
            pending signals                 (-i) 483120
            max locked memory       (kbytes, -l) 64
            max memory size         (kbytes, -m) unlimited
            open files                      (-n) 1024
            pipe size            (512 bytes, -p) 8
            POSIX message queues     (bytes, -q) 819200
            real-time priority              (-r) 0
            stack size              (kbytes, -s) 8192
            cpu time               (seconds, -t) unlimited
            max user processes              (-u) 483120
            virtual memory          (kbytes, -v) unlimited
            file locks                      (-x) unlimited
            1. How about:

              ulimit -Hn

              ...which shows what we really want, the hard limit on open file handles.

                  1. Weird. Now I can't even get fcrepo to come back up. It's just hanging here in catalina.out

                    INFO: Deploying configuration descriptor /etc/tomcat7/Catalina/localhost/manager.xml

                     

                    EDIT:

                    It took an hour or so, and it came back up.