Uploaded image for project: 'QuickFIX/J'
  1. QuickFIX/J
  2. QFJ-823

Problem with concurrent access to UtcTimestampConverter#dateCache

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Default
    • Resolution: Fixed
    • Affects Version/s: 1.5.3
    • Fix Version/s: 1.6.0
    • Component/s: None
    • Labels:
      None

      Description

      In quickfix library there is class
      UtcTimestampConverter
      in last version 1.5.3 there is static varaible

      private static HashMap<String, Long> dateCache
      

      As I see, this varaible is used as cache:

          private static Long getMillisForDay(String value) {
              String dateString = value.substring(0, 8);
          	Long millis = dateCache.get(dateString);
              if (millis == null) {
                  Calendar c = new GregorianCalendar(1970, 0, 1, 0, 0, 0);
                  c.setTimeZone(SystemTime.UTC_TIMEZONE);
                  int year = Integer.parseInt(value.substring(0, 4));
                  int month = Integer.parseInt(value.substring(4, 6));
                  int day = Integer.parseInt(value.substring(6, 8));
                  c.set(year, month - 1, day);
                  millis = c.getTimeInMillis();
                  dateCache.put(dateString, c.getTimeInMillis());
              }
              return millis;
          } 
      

      But if this code will be invoked from different threads(in my case it is so), then HashMap my become broken, => cuncurrent access and modification of hashmap.
      Under high load I can reproduce this on my dev server.

      I would suggest to replace HashMap with ConcurrentHashMap

      private static ConcurrentHashMap<String, Long> dateCache = new ConcurrentHashMap<String, Long>(); 
      

        Attachments

          Activity

            People

            • Assignee:
              troshanin Alexander Troshanin
              Reporter:
              troshanin Alexander Troshanin
            • Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: