Details
-
Bug
-
Status: Open
-
Minor
-
Resolution: Unresolved
-
1.0.0
-
None
-
None
-
Linux RedHat EL 2.6.9-42.ELsmp
Description
When I write a Testcase to make a proformance test for Apache ftp server,
and I only use ONE ftp account in many threads to upload different files, then after about 10 users loged in,
it throws exception:
[2009-04-14 09:30:52,973] [WARN ] DefaultFtpHandler [t001@bbapp.net] [125.88.130.8] - RequestHandler.service()
java.lang.NullPointerException
at java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:768)
at org.apache.ftpserver.impl.DefaultFtpStatistics$UserLogins.loginsFromInetAddress(DefaultFtpStatistics.java:90)
at org.apache.ftpserver.impl.DefaultFtpStatistics.getCurrentUserLoginNumber(DefaultFtpStatistics.java:259)
at org.apache.ftpserver.command.impl.USER.execute(USER.java:152)
at org.apache.ftpserver.impl.DefaultFtpHandler.messageReceived(DefaultFtpHandler.java:169)
at org.apache.ftpserver.listener.nio.FtpHandlerAdapter.messageReceived(FtpHandlerAdapter.java:65)
most likey a thread lock problem?
My test case used Apache NET lib with FTP, it like:
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
public static void main(String[] args) {
starttime = System.currentTimeMillis();
final File f = new File("F:/WorkSpace/Hermes/Hermes.jar");
for (int i = 0; i < 300; i++) {
final int j = i;
new Thread() {
public void run()
}.start();
}
}
public static void testUpload(String username, String password, File localFile) {
FTPClient ftp = new FTPClient();
try {
ftp.connect(server, port);
System.out.println("Connected to " + server + ".");
ftp.login(username, password);
int reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply))
{ ftp.disconnect(); System.err.println("FTP server refused connection."); System.exit(1); } ftp.setFileType(FTP.BINARY_FILE_TYPE);
ftp.enterLocalActiveMode();
ftp.setFileTransferMode(FTP.STREAM_TRANSFER_MODE);
InputStream input = new FileInputStream(localFile);
BufferedInputStream bin = new BufferedInputStream(input);
boolean flag = ftp.storeFile(localFile.getName(), bin);
if
{ System.out.println("success! cost:<" + (System.currentTimeMillis() - starttime) + " ms>"); }else
{ System.out.println("fail! cost:<" + (System.currentTimeMillis() - starttime) + " ms>"); } ftp.logout();
} catch (IOException e)
finally {
if (ftp.isConnected()) {
try
catch (IOException ioe) {
}
}
}
}