Hello, Now I can definitely confirm that my resolver is going slow even with UDP open. Here are my customized rawHandleValues functions (only the relevant ones): /********************************************************************* * Updated the BDBJE version of getRawHandleValues. * It will attempt to use BDBJE to getRawHandleValues() for this * server. * If getRawHandleValues() comes back with NULL, we know that this * server doesn't have the handle. * Next, we have to loop through all the other handle servers that * we have to see if the handle exists on the other servers. * * For each server URL, it will attempt to make an HTTP request and * follow the redirects. * * If the URL that we go to, and the URL that * is redirected are different, then we want to redirect to that * URL. * * If they are the same, we KNOW that the server doesn't have * that handle. *********************************************************************/ public final byte[][] getRawHandleValues(byte handle[], int indexList[], byte typeList[][]) throws HandleException { // getHandleServerEndpoints(); String myHandle = net.handle.hdllib.Util.decodeString(handle); String suffix = myHandle.split("/")[1]; String handleServerUrl = null; try { handleServerUrl = handleExistsOnExternalHandleServer(suffix); } catch (Exception e) {} if (handleServerUrl != null) { return getRawHandleValuesFromExternalHandleServer(handleServerUrl); } else { byte[][] values = bdbjeStorage.getRawHandleValues(handle, indexList, typeList); if (values != null) { return values; } else { return null; } } } /********************************************************************* * This will use the URL, and build a HandleValue. This will tell * Handle Server to redirect to that URL. **********************************************************************/ private byte[][] getRawHandleValuesFromExternalHandleServer(String url) throws HandleException { try { HandleValue value = new HandleValue(); value.setIndex(100); value.setType(Util.encodeString("URL")); value.setData(Util.encodeString(url)); value.setTTLType((byte) 0); value.setTTL(100); value.setTimestamp(100); value.setReferences(null); value.setAdminCanRead(true); value.setAdminCanWrite(false); value.setAnyoneCanRead(true); value.setAnyoneCanWrite(false); List<HandleValue> values = new LinkedList<HandleValue>(); values.add(value); byte[][] rawValues = new byte[values.size()][]; for (int i = 0; i < values.size(); i++) { HandleValue hvalue = values.get(i); rawValues[i] = new byte[Encoder.calcStorageSize(hvalue)]; Encoder.encodeHandleValue(rawValues[i], 0, hvalue); } return rawValues; } catch (Exception e) { return null; } } /********************************************************************* * Loops through the ArrayList of Handle Server hosts and determines * if it redirects to the target URL. If it does, simply return the * URL. **********************************************************************/ public String handleExistsOnExternalHandleServer(String suffix) throws Exception { // for (String endpoint : this.handleServerHosts) // { // try { // String externalConnection = "http://pandora.lib.ohio-state.edu:8000/1811/"; // URL hostAddress = new URL(endpoint); // URL serverAddress = new URL(hostAddress + suffix); // String url = serverAddress.toString(); // // //set up out communications stuff // HttpURLConnection connection = null; // // connection = (HttpURLConnection)serverAddress.openConnection(); // connection.setInstanceFollowRedirects(false); // connection.setRequestMethod("GET"); // connection.connect(); // // // check the status code and make sure it's not 404 // int statusCode = connection.getResponseCode(); // if (statusCode == 302) { // return (new URL(externalConnection + suffix)).toString(); // } else { // return null; // } // } catch (Exception e) {} // } // return null; String handle = "1811/"+suffix; HandleResolver resolver = new HandleResolver(); try { ResolutionRequest req = new ResolutionRequest(handle.getBytes("UTF8"), null, null, null); AbstractResponse response = resolver.processRequest(req); if (response.responseCode == AbstractMessage.RC_SUCCESS) { return "http://kb.osu.edu/dspace/handle/" + handle; } else { return null; } } catch (Throwable t) { return null; } } Thanks, Chris > On Apr 4, 2016, at 1:00 PM, Robert Tupelo-Schneck <schneck@cnri.reston.va.us> wrote: > > I still do not get responses to UDP 2642 at 140.254.87.133. > > You could check your access.log file to see if UDP requests are being received. In some cases, incoming UDP works but not outgoing. That could be a clue. (Although in your case, UDP 2641 is working at the same IP address, so I would expect the same firewall configuration to work for both.) > > If you have access to a machine outside your firewall, you can check the behavior yourself, by using the hdl-admintool to resolve (for example) 1811.1/1. In your console, you will see output containing several lines of "sending HDL-UDP request" before "sending HDL-TCP request" followed by "received HDL-TCP response". That indicates the HDL-UDP requests did not receive a response. > > You could also send me your config.dct to confirm that the server configuration doesn't have some unexpected obstacle. > > If all else fails, we can change the site information for your 1811.1 prefix to not advertise UDP capability. > > Robert > >> On 2016-04-04, at 12:46, Bartos, Christopher <bartos.25@osu.edu> wrote: >> >> UDP is now open and it still takes ~4 seconds to resolve. >> >>> On Apr 1, 2016, at 1:27 PM, Robert Tupelo-Schneck <schneck@cnri.reston.va.us> wrote: >>> >>> You need to open both UDP 2642 and TCP 2642. Currently TCP 2642 is open, but not UDP 2642. >>> >>> Robert >>> >>>> On 2016-04-01, at 13:08, Bartos, Christopher <bartos.25@osu.edu> wrote: >>>> >>>> I opened up 2642 and it seems to be the same speed as before. >>>> >>>>> On Mar 30, 2016, at 1:53 PM, Bartos, Christopher <bartos.25@osu.edu> wrote: >>>>> >>>>> Hello, >>>>> >>>>> My plan is to open udp and tcp on port 2642. Thanks for all your help. Sorry, Jane, for not seeing your email last week. >>>>> >>>>> Thanks everyone! >>>>> >>>>> Forgive the typo... your 1811.1 prefix advertises service on UDP 2642 (not 2641). >>>>> >>>>> Robert >>>>> >>>>>> On 2016-03-30, at 13:36, Robert Tupelo-Schneck <schneck@cnri.reston.va.us> wrote: >>>>>> >>>>>> Chris, your 1811 server is open to public resolution at UDP 2641, TCP 2641, and HTTP 8000. >>>>>> >>>>>> Your 1811.1 server is only open on HTTP 8002, but your prefix does advertise service on UDP 2641 and TCP 2642. As Scott suggested, this is why resolution is slow. >>>>>> >>>>>> Best is to open UDP 2642 and TCP 2642 at your firewall. If strictly necessary, CNRI can change your prefix information to advertise only TCP 8002. >>>>>> >>>>>> On a separate note, the resolution behavior at 1811.1 is unusual. So 1811.1/1112 resolves to the same value at 1811/1112. I'm curious to hear more about the value of that to you. Do you want 1811/1112 to be the public handle of record, as it were, or 1811.1/1112? >>>>>> >>>>>> Also, you should check your spam filter, as Jane Euler at CNRI emailed you about the matter of the ports being closed last week. >>>>>> >>>>>> Best, >>>>>> Robert >>>>>> >>>>>>> On 2016-03-30, at 12:46, Scott Prater <scott.prater@wisc.edu> wrote: >>>>>>> >>>>>>> Yes, that would most definitely be a cause for a delay. Can you temporarily open the handle server TCP and UDP ports to the world, as see if the resolution is faster? >>>>>>> >>>>>>> -- Scott >>>>>>> >>>>>>> On 03/30/2016 11:40 AM, Bartos, Christopher wrote: >>>>>>>> The only ones we have open to the world is our HTTP protocols opened on >>>>>>>> 8002 where the handle server is running on. >>>>>>>> >>>>>>>> We have 2 handle servers 1) DSpace instance and 2) Regular Handle Server >>>>>>>> >>>>>>>> They are running on HTTP 8000 and HTTP 8002 respectively. Neither of the >>>>>>>> UDP / TCP ports are open to the world. Would that be cause of slowness? >>>>>>>> >>>>>>>> Thanks, >>>>>>>> >>>>>>>> Chris >>>>>>>> >>>>>>>>> On Mar 30, 2016, at 12:24 PM, Scott Prater <scott.prater@wisc.edu >>>>>>>>> <mailto:scott.prater@wisc.edu>> wrote: >>>>>>>>> >>>>>>>>> What ports do you have open to the world on your handle server, to >>>>>>>>> which protocols? In my experience, slowness in resolution is usually >>>>>>>>> because the udp handle port is closed to the world, causing the client >>>>>>>>> to fall back to tcp, and maybe even http, to resolve. >>>>>>>>> >>>>>>>>> Looking at the output of the handle client as it attempts to resolve >>>>>>>>> will give you a hint as to where the delay is. >>>>>>>>> >>>>>>>>> -- Scott >>>>>>>>> >>>>>>>>> On 03/30/2016 10:46 AM, Bartos, Christopher wrote: >>>>>>>>>> Hi, >>>>>>>>>> >>>>>>>>>> I've overridden the HandleStorage class in Handle Server so that it will >>>>>>>>>> attempt to resolve a specific prefix internally, and if it doesn’t >>>>>>>>>> resolve, it will attempt to resolve itself, meaning, it runs the normal >>>>>>>>>> BDJBEHandleStorage class to resolve it’s own handle. >>>>>>>>>> >>>>>>>>>> Here is my new class: >>>>>>>>>> https://github.com/lupulin/MultiServerHandleStorage/blob/master/MultiServerHandleStorage.java >>>>>>>>>> >>>>>>>>>> My question: it’s pretty quick locally. You can check it: >>>>>>>>>> >>>>>>>>>> http://140.254.87.133:8002/1811.1/OSU123 will resolve itself. >>>>>>>>>> http://140.254.87.133:8002/1811.1/1112 will resolve a different handle >>>>>>>>>> server. >>>>>>>>>> >>>>>>>>>> However, going through hdl.handle.net <http://hdl.handle.net>: >>>>>>>>>> >>>>>>>>>> http://hdl.handle.net/1811.1/OSU123andhttp://hdl.handle.net/1811.1/1112 >>>>>>>>>> >>>>>>>>>> Is very, very slow. >>>>>>>>>> >>>>>>>>>> My question, is that I’m wondering if there is a way that we can speed >>>>>>>>>> up the HandleStorage implementation on our side or if there is nothing >>>>>>>>>> we can do. Also, if there is a better way to do what we are attempting. >>>>>>>>>> >>>>>>>>>> Our goal is to have 2 handle servers, both with the same prefix, but the >>>>>>>>>> one that is publicly available will use our custom HandleStorage class. >>>>>>>>>> >>>>>>>>>> Thanks in advance, >>>>>>>>>> >>>>>>>>>> Chris >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> _______________________________________________ >>>>>>>>>> Handle-Info mailing list >>>>>>>>>> Handle-Info@cnri.reston.va.us <mailto:Handle-Info@cnri.reston.va.us> >>>>>>>>>> http://www.handle.net/mailman/listinfo/handle-info >>>>>>>>>> >>>>>>>>> >>>>>>>>> -- >>>>>>>>> Scott Prater >>>>>>>>> Shared Development Group >>>>>>>>> General Library System >>>>>>>>> University of Wisconsin - Madison >>>>>>>> >>>>>>> >>>>>>> -- >>>>>>> Scott Prater >>>>>>> Shared Development Group >>>>>>> General Library System >>>>>>> University of Wisconsin - Madison >>>>>>> >>>>>>> _______________________________________________ >>>>>>> Handle-Info mailing list >>>>>>> Handle-Info@cnri.reston.va.us >>>>>>> http://www.handle.net/mailman/listinfo/handle-info >>>>>> >>>>> >>>>> _______________________________________________ >>>>> Handle-Info mailing list >>>>> Handle-Info@cnri.reston.va.us >>>>> http://www.handle.net/mailman/listinfo/handle-info >>>> >>>> _______________________________________________ >>>> Handle-Info mailing list >>>> Handle-Info@cnri.reston.va.us >>>> http://www.handle.net/mailman/listinfo/handle-info >>> >> >
Attachment:
signature.asc
Description: Message signed with OpenPGP using GPGMail
_______________________________________________ Handle-Info mailing list Handle-Info@cnri.reston.va.us http://www.handle.net/mailman/listinfo/handle-info