aboutsummaryrefslogtreecommitdiffstats
path: root/lib/snmp/src/agent/snmpa_vacm.erl
diff options
context:
space:
mode:
authorErlang/OTP <[email protected]>2012-01-17 16:38:40 +0100
committerErlang/OTP <[email protected]>2012-01-17 16:38:40 +0100
commit5790c87a3c155dbe49b82a8f3b3b74f9fec9d71d (patch)
treee6aa27199150bfcac01cae6ef55d533a551a3ce4 /lib/snmp/src/agent/snmpa_vacm.erl
parentf3675ad3cbb3915b450311b202bea2118fca3d37 (diff)
parent531d9e60f84192da2e163077d062f5ec8027a78c (diff)
downloadotp-5790c87a3c155dbe49b82a8f3b3b74f9fec9d71d.tar.gz
otp-5790c87a3c155dbe49b82a8f3b3b74f9fec9d71d.tar.bz2
otp-5790c87a3c155dbe49b82a8f3b3b74f9fec9d71d.zip
Merge branch 'bmk/snmp/snmp4215_integration/r15' into maint-r15
* bmk/snmp/snmp4215_integration/r15: [snmp] Fixed release notes. Used wrong ticket number [snmp/agent] Updated appup file [snmp/agent] Updated release notes [snmp/agent] Removed the (unused) serializer part [snmp/agent] Use unique temporary file name during vacm table dumnping [snmp/agent] Add common timestamp format function. [snmp/agent] Synchronization feature added [snmp/agent] Creating a unique temporary file whe dumping vacm [snmp/agent] Changed version [snmp/agent] Found another old-style fun (2-tuple) [snmp/agent] Removed use of old style tuple funs
Diffstat (limited to 'lib/snmp/src/agent/snmpa_vacm.erl')
-rw-r--r--lib/snmp/src/agent/snmpa_vacm.erl34
1 files changed, 32 insertions, 2 deletions
diff --git a/lib/snmp/src/agent/snmpa_vacm.erl b/lib/snmp/src/agent/snmpa_vacm.erl
index 892dc265f1..2cbc11d280 100644
--- a/lib/snmp/src/agent/snmpa_vacm.erl
+++ b/lib/snmp/src/agent/snmpa_vacm.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2012. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -266,9 +266,10 @@ dump_table(true) ->
dump_table(_) ->
ok.
+
dump_table() ->
[{_, FName}] = ets:lookup(snmp_agent_table, snmpa_vacm_file),
- TmpName = FName ++ ".tmp",
+ TmpName = unique_table_name(FName),
case ets:tab2file(snmpa_vacm, TmpName) of
ok ->
case file:rename(TmpName, FName) of
@@ -283,6 +284,35 @@ dump_table() ->
[FName, Reason])
end.
+%% This little thing is an attempt to create a "unique" filename
+%% in order to minimize the risk of two processes at the same
+%% time dumping the table.
+unique_table_name(Pre) ->
+ %% We want something that is guaranteed to be unique,
+ %% therefor we use erlang:now() instead of os:timestamp()
+ unique_table_name(Pre, erlang:now()).
+
+unique_table_name(Pre, {_A, _B, C} = Now) ->
+ {Date, Time} = calendar:now_to_datetime(Now),
+ {YYYY, MM, DD} = Date,
+ {Hour, Min, Sec} = Time,
+ FormatDate =
+ io_lib:format("~.4w~.2.0w~.2.0w_~.2.0w~.2.0w~.2.0w_~w",
+ [YYYY, MM, DD, Hour, Min, Sec, round(C/1000)]),
+ unique_table_name2(Pre, FormatDate).
+
+unique_table_name2(Pre, FormatedDate) ->
+ PidPart = unique_table_name_pid(),
+ lists:flatten(io_lib:format("~s.~s~s.tmp", [Pre, PidPart, FormatedDate])).
+
+unique_table_name_pid() ->
+ case string:tokens(pid_to_list(self()), [$<,$.,$>]) of
+ [A, B, C] ->
+ A ++ B ++ C ++ ".";
+ _ ->
+ ""
+ end.
+
%%-----------------------------------------------------------------
%% Alg.