Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added ldclient evaluation benchmarks #28

Merged
merged 1 commit into from
May 20, 2020
Merged

Added ldclient evaluation benchmarks #28

merged 1 commit into from
May 20, 2020

Conversation

alexwforsythe
Copy link

@alexwforsythe alexwforsythe commented May 14, 2020

Requirements

  • I have added test coverage for new or changed functionality
  • I have followed the repository's pull request submission guidelines
  • I have validated my changes against all supported platform versions

Related issues

N/A

Describe the solution you've provided

I've added benchmarks to measure the throughput and memory allocations of several evaluation functions.

Describe alternatives you've considered

N/A

Additional context

Results:

Running tool: /usr/local/go/bin/go test -benchmem -run=^$ gopkg.in/launchdarkly/go-server-sdk.v4 -bench ^(BenchmarkBoolVariation|BenchmarkIntVariation|BenchmarkStringVariation|BenchmarkJSONVariation)$

goos: linux
goarch: amd64
pkg: gopkg.in/launchdarkly/go-server-sdk.v4
BenchmarkBoolVariation/{numUsers:1000_numFlags:1000_numVariations:2_numTargets:1_numRules:0_numClauses:0_prereqsWidth:0_prereqsDepth:0_operator:}-16         	 1212894	      1050 ns/op	     593 B/op	       4 allocs/op
BenchmarkBoolVariation/{numUsers:10000_numFlags:10000_numVariations:2_numTargets:1_numRules:0_numClauses:0_prereqsWidth:0_prereqsDepth:0_operator:}-16       	 1407657	       858 ns/op	     579 B/op	       4 allocs/op
BenchmarkBoolVariation/{numUsers:10000_numFlags:10000_numVariations:2_numTargets:10_numRules:0_numClauses:0_prereqsWidth:0_prereqsDepth:0_operator:}-16      	 1367804	       895 ns/op	     581 B/op	       4 allocs/op
BenchmarkBoolVariation/{numUsers:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:0_prereqsDepth:0_operator:}-16        	  120196	      9596 ns/op	    6863 B/op	      65 allocs/op
BenchmarkBoolVariation/{numUsers:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:3_prereqsWidth:0_prereqsDepth:0_operator:}-16        	  117769	      9706 ns/op	    6868 B/op	      65 allocs/op
BenchmarkBoolVariation/{numUsers:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:5_numClauses:3_prereqsWidth:0_prereqsDepth:0_operator:}-16        	   26331	     44985 ns/op	   32055 B/op	     309 allocs/op
BenchmarkBoolVariation/{numUsers:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:5_prereqsDepth:1_operator:}-16        	  110031	     10680 ns/op	    7705 B/op	      69 allocs/op
BenchmarkBoolVariation/{numUsers:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:1_prereqsDepth:5_operator:}-16        	  108960	     10678 ns/op	    7704 B/op	      69 allocs/op
BenchmarkBoolVariation/{numUsers:10000_numFlags:1000_numVariations:2_numTargets:1_numRules:0_numClauses:0_prereqsWidth:2_prereqsDepth:2_operator:}-16        	  658082	      1913 ns/op	    1405 B/op	       8 allocs/op
BenchmarkBoolVariation/{numUsers:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:5_prereqsDepth:5_operator:}-16        	   76873	     15517 ns/op	   14525 B/op	      86 allocs/op
BenchmarkBoolVariation/{numUsers:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:0_prereqsDepth:0_operator:greaterThan}-16         	 1000000	      1092 ns/op	     599 B/op	       7 allocs/op
BenchmarkBoolVariation/{numUsers:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:0_prereqsDepth:0_operator:contains}-16            	 1000000	      1044 ns/op	     591 B/op	       5 allocs/op
BenchmarkBoolVariation/{numUsers:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:0_prereqsDepth:0_operator:in}-16                  	  995553	      1146 ns/op	     592 B/op	       5 allocs/op
BenchmarkIntVariation/{numUsers:1000_numFlags:1000_numVariations:2_numTargets:1_numRules:0_numClauses:0_prereqsWidth:0_prereqsDepth:0_operator:}-16                      	 1351836	       915 ns/op	     590 B/op	       5 allocs/op
BenchmarkIntVariation/{numUsers:10000_numFlags:10000_numVariations:2_numTargets:1_numRules:0_numClauses:0_prereqsWidth:0_prereqsDepth:0_operator:}-16                    	 1338130	       922 ns/op	     591 B/op	       5 allocs/op
BenchmarkIntVariation/{numUsers:10000_numFlags:10000_numVariations:2_numTargets:10_numRules:0_numClauses:0_prereqsWidth:0_prereqsDepth:0_operator:}-16                   	 1349911	       934 ns/op	     590 B/op	       5 allocs/op
BenchmarkIntVariation/{numUsers:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:0_prereqsDepth:0_operator:}-16                     	  117642	      9812 ns/op	    6871 B/op	      66 allocs/op
BenchmarkIntVariation/{numUsers:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:3_prereqsWidth:0_prereqsDepth:0_operator:}-16                     	  117109	      9951 ns/op	    6874 B/op	      66 allocs/op
BenchmarkIntVariation/{numUsers:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:5_numClauses:3_prereqsWidth:0_prereqsDepth:0_operator:}-16                     	   26042	     44585 ns/op	   32022 B/op	     310 allocs/op
BenchmarkIntVariation/{numUsers:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:5_prereqsDepth:1_operator:}-16                     	  109071	     10850 ns/op	    7712 B/op	      70 allocs/op
BenchmarkIntVariation/{numUsers:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:1_prereqsDepth:5_operator:}-16                     	  108716	     10636 ns/op	    7713 B/op	      70 allocs/op
BenchmarkIntVariation/{numUsers:10000_numFlags:1000_numVariations:2_numTargets:1_numRules:0_numClauses:0_prereqsWidth:2_prereqsDepth:2_operator:}-16                     	  683667	      1875 ns/op	    1407 B/op	       9 allocs/op
BenchmarkIntVariation/{numUsers:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:5_prereqsDepth:5_operator:}-16                     	   76902	     15611 ns/op	   14530 B/op	      87 allocs/op
BenchmarkIntVariation/{numUsers:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:0_prereqsDepth:0_operator:greaterThan}-16          	 1000000	      1139 ns/op	     607 B/op	       8 allocs/op
BenchmarkIntVariation/{numUsers:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:0_prereqsDepth:0_operator:contains}-16             	 1000000	      1052 ns/op	     599 B/op	       6 allocs/op
BenchmarkIntVariation/{numUsers:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:0_prereqsDepth:0_operator:in}-16                   	  980880	      1166 ns/op	     601 B/op	       6 allocs/op
BenchmarkStringVariation/{numUsers:1000_numFlags:1000_numVariations:2_numTargets:1_numRules:0_numClauses:0_prereqsWidth:0_prereqsDepth:0_operator:}-16                   	 1000000	      1001 ns/op	     607 B/op	       6 allocs/op
BenchmarkStringVariation/{numUsers:10000_numFlags:10000_numVariations:2_numTargets:1_numRules:0_numClauses:0_prereqsWidth:0_prereqsDepth:0_operator:}-16                 	 1277961	      1000 ns/op	     620 B/op	       6 allocs/op
BenchmarkStringVariation/{numUsers:10000_numFlags:10000_numVariations:2_numTargets:10_numRules:0_numClauses:0_prereqsWidth:0_prereqsDepth:0_operator:}-16                	 1236304	       952 ns/op	     623 B/op	       6 allocs/op
BenchmarkStringVariation/{numUsers:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:0_prereqsDepth:0_operator:}-16                  	  115327	     10022 ns/op	    6893 B/op	      67 allocs/op
BenchmarkStringVariation/{numUsers:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:3_prereqsWidth:0_prereqsDepth:0_operator:}-16                  	  113648	     10062 ns/op	    6893 B/op	      67 allocs/op
BenchmarkStringVariation/{numUsers:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:5_numClauses:3_prereqsWidth:0_prereqsDepth:0_operator:}-16                  	   26416	     45946 ns/op	   32024 B/op	     311 allocs/op
BenchmarkStringVariation/{numUsers:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:5_prereqsDepth:1_operator:}-16                  	  105981	     11005 ns/op	    7728 B/op	      73 allocs/op
BenchmarkStringVariation/{numUsers:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:1_prereqsDepth:5_operator:}-16                  	  107774	     10939 ns/op	    7770 B/op	      73 allocs/op
BenchmarkStringVariation/{numUsers:10000_numFlags:1000_numVariations:2_numTargets:1_numRules:0_numClauses:0_prereqsWidth:2_prereqsDepth:2_operator:}-16                  	  624622	      2037 ns/op	    1478 B/op	      12 allocs/op
BenchmarkStringVariation/{numUsers:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:5_prereqsDepth:5_operator:}-16                  	   76010	     15926 ns/op	   14594 B/op	      90 allocs/op
BenchmarkStringVariation/{numUsers:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:0_prereqsDepth:0_operator:greaterThan}-16       	  985740	      1199 ns/op	     632 B/op	       9 allocs/op
BenchmarkStringVariation/{numUsers:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:0_prereqsDepth:0_operator:contains}-16          	 1000000	      1159 ns/op	     623 B/op	       7 allocs/op
BenchmarkStringVariation/{numUsers:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:0_prereqsDepth:0_operator:in}-16                	  935442	      1268 ns/op	     629 B/op	       7 allocs/op
BenchmarkJSONVariation/{numUsers:1000_numFlags:1000_numVariations:2_numTargets:1_numRules:0_numClauses:0_prereqsWidth:0_prereqsDepth:0_operator:}-16                     	 1000000	      1056 ns/op	     703 B/op	       8 allocs/op
BenchmarkJSONVariation/{numUsers:10000_numFlags:10000_numVariations:2_numTargets:1_numRules:0_numClauses:0_prereqsWidth:0_prereqsDepth:0_operator:}-16                   	 1000000	      1064 ns/op	     703 B/op	       8 allocs/op
BenchmarkJSONVariation/{numUsers:10000_numFlags:10000_numVariations:2_numTargets:10_numRules:0_numClauses:0_prereqsWidth:0_prereqsDepth:0_operator:}-16                  	 1000000	      1094 ns/op	     703 B/op	       8 allocs/op
BenchmarkJSONVariation/{numUsers:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:0_prereqsDepth:0_operator:}-16                    	  116539	      9967 ns/op	    6980 B/op	      69 allocs/op
BenchmarkJSONVariation/{numUsers:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:3_prereqsWidth:0_prereqsDepth:0_operator:}-16                    	  115340	     10069 ns/op	    6984 B/op	      69 allocs/op
BenchmarkJSONVariation/{numUsers:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:5_numClauses:3_prereqsWidth:0_prereqsDepth:0_operator:}-16                    	   25959	     45521 ns/op	   32118 B/op	     313 allocs/op
BenchmarkJSONVariation/{numUsers:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:5_prereqsDepth:1_operator:}-16                    	  105205	     11329 ns/op	    7918 B/op	      77 allocs/op
BenchmarkJSONVariation/{numUsers:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:1_prereqsDepth:5_operator:}-16                    	  103836	     11189 ns/op	    7920 B/op	      77 allocs/op
BenchmarkJSONVariation/{numUsers:10000_numFlags:1000_numVariations:2_numTargets:1_numRules:0_numClauses:0_prereqsWidth:2_prereqsDepth:2_operator:}-16                    	  550192	      2267 ns/op	    1694 B/op	      16 allocs/op
BenchmarkJSONVariation/{numUsers:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:5_prereqsDepth:5_operator:}-16                    	   73746	     16134 ns/op	   14800 B/op	      94 allocs/op
BenchmarkJSONVariation/{numUsers:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:0_prereqsDepth:0_operator:greaterThan}-16         	  908146	      1301 ns/op	     736 B/op	      11 allocs/op
BenchmarkJSONVariation/{numUsers:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:0_prereqsDepth:0_operator:contains}-16            	  936613	      1935 ns/op	     725 B/op	       9 allocs/op
BenchmarkJSONVariation/{numUsers:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:0_prereqsDepth:0_operator:in}-16                  	  854199	      1363 ns/op	     713 B/op	       9 allocs/op
PASS
ok  	gopkg.in/launchdarkly/go-server-sdk.v4	76.605s

