com.cenqua.fisheye.rep.DbException: User named "djdch" already exists.

Atlassian JIRA | Tom Davies [Atlassian] | 5 years ago
  1. 0

    If a user logs in with a username containing upper case characters, but the external auth system is case independent, they may get an error like: com.cenqua.fisheye.rep.DbException: User named "djdch" already exists. at com.cenqua.fisheye.user.DefaultUserManager$19.write(DefaultUserManager.java:1251) at com.cenqua.fisheye.user.DefaultUserManager$19.write(DefaultUserManager.java:1245) at com.cenqua.fisheye.config.DB0Handle.write(DB0Handle.java:96) at com.cenqua.fisheye.user.DefaultUserManager.addUserImpl(DefaultUserManager.java:1245) at com.cenqua.fisheye.user.DefaultUserManager.importUser(DefaultUserManager.java:634) at com.cenqua.fisheye.user.DefaultUserManager.getOrImportUser(DefaultUserManager.java:614) at com.cenqua.fisheye.user.DefaultUserManager.loginWithSanitizedUserName(DefaultUserManager.java:432) at com.cenqua.fisheye.user.DefaultUserManager.login(DefaultUserManager.java:407) at sun.reflect.GeneratedMethodAccessor412.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:196) at $Proxy40.login(Unknown Source) at com.cenqua.fisheye.web.LoginServlet.login(LoginServlet.java:108) when they login. This is because the initial check to see if the user exists uses the mixed case name, and FeCru is case sensitive, but the name used to create the user is that returned by the external auth, which is mapped to lower case. We should always use the name provided by the user to create the local user, not the name returned by the external auth system, or should always map user names to lower case when external auth is used (which would probably not be backward compatible).

    Atlassian JIRA | 5 years ago | Tom Davies [Atlassian]
    com.cenqua.fisheye.rep.DbException: User named "djdch" already exists.
  2. 0

    If a user logs in with a username containing upper case characters, but the external auth system is case independent, they may get an error like: com.cenqua.fisheye.rep.DbException: User named "djdch" already exists. at com.cenqua.fisheye.user.DefaultUserManager$19.write(DefaultUserManager.java:1251) at com.cenqua.fisheye.user.DefaultUserManager$19.write(DefaultUserManager.java:1245) at com.cenqua.fisheye.config.DB0Handle.write(DB0Handle.java:96) at com.cenqua.fisheye.user.DefaultUserManager.addUserImpl(DefaultUserManager.java:1245) at com.cenqua.fisheye.user.DefaultUserManager.importUser(DefaultUserManager.java:634) at com.cenqua.fisheye.user.DefaultUserManager.getOrImportUser(DefaultUserManager.java:614) at com.cenqua.fisheye.user.DefaultUserManager.loginWithSanitizedUserName(DefaultUserManager.java:432) at com.cenqua.fisheye.user.DefaultUserManager.login(DefaultUserManager.java:407) at sun.reflect.GeneratedMethodAccessor412.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:196) at $Proxy40.login(Unknown Source) at com.cenqua.fisheye.web.LoginServlet.login(LoginServlet.java:108) when they login. This is because the initial check to see if the user exists uses the mixed case name, and FeCru is case sensitive, but the name used to create the user is that returned by the external auth, which is mapped to lower case. We should always use the name provided by the user to create the local user, not the name returned by the external auth system, or should always map user names to lower case when external auth is used (which would probably not be backward compatible).

    Atlassian JIRA | 5 years ago | Tom Davies [Atlassian]
    com.cenqua.fisheye.rep.DbException: User named "djdch" already exists.
  3. 0

    There are at least 2 issues with the DefaultUserManager used in FishEye/Crucible regarding thread safety. The first one has been seen in practice, the second one however has not. h3. importUser race condition It is possible that 2 threads can enter any of the getOrImportXXX methods that do an upfront check for the existence of a User. If the user doesn't exist, then the user is imported. It is possible for 2 threads to both try and import a user, where both see the user doesn't exist first, then 1 will fail if it loses the race to create the user. Seen in studio: {code} 012-04-02 00:07:11,980 INFO [btpool0-4 ] fisheye.app DefaultUserManager-importUser - auto-import user: "mlandis@5amsolutions.com" 2012-04-02 00:07:11,982 INFO [btpool0-7 ] fisheye.app DefaultUserManager-importUser - auto-import user: "mlandis@5amsolutions.com" 2012-04-02 00:07:12,067 INFO [btpool0-9 ] fisheye.app DefaultUserManager-importUser - auto-import user: "mlandis@5amsolutions.com" 2012-04-02 00:07:12,089 WARN [btpool0-7 ] fisheye.app UserDetector-tryRequestDelegatedLogin - problem logging user delegated com.cenqua.fisheye.rep.DbException: User named "mlandis@5amsolutions.com" already exists. at com.cenqua.fisheye.user.DefaultUserManager$19.write(DefaultUserManager.java:1251) at com.cenqua.fisheye.user.DefaultUserManager$19.write(DefaultUserManager.java:1245) at com.cenqua.fisheye.config.DB0Handle.write(DB0Handle.java:96) at com.cenqua.fisheye.user.DefaultUserManager.addUserImpl(DefaultUserManager.java:1245) at com.cenqua.fisheye.user.DefaultUserManager.importUser(DefaultUserManager.java:634) at com.cenqua.fisheye.user.DefaultUserManager.getOrImportDelegatedUser(DefaultUserManager.java:594) at com.cenqua.fisheye.user.DefaultUserManager.tryRequestDelegatedLogin(DefaultUserManager.java:762) {code} h3. the mAuth member variable is not protected from multiple threads It is possible for the importUser() method to see a null mAuth member variable if the reload method is called during the import of a user.

    Atlassian JIRA | 5 years ago | Nick Pellow [Atlassian]
    com.cenqua.fisheye.rep.DbException: User named "mlandis@5amsolutions.com" already exists.
  4. Speed up your debug routine!

    Automated exception search integrated into your IDE

  5. 0

    There are at least 2 issues with the DefaultUserManager used in FishEye/Crucible regarding thread safety. The first one has been seen in practice, the second one however has not. h3. importUser race condition It is possible that 2 threads can enter any of the getOrImportXXX methods that do an upfront check for the existence of a User. If the user doesn't exist, then the user is imported. It is possible for 2 threads to both try and import a user, where both see the user doesn't exist first, then 1 will fail if it loses the race to create the user. Seen in studio: {code} 012-04-02 00:07:11,980 INFO [btpool0-4 ] fisheye.app DefaultUserManager-importUser - auto-import user: "mlandis@5amsolutions.com" 2012-04-02 00:07:11,982 INFO [btpool0-7 ] fisheye.app DefaultUserManager-importUser - auto-import user: "mlandis@5amsolutions.com" 2012-04-02 00:07:12,067 INFO [btpool0-9 ] fisheye.app DefaultUserManager-importUser - auto-import user: "mlandis@5amsolutions.com" 2012-04-02 00:07:12,089 WARN [btpool0-7 ] fisheye.app UserDetector-tryRequestDelegatedLogin - problem logging user delegated com.cenqua.fisheye.rep.DbException: User named "mlandis@5amsolutions.com" already exists. at com.cenqua.fisheye.user.DefaultUserManager$19.write(DefaultUserManager.java:1251) at com.cenqua.fisheye.user.DefaultUserManager$19.write(DefaultUserManager.java:1245) at com.cenqua.fisheye.config.DB0Handle.write(DB0Handle.java:96) at com.cenqua.fisheye.user.DefaultUserManager.addUserImpl(DefaultUserManager.java:1245) at com.cenqua.fisheye.user.DefaultUserManager.importUser(DefaultUserManager.java:634) at com.cenqua.fisheye.user.DefaultUserManager.getOrImportDelegatedUser(DefaultUserManager.java:594) at com.cenqua.fisheye.user.DefaultUserManager.tryRequestDelegatedLogin(DefaultUserManager.java:762) {code} h3. the mAuth member variable is not protected from multiple threads It is possible for the importUser() method to see a null mAuth member variable if the reload method is called during the import of a user.

    Atlassian JIRA | 5 years ago | Nick Pellow [Atlassian]
    com.cenqua.fisheye.rep.DbException: User named "mlandis@5amsolutions.com" already exists.

    Not finding the right solution?
    Take a tour to get the most out of Samebug.

    Tired of useless tips?

    Automated exception search integrated into your IDE

    Root Cause Analysis

    1. com.cenqua.fisheye.rep.DbException

      User named "djdch" already exists.

      at com.cenqua.fisheye.user.DefaultUserManager$19.write()
    2. com.cenqua.fisheye
      DefaultUserManager.login
      1. com.cenqua.fisheye.user.DefaultUserManager$19.write(DefaultUserManager.java:1251)
      2. com.cenqua.fisheye.user.DefaultUserManager$19.write(DefaultUserManager.java:1245)
      3. com.cenqua.fisheye.config.DB0Handle.write(DB0Handle.java:96)
      4. com.cenqua.fisheye.user.DefaultUserManager.addUserImpl(DefaultUserManager.java:1245)
      5. com.cenqua.fisheye.user.DefaultUserManager.importUser(DefaultUserManager.java:634)
      6. com.cenqua.fisheye.user.DefaultUserManager.getOrImportUser(DefaultUserManager.java:614)
      7. com.cenqua.fisheye.user.DefaultUserManager.loginWithSanitizedUserName(DefaultUserManager.java:432)
      8. com.cenqua.fisheye.user.DefaultUserManager.login(DefaultUserManager.java:407)
      8 frames
    3. Java RT
      Method.invoke
      1. sun.reflect.GeneratedMethodAccessor412.invoke(Unknown Source)
      2. sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
      3. java.lang.reflect.Method.invoke(Unknown Source)
      3 frames
    4. Spring AOP
      JdkDynamicAopProxy.invoke
      1. org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309)
      2. org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:196)
      2 frames
    5. Unknown
      $Proxy40.login
      1. $Proxy40.login(Unknown Source)
      1 frame
    6. com.cenqua.fisheye
      LoginServlet.login
      1. com.cenqua.fisheye.web.LoginServlet.login(LoginServlet.java:108)
      1 frame