Uploaded image for project: 'Bitbucket Data Center'
  1. Bitbucket Data Center
  2. BSERV-10617

Bitbucket Server should not stop responding when UPM server is blocked by a firewall

    XMLWordPrintable

Details

    Description

      Summary

      Bitbucket Server stops responding.

      Environment

      • Firewall in place preventing a connection to the Marketplace

      Steps to Reproduce

      1. Unknown

      Expected Results

      The application is always responding as expected.

      Actual Results

      No errors are logged. A thread dumps analysis shows a significant amount of long running threads similar to the following one:

      "http-nio-7990-exec-1775" #8397 daemon prio=5 os_prio=0 tid=0x00007f20a01a9800 nid=0x5f68 waiting on condition [0x00007f2063953000]
         java.lang.Thread.State: WAITING (parking)
      	at sun.misc.Unsafe.park(Native Method)
      	- parking to wait for  <0x00000000d87d6fe0> (a com.google.common.util.concurrent.AbstractFuture$Sync)
      	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
      	at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)
      	at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(AbstractQueuedSynchronizer.java:997)
      ...
      	- locked <0x00000000dc06b428> (a org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper)
      	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
      	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
      

      With the following thread being the one blocked from reading from https://marketplace.atlassian.com:

      http-nio-7990-exec-1562" #6609 daemon prio=5 os_prio=0 tid=0x00007f209409f800 nid=0x34df runnable [0x00007f207585d000]
         java.lang.Thread.State: RUNNABLE
          at java.net.SocketInputStream.socketRead0(Native Method)
          at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
          at java.net.SocketInputStream.read(SocketInputStream.java:170)
          at java.net.SocketInputStream.read(SocketInputStream.java:141)
          at sun.security.ssl.InputRecord.readFully(InputRecord.java:465)
          at sun.security.ssl.InputRecord.readV3Record(InputRecord.java:593)
          at sun.security.ssl.InputRecord.read(InputRecord.java:532)
          at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:973)
          - locked <0x00000000d87dba78> (a java.lang.Object)
          at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375)
          - locked <0x00000000d87dbb38> (a java.lang.Object)
          at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403)
          at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387)
          at org.apache.http.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:275)
          at org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:254)
          at org.apache.http.impl.conn.HttpClientConnectionOperator.connect(HttpClientConnectionOperator.java:123)
          at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:318)
          at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:363)
          at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:219)
          at org.apache.http.impl.client.cache.CachingExec.revalidateCacheEntry(CachingExec.java:740)
          at org.apache.http.impl.client.cache.CachingExec.revalidateCacheEntry(CachingExec.java:317)
          at org.apache.http.impl.client.cache.CachingExec.handleCacheHit(CachingExec.java:287)
          at org.apache.http.impl.client.cache.CachingExec.execute(CachingExec.java:264)
          at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:195)
          at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:86)
          at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:108)
          at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)
          at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
          at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:106)
          at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:57)
          at com.atlassian.marketplace.client.impl.CommonsHttpTransport$OperationsImpl.executeMethod(CommonsHttpTransport.java:376)
          at com.atlassian.marketplace.client.impl.CommonsHttpTransport$OperationsImpl.get(CommonsHttpTransport.java:298)
          at com.atlassian.marketplace.client.impl.CommonsHttpTransport.get(CommonsHttpTransport.java:112)
          at com.atlassian.marketplace.client.impl.ApiHelper.getEntityInternal(ApiHelper.java:113)
          at com.atlassian.marketplace.client.impl.ApiHelper.getEntity(ApiHelper.java:100)
          at com.atlassian.marketplace.client.impl.DefaultMarketplaceClient.getRoot(DefaultMarketplaceClient.java:156)
          at com.atlassian.marketplace.client.impl.DefaultMarketplaceClient.applications(DefaultMarketplaceClient.java:121)
          at com.atlassian.upm.pac.PacClientImpl.fetchMpacAppInfo(PacClientImpl.java:299)
          at com.atlassian.upm.pac.PacClientImpl.fetchMpacAppInfoForLocalBuild(PacClientImpl.java:323)
          at com.atlassian.upm.pac.PacClientImpl.access$700(PacClientImpl.java:119)
          at com.atlassian.upm.pac.PacClientImpl$6$1.apply(PacClientImpl.java:285)
          at com.atlassian.upm.pac.PacClientImpl$6$1.apply(PacClientImpl.java:281)
          at com.atlassian.upm.api.util.Option$Some.fold(Option.java:314)
          at com.atlassian.upm.api.util.Option.flatMap(Option.java:117)
          at com.atlassian.upm.pac.PacClientImpl$6.get(PacClientImpl.java:280)
          at com.atlassian.upm.pac.PacClientImpl$6.get(PacClientImpl.java:270)
          at com.atlassian.cache.compat.guava11.memory.MemoryCacheFactory$1$1.load(MemoryCacheFactory.java:50)
          at com.atlassian.cache.compat.guava11.memory.MemoryCacheFactory$1$1.load(MemoryCacheFactory.java:46)
          at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3527)
          at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2319)
          at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2282)
          - locked <0x00000000d87d7078> (a com.google.common.cache.LocalCache$StrongAccessWriteEntry)
          at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2197)
          at com.google.common.cache.LocalCache.get(LocalCache.java:3937)
          at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3941)
          at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4824)
          at com.atlassian.cache.compat.guava11.memory.MemoryCachedReference.get(MemoryCachedReference.java:37)
          at com.atlassian.upm.pac.PacClientImpl.mpacApp(PacClientImpl.java:355)
          at com.atlassian.upm.pac.PacClientImpl.unknownAppVersion(PacClientImpl.java:359)
          at com.atlassian.upm.pac.PacClientImpl.isUnknownProductVersion(PacClientImpl.java:350)
          at com.atlassian.upm.permission.UpmVisibilityImpl.isKnownOrDevelopmentVersion(UpmVisibilityImpl.java:72)
          at com.atlassian.upm.permission.UpmVisibilityImpl.isInstallVisible(UpmVisibilityImpl.java:45)
          at com.atlassian.upm.conditions.IsPermittedToView.shouldDisplay(IsPermittedToView.java:61)
          at com.atlassian.plugin.web.DefaultWebInterfaceManager.filterFragmentsByCondition(DefaultWebInterfaceManager.java:154)
          at com.atlassian.plugin.web.DefaultWebInterfaceManager.getDisplayableItems(DefaultWebInterfaceManager.java:107)
          at com.atlassian.plugin.web.DefaultWebInterfaceManager.getDisplayableWebItems(DefaultWebInterfaceManager.java:215)
          at com.atlassian.stash.internal.web.fragments.WebFragmentSupport.getWebItems(WebFragmentSupport.java:61)
          at com.atlassian.stash.internal.web.fragments.WebFragmentSupport$$FastClassBySpringCGLIB$$a614745b.invoke(<generated>)
      

      Notes

      Workaround

      Disable the connection to the Universal Plugin Manager (UPM) / Atlassian Marketplace, by adding the following to the <$Bitbucket Installation directory>/bin/start-webapp.sh file:

      -Dupm.pac.disable=true
      

      A restart is required for this change to take effect.

      Note that this line may be commented on the servers. If that's the case the line will start with # and we will need to remove that. If there are already some parameters set, please add the new one.

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              ccurti Caterina Curti
              Votes:
              1 Vote for this issue
              Watchers:
              9 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: