class InMemoryLKVLiveMarketDataProvider extends AbstractMarketDataProvider implements LiveMarketDataProvider, LiveDataListener, SubscriptionReporter {

  void resubscribe(Set<ExternalScheme> schemes) {
    _subscriptionReadLock.lock();
    try {
      Collection<LiveDataSpecification> toSubscribe = new HashSet<>();
      // Include pending subscriptions too to be safe
      for (LiveDataSpecification requestedSpec : _pendingSubscriptionsByRequestedSpec.keySet()) {
        for (ExternalId id : requestedSpec.getIdentifiers()) {
          if (schemes.contains(id.getScheme())) {
            toSubscribe.add(requestedSpec);
          }
        }
      }
      for (LiveDataSpecification fullyQualifiedSpec : _activeSubscriptionsByQualifiedSpec.keySet()) {
        for (ExternalId id : fullyQualifiedSpec.getIdentifiers()) {
          if (schemes.contains(id.getScheme())) {
            toSubscribe.add(fullyQualifiedSpec);
          }
        }
      }
      if (!toSubscribe.isEmpty()) {
        s_logger.info("Subscribing {} to {} live data specifications", _marketDataUser, toSubscribe.size());
        _liveDataClient.subscribe(_marketDataUser, toSubscribe, this);
      }
    } finally {
      _subscriptionReadLock.unlock();
    }
  }

  public  InMemoryLKVLiveMarketDataProvider(final LiveDataClient liveDataClient, final MarketDataAvailabilityFilter availabilityFilter, final UserPrincipal marketDataUser);
  public  InMemoryLKVLiveMarketDataProvider(final LiveDataClient liveDataClient, final MarketDataAvailabilityFilter availabilityFilter, final MarketDataPermissionProvider permissionProvider,
      final UserPrincipal marketDataUser);

}