DefaultFtpStatistics throws NullPointerException when account login repeatdly
-----------------------------------------------------------------------------

                 Key: FTPSERVER-290
                 URL: https://issues.apache.org/jira/browse/FTPSERVER-290
             Project: FtpServer
          Issue Type: Bug
          Components: Core
    Affects Versions: 1.0.0
         Environment: Linux RedHat EL 2.6.9-42.ELsmp
            Reporter: Ulysses Lee


 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 [[email protected]] 
[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() {
                                testUpload("user", "pass", f);
                        }
                }.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 (flag) {
                        System.out.println("success! cost:<" + 
(System.currentTimeMillis() - starttime)
                                                + " ms>");
                } else {
                        System.out.println("fail! cost:<" + 
(System.currentTimeMillis() - starttime)
                                                + " ms>");
                }

                ftp.logout();
        } catch (IOException e) {
                e.printStackTrace();
        } finally {
                if (ftp.isConnected()) {
                        try {
                                ftp.disconnect();
                        } catch (IOException ioe) {
                        }
                }
        }

}

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to