[JAVA-577] It's not possible to shutdown database from Java Created: 30/May/12  Updated: 30/May/12  Resolved: 30/May/12

Status: Closed
Project: Java Driver
Component/s: None
Affects Version/s: 2.7.2, 2.7.3
Fix Version/s: None

Type: Bug Priority: Major - P3
Reporter: Martin Suska Assignee: Jeffrey Yemin
Resolution: Duplicate Votes: 0
Labels: Windows, commands, connection, driver
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified
Environment:

Windows 7 64bit, Java 6


Issue Links:
Duplicate
duplicates JAVA-249 Java Driver cannot connect to 'localh... Closed

 Description   

When I try to shutdown mongodb using this java code:

final MongoURI uri = new MongoURI( "mongodb://localhost:16162" );
final Mongo m = new Mongo( uri );
final DB db = m.getDB( "admin" );
final CommandResult command = db.command( new BasicDBObject( "shutdown", 1 ) );
System.out.println( command );

Last command prints:

{ "serverUsed" : "localhost:16162" , "errmsg" : "unauthorized: this command must run from localhost when running db without auth" , "ok" : 0.0}

But as you can see I'm running it from localhost.



 Comments   
Comment by Jeffrey Yemin [ 30/May/12 ]

Resolving as duplicate of JAVA-249

Comment by Martin Suska [ 30/May/12 ]

I confirm that shutdown works on Windows too. And localhost works with 2.8.0 driver. Thanks for your help.

Comment by Jeffrey Yemin [ 30/May/12 ]

127.0.0.1 works with version 2.7.3 on a Mac, and localhost works with version 2.8.0-RC1 (released yesterday). In both cases, I get the same exception as you did, but the shutdown actually works. I think the exception is occurring because the server actually executes shutdown synchronously, so the socket is closed. The Java driver doesn't special case the shutdown command, so it reports an error.

Comment by Martin Suska [ 30/May/12 ]

127.0.0.1 doesn't work too, see below.

But I have no problem to connect to mongoDB from Java, this code works fine:

final MongoURI uri = new MongoURI( "mongodb://localhost:16162" );
final Mongo m = new Mongo( uri );
final DB db = m.getDB( "test" );
System.out.println( db.getCollectionNames().toString() );

When I tried 127.0.0.1, I got exception:

30.5.2012 13:35:35 com.mongodb.DBPortPool gotError
WARNING: emptying DBPortPool to 127.0.0.1:16162 b/c of error
java.io.EOFException
	at org.bson.io.Bits.readFully(Bits.java:37)
	at org.bson.io.Bits.readFully(Bits.java:28)
	at com.mongodb.Response.<init>(Response.java:39)
	at com.mongodb.DBPort.go(DBPort.java:128)
	at com.mongodb.DBPort.call(DBPort.java:79)
	at com.mongodb.DBTCPConnector.call(DBTCPConnector.java:218)
	at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:305)
	at com.mongodb.DB.command(DB.java:160)
	at com.mongodb.DB.command(DB.java:183)
	at com.mongodb.DB.command(DB.java:144)
	at mongotest.stop(MongoDAOTest.java:64)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:36)
	at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:82)
	at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72)
	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:240)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:180)
	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

Next I tried to use --bind_ip with value 127.0.0.1 it didn't help, but now I not able to connect to DB with the code specified above, I'm getting exception

com.mongodb.MongoException$Network: can't call something : /127.0.0.1:16162/test
	at com.mongodb.DBTCPConnector.call(DBTCPConnector.java:227)
	at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:305)
	at com.mongodb.DB.getCollectionNames(DB.java:284)
	at mongotest.MongoDAOTest.testConfiguration(MongoDAOTest.java:76)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
	at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74)
	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:30)
	at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:82)
	at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72)
	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:240)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:180)
	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.io.IOException: couldn't connect to [/127.0.0.1:16162] bc:java.net.ConnectException: Connection refused: connect
	at com.mongodb.DBPort._open(DBPort.java:228)
	at com.mongodb.DBPort.go(DBPort.java:112)
	at com.mongodb.DBPort.call(DBPort.java:79)
	at com.mongodb.DBTCPConnector.call(DBTCPConnector.java:218)
	... 33 more
 
com.mongodb.MongoException$Network: can't call something : /127.0.0.1:16162/admin
	at com.mongodb.DBTCPConnector.call(DBTCPConnector.java:227)
	at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:305)
	at com.mongodb.DB.command(DB.java:160)
	at com.mongodb.DB.command(DB.java:183)
	at com.mongodb.DB.command(DB.java:144)
	at mongotest.MongoDAOTest.stop(MongoDAOTest.java:64)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:36)
	at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:82)
	at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72)
	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:240)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:180)
	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.io.IOException: couldn't connect to [/127.0.0.1:16162] bc:java.net.ConnectException: Connection refused: connect
	at com.mongodb.DBPort._open(DBPort.java:228)
	at com.mongodb.DBPort.go(DBPort.java:112)
	at com.mongodb.DBPort.call(DBPort.java:79)
	at com.mongodb.DBTCPConnector.call(DBTCPConnector.java:218)
	... 32 more

Comment by Scott Hernandez (Inactive) [ 30/May/12 ]

If you use 127.0.0.1 does it work?

I believe your system is returning something other than 127.0.0.1 when connecting. See JAVA-249

Generated at Thu Feb 08 08:52:36 UTC 2024 using Jira 9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66.