Uploaded image for project: 'IGB'
  1. IGB
  2. IGBF-3819

IGB not launching with internet on in the latest version

    Details

    • Type: Bug
    • Status: Closed (View Workflow)
    • Priority: Major
    • Resolution: Done
    • Affects Version/s: None
    • Fix Version/s: 10.1.0
    • Labels:
      None

      Attachments

        Issue Links

          Activity

          Hide
          jsirigin Jaya Sravani Sirigineedi added a comment - - edited

          Found the issue, the main quick load URLs (http://lorainelab-quickload.scidas.org) aren't responding, it might be some issue with the server, the API is taking a lot of time to respond with a site-not-reachable error. There is no read timeout specified in the HTTP connection code, because of that the HTTP request is waiting till it gets a response.
          Types of timeout to set in HttpUrlConnection:
          Connect Timeout: Time to establish a connection.
          Read Timeout: Time to wait for data after the connection is established.
          Typical Usage: Both should be set to reasonable values to ensure your application does not hang indefinitely waiting for a connection or data.
          In the code, only connect timeout is set, updated it to have both the timeouts and everything's working correctly. Here is the changed code: https://bitbucket.org/jaya-sravani/integrated-genome-browser/branch/IGBF-3819. Ann Loraine Nowlan Freese Please review and let me know if there are any issues.

          Show
          jsirigin Jaya Sravani Sirigineedi added a comment - - edited Found the issue, the main quick load URLs ( http://lorainelab-quickload.scidas.org ) aren't responding, it might be some issue with the server, the API is taking a lot of time to respond with a site-not-reachable error. There is no read timeout specified in the HTTP connection code, because of that the HTTP request is waiting till it gets a response. Types of timeout to set in HttpUrlConnection: Connect Timeout: Time to establish a connection. Read Timeout: Time to wait for data after the connection is established. Typical Usage: Both should be set to reasonable values to ensure your application does not hang indefinitely waiting for a connection or data. In the code, only connect timeout is set, updated it to have both the timeouts and everything's working correctly. Here is the changed code: https://bitbucket.org/jaya-sravani/integrated-genome-browser/branch/IGBF-3819 . Ann Loraine Nowlan Freese Please review and let me know if there are any issues.
          Hide
          nfreese Nowlan Freese added a comment -

          Great catch Jaya Sravani Sirigineedi!

          I've written back to the user with a temporary workaround that worked for me.

          On a side note, I'm beginning to wonder if we should engineer a way for the various default IGB Quickloads to point at something like a bitbucket repo instead of the IGBdefaultprefs file. We've had several issues with data providers going down, and it would be much better if we could quickly make updates online instead of having to do a new release of IGB.

          Show
          nfreese Nowlan Freese added a comment - Great catch Jaya Sravani Sirigineedi ! I've written back to the user with a temporary workaround that worked for me. On a side note, I'm beginning to wonder if we should engineer a way for the various default IGB Quickloads to point at something like a bitbucket repo instead of the IGBdefaultprefs file. We've had several issues with data providers going down, and it would be much better if we could quickly make updates online instead of having to do a new release of IGB.
          Hide
          ann.loraine Ann Loraine added a comment - - edited

          Update from Ann Loraine:

          I have submitted a help request ticket to help.renci.org user support ticketing system, under my user name "aloraine" at RENCI:

          Hello!

          My name is Ann Loraine, and I am a Professor at UNC Charlotte.

          My bioinformatics research team is using a VM hosted under the domain name lorainelab-quickload.scidas.org, hosted on RENCI infrastructure. It provides data for a desktop application called "Integrated Genome Browser," funded by NIH and NSF, and used by thousands of researchers worldwide to visualize genomic data.

          Today the address http://lorainelab-quickload.scidas.org is no longer responding, and although I am able to log into the host, commands such as "ls" are hanging.

          Can you help?

          Ann Loraine, PhD
          Professor
          Department of Bioinformatics and Genomics
          College of Computing and Informatics
          University of North Carolina at Charlotte

          This is similar to a previous incident when there was a power failure at the RENCI site. I have linked that ticket to this one.

          Show
          ann.loraine Ann Loraine added a comment - - edited Update from Ann Loraine : I have submitted a help request ticket to help.renci.org user support ticketing system, under my user name "aloraine" at RENCI: Hello! My name is Ann Loraine, and I am a Professor at UNC Charlotte. My bioinformatics research team is using a VM hosted under the domain name lorainelab-quickload.scidas.org, hosted on RENCI infrastructure. It provides data for a desktop application called "Integrated Genome Browser," funded by NIH and NSF, and used by thousands of researchers worldwide to visualize genomic data. Today the address http://lorainelab-quickload.scidas.org is no longer responding, and although I am able to log into the host, commands such as "ls" are hanging. Can you help? Ann Loraine, PhD Professor Department of Bioinformatics and Genomics College of Computing and Informatics University of North Carolina at Charlotte This is similar to a previous incident when there was a power failure at the RENCI site. I have linked that ticket to this one.
          Hide
          ann.loraine Ann Loraine added a comment -

          Comment regarding IGB preferences access from an on-line location rather than via packaged configuration file;

          • It would need to be able to tolerate situations when IGB can't access the Web
          • If the sites providing the confirmation file are down or the endpoints change, IGB needs to continue running
          Show
          ann.loraine Ann Loraine added a comment - Comment regarding IGB preferences access from an on-line location rather than via packaged configuration file; It would need to be able to tolerate situations when IGB can't access the Web If the sites providing the confirmation file are down or the endpoints change, IGB needs to continue running
          Hide
          ann.loraine Ann Loraine added a comment -

          RENCI has replied with:

          Hi Ann,

          The service http://lorainelab-quickload.scidas.org is responding again.

          I've added a configuration to prevent this particular issue in the future.

          Andy

          Show
          ann.loraine Ann Loraine added a comment - RENCI has replied with: Hi Ann, The service http://lorainelab-quickload.scidas.org is responding again. I've added a configuration to prevent this particular issue in the future. Andy
          Hide
          jsirigin Jaya Sravani Sirigineedi added a comment -

          Nowlan Freese Implementing the separate bitbucket repo for the properties is a good idea, we can do caching of the properties file once we load them and when we aren't able to lead the next time we can rely on the cached file, this addresses the concerns mentioned by Ann Loraine. If this idea is okay with everyone, I can start investigating it by creating another ticket.

          Show
          jsirigin Jaya Sravani Sirigineedi added a comment - Nowlan Freese Implementing the separate bitbucket repo for the properties is a good idea, we can do caching of the properties file once we load them and when we aren't able to lead the next time we can rely on the cached file, this addresses the concerns mentioned by Ann Loraine . If this idea is okay with everyone, I can start investigating it by creating another ticket.
          Hide
          ann.loraine Ann Loraine added a comment - - edited

          I think the proposed edit to UriUtils.java is good. I wish this had already been there in the code before now.

          I have a question about some of the code surrounding the change - something David Norris wrote:

              public static boolean isValidRequest(URI uri) throws IOException {
                  final String scheme = uri.getScheme();
                  if (Strings.isNullOrEmpty(scheme)) {
                      return false;
                  }
                  if (scheme.equalsIgnoreCase(FILE_PROTOCOL_SCHEME)) {
                      File f = new File(uri);
                      return f.exists();
                  } else {
                      int code = -1;
                      try {
                          final HttpRequest httpRequest = HttpRequest.get(uri.toURL())
                                  .trustAllCerts()
                                  .trustAllHosts()
                                  .followRedirects(true)
                                  .connectTimeout(5000)
                                  .readTimeout(5000); // Sravani's addition
                          code = httpRequest.code();
                      } catch (HttpRequest.HttpRequestException ex) {
                      }
                      return code == HttpURLConnection.HTTP_OK;
                  }
              }
          
          

          An exception is getting caught and ignored here, which could occur before the variable "code" is defined. If that happens, does that mean that

          return code == HttpURLConnection.HTTP_OK;
          

          returns false, which is what we want here?

          Show
          ann.loraine Ann Loraine added a comment - - edited I think the proposed edit to UriUtils.java is good. I wish this had already been there in the code before now. I have a question about some of the code surrounding the change - something David Norris wrote: public static boolean isValidRequest(URI uri) throws IOException { final String scheme = uri.getScheme(); if (Strings.isNullOrEmpty(scheme)) { return false ; } if (scheme.equalsIgnoreCase(FILE_PROTOCOL_SCHEME)) { File f = new File(uri); return f.exists(); } else { int code = -1; try { final HttpRequest httpRequest = HttpRequest.get(uri.toURL()) .trustAllCerts() .trustAllHosts() .followRedirects( true ) .connectTimeout(5000) .readTimeout(5000); // Sravani's addition code = httpRequest.code(); } catch (HttpRequest.HttpRequestException ex) { } return code == HttpURLConnection.HTTP_OK; } } An exception is getting caught and ignored here, which could occur before the variable "code" is defined. If that happens, does that mean that return code == HttpURLConnection.HTTP_OK; returns false, which is what we want here?
          Hide
          ann.loraine Ann Loraine added a comment -

          I don't think we should implement a new mechanism for distributing properties files to users at this time due to the implementation and maintenance effort it would require.

          Show
          ann.loraine Ann Loraine added a comment - I don't think we should implement a new mechanism for distributing properties files to users at this time due to the implementation and maintenance effort it would require.
          Hide
          jsirigin Jaya Sravani Sirigineedi added a comment -

          Thanks Ann Loraine for confirming that and for your question, yes the code will return false, which is what we are supposed to get as the method is to check whether the request is valid or not, in case of any error while doing the HTTP get request it means that URL isn't working as expected so it can be considered as invalid.

          return code == HttpURLConnection.HTTP_OK;
          

          As the code variable is already defined as -1 before, this will return false.

          Show
          jsirigin Jaya Sravani Sirigineedi added a comment - Thanks Ann Loraine for confirming that and for your question, yes the code will return false, which is what we are supposed to get as the method is to check whether the request is valid or not, in case of any error while doing the HTTP get request it means that URL isn't working as expected so it can be considered as invalid. return code == HttpURLConnection.HTTP_OK; As the code variable is already defined as -1 before, this will return false.
          Hide
          jsirigin Jaya Sravani Sirigineedi added a comment -

          Created a pull request: https://bitbucket.org/lorainelab/integrated-genome-browser/pull-requests/1026. Please review and let me know if there are any issues.

          Show
          jsirigin Jaya Sravani Sirigineedi added a comment - Created a pull request: https://bitbucket.org/lorainelab/integrated-genome-browser/pull-requests/1026 . Please review and let me know if there are any issues.
          Hide
          ann.loraine Ann Loraine added a comment -

          PR is merged and new main branch installers are built and deployed to bioviz.org "early access" section. Ready for testing. Testers may need some testing guidance from the developer.

          Show
          ann.loraine Ann Loraine added a comment - PR is merged and new main branch installers are built and deployed to bioviz.org "early access" section. Ready for testing. Testers may need some testing guidance from the developer.
          Hide
          pkulzer Paige Kulzer added a comment -

          Jaya Sravani Sirigineedi, I'm having some trouble testing this ticket. In an effort to reproduce the issue of IGB stalling upon launch when it encounters a broken Quickload link, I tried adding the following URL to IGB 10.0.1 as a Quickload, then closing and restarting IGB: http://www.google.com:81/. However, even though this link sits and spins in Chrome, IGB 10.0.1 is launching as usual.

          Do you have any ideas for how I can come up with a test case for this ticket?

          Show
          pkulzer Paige Kulzer added a comment - Jaya Sravani Sirigineedi , I'm having some trouble testing this ticket. In an effort to reproduce the issue of IGB stalling upon launch when it encounters a broken Quickload link, I tried adding the following URL to IGB 10.0.1 as a Quickload, then closing and restarting IGB: http://www.google.com:81/ . However, even though this link sits and spins in Chrome, IGB 10.0.1 is launching as usual. Do you have any ideas for how I can come up with a test case for this ticket?
          Hide
          jsirigin Jaya Sravani Sirigineedi added a comment -

          Paige Kulzer - That's what the fix is supposed to do, if any website isn't responding it will just show the exception in the logs and continue running the application. You can check the behavior of the before IGB version against this, before version won't be launching it will be stuck waiting for the response from the provided url.

          Show
          jsirigin Jaya Sravani Sirigineedi added a comment - Paige Kulzer - That's what the fix is supposed to do, if any website isn't responding it will just show the exception in the logs and continue running the application. You can check the behavior of the before IGB version against this, before version won't be launching it will be stuck waiting for the response from the provided url.
          Hide
          jsirigin Jaya Sravani Sirigineedi added a comment - - edited

          Paige Kulzer Sorry for the above confusion, I have looked into the code and it goes through the same part of the code when you add a new Quickload manually but I think the issue is with the connection as I explained in the first comment there are two types of timeouts one is connectTimeout and the other is readTimeout the issue we were facing with the quickload server was the connection is established but the API isn't giving a response for a long time, in this case, I believe it's the connection that's not being established and the connectTimeout is stopping the API call. Below is the picture of the API timing window in inspect and you can see that the connection is not being established.

          Also, as of now, I am still trying to figure out how to recreate this server issue, even if we change the igbDefaultPrefs.json with this, it's gonna behave the same.

          Show
          jsirigin Jaya Sravani Sirigineedi added a comment - - edited Paige Kulzer Sorry for the above confusion, I have looked into the code and it goes through the same part of the code when you add a new Quickload manually but I think the issue is with the connection as I explained in the first comment there are two types of timeouts one is connectTimeout and the other is readTimeout the issue we were facing with the quickload server was the connection is established but the API isn't giving a response for a long time, in this case, I believe it's the connection that's not being established and the connectTimeout is stopping the API call. Below is the picture of the API timing window in inspect and you can see that the connection is not being established. Also, as of now, I am still trying to figure out how to recreate this server issue, even if we change the igbDefaultPrefs.json with this, it's gonna behave the same.
          Hide
          nfreese Nowlan Freese added a comment -

          This stackoverflow was the closest thing I could find to a delayed response.

          Since this is a one line code change and Sravani tested it at the time of the issue, I think we can go ahead and close this ticket.

          Show
          nfreese Nowlan Freese added a comment - This stackoverflow was the closest thing I could find to a delayed response. Since this is a one line code change and Sravani tested it at the time of the issue, I think we can go ahead and close this ticket.
          Hide
          ann.loraine Ann Loraine added a comment -

          Update:

          The same error is occurring again, so I am sending similar bug report to RENCI as before, to help.renci.org.

          Hello,

          This is Ann Loraine, Professor at UNC Charlotte.

          Just for a little background, my bioinformatics research team is using a VM hosted under the domain name lorainelab-quickload.scidas.org, hosted on RENCI infrastructure. It provides data for a desktop application called "Integrated Genome Browser," funded by NIH and NSF, and used by thousands of researchers worldwide to visualize genomic data.

          Today the address http://lorainelab-quickload.scidas.org is no longer responding, and although I am able to log into the host, commands such as "ls" are hanging.

          Can you help?

          Ann Loraine, PhD
          Professor
          Department of Bioinformatics and Genomics
          College of Computing and Informatics
          University of North Carolina at Charlotte

          Show
          ann.loraine Ann Loraine added a comment - Update: The same error is occurring again, so I am sending similar bug report to RENCI as before, to help.renci.org. Hello, This is Ann Loraine, Professor at UNC Charlotte. Just for a little background, my bioinformatics research team is using a VM hosted under the domain name lorainelab-quickload.scidas.org, hosted on RENCI infrastructure. It provides data for a desktop application called "Integrated Genome Browser," funded by NIH and NSF, and used by thousands of researchers worldwide to visualize genomic data. Today the address http://lorainelab-quickload.scidas.org is no longer responding, and although I am able to log into the host, commands such as "ls" are hanging. Can you help? Ann Loraine, PhD Professor Department of Bioinformatics and Genomics College of Computing and Informatics University of North Carolina at Charlotte

            People

            • Assignee:
              jsirigin Jaya Sravani Sirigineedi
              Reporter:
              jsirigin Jaya Sravani Sirigineedi
            • Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: