You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@geode.apache.org by "Jinmei Liao (JIRA)" <ji...@apache.org> on 2016/11/14 19:39:59 UTC

[jira] [Comment Edited] (GEODE-1247) Unable to stop members by name when using gfsh over http

    [ https://issues.apache.org/jira/browse/GEODE-1247?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15664801#comment-15664801 ] 

Jinmei Liao edited comment on GEODE-1247 at 11/14/16 7:39 PM:
--------------------------------------------------------------

The problem occurs when we use the --name option, the command tries to issue a query over http first to find out the server mBean, It's the query that chokes up. Here is a simple test that reproduce this issue:

<code>
public class QueryNamesOverHttpDUnitTest {
  protected static int[] ports = AvailablePortHelper.getRandomAvailableTCPPorts(2);
  protected static int jmxPort = ports[0];
  protected static int httpPort = ports[1];

  private static Properties locatorProps = new Properties(){{
      setProperty(HTTP_SERVICE_BIND_ADDRESS, "localhost");
      setProperty(HTTP_SERVICE_PORT, httpPort+"");
      setProperty(JMX_MANAGER_PORT, jmxPort+"");
  }};

  @Rule
  public LocatorStarterRule locatorRule = new LocatorStarterRule(locatorProps);


  @Test
  public void testQueryNameOverHttp() throws Exception{

    LinkIndex links = new LinkIndex();
    links.add(new Link("mbean-query", new URI("http://localhost:"+httpPort+"/gemfire/v1/mbean/query"),
        HttpMethod.POST));
    RestHttpOperationInvoker invoker = new RestHttpOperationInvoker(links, mock(Gfsh.class), new HashMap<>());

    ObjectName objectName = ObjectName.getInstance("GemFire:type=Member,*");
    QueryExp query = Query.eq(Query.attr("Name"), Query.value("mock"));

    invoker.queryNames(objectName, query);
  }
}
</code>


was (Author: jinmeiliao):
The problem occurs when we use the --name option, the command tries to issue a query over http first to find out the server mBean, It's the query that chokes up. Here is a simple test that reproduce this issue:

public class QueryNamesOverHttpDUnitTest {
  protected static int[] ports = AvailablePortHelper.getRandomAvailableTCPPorts(2);
  protected static int jmxPort = ports[0];
  protected static int httpPort = ports[1];

  private static Properties locatorProps = new Properties(){{
      setProperty(HTTP_SERVICE_BIND_ADDRESS, "localhost");
      setProperty(HTTP_SERVICE_PORT, httpPort+"");
      setProperty(JMX_MANAGER_PORT, jmxPort+"");
  }};

  @Rule
  public LocatorStarterRule locatorRule = new LocatorStarterRule(locatorProps);


  @Test
  public void testQueryNameOverHttp() throws Exception{

    LinkIndex links = new LinkIndex();
    links.add(new Link("mbean-query", new URI("http://localhost:"+httpPort+"/gemfire/v1/mbean/query"),
        HttpMethod.POST));
    RestHttpOperationInvoker invoker = new RestHttpOperationInvoker(links, mock(Gfsh.class), new HashMap<>());

    ObjectName objectName = ObjectName.getInstance("GemFire:type=Member,*");
    QueryExp query = Query.eq(Query.attr("Name"), Query.value("mock"));

    invoker.queryNames(objectName, query);
  }
}

> Unable to stop members by name when using gfsh over http
> --------------------------------------------------------
>
>                 Key: GEODE-1247
>                 URL: https://issues.apache.org/jira/browse/GEODE-1247
>             Project: Geode
>          Issue Type: Bug
>          Components: gfsh, rest (admin)
>            Reporter: Jens Deppe
>
> I'm connecting to my cluster with http:
> {noformat}
> gfsh>connect --use-http=true --url=http://localhost:7070/gemfire/v1
> {noformat}
> And creating a server...
> {noformat}
> gfsh>start server --name=server1
> Starting a GemFire Server in /Users/jdeppe/debug/server1...
> .....
> Server in /Users/jdeppe/debug/server1 on 192.168.99.1[40404] as server1 is currently online.
> Process ID: 97639
> Uptime: 2 seconds
> GemFire Version: 1.0.0-incubating.M3-SNAPSHOT
> Java Version: 1.8.0_77
> Log File: /Users/jdeppe/debug/server1/server1.log
> JVM Arguments: -Dgemfire.default.locators=192.168.99.1[19991] -Dgemfire.use-cluster-configuration=true -XX:OnOutOfMemoryError=kill -KILL %p -Dgemfire.launcher.registerSignalHandlers=true -Djava.awt.headless=true -Dsun.rmi.dgc.server.gcInterval=9223372036854775806
> Class-Path: /Users/jdeppe/git/gemfire-develop/open/geode-assembly/build/install/apache-geode/lib/geode-core-1.0.0-incubating.M3-SNAPSHOT.jar:/Users/jdeppe/git/gemfire-develop/open/geode-assembly/build/install/apache-geode/lib/geode-dependencies.jar
> gfsh>list members;
>   Name   | Id
> -------- | -------------------------------------------------
> locator1 | 192.168.99.1(locator1:97595:locator)<ec><v0>:1024
> server1  | 192.168.99.1(server1:97639)<ec><v1>:1025
> {noformat}
> But cannot stop it...
> {noformat}
> gfsh>stop server --name=server1
> An error occurred while attempting to stop a Cache Server: The HTTP request failed with: 500 - Server Error
> {noformat}
> The locator log shows this error:
> {noformat}
> [severe 2016/04/18 13:54:49.754 PDT locator1 <qtp1114452860-66> tid=0x42] org.springframework.http.converter.HttpMessageNotReadableException: Could not read document: invalid stream header: 7B226F62; nested exception is java.io.StreamCorruptedException: invalid stream header: 7B226F62
>         at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:227)
>         at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:147)
>         at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:125)
>         at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:78)
>         at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:162)
>         at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:129)
>         at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
>         at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:814)
>         at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:737)
>         at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
>         at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
>         at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
>         at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:969)
>         at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:871)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
>         at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:845)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
>         at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:821)
>         at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1685)
>         at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:87)
>         at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
>         at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1668)
>         at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:581)
>         at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
>         at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548)
>         at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226)
>         at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1158)
>         at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:511)
>         at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
>         at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1090)
>         at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
>         at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:109)
>         at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:119)
>         at org.eclipse.jetty.server.Server.handle(Server.java:517)
>         at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:308)
>         at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:242)
>         at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:261)
>         at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95)
>         at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:75)
>         at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceAndRun(ExecuteProduceConsume.java:213)
>         at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:147)
>         at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:654)
>         at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:572)
>         at java.lang.Thread.run(Thread.java:745)
>   Caused by: java.io.StreamCorruptedException: invalid stream header: 7B226F62
>         at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:806)
>         at java.io.ObjectInputStream.<init>(ObjectInputStream.java:299)
>         at com.gemstone.gemfire.internal.util.IOUtils$ClassLoaderObjectInputStream.<init>(IOUtils.java:327)
>         at com.gemstone.gemfire.internal.util.IOUtils.deserializeObject(IOUtils.java:165)
>         at com.gemstone.gemfire.management.internal.web.http.converter.SerializableObjectHttpMessageConverter.readInternal(SerializableObjectHttpMessageConverter.java:80)
>         at com.gemstone.gemfire.management.internal.web.http.converter.SerializableObjectHttpMessageConverter.readInternal(SerializableObjectHttpMessageConverter.java:46)
>         at org.springframework.http.converter.AbstractHttpMessageConverter.read(AbstractHttpMessageConverter.java:161)
>         at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:214)
>         ... 43 more
> {noformat}
> -In fact there is not even a REST endpoint to stop members-



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)