From 3e6b88cbc3ef8c921f48bfd073cca9bb12d09e1c Mon Sep 17 00:00:00 2001 From: Pablo Polvorin Date: Tue, 11 Dec 2012 17:11:53 -0300 Subject: [PATCH] Fix pubsub_state mnesia table definition Partially bound lookups keys only works efficiently if the table type if ordered_set. If the table is a set, then it is implemented as a hashtable, and if the lookup key isn't fully bound an entire table scan is neccesarly. --- src/mod_pubsub/mod_pubsub.erl | 2 ++ src/mod_pubsub/node_hometree.erl | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/mod_pubsub/mod_pubsub.erl b/src/mod_pubsub/mod_pubsub.erl index 4c0643c02..01e9e9c98 100644 --- a/src/mod_pubsub/mod_pubsub.erl +++ b/src/mod_pubsub/mod_pubsub.erl @@ -726,6 +726,7 @@ update_state_database(_Host, _ServerHost) -> {atomic, ok} = mnesia:delete_table(pubsub_state), {atomic, ok} = mnesia:create_table(pubsub_state, [{disc_copies, [node()]}, + {type, ordered_set}, {attributes, record_info(fields, pubsub_state)}]), @@ -756,6 +757,7 @@ update_state_database(_Host, _ServerHost) -> {atomic, ok} = mnesia:delete_table(pubsub_state), {atomic, ok} = mnesia:create_table(pubsub_state, [{disc_copies, [node()]}, + {type, ordered_set}, {attributes, record_info(fields, pubsub_state)}]), diff --git a/src/mod_pubsub/node_hometree.erl b/src/mod_pubsub/node_hometree.erl index e253eb184..bed9f2817 100644 --- a/src/mod_pubsub/node_hometree.erl +++ b/src/mod_pubsub/node_hometree.erl @@ -69,7 +69,8 @@ init(_Host, _ServerHost, _Options) -> pubsub_subscription:init(), mnesia:create_table(pubsub_state, - [{disc_copies, [node()]}, {index, [nodeidx]}, + [{disc_copies, [node()]}, {index, [nodeidx]}, + {type, ordered_set}, {attributes, record_info(fields, pubsub_state)}]), mnesia:create_table(pubsub_item, [{disc_only_copies, [node()]}, {index, [nodeidx]},