forked from wooga/eredis
-
Notifications
You must be signed in to change notification settings - Fork 0
/
basho_bench_driver_eredis.erl
89 lines (76 loc) · 5.22 KB
/
basho_bench_driver_eredis.erl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
-module(basho_bench_driver_eredis).
-export([new/1,
run/4]).
-export([value_gen/1]).
new(_Id) ->
case whereis(eredis_driver) of
undefined ->
case eredis:start_link() of
{ok, Client} ->
register(eredis_driver, Client),
{ok, Client};
{error, Reason} ->
{error, Reason}
end;
Pid ->
{ok, Pid}
end.
run(get, KeyGen, _ValueGen, Client) ->
Start = KeyGen(),
%%case eredis:q(["MGET" | lists:seq(Start, Start + 500)]) of
case catch(eredis:q(Client, ["GET", Start], 100)) of
{ok, _Value} ->
{ok, Client};
{error, Reason} ->
{error, Reason, Client};
{'EXIT', {timeout, _}} ->
{error, timeout, Client}
end;
run(pipeline_get, KeyGen, _ValueGen, Client) ->
Seq = lists:seq(1, 5),
P = [["GET", KeyGen()] || _ <- Seq],
case catch(eredis:qp(Client, P, 500)) of
{error, Reason} ->
{error, Reason, Client};
{'EXIT', {timeout, _}} ->
{error, timeout, Client};
Res ->
case check_pipeline_get(Res, Seq) of
ok ->
{ok, Client};
{error, Reason} ->
{error, Reason, Client}
end
end;
run(put, KeyGen, ValueGen, Client) ->
case catch(eredis:q(Client, ["SET", KeyGen(), ValueGen()], 100)) of
{ok, <<"OK">>} ->
{ok, Client};
{error, Reason} ->
{error, Reason, Client};
{'EXIT', {timeout, _}} ->
{error, timeout, Client}
end;
run(pipeline_put, KeyGen, ValueGen, Client) ->
Seq = lists:seq(1, 5),
P = [["SET", KeyGen(), ValueGen()] || _ <- Seq],
R = [{ok, <<"OK">>} || _ <- Seq],
case catch(eredis:qp(Client, P, 500)) of
R ->
{ok, Client};
{error, Reason} ->
{error, Reason, Client};
{'EXIT', {timeout, _}} ->
{error, timeout, Client}
end.
check_pipeline_get([], []) ->
ok;
check_pipeline_get([{ok, _}|Res], [_|Seq]) ->
check_pipeline_get(Res, Seq);
check_pipeline_get([{error, Reason}], _) ->
{error, Reason}.
value_gen(_Id) ->
fun() ->
%% %% Example data from http://json.org/example.html
<<"{\"web-app\":{\"servlet\":[{\"servlet-name\":\"cofaxCDS\",\"servlet-class\":\"org.cofax.cds.CDSServlet\",\"init-param\":{\"configGlossary:installationAt\":\"Philadelphia,PA\",\"configGlossary:adminEmail\":\"[email protected]\",\"configGlossary:poweredBy\":\"Cofax\",\"configGlossary:poweredByIcon\":\"/images/cofax.gif\",\"configGlossary:staticPath\":\"/content/static\",\"templateProcessorClass\":\"org.cofax.WysiwygTemplate\",\"templateLoaderClass\":\"org.cofax.FilesTemplateLoader\",\"templatePath\":\"templates\",\"templateOverridePath\":\"\",\"defaultListTemplate\":\"listTemplate.htm\",\"defaultFileTemplate\":\"articleTemplate.htm\",\"useJSP\":false,\"jspListTemplate\":\"listTemplate.jsp\",\"jspFileTemplate\":\"articleTemplate.jsp\",\"cachePackageTagsTrack\":200,\"cachePackageTagsStore\":200,\"cachePackageTagsRefresh\":60,\"cacheTemplatesTrack\":100,\"cacheTemplatesStore\":50,\"cacheTemplatesRefresh\":15,\"cachePagesTrack\":200,\"cachePagesStore\":100,\"cachePagesRefresh\":10,\"cachePagesDirtyRead\":10,\"searchEngineListTemplate\":\"forSearchEnginesList.htm\",\"searchEngineFileTemplate\":\"forSearchEngines.htm\",\"searchEngineRobotsDb\":\"WEB-INF/robots.db\",\"useDataStore\":true,\"dataStoreClass\":\"org.cofax.SqlDataStore\",\"redirectionClass\":\"org.cofax.SqlRedirection\",\"dataStoreName\":\"cofax\",\"dataStoreDriver\":\"com.microsoft.jdbc.sqlserver.SQLServerDriver\",\"dataStoreUrl\":\"jdbc:microsoft:sqlserver://LOCALHOST:1433;DatabaseName=goon\",\"dataStoreUser\":\"sa\",\"dataStorePassword\":\"dataStoreTestQuery\",\"dataStoreTestQuery\":\"SETNOCOUNTON;selecttest='test';\",\"dataStoreLogFile\":\"/usr/local/tomcat/logs/datastore.log\",\"dataStoreInitConns\":10,\"dataStoreMaxConns\":100,\"dataStoreConnUsageLimit\":100,\"dataStoreLogLevel\":\"debug\",\"maxUrlLength\":500}},{\"servlet-name\":\"cofaxEmail\",\"servlet-class\":\"org.cofax.cds.EmailServlet\",\"init-param\":{\"mailHost\":\"mail1\",\"mailHostOverride\":\"mail2\"}},{\"servlet-name\":\"cofaxAdmin\",\"servlet-class\":\"org.cofax.cds.AdminServlet\"},{\"servlet-name\":\"fileServlet\",\"servlet-class\":\"org.cofax.cds.FileServlet\"},{\"servlet-name\":\"cofaxTools\",\"servlet-class\":\"org.cofax.cms.CofaxToolsServlet\",\"init-param\":{\"templatePath\":\"toolstemplates/\",\"log\":1,\"logLocation\":\"/usr/local/tomcat/logs/CofaxTools.log\",\"logMaxSize\":\"\",\"dataLog\":1,\"dataLogLocation\":\"/usr/local/tomcat/logs/dataLog.log\",\"dataLogMaxSize\":\"\",\"removePageCache\":\"/content/admin/remove?cache=pages&id=\",\"removeTemplateCache\":\"/content/admin/remove?cache=templates&id=\",\"fileTransferFolder\":\"/usr/local/tomcat/webapps/content/fileTransferFolder\",\"lookInContext\":1,\"adminGroupID\":4,\"betaServer\":true}}],\"servlet-mapping\":{\"cofaxCDS\":\"/\",\"cofaxEmail\":\"/cofaxutil/aemail/*\",\"cofaxAdmin\":\"/admin/*\",\"fileServlet\":\"/static/*\",\"cofaxTools\":\"/tools/*\"},\"taglib\":{\"taglib-uri\":\"cofax.tld\",\"taglib-location\":\"/WEB-INF/tlds/cofax.tld\"}}">>
end.