[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Handle-info] Overriding HandleStorage
Your server is still not responding to me over UDP:
sending HDL-UDP request (version=2.10; oc=1; rc=0; snId=0 caCrt noAuth expires:Fri Apr 08 05:55:57 EDT 2016 1811.1/1 [ ] [ ]) to 140.254.87.133:2642
sending HDL-UDP request (version=2.10; oc=1; rc=0; snId=0 caCrt noAuth expires:Fri Apr 08 05:55:57 EDT 2016 1811.1/1 [ ] [ ]) to 140.254.87.133:2642
sending HDL-TCP request (version=2.10; oc=1; rc=0; snId=0 caCrt noAuth expires:Fri Apr 08 05:55:57 EDT 2016 1811.1/1 [ ] [ ]) to 140.254.87.133:2642
received HDL-TCP response: version=2.10; oc=1; rc=1; snId=0 caCrt auth noAuth expires:Fri Apr 08 05:56:01 EDT 2016 1811.1/1
index=100 type=URL r-r- "http://kb.osu.edu/dspace/handle/1811/1"
Now. I've removed UDP from the HS_SITE in 0.NA/1811.1. So resolution via hdl.handle.net should be much faster now. Check this. If you are able to open UDP, we can easily put it back in.
Resolving 1811.1/1 is still a tiny bit slower than resolving 1811/1, but it's using TCP and doing more work, so that's not necessarily a surprise. But maybe the difference is now small enough that it does not matter. Let me know.
Robert
> On Apr 7, 2016, at 5:33 PM, Bartos, Christopher <bartos.25@osu.edu> wrote:
>
> 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
>>>>
>>>
>>
>
> _______________________________________________
> 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