Hi Aliza,

As this appears to be an issue inside the internal HTTP connector, you can
always turn to the Jetty or Simple extensions for more robust HTTP server
connectors.

Also, you could try to manually consume/exhaust any incoming request entity
as this seems related to the exception. Finally, you should enter an issue
in GitHub so we can keep track of this and ensure it is fixed in future
2.1.x releases.

Best regards,
Jerome


2013/1/7 Itzkowitz (Silver), Aliza <asil...@nds.com>

>  Hello,
>
> I am using restlet 2.1.1 to implement a HTTP server. everything works OK
> except once in a while the server takes an awful long time to respond (even
> for a simple HTTP GET via the browser).
>
> On the server side I see these errors:
>
>
>
> Jan 07, 2013 2:19:32 PM org.restlet.util.SelectionRegistration block
>
> WARNING: The thread blocked at the cyclic barrier has timed out
>
> java.util.concurrent.TimeoutException
>
> at java.util.concurrent.CyclicBarrier.dowait(CyclicBarrier.java:250)
>
> at java.util.concurrent.CyclicBarrier.await(CyclicBarrier.java:427)
>
> at
> org.restlet.util.SelectionRegistration.block(SelectionRegistration.java:191)
>
> at
> org.restlet.engine.io.NbChannelInputStream.onFill(NbChannelInputStream.java:230)
>
> at org.restlet.engine.io.Buffer.process(Buffer.java:601)
>
> at
> org.restlet.engine.io.NbChannelInputStream.read(NbChannelInputStream.java:307)
>
> at java.io.InputStream.read(InputStream.java:101)
>
> at org.restlet.engine.io.BioUtils.exhaust(BioUtils.java:238)
>
> at
> org.restlet.representation.Representation.exhaust(Representation.java:247)
>
> at
> org.restlet.engine.connector.ServerOutboundWay.onMessageCompleted(ServerOutboundWay.java:174)
>
> at
> org.restlet.engine.connector.HttpServerOutboundWay.onMessageCompleted(HttpServerOutboundWay.java:118)
>
> at
> org.restlet.engine.connector.OutboundWay.processIoBuffer(OutboundWay.java:468)
>
> at org.restlet.engine.connector.Way.onSelected(Way.java:445)
>
> at
> org.restlet.util.SelectionRegistration.onSelected(SelectionRegistration.java:325)
>
> at org.restlet.engine.connector.Connection.onSelected(Connection.java:614)
>
> at
> org.restlet.util.SelectionRegistration.onSelected(SelectionRegistration.java:325)
>
> at
> org.restlet.engine.connector.ConnectionController.onSelected(ConnectionController.java:213)
>
> at
> org.restlet.engine.connector.ServerConnectionController.onSelected(ServerConnectionController.java:99)
>
> at
> org.restlet.engine.connector.ConnectionController.selectKeys(ConnectionController.java:299)
>
> at
> org.restlet.engine.connector.ConnectionController.doRun(ConnectionController.java:167)
>
> at org.restlet.engine.connector.Controller.run(Controller.java:159)
>
> at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
>
> at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
>
> at java.util.concurrent.FutureTask.run(FutureTask.java:166)
>
> at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
>
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
>
> at java.lang.Thread.run(Thread.java:722)
>
> Jan 07, 2013 2:19:32 PM org.restlet.engine.connector.ServerOutboundWay
> onMessageCompleted
>
> WARNING: Unable to automatically exhaust the request entity.
>
> java.io.IOException: The thread blocked at the cyclic barrier has timed
> out.
>
> at
> org.restlet.util.SelectionRegistration.block(SelectionRegistration.java:197)
>
> at
> org.restlet.engine.io.NbChannelInputStream.onFill(NbChannelInputStream.java:230)
>
> at org.restlet.engine.io.Buffer.process(Buffer.java:601)
>
> at
> org.restlet.engine.io.NbChannelInputStream.read(NbChannelInputStream.java:307)
>
> at java.io.InputStream.read(InputStream.java:101)
>
> at org.restlet.engine.io.BioUtils.exhaust(BioUtils.java:238)
>
> at
> org.restlet.representation.Representation.exhaust(Representation.java:247)
>
> at
> org.restlet.engine.connector.ServerOutboundWay.onMessageCompleted(ServerOutboundWay.java:174)
>
> at
> org.restlet.engine.connector.HttpServerOutboundWay.onMessageCompleted(HttpServerOutboundWay.java:118)
>
> at
> org.restlet.engine.connector.OutboundWay.processIoBuffer(OutboundWay.java:468)
>
> at org.restlet.engine.connector.Way.onSelected(Way.java:445)
>
> at
> org.restlet.util.SelectionRegistration.onSelected(SelectionRegistration.java:325)
>
> at org.restlet.engine.connector.Connection.onSelected(Connection.java:614)
>
> at
> org.restlet.util.SelectionRegistration.onSelected(SelectionRegistration.java:325)
>
> at
> org.restlet.engine.connector.ConnectionController.onSelected(ConnectionController.java:213)
>
> at
> org.restlet.engine.connector.ServerConnectionController.onSelected(ServerConnectionController.java:99)
>
> at
> org.restlet.engine.connector.ConnectionController.selectKeys(ConnectionController.java:299)
>
> at
> org.restlet.engine.connector.ConnectionController.doRun(ConnectionController.java:167)
>
> at org.restlet.engine.connector.Controller.run(Controller.java:159)
>
> at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
>
> at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
>
> at java.util.concurrent.FutureTask.run(FutureTask.java:166)
>
> at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
>
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
>
> at java.lang.Thread.run(Thread.java:722)
>
> Caused by: java.util.concurrent.TimeoutException
>
> at java.util.concurrent.CyclicBarrier.dowait(CyclicBarrier.java:250)
>
> at java.util.concurrent.CyclicBarrier.await(CyclicBarrier.java:427)
>
> at
> org.restlet.util.SelectionRegistration.block(SelectionRegistration.java:191)
>
> ... 24 more
>
>
>
> Here is my code:
>
>
>
>                 public static void Start(int port)
>
>                 {
>
>                                 Component m_component = new Component();
>
>
> m_component.getServers().add(Protocol.HTTP, port);
>
>                                 m_component.getDefaultHost().attach("/",
> RestAcceptor.class);
>
>
>
>                                 try
>
>                                 {
>
>                                                 m_component.start();
>
>                                 }
>
>                                 catch (Exception ex)
>
>                                 {
>
>                                                 m_logger.error("Error
> starting RestAcceptor! " + ex.getMessage());
>
>                                 }
>
>                 }
>
>
>
>     @SuppressWarnings("unchecked")
>
>     static Series<Header> getMessageHeaders(Message message)
>
>     {
>
>         ConcurrentMap<String, Object> attrs = message.getAttributes();
>
>         Series<Header> headers = (Series<Header>) attrs.get(HEADERS_KEY);
>
>         if (headers == null)
>
>         {
>
>             headers = new Series<Header>(Header.class);
>
>             Series<Header> prev = (Series<Header>)
>
>                 attrs.putIfAbsent(HEADERS_KEY, headers);
>
>             if (prev != null) { headers = prev; }
>
>         }
>
>         return headers;
>
>     }
>
>
>
>     @Get
>
>     public Representation doGet()
>
>     {
>
>         if (getReference().getRemainingPart().equals("favicon.ico"))
>
>             return new FileRepresentation(m_favicon, MediaType.IMAGE_ICON);
>
>
>
>         getMessageHeaders(getResponse()).add("Access-Control-Allow-Origin",
> "*");
>
>
>
>         Map<String, Object> params = getRequest().getAttributes();
>
>         if(params == null)
>
>             params = new ConcurrentHashMap<String, Object>();
>
>         Form form = getReference().getQueryAsForm();
>
>         for (Parameter parameter : form)
>
>         {
>
>             params.put(parameter.getName().toLowerCase(),
> parameter.getValue());
>
>         }
>
>
>
>         // generate and return JSON
>
>         String jsonResult = null;
>
>
>
>         try
>
>         {
>
>             UrlParser.ParsedUrl result = UrlParser.ParseGetUrl(
>
>                     getReference().getPath(), params);
>
>             jsonResult = ProcessResult(result);
>
>         }
>
>         catch(MyException ex)
>
>         {
>
>             m_logger.error("Error while processing GET "
>
>                     + getReference() + " Message: " + ex.getMessage());
>
>             jsonResult = GetErrorMessage(ex.getMessage());
>
>         }
>
>         catch(InterruptedException ex)
>
>         {
>
>             getResponse().setStatus(Status.SERVER_ERROR_INTERNAL);
>
>         }
>
>
>
>         m_logger.info("returning " + jsonResult + " for " +
> getReference().getRemainingPart());
>
>         return new StringRepresentation(jsonResult,
> MediaType.APPLICATION_JSON);
>
>     }
>
>
>
>                 @Post
>
>     public Representation doPost(Representation file)
>
>     {
>
>                                 //some moere code
>
>                 }
>
>
>
>                 @Post("json:json")
>
>     public Representation doPost(JsonRepresentation entity)
>
>     {
>
>                                 //some moere code
>
>                 }
>
>
>
>                 @Delete
>
>     public Representation doDelete()
>
>     {
>
>                                 //some moere code
>
>                 }
>
>
>
>                 @Options
>
>     public void doOptions(Representation entity)
>
>     {
>
>
> getMessageHeaders(getResponse()).add("Access-Control-Allow-Origin", "*");
>
>
> getMessageHeaders(getResponse()).add("Access-Control-Allow-Methods", "GET,
> PUT, POST, DELETE, OPTIONS");
>
>
> getMessageHeaders(getResponse()).add("Access-Control-Allow-Headers",
> "Content-Type");
>
>
> getMessageHeaders(getResponse()).add("Access-Control-Allow-Credentials",
> "false");
>
>         getMessageHeaders(getResponse()).add("Access-Control-Max-Age",
> "60");
>
>     }
>
>
>
>
>
>  Any help appreciated.
>
>  Aliza
>
> ------------------------------
>
> This message is confidential and intended only for the addressee. If you
> have received this message in error, please immediately notify the
> postmas...@nds.com and delete it from your system as well as any copies.
> The content of e-mails as well as traffic data may be monitored by NDS for
> employment and security purposes.
> To protect the environment please do not print this e-mail unless
> necessary.
>
> An NDS Group Limited company. www.nds.com
>

------------------------------------------------------
http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=3043665

Reply via email to