@eli-darkly
Copy link
Contributor

Thanks. This partly duplicates some work we've been doing to compare the performance of the current release with our upcoming 5.0 rewrite, but it looks like a more thorough approach.

I do have some questions about the intended behavior, since there aren't any comments in the part that sets up the flag configurations. You're generating a bunch of rules and clauses, but (at first glance; I haven't stepped through this in detail, it is a bit hard to follow) I'm not sure that they are actually having any effect. If I'm reading correctly, you are always evaluating with a user whose key is user-0-- and you are always adding Targets to the flag which always have user-0 as their first user key. If so, every evaluation will immediately match that first target list, so the flag rules will be ignored, the operators and clause values you're building are irrelevant, and most of the flag evaluation logic is not actually being benchmarked.

Results:
Running tool: /usr/local/go/bin/go test -benchmem -run=^$
gopkg.in/launchdarkly/go-server-sdk.v4 -bench
^(BenchmarkBoolVariation|BenchmarkIntVariation|BenchmarkStringVariation|BenchmarkJSONVariation)$

goos: linux
goarch: amd64
pkg: gopkg.in/launchdarkly/go-server-sdk.v4
BenchmarkBoolVariation/{numOrgs:1000_numFlags:1000_numVariations:2_numTargets:1_numRules:0_numClauses:0_prereqsWidth:0_prereqsDepth:0_operator:}-16
1273147           983 ns/op         572 B/op           3 allocs/op
BenchmarkBoolVariation/{numOrgs:10000_numFlags:10000_numVariations:2_numTargets:1_numRules:0_numClauses:0_prereqsWidth:0_prereqsDepth:0_operator:}-16
1484312           818 ns/op         558 B/op           3 allocs/op
BenchmarkBoolVariation/{numOrgs:10000_numFlags:10000_numVariations:2_numTargets:10_numRules:0_numClauses:0_prereqsWidth:0_prereqsDepth:0_operator:}-16
1499260           813 ns/op         557 B/op           3 allocs/op
BenchmarkBoolVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:0_prereqsDepth:0_operator:}-16
177571          6449 ns/op        4607 B/op          53 allocs/op
BenchmarkBoolVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:3_prereqsWidth:0_prereqsDepth:0_operator:}-16
93933         12237 ns/op        8619 B/op         103 allocs/op
BenchmarkBoolVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:5_numClauses:3_prereqsWidth:0_prereqsDepth:0_operator:}-16
94274         12184 ns/op        8605 B/op         103 allocs/op
BenchmarkBoolVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:5_prereqsDepth:1_operator:}-16
88407         13022 ns/op        9457 B/op         107 allocs/op
BenchmarkBoolVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:1_prereqsDepth:5_operator:}-16
86668         13218 ns/op        9463 B/op         107 allocs/op
BenchmarkBoolVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:1_numRules:0_numClauses:0_prereqsWidth:2_prereqsDepth:2_operator:}-16
665433          1781 ns/op        1363 B/op           7 allocs/op
BenchmarkBoolVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:5_prereqsDepth:5_operator:}-16
33022         34864 ns/op       28311 B/op         274 allocs/op
BenchmarkBoolVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:0_prereqsDepth:0_operator:greaterThan}-16
1000000          1197 ns/op         639 B/op           8 allocs/op
BenchmarkBoolVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:0_prereqsDepth:0_operator:contains}-16
1000000          1113 ns/op         623 B/op           5 allocs/op
BenchmarkBoolVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:0_prereqsDepth:0_operator:in}-16
976120          1202 ns/op         625 B/op           5 allocs/op
BenchmarkIntVariation/{numOrgs:1000_numFlags:1000_numVariations:2_numTargets:1_numRules:0_numClauses:0_prereqsWidth:0_prereqsDepth:0_operator:}-16
1402076           824 ns/op         563 B/op           3 allocs/op
BenchmarkIntVariation/{numOrgs:10000_numFlags:10000_numVariations:2_numTargets:1_numRules:0_numClauses:0_prereqsWidth:0_prereqsDepth:0_operator:}-16
1477999           811 ns/op         558 B/op           3 allocs/op
BenchmarkIntVariation/{numOrgs:10000_numFlags:10000_numVariations:2_numTargets:10_numRules:0_numClauses:0_prereqsWidth:0_prereqsDepth:0_operator:}-16
1496818           811 ns/op         557 B/op           3 allocs/op
BenchmarkIntVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:0_prereqsDepth:0_operator:}-16
175850          6456 ns/op        4609 B/op          53 allocs/op
BenchmarkIntVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:3_prereqsWidth:0_prereqsDepth:0_operator:}-16
94040         12243 ns/op        8610 B/op         103 allocs/op
BenchmarkIntVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:5_numClauses:3_prereqsWidth:0_prereqsDepth:0_operator:}-16
93117         12279 ns/op        8608 B/op         103 allocs/op
BenchmarkIntVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:5_prereqsDepth:1_operator:}-16
89034         13068 ns/op        9458 B/op         107 allocs/op
BenchmarkIntVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:1_prereqsDepth:5_operator:}-16
87375         13023 ns/op        9459 B/op         107 allocs/op
BenchmarkIntVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:1_numRules:0_numClauses:0_prereqsWidth:2_prereqsDepth:2_operator:}-16
683637          1807 ns/op        1359 B/op           7 allocs/op
BenchmarkIntVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:5_prereqsDepth:5_operator:}-16
33579         34788 ns/op       28307 B/op         274 allocs/op
BenchmarkIntVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:0_prereqsDepth:0_operator:greaterThan}-16
1000000          1182 ns/op         639 B/op           8 allocs/op
BenchmarkIntVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:0_prereqsDepth:0_operator:contains}-16
1000000          1105 ns/op         623 B/op           5 allocs/op
BenchmarkIntVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:0_prereqsDepth:0_operator:in}-16
984885          1194 ns/op         625 B/op           5 allocs/op
BenchmarkStringVariation/{numOrgs:1000_numFlags:1000_numVariations:2_numTargets:1_numRules:0_numClauses:0_prereqsWidth:0_prereqsDepth:0_operator:}-16
1326006           967 ns/op         600 B/op           5 allocs/op
BenchmarkStringVariation/{numOrgs:10000_numFlags:10000_numVariations:2_numTargets:1_numRules:0_numClauses:0_prereqsWidth:0_prereqsDepth:0_operator:}-16
1354795           946 ns/op         598 B/op           5 allocs/op
BenchmarkStringVariation/{numOrgs:10000_numFlags:10000_numVariations:2_numTargets:10_numRules:0_numClauses:0_prereqsWidth:0_prereqsDepth:0_operator:}-16
1339611           859 ns/op         599 B/op           5 allocs/op
BenchmarkStringVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:0_prereqsDepth:0_operator:}-16
174958          6494 ns/op        4619 B/op          55 allocs/op
BenchmarkStringVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:3_prereqsWidth:0_prereqsDepth:0_operator:}-16
95642         12069 ns/op        8637 B/op         105 allocs/op
BenchmarkStringVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:5_numClauses:3_prereqsWidth:0_prereqsDepth:0_operator:}-16
96768         12100 ns/op        8634 B/op         105 allocs/op
BenchmarkStringVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:5_prereqsDepth:1_operator:}-16
91254         13091 ns/op        9492 B/op         110 allocs/op
BenchmarkStringVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:1_prereqsDepth:5_operator:}-16
90015         13126 ns/op        9497 B/op         110 allocs/op
BenchmarkStringVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:1_numRules:0_numClauses:0_prereqsWidth:2_prereqsDepth:2_operator:}-16
639720          1918 ns/op        1418 B/op          10 allocs/op
BenchmarkStringVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:5_prereqsDepth:5_operator:}-16
34008         34831 ns/op       28397 B/op         280 allocs/op
BenchmarkStringVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:0_prereqsDepth:0_operator:greaterThan}-16
935094          1248 ns/op         677 B/op          10 allocs/op
BenchmarkStringVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:0_prereqsDepth:0_operator:contains}-16
1000000          1170 ns/op         655 B/op           7 allocs/op
BenchmarkStringVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:0_prereqsDepth:0_operator:in}-16
928885          1276 ns/op         662 B/op           7 allocs/op
BenchmarkJSONVariation/{numOrgs:1000_numFlags:1000_numVariations:2_numTargets:1_numRules:0_numClauses:0_prereqsWidth:0_prereqsDepth:0_operator:}-16
1000000          1006 ns/op         655 B/op           7 allocs/op
BenchmarkJSONVariation/{numOrgs:10000_numFlags:10000_numVariations:2_numTargets:1_numRules:0_numClauses:0_prereqsWidth:0_prereqsDepth:0_operator:}-16
1000000          1037 ns/op         655 B/op           7 allocs/op
BenchmarkJSONVariation/{numOrgs:10000_numFlags:10000_numVariations:2_numTargets:10_numRules:0_numClauses:0_prereqsWidth:0_prereqsDepth:0_operator:}-16
1000000          1648 ns/op         655 B/op           7 allocs/op
BenchmarkJSONVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:0_prereqsDepth:0_operator:}-16
174028          6570 ns/op        4682 B/op          57 allocs/op
BenchmarkJSONVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:3_prereqsWidth:0_prereqsDepth:0_operator:}-16
95949         11959 ns/op        8698 B/op         107 allocs/op
BenchmarkJSONVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:5_numClauses:3_prereqsWidth:0_prereqsDepth:0_operator:}-16
96314         12036 ns/op        8694 B/op         107 allocs/op
BenchmarkJSONVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:5_prereqsDepth:1_operator:}-16
90968         13083 ns/op        9589 B/op         113 allocs/op
BenchmarkJSONVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:1_prereqsDepth:5_operator:}-16
89406         13151 ns/op        9590 B/op         113 allocs/op
BenchmarkJSONVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:1_numRules:0_numClauses:0_prereqsWidth:2_prereqsDepth:2_operator:}-16
595975          2087 ns/op        1526 B/op          13 allocs/op
BenchmarkJSONVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:5_prereqsDepth:5_operator:}-16
33800         35252 ns/op       28588 B/op         286 allocs/op
BenchmarkJSONVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:0_prereqsDepth:0_operator:greaterThan}-16
875638          1350 ns/op         727 B/op          12 allocs/op
BenchmarkJSONVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:0_prereqsDepth:0_operator:contains}-16
929407          1303 ns/op         726 B/op           9 allocs/op
BenchmarkJSONVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:0_prereqsDepth:0_operator:in}-16
876115          1336 ns/op         711 B/op           9 allocs/op
PASS
ok      gopkg.in/launchdarkly/go-server-sdk.v4    76.267s
@alexwforsythe
Copy link
Author

Hey @eli-darkly -- thanks for taking a look. I think I may have introduced a typo when I was renaming some of the values to prepare this for the PR. I've updated the benchmark cases (and results in the description) to never match, so they shouldn't short-circuit the evaluation logic anymore.

@eli-darkly
Copy link
Contributor

Since your use of force-pushing makes it impossible for me to see the incremental diff, would you mind pointing out to me what your recent change was?

@alexwforsythe
Copy link
Author

Since your use of force-pushing makes it impossible for me to see the incremental diff, would you mind pointing out to me what your recent change was?

@@ -51,10 +51,10 @@ func (env *benchmarkEnv) tearDown() {
  */

 var (
-       evalBenchmarkUser = NewUserBuilder("user-0").
-               Name("Checkit Nice").
-               Custom("stringAttr", ldvalue.String("stringAttr-2")).
-               Custom("numAttr", ldvalue.Int(100)).Build()
+       evalBenchmarkUser = NewUserBuilder("user-nomatch").
+               Name("name-nomatch").
+               Custom("stringAttr", ldvalue.String("stringAttr-nomatch")).
+               Custom("numAttr", ldvalue.Int(0)).Build()
 )

 type benchmarkCase struct {
@@ -332,29 +332,29 @@ func makeClauses(numClauses int, op Operator) []Clause {
                clause := Clause{Op: op}
                switch op {
                case OperatorGreaterThan:
-                       clause.Attribute = "numDevices"
+                       clause.Attribute = "numAttr"
                        clause.Values = []interface{}{i}
                case OperatorContains:
                        clause.Attribute = "name"
                        clause.Values = []interface{}{
-                               fmt.Sprintf("val-%d", i),
-                               fmt.Sprintf("val-%d", i+1),
-                               "Checkit Nice",
+                               fmt.Sprintf("name-%d", i),
+                               fmt.Sprintf("name-%d", i+1),
+                               fmt.Sprintf("name-%d", i+2),
                        }
                case OperatorIn:

@eli-darkly eli-darkly changed the base branch from v4 to contrib May 20, 2020 00:50
@eli-darkly
Copy link
Contributor

I'm pulling this into another branch so we can adapt and extend it before releasing it on the main branch. Thanks again.

@eli-darkly eli-darkly merged commit a7be44e into launchdarkly:contrib May 20, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants