saros icon indicating copy to clipboard operation
saros copied to clipboard

Saros Server usability

Open m273d15 opened this issue 6 years ago • 5 comments

Even if the saros server is in a very early alpha state it would be useful to have some kind of advice (like a common CLI) if you execute the jar.

If you start the server naively (as I did) with `java -jar --help you run into this long stack trace:

INFO  09:40:30,505 [main] (SarosServer.java:58) Starting server...
INFO  09:40:30,590 [main] (ContainerContext.java:169) initializing context...
Exception in thread "main" java.lang.NullPointerException
	at saros.server.ServerConfig.isInteractive(ServerConfig.java:51)
	at saros.server.ServerContextFactory.addAdditionalComponents(ServerContextFactory.java:95)
	at saros.server.ServerContextFactory.createComponents(ServerContextFactory.java:54)
	at saros.context.ContainerContext.initialize(ContainerContext.java:171)
	at saros.context.AbstractContextLifecycle.start(AbstractContextLifecycle.java:94)
	at saros.server.SarosServer.start(SarosServer.java:32)
	at saros.server.SarosServer.main(SarosServer.java:59)
INFO  09:40:30,639 [Thread-0] (SarosServer.java:53) Stopping server...
Exception in thread "Thread-0" saros.repackaged.picocontainer.injectors.AbstractInjector$UnsatisfiableDependenciesException: saros.session.SarosSessionManager has unsatisfied dependency: interface saros.context.IContainerContext among unsatisfiable dependencies: [[interface saros.context.IContainerContext, class saros.negotiation.NegotiationFactory, class saros.negotiation.hooks.SessionNegotiationHookManager, class saros.net.xmpp.XMPPConnectionService, interface saros.net.ITransmitter, interface saros.net.IReceiver]] where saros.repackaged.picocontainer.DefaultPicoContainer@3b7b6845:41<(empty) was the leaf container being asked for dependencies.
	at saros.repackaged.picocontainer.injectors.ConstructorInjector.getGreediestSatisfiableConstructor(ConstructorInjector.java:188)
	at saros.repackaged.picocontainer.injectors.ConstructorInjector.getGreediestSatisfiableConstructor(ConstructorInjector.java:110)
	at saros.repackaged.picocontainer.injectors.ConstructorInjector.access$100(ConstructorInjector.java:51)
	at saros.repackaged.picocontainer.injectors.ConstructorInjector$1.run(ConstructorInjector.java:308)
	at saros.repackaged.picocontainer.injectors.AbstractInjector$ThreadLocalCyclicDependencyGuard.observe(AbstractInjector.java:268)
	at saros.repackaged.picocontainer.injectors.ConstructorInjector.getComponentInstance(ConstructorInjector.java:341)
	at saros.repackaged.picocontainer.injectors.AbstractInjectionFactory$LifecycleAdapter.getComponentInstance(AbstractInjectionFactory.java:56)
	at saros.repackaged.picocontainer.injectors.CompositeInjector.getComponentInstance(CompositeInjector.java:42)
	at saros.repackaged.picocontainer.injectors.AbstractInjectionFactory$LifecycleAdapter.getComponentInstance(AbstractInjectionFactory.java:56)
	at saros.repackaged.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
	at saros.repackaged.picocontainer.behaviors.Stored.getComponentInstance(Stored.java:91)
	at saros.repackaged.picocontainer.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:691)
	at saros.repackaged.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:645)
	at saros.repackaged.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:670)
	at saros.context.ContainerContext.getComponent(ContainerContext.java:273)
	at saros.server.ServerLifecycle.finalizeContext(ServerLifecycle.java:41)
	at saros.context.AbstractContextLifecycle.stop(AbstractContextLifecycle.java:111)
	at saros.server.SarosServer.stop(SarosServer.java:36)
	at saros.server.SarosServer$1.run(SarosServer.java:54)
	at java.lang.Thread.run(Thread.java:748)

After reading the code of ServerConfig.java I knew that I have to set the property saros.server.interactive in order to avoid the exception.

The command java -Dsaros.server.interactive=yes -jar <jar> leads to the next stack trace and a lot of log messages:

INFO  09:44:09,474 [main] (SarosServer.java:58) Starting server...
INFO  09:44:09,509 [main] (ContainerContext.java:169) initializing context...
DEBUG 09:44:09,586 [main] (XMPPAccountStore.java:146) loading accounts from file: /home/kelvin/.saros/config.dat
Security framework of XStream not initialized, XStream is probably vulnerable.
DEBUG 09:44:10,616 [main] (XMPPAccountStore.java:188) loaded 2 account(s)
DEBUG 09:44:10,748 [main] (DataTransferManager.java:482) used stream service order for the current XMPP connection: [XMPP-Socks5-Stream-Service, XMPP-IBB-Stream-Service]
DEBUG 09:44:10,778 [main] (ContainerContext.java:190) created context component: saros.account.XMPPAccountStore
DEBUG 09:44:10,778 [main] (ContainerContext.java:190) created context component: saros.net.upnp.internal.UPnPAccessImpl
DEBUG 09:44:10,778 [main] (ContainerContext.java:190) created context component: saros.net.upnp.internal.UPnPServiceImpl
DEBUG 09:44:10,779 [main] (ContainerContext.java:190) created context component: saros.net.stun.internal.StunServiceImpl
DEBUG 09:44:10,779 [main] (ContainerContext.java:190) created context component: saros.net.xmpp.XMPPConnectionService
DEBUG 09:44:10,779 [main] (ContainerContext.java:190) created context component: saros.net.DispatchThreadContext
DEBUG 09:44:10,779 [main] (ContainerContext.java:190) created context component: saros.net.internal.XMPPReceiver
DEBUG 09:44:10,779 [main] (ContainerContext.java:190) created context component: saros.net.stream.Socks5StreamService
DEBUG 09:44:10,780 [main] (ContainerContext.java:190) created context component: saros.net.stream.IBBStreamService
DEBUG 09:44:10,780 [main] (ContainerContext.java:190) created context component: saros.net.internal.DataTransferManager
DEBUG 09:44:10,780 [main] (ContainerContext.java:190) created context component: saros.communication.connection.NullProxyResolver
DEBUG 09:44:10,780 [main] (ContainerContext.java:190) created context component: saros.server.preferences.PersistencePreferenceStore
DEBUG 09:44:10,781 [main] (ContainerContext.java:190) created context component: saros.server.preferences.ServerPreferences
DEBUG 09:44:10,781 [main] (ContainerContext.java:190) created context component: saros.communication.connection.ConnectionHandler
DEBUG 09:44:10,781 [main] (ContainerContext.java:190) created context component: java.lang.String
DEBUG 09:44:10,781 [main] (ContainerContext.java:190) created context component: saros.net.internal.XMPPTransmitter
DEBUG 09:44:10,781 [main] (ContainerContext.java:190) created context component: saros.versioning.VersionManager
DEBUG 09:44:10,781 [main] (ContainerContext.java:190) created context component: saros.communication.chat.muc.MultiUserChatService
DEBUG 09:44:10,782 [main] (ContainerContext.java:190) created context component: saros.communication.chat.single.SingleUserChatService
DEBUG 09:44:10,782 [main] (ContainerContext.java:190) created context component: saros.context.ContainerContext
DEBUG 09:44:10,782 [main] (ContainerContext.java:190) created context component: saros.negotiation.hooks.SessionNegotiationHookManager
DEBUG 09:44:10,782 [main] (ContainerContext.java:190) created context component: saros.net.xmpp.roster.RosterTracker
DEBUG 09:44:10,782 [main] (ContainerContext.java:190) created context component: saros.net.xmpp.discovery.DiscoveryManager
DEBUG 09:44:10,783 [main] (ContainerContext.java:190) created context component: saros.observables.FileReplacementInProgressObservable
DEBUG 09:44:10,783 [main] (ContainerContext.java:190) created context component: saros.server.filesystem.ServerWorkspaceImpl
DEBUG 09:44:10,783 [main] (ContainerContext.java:190) created context component: saros.filesystem.NullChecksumCache
DEBUG 09:44:10,783 [main] (ContainerContext.java:190) created context component: saros.negotiation.NegotiationFactory
DEBUG 09:44:10,783 [main] (ContainerContext.java:190) created context component: saros.session.SarosSessionManager
DEBUG 09:44:10,783 [main] (ContainerContext.java:190) created context component: saros.editor.colorstorage.ColorIDSetStorage
DEBUG 09:44:10,784 [main] (ContainerContext.java:190) created context component: saros.session.ColorNegotiationHook
DEBUG 09:44:10,784 [main] (ContainerContext.java:190) created context component: saros.session.ProjectNegotiationTypeHook
DEBUG 09:44:10,784 [main] (ContainerContext.java:190) created context component: saros.net.xmpp.subscription.SubscriptionHandler
DEBUG 09:44:10,784 [main] (ContainerContext.java:190) created context component: saros.server.dummies.NullRemoteProgressIndicatorFactory
DEBUG 09:44:10,784 [main] (ContainerContext.java:190) created context component: saros.monitoring.remote.RemoteProgressManager
DEBUG 09:44:10,784 [main] (ContainerContext.java:190) created context component: saros.concurrent.watchdog.IsInconsistentObservable
DEBUG 09:44:10,784 [main] (ContainerContext.java:190) created context component: saros.server.filesystem.ServerPathFactoryImpl
DEBUG 09:44:10,784 [main] (ContainerContext.java:190) created context component: saros.server.session.ServerSessionContextFactory
DEBUG 09:44:10,785 [main] (ContainerContext.java:190) created context component: saros.server.synchronize.ServerUISynchronizerImpl
DEBUG 09:44:10,785 [main] (ContainerContext.java:190) created context component: saros.server.net.SubscriptionAuthorizer
DEBUG 09:44:10,785 [main] (ContainerContext.java:190) created context component: saros.server.session.NegotiationHandler
DEBUG 09:44:10,785 [main] (ContainerContext.java:190) created context component: saros.server.session.JoinSessionRequestHandler
DEBUG 09:44:10,785 [main] (ContainerContext.java:190) created context component: saros.server.net.ServerFeatureAdvertiser
DEBUG 09:44:10,785 [main] (ContainerContext.java:190) created context component: saros.server.console.ServerConsole
DEBUG 09:44:10,785 [main] (ContainerContext.java:190) created context component: saros.server.console.InviteCommand
DEBUG 09:44:10,786 [main] (ContainerContext.java:190) created context component: saros.server.console.ShareCommand
INFO  09:44:10,786 [main] (ContainerContext.java:197) successfully initialized context
FATAL 09:44:10,786 [main] (ServerLifecycle.java:55) XMPP credentials are missing! Pass the system properties saros.server.jid and saros.server.password to the server
INFO  09:44:10,787 [main] (ContainerContext.java:209) disposing context...
DEBUG 09:44:10,787 [main] (UPnPServiceImpl.java:288) deleting existing port mappings
INFO  09:44:10,788 [main] (ContainerContext.java:213) successfully disposed context
INFO  09:44:10,788 [Thread-0] (SarosServer.java:53) Stopping server...
Exception in thread "Thread-0" java.lang.NullPointerException
	at saros.context.AbstractContextLifecycle.stop(AbstractContextLifecycle.java:117)
	at saros.server.SarosServer.stop(SarosServer.java:36)
	at saros.server.SarosServer$1.run(SarosServer.java:54)
	at java.lang.Thread.run(Thread.java:748)

The log contains the important information, but it is not really easy to find:

FATAL 09:44:10,786 [main] (ServerLifecycle.java:55) XMPP credentials are missing! Pass the system properties saros.server.jid and saros.server.password to the server

m273d15 avatar Jul 09 '19 08:07 m273d15

I would propose to implement a simple CLI, which prints the --help context if not all required information are available (instead of starting the server and using properties).

m273d15 avatar Jul 09 '19 08:07 m273d15

This is partially addressed by #693

Drakulix avatar Sep 19 '19 13:09 Drakulix

How do you got the Server

FelixSelter avatar Jan 08 '20 18:01 FelixSelter

I created #799 to avoid future confusion on how to obtain a Saros server build.

tobous avatar Jan 08 '20 21:01 tobous

Using wrong connection credentials will result in an exception (which luckily shuts the server down).

DEBUG 13:24:54,388 [main] (XMPPConnectionService.java:402) started Socks5 proxy on port: 57346 [listening on all interfaces]
DEBUG 13:24:54,535 [main] (XMPPConnectionService.java:419) using autodetected addresses: [192.168.178.20]
DEBUG 13:24:54,535 [main] (XMPPConnectionService.java:362)  new connection state == CONNECTING
INFO  13:24:54,551 [main] (ServerFeatureAdvertiser.java:40) Starting to advertise ourselves as server
ERROR 13:24:54,604 [main] (XMPPConnectionService.java:364)  new connection state == ERROR
ssaros-con.imp.fu-berlin.de:5222 Exception: Could not connect to ssaros-con.imp.fu-berlin.de:5222.; : remote-server-timeout(504)
  -- caused by: Could not connect to ssaros-con.imp.fu-berlin.de:5222.: remote-server-timeout(504) Could not connect to ssaros-con.imp.fu-berlin.de:5222.
  -- caused by: java.net.UnknownHostException: ssaros-con.imp.fu-berlin.de
	at org.jivesoftware.smack.XMPPConnection.connectUsingConfiguration(XMPPConnection.java:592)
	at org.jivesoftware.smack.XMPPConnection.connect(XMPPConnection.java:1010)
	at saros.net.xmpp.XMPPConnectionService.connect(XMPPConnectionService.java:247)
	at saros.communication.connection.ConnectionHandler.connectXMPPInternal(ConnectionHandler.java:233)
	at saros.communication.connection.ConnectionHandler.connect(ConnectionHandler.java:164)
	at saros.server.ServerLifecycle.connectToXMPPServer(ServerLifecycle.java:76)
	at saros.server.ServerLifecycle.initializeContext(ServerLifecycle.java:33)
	at saros.context.AbstractContextLifecycle.start(AbstractContextLifecycle.java:96)
	at saros.server.SarosServer.start(SarosServer.java:33)
	at saros.server.SarosServer.main(SarosServer.java:59)
Nested Exception: 
Could not connect to ssaros-con.imp.fu-berlin.de:5222.: remote-server-timeout(504) Could not connect to ssaros-con.imp.fu-berlin.de:5222.
  -- caused by: java.net.UnknownHostException: ssaros-con.imp.fu-berlin.de
	at org.jivesoftware.smack.XMPPConnection.connectUsingConfiguration(XMPPConnection.java:561)
	at org.jivesoftware.smack.XMPPConnection.connect(XMPPConnection.java:1010)
	at saros.net.xmpp.XMPPConnectionService.connect(XMPPConnectionService.java:247)
	at saros.communication.connection.ConnectionHandler.connectXMPPInternal(ConnectionHandler.java:233)
	at saros.communication.connection.ConnectionHandler.connect(ConnectionHandler.java:164)
	at saros.server.ServerLifecycle.connectToXMPPServer(ServerLifecycle.java:76)
	at saros.server.ServerLifecycle.initializeContext(ServerLifecycle.java:33)
	at saros.context.AbstractContextLifecycle.start(AbstractContextLifecycle.java:96)
	at saros.server.SarosServer.start(SarosServer.java:33)
	at saros.server.SarosServer.main(SarosServer.java:59)
Nested Exception: 
java.net.UnknownHostException: ssaros-con.imp.fu-berlin.de
	at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
	at java.net.PlainSocketImpl.connect(Unknown Source)
	at java.net.Socket.connect(Unknown Source)
	at java.net.Socket.connect(Unknown Source)
	at org.jivesoftware.smack.proxy.DirectSocketFactory.createSocket(DirectSocketFactory.java:45)
	at org.jivesoftware.smack.XMPPConnection.connectUsingConfiguration(XMPPConnection.java:557)
	at org.jivesoftware.smack.XMPPConnection.connect(XMPPConnection.java:1010)
	at saros.net.xmpp.XMPPConnectionService.connect(XMPPConnectionService.java:247)
	at saros.communication.connection.ConnectionHandler.connectXMPPInternal(ConnectionHandler.java:233)
	at saros.communication.connection.ConnectionHandler.connect(ConnectionHandler.java:164)
	at saros.server.ServerLifecycle.connectToXMPPServer(ServerLifecycle.java:76)
	at saros.server.ServerLifecycle.initializeContext(ServerLifecycle.java:33)
	at saros.context.AbstractContextLifecycle.start(AbstractContextLifecycle.java:96)
	at saros.server.SarosServer.start(SarosServer.java:33)
	at saros.server.SarosServer.main(SarosServer.java:59)
DEBUG 13:24:54,604 [main] (XMPPConnectionService.java:362)  new connection state == NOT_CONNECTED
DEBUG 13:24:54,604 [saros-XMPPContactService-ContactsThread] (XMPPContactsService.java:449) updated null - NOT_CONNECTED
Exception in thread "main" java.lang.NullPointerException
	at java.util.concurrent.ConcurrentHashMap.putVal(Unknown Source)
	at java.util.concurrent.ConcurrentHashMap.put(Unknown Source)
	at saros.session.internal.SarosSession.<init>(SarosSession.java:1081)
	at saros.session.internal.SarosSession.<init>(SarosSession.java:229)
	at saros.session.SarosSessionManager.startSession(SarosSessionManager.java:264)
	at saros.server.ServerLifecycle.initializeContext(ServerLifecycle.java:36)
	at saros.context.AbstractContextLifecycle.start(AbstractContextLifecycle.java:96)
	at saros.server.SarosServer.start(SarosServer.java:33)
	at saros.server.SarosServer.main(SarosServer.java:59)
INFO  13:25:24,620 [Thread-0] (SarosServer.java:37) Stopping server...
INFO  13:25:24,626 [Thread-0] (ContainerContext.java:209) disposing context...
DEBUG 13:25:24,626 [Thread-0] (UPnPServiceImpl.java:345) deleting all existing port mappings..
INFO  13:25:24,626 [Thread-0] (ContainerContext.java:213) successfully disposed context

srossbach avatar Feb 05 '20 12:02 srossbach