StringBuilder is not thread-safe; switch to StringBuffer

XMLWordPrintable

    • Type: Improvement
    • Resolution: Fixed
    • Priority: Minor
    • 4.14.2, 5.11.3
    • Affects Version/s: None
    • Component/s: None
    • None

      See https://stackoverflow.com/a/12845668

      Getting occasional random stack traces while running a provisioner:

      provisionerClass: GrouperGoogleProvisioner, configId: bConnected, provisioningType: fullProvisionFull, state: retrieveIndividualEntitiesIfNeeded, retrieveSyncGroupsMillis: 2, syncGroupCount: 0, retrieveSyncEntitiesMillis: 3, syncEntityCount: 0, retrieveSyncMshipsMillis: 3, syncMshipCount: 0, propagateProvisioningAttributes_millis: 85, retrieveGrouperGroupsMillis: 1, grouperGroupCount: 2, retrieveGrouperEntitiesMillis: 3, grouperEntityCount: 24, retrieveGrouperMshipsMillis: 2, grouperMshipCount: 32, retrieveDataPass1_millis: 51, grouperGroupsRetrieved: 2, grouperEntitiesRetrieved: 24, grouperMembershipsRetrieved: 32, exception: java.lang.ArrayIndexOutOfBoundsException: arraycopy: last destination index 1427 out of bounds for byte[1425],
      Problem in job: retrieveEntity_bConnected_v8jqkb5m
      	at java.base/java.lang.System.arraycopy(Native Method)
      	at java.base/java.lang.String.getBytes(String.java:4479)
      	at java.base/java.lang.AbstractStringBuilder.putStringAt(AbstractStringBuilder.java:1720)
      	at java.base/java.lang.AbstractStringBuilder.putStringAt(AbstractStringBuilder.java:1724)
      	at java.base/java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:583)
      	at java.base/java.lang.StringBuilder.append(StringBuilder.java:179)
      	at edu.internet2.middleware.grouper.app.provisioning.GrouperProvisioningLogCommands.infoLog(GrouperProvisioningLogCommands.java:42)
      	at edu.internet2.middleware.grouper.app.provisioning.targetDao.GrouperProvisionerTargetDaoAdapter.commandLogFinallyBlock(GrouperProvisionerTargetDaoAdapter.java:164)
      	at edu.internet2.middleware.grouper.app.provisioning.targetDao.GrouperProvisionerTargetDaoAdapter.retrieveEntityHelper(GrouperProvisionerTargetDaoAdapter.java:2883)
      	at edu.internet2.middleware.grouper.app.provisioning.targetDao.GrouperProvisionerTargetDaoAdapter$20.callLogic(GrouperProvisionerTargetDaoAdapter.java:2654)
      	at edu.internet2.middleware.grouper.app.provisioning.targetDao.GrouperProvisionerTargetDaoAdapter$20.callLogic(GrouperProvisionerTargetDaoAdapter.java:2645)
      	at edu.internet2.middleware.grouper.util.GrouperCallable$1.callback(GrouperCallable.java:205)
      	at edu.internet2.middleware.grouper.GrouperSession.callbackGrouperSession(GrouperSession.java:1063)
      	at edu.internet2.middleware.grouper.util.GrouperCallable.callLogicWithSessionIfExists(GrouperCallable.java:202)
      	at edu.internet2.middleware.grouper.util.GrouperCallable.call(GrouperCallable.java:167)
      	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
      	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
      	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
      	at java.base/java.lang.Thread.run(Thread.java:840)
      , finalLog: true, queryCount: 61, tookMillis: 1391, took: 00:00:01.391
      	at edu.internet2.middleware.grouper.app.provisioning.GrouperProvisioner.provisionFinallyBlock(GrouperProvisioner.java:968)
      	at edu.internet2.middleware.grouper.app.provisioning.GrouperProvisioner.provision(GrouperProvisioner.java:887)
      	at edu.internet2.middleware.grouper.app.provisioning.GrouperProvisioningFullSyncJob.runFullSync(GrouperProvisioningFullSyncJob.java:56)
      	at edu.internet2.middleware.grouper.app.provisioning.GrouperProvisioningFullSyncJob$1.callback(GrouperProvisioningFullSyncJob.java:30)
      	at edu.internet2.middleware.grouper.GrouperSession.callbackGrouperSession(GrouperSession.java:1063)
      	at edu.internet2.middleware.grouper.GrouperSession.internal_callbackRootGrouperSession(GrouperSession.java:1132)
      	at edu.internet2.middleware.grouper.GrouperSession.internal_callbackRootGrouperSession(GrouperSession.java:1099)
      	at edu.internet2.middleware.grouper.app.provisioning.GrouperProvisioningFullSyncJob.run(GrouperProvisioningFullSyncJob.java:19)
      	at edu.internet2.middleware.grouper.app.loader.OtherJobBase$2.callback(OtherJobBase.java:441)
      	at edu.internet2.middleware.grouper.GrouperSession.callbackGrouperSession(GrouperSession.java:1063)
      	at edu.internet2.middleware.grouper.GrouperSession.internal_callbackRootGrouperSession(GrouperSession.java:1132)
      	at edu.internet2.middleware.grouper.GrouperSession.internal_callbackRootGrouperSession(GrouperSession.java:1099)
      	at edu.internet2.middleware.grouper.app.loader.OtherJobBase.execute(OtherJobBase.java:394)
      	at edu.internet2.middleware.grouper.app.loader.OtherJobBase.execute(OtherJobBase.java:378)
      	at edu.internet2.middleware.grouper.app.loader.GrouperDaemonJob.execute(GrouperDaemonJob.java:57)
      	at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
      	at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)
      

            Assignee:
            Vivek Sachdeva
            Reporter:
            Chad Redman
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved: