If your client is having trouble connecting to the store, then the problem can possibly be with your client code, with the proxy and its configuration, or with the store. To help determine what might be going wrong, it is useful to have a high level understanding of what happens when your client code is connecting to a store.
First, your client code tries to connect to the
ip:port
pair given for the proxy.
If the connection attempt is not successful, and your client code indicates that the proxy should be automatically started, then:
The client driver will prepare a
command line that starts the proxy on
the local host. This command line
includes the path to the
java
command, the
classpath to the two jar files required
to start the proxy, and the parameters
required to start the proxy and connect
to the store (these include the local
port for the proxy to listen on, and
the store's connection information).
The driver executes the command line. If there is a problem, the driver might be able to provide some relevant error information, depending on the exact nature of the problem.
Upon command execution, the driver waits for a few seconds for the connection to complete. During this time, the proxy will attempt to start. At this point it might indicate a problem with the classpath.
Next, it will check the version of kvclient.jar
and indicate if it is not suited.
After that, it will check the connection parameters, and indicate problems with those, if any.
Then the proxy will actually
connect to the store, using the
helper-hosts
parameter. At this time, it
could report connection errors such as
the store is not available, security
credentials are not available, or
security credentials are incorrect.
Finally, the proxy tries to listen to the indicated port. If there's an error listening to the port (it is already in use by another process, for example), the proxy reports that.
If any errors occur in the previous step, the driver will automatically repeat the entire process again. It will continue to repeat this process until it either successfully obtains a connection, or it runs out of retry attempts.
Ultimately, if the driver cannot successfully create a connection, the driver will return with an error.
If the driver successfully connects to the proxy, it sends a verify message to the proxy. This verify message includes the helper-host list, the store name, the username (if using a secure store), and the readzones if they are being used in the store.
If there is anything wrong with the information in the verify message, the proxy will return an error message. This causes the proxy to check the verify parameters so as to ensure that the driver is connected to the right store.
If there are no errors seen in the verify message, then the connection is established and store operations can be performed.
To obtain the best error information possible when attempting to troubleshoot
a connection problem, start the proxy with the -verbose
command line option. Also, you can enable assertions in the proxy Java code
by using the java -ea
command line option.
Between these two mechanisms, the proxy will provide a great deal of information. To help you analyze it, you can enable logging to a file. To do this:
Start the proxy with the following parameter:
java -cp KVHOME/lib/kvclient.jar:KVPROXY/lib/kvproxy.jar -Djava.util.logging.config.file=logger.properties oracle.kv.proxy.KVProxy -helper-hosts node01:5000 -port 5010 -store mystore -verbose
The file logger.properties
would then contain content
like this:
# Log to file and console handlers = java.util.logging.FileHandler, java.util.logging.ConsoleHandler ## ConsoleHandler ## java.util.logging.ConsoleHandler.level = FINE java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter ## FileHandler ## java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter # Limit the size of the file to x bytes java.util.logging.FileHandler.limit = 100000 # Number of log files to rotate java.util.logging.FileHandler.count = 1 # Location and log file name # %g is the generation number to distinguish rotated logs java.util.logging.FileHandler.pattern = ./kvproxy.%g.log
Configuration parameters control the size and number of rotating log files used (similar to java logging, see java.util.logging.FileHandler). For a rotating set of files, as each file reaches a given size limit, it is closed, rotated out, and a new file is opened. Successively older files are named by adding "0", "1", "2", etc. into the file name.