anchor.diff:  unsubscribe_op(User, SubscriberId, Topics) ->
       rate_limited_op(
         fun() ->
  -              _ = [del_subscriber(T, SubscriberId) || T <- Topics],
  -              ok
  +              del_subscriptions(Topics, SubscriberId)
         end,
         fun(_) ->
                 _ = [vmq_exo:decr_subscription_count() || _ <- Topics],
  
positive.code:                                 [User, SubscriberId, Topics]) of
          ok ->
              subscribe_op(User, SubscriberId, QPid, Topics);
          {error, _} ->
              {error, not_allowed}
      end.
  
negative.code:               end, Acc, vmq_session).
  
  
  -spec add_subscriber([{topic(), qos()}], subscriber_id()) -> ok.
  add_subscriber(Topics, SubscriberId) ->
      NewSubs =
      case plumtree_metadata:get(?SUBSCRIBER_DB, SubscriberId) of
          undefined ->
              [{Topic, QoS, node()} || {Topic, QoS} <- Topics];
          Subs ->
              lists:foldl(fun({Topic, QoS}, NewSubsAcc) ->
                                  NewSub = {Topic, QoS, node()},
                                  case lists:member(NewSub, NewSubsAcc) of
                                      true -> NewSubsAcc;
                                      false ->
                                          [NewSub|NewSubsAcc]
                                  end
                          end, Subs, Topics)
      end,
      plumtree_metadata:put(?SUBSCRIBER_DB, SubscriberId, NewSubs).
  
  