anchor.diff:  
   -spec del_topic(topic()) -> any().
   del_topic(Topic) ->
  -    case mnesia:wread(vmq_subscriber, Topic) of
  +    case mnesia:wread({vmq_subscriber, Topic}) of
           [] ->
               TopicRec = emqtt_topic:new(Topic),
               mnesia:delete_object(vmq_trie_topic, TopicRec, write),
  -            case mnesia:wread(vmq_trie_topic, Topic) of
  +            case mnesia:wread({vmq_trie_topic, Topic}) of
                   [] -> trie_delete(Topic);
                   _ -> ignore
               end;
  
positive.code: -hook({on_unsubscribe, all, 3}).
  -hook({filter_subscribers, every, 5}).
  
  -record(state, {unreg_time, unreg_queue=[]}).
  -record(topic, {name, node}).
  -record(trie, {edge, node_id, vclock=unsplit_vclock:fresh()}).
  -record(trie_node, {node_id, edge_count=0, topic, vclock=unsplit_vclock:fresh()}).
  -record(trie_edge, {node_id, word}).
  -record(subscriber, {topic, qos, client}).
  -record(session, {client_id, node, pid, monitor, last_seen, clean, vclock=unsplit_vclock:fresh()}).
  -record(retain, {words, routing_key, payload, vclock=unsplit_vclock:fresh()}).
  
  -spec start_link() -> {ok, pid()} | ignore | {error, atom()}.
  start_link() ->
      gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).
  
  -spec subscribe(username() | plugin_id(),client_id(),[{topic(), qos()}]) ->
  
negative.code: 
  -spec get_client_pid(_) -> {'error','not_found'} | {'ok',_}.
  get_client_pid(ClientId) ->
      case ets:lookup(vmq_session, ClientId) of
          [#session{pid=Pid}] when is_pid(Pid) ->
              {ok, Pid};
          _ ->
              {error, not_found}
      end.
  
  -spec total_clients() -> non_neg_integer().
  total_clients() ->
      ets:info(vmq_session, size).
  
  -spec retained() -> non_neg_integer().
  retained() ->
  