docs: private void handleUpdate(final CdjStatus update) {
          // First see if any metadata caches need evicting or mount sets need updating.
          if (update.isLocalUsbEmpty()) {
              final SlotReference slot = SlotReference.getSlotReference(update.getDeviceNumber(), CdjStatus.TrackSourceSlot.USB_SLOT);
              detachMetadataCache(slot);
              flushHotCacheSlot(slot);
              removeMount(slot);
          } else if (update.isLocalUsbLoaded()) {
              recordMount(SlotReference.getSlotReference(update.getDeviceNumber(), CdjStatus.TrackSourceSlot.USB_SLOT));
          }
  
          if (update.isLocalSdEmpty()) {
              final SlotReference slot = SlotReference.getSlotReference(update.getDeviceNumber(), CdjStatus.TrackSourceSlot.SD_SLOT);
              detachMetadataCache(slot);
              flushHotCacheSlot(slot);
              removeMount(slot);
          } else if (update.isLocalSdLoaded()){
              recordMount(SlotReference.getSlotReference(update.getDeviceNumber(), CdjStatus.TrackSourceSlot.SD_SLOT));
          }
  
          if (update.isDiscSlotEmpty()) {
              removeMount(SlotReference.getSlotReference(update.getDeviceNumber(), CdjStatus.TrackSourceSlot.CD_SLOT));
          } else {
              recordMount(SlotReference.getSlotReference(update.getDeviceNumber(), CdjStatus.TrackSourceSlot.CD_SLOT));
          }
  
          // Now see if a track has changed that needs new metadata.
          if (update.getTrackType() == CdjStatus.TrackType.UNKNOWN ||
                  update.getTrackType() == CdjStatus.TrackType.NO_TRACK ||
                  update.getTrackSourceSlot() == CdjStatus.TrackSourceSlot.NO_TRACK ||
                  update.getTrackSourceSlot() == CdjStatus.TrackSourceSlot.UNKNOWN ||
                  update.getRekordboxId() == 0) {  // We no longer have metadata for this device.
              clearDeck(update);
          } else {  // We can offer metadata for this device; check if we already looked up this track.
              final TrackMetadata lastMetadata = hotCache.get(DeckReference.getDeckReference(update.getDeviceNumber(), 0));
              final DataReference trackReference = new DataReference(update.getTrackSourcePlayer(),
                      update.getTrackSourceSlot(), update.getRekordboxId());
              if (lastMetadata == null || !lastMetadata.trackReference.equals(trackReference)) {  // We have something new!
                  // First see if we can find the new track in the hot cache as a hot cue
                  for (TrackMetadata cached : hotCache.values()) {
                      if (cached.trackReference.equals(trackReference)) {  // Found a hot cue hit, use it.
                          updateMetadata(update, cached);
                          return;
                      }
                  }
  
                  // Not in the hot cache so try actually retrieving it.
                  if (activeRequests.add(update.getTrackSourcePlayer())) {
                      // We had to make sure we were not already asking for this track.
                      clearDeck(update);  // We won't know what it is until our request completes.
                      new Thread(new Runnable() {
                          @Override
                          public void run() {
                              try {
                                  TrackMetadata data = requestMetadataInternal(trackReference, update.getTrackType(), true);
                                  if (data != null) {
                                      updateMetadata(update, data);
                                  }
                              } catch (Exception e) {
                                  logger.warn("Problem requesting track metadata from update" + update, e);
                              } finally {
                                  activeRequests.remove(update.getTrackSourcePlayer());
                              }
                          }
                      }, "MetadataFinder metadata request").start();
                  }
              }
          }
      }