]> granicus.if.org Git - ejabberd/commitdiff
handle case when roster version on DB is enabled but version is not found.
authorPablo Polvorin <pablo.polvorin@process-one.net>
Fri, 5 Aug 2011 15:21:24 +0000 (12:21 -0300)
committerPablo Polvorin <pablo.polvorin@process-one.net>
Fri, 5 Aug 2011 15:21:24 +0000 (12:21 -0300)
Thanks Evgeniy.

src/mod_roster_odbc.erl

index b713a0aab08fcbf60a757b57a6d1053b558684f6..3fccc284831707285833c5ee3e1e4bdca0c971ed 100644 (file)
@@ -163,7 +163,15 @@ roster_version(LServer ,LUser) ->
                true ->
                        case odbc_queries:get_roster_version(ejabberd_odbc:escape(LServer), ejabberd_odbc:escape(LUser)) of
                                {selected, ["version"], [{Version}]} -> Version;
-                               {selected, ["version"], []} -> not_found
+                               {selected, ["version"], []} -> 
+                               %% If for some reason we don't had it on DB. Create a version Id and store it.
+                               %% (we did the same on process_iq_get, that is called when client get roster,
+                               %%  not sure why it can still not be on DB at this point)
+                               RosterVersion = sha:sha(term_to_binary(now())),
+                               {atomic, {updated,1}} = odbc_queries:sql_transaction(LServer, fun() ->
+                                   odbc_queries:set_roster_version(ejabberd_odbc:escape(LUser), RosterVersion)
+                               end),
+                               RosterVersion
                        end;
                false ->
                        roster_hash(ejabberd_hooks:run_fold(roster_get, LServer, [], [US]))