-
Notifications
You must be signed in to change notification settings - Fork 177
/
HStoreConf.java
2802 lines (2451 loc) · 119 KB
/
HStoreConf.java
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
package edu.brown.hstore.conf;
import java.io.File;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.Map.Entry;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.collections15.map.ListOrderedMap;
import org.apache.commons.configuration.PropertiesConfiguration;
import org.apache.log4j.Logger;
import edu.brown.logging.LoggerUtil;
import edu.brown.logging.LoggerUtil.LoggerBoolean;
import edu.brown.utils.ArgumentsParser;
import edu.brown.utils.ClassUtil;
import edu.brown.utils.CollectionUtil;
import edu.brown.utils.StringUtil;
public final class HStoreConf {
private static final Logger LOG = Logger.getLogger(HStoreConf.class);
private static final LoggerBoolean debug = new LoggerBoolean();
private static final LoggerBoolean trace = new LoggerBoolean();
static {
LoggerUtil.attachObserver(LOG, debug, trace);
}
/**
* Regular expression for splitting a parameter into
* prefix and suffix components
*/
protected static final String REGEX_STR = "(site|client|global)\\.([\\w\\_]+)";
protected static final Pattern REGEX_PARSE = Pattern.compile(REGEX_STR);
// ============================================================================
// GLOBAL
// ============================================================================
public final class GlobalConf extends Conf {
@ConfigProperty(
description="What version of the Java JDK should be used in this H-Store installation. " +
"Accepted values are '1.6' or '1.7'. This will only be used when compiling " +
"the system source code. It is up to you to configure your environment " +
"appropriately to match whatever this is used for this option.",
defaultString="1.7",
experimental=false
)
public String jvm_version;
@ConfigProperty(
description="The amount of memory to allocate for the various utility programs that are " +
"invoked through the commandline terminal using ant. " +
"<B>Note:</B> This is not control the amount of memory that is allocated for " +
"the database nodes or client terminals. See ${site.memory} or ${client.memory}. ",
defaultInt=2048,
experimental=false
)
public int memory;
@ConfigProperty(
description="Temporary directory used to store various artifacts related to H-Store.",
defaultString="obj",
experimental=false
)
public String temp_dir;
@ConfigProperty(
description="Default log directory for H-Store.",
defaultString="${global.temp_dir}/logs",
experimental=false
)
public String log_dir;
@ConfigProperty(
description="Options used when logging into client/server hosts. " +
"We assume that there will be no spaces in paths or options listed here.",
defaultString="-x",
experimental=false
)
public String sshoptions;
@ConfigProperty(
description="An optional command that is added as a prefix that is executed before " +
"starting the HStoreSite and clients. The command must exit with " +
"status code zero.",
defaultString="",
experimental=false
)
public String sshprefix;
@ConfigProperty(
description="The default hostname used when generating cluster configurations.",
defaultString="localhost",
experimental=false
)
public String defaulthost;
@ConfigProperty(
description="The name of the AbstractHasher class to use to figure out what partitions " +
"transactions and queries need to go to. We should not need to change this.",
defaultString="edu.brown.hashing.DefaultHasher",
experimental=true
)
public String hasher_class;
@ConfigProperty(
description="The path to a more fine-grained partitioning plan for the database.",
defaultNull=true,
experimental=true
)
public String hasher_plan;
@ConfigProperty(
description="How often in milliseconds the log4j refresh thread will check to see " +
"whether the log4j.properties file has changed. We have to do this manually " +
"because Java doesn't have the ability to get a callback when a file changes.",
defaultInt=30000,
experimental=false
)
public int log_refresh;
@ConfigProperty(
description="Measure all latencies using nanoseconds instead of milliseconds.",
defaultBoolean=false,
experimental=true
)
public boolean nanosecond_latencies;
}
// ============================================================================
// SITE
// ============================================================================
public final class SiteConf extends Conf {
@ConfigProperty(
description="HStoreSite log directory on the host that the BenchmarkController is invoked from.",
defaultString="${global.log_dir}/sites",
experimental=false
)
public String log_dir;
@ConfigProperty(
description="Whether to back-up log files before the benchmark is exceuted",
defaultBoolean=false,
experimental=false
)
public boolean log_backup;
@ConfigProperty(
description="Execute each HStoreSite with JVM asserts enabled. " +
"This should be set to false when running benchmark experiments.",
defaultBoolean=false,
experimental=false
)
public boolean jvm_asserts;
@ConfigProperty(
description="The amount of memory to allocate for each site process (in MB)",
defaultInt=2048,
experimental=false
)
public int memory;
@ConfigProperty(
description="When enabled, the HStoreSite will preload objects when the system is started. " +
"This should only be disabled for regression test cases.",
defaultBoolean=true,
experimental=false
)
public boolean preload;
@ConfigProperty(
description="Enable profiling for the HStoreSite. " +
"This data can be retrieved using the @Statistics sysproc.",
defaultBoolean=false,
experimental=false
)
public boolean profiling;
// ----------------------------------------------------------------------------
// CPU Options
// ----------------------------------------------------------------------------
@ConfigProperty(
description="When enabled, the PartitionExecutor threads will be pinned to the first n CPU cores (where " +
"n is the total number of partitions hosted by the local HStoreSite). All other threads " +
"(e.g., for network handling) will be pinned to the remaining CPU cores. If there are fewer " +
"CPU cores than partitions, then this option will be disabled. ",
defaultBoolean=true,
experimental=false
)
public boolean cpu_affinity;
@ConfigProperty(
description="When used in conjunction with ${site.cpu_affinity}, each PartitionExecutor thread will be " +
"assigned to one and only CPU core. No other thread within the HStoreSite (including all " +
"other PartitionExecutors) will be allowed to execute on that core. This configuration " +
"option is mostly used for debugging and is unlikely to provide any speed improvement " +
"because the operating system will automatically maintain CPU affinity.",
defaultBoolean=true,
experimental=false
)
public boolean cpu_affinity_one_partition_per_core;
@ConfigProperty(
description="Comma-separated list of CPU Ids (starting at zero) that the PartitionExecutors " +
"should not be scheduled to execute on. This is used whenever we need to do" +
"scaling experiments and want to avoid hyper-threading cores. We will always " +
"avoid executing on the first CPU by default because that's where the JVM likes to " +
"execute system threads.",
defaultString="0",
experimental=true
)
public String cpu_partition_blacklist;
@ConfigProperty(
description="Comma-separated list of CPU Ids (starting at zero) that the HStoreSite's " +
"utility should not be scheduled to execute on. This is used whenever we need to do" +
"scaling experiments and want to avoid hyper-threading cores.",
defaultNull=true,
experimental=true
)
public String cpu_utility_blacklist;
// ----------------------------------------------------------------------------
// Execution Options
// ----------------------------------------------------------------------------
@ConfigProperty(
description="ExecutionEngine log level.",
defaultInt=500,
experimental=false
)
public int exec_ee_log_level;
@ConfigProperty(
description="Enable execution site profiling. This will keep track of how busy each " +
"PartitionExecutor thread is during execution (i.e., the percentage of " +
"time that it spends executing a transaction versus waiting for work to " +
"be added to its queue). " +
"The profiling data collected can be retrieved using the @Statistics sysproc.",
defaultBoolean=false,
experimental=false
)
public boolean exec_profiling;
@ConfigProperty(
description="If this feature is enabled, then each HStoreSite will attempt to speculatively execute " +
"single-partition transactions whenever it completes a work request for a multi-partition " +
"transaction running on a different node.",
defaultBoolean=true,
replacedBy="site.specexec_enable",
experimental=true
)
@Deprecated
public boolean exec_speculative_execution;
@ConfigProperty(
description="If this feature is enabled, then those non-speculative single partition transactions that are " +
"deemed to never abort will be executed without undo logging. Requires Markov model estimations.",
defaultBoolean=false,
experimental=true
)
public boolean exec_no_undo_logging;
@ConfigProperty(
description="All transactions are executed without any undo logging. For testing purposes only.",
defaultBoolean=false,
experimental=true
)
public boolean exec_no_undo_logging_all;
@ConfigProperty(
description="Force all transactions to execute with undo logging. For testing purposes only.",
defaultBoolean=true,
experimental=true
)
public boolean exec_force_undo_logging_all;
@ConfigProperty(
description="If this configuration parameter is true, then H-Store will use DB2-style transaction redirects. " +
"Each request will execute as a single-partition transaction at a random partition on the node " +
"that the request originally arrives on. When the transaction makes a query request that needs " +
"to touch data from a partition that is different than its base partition, then that transaction " +
"is immediately aborted, rolled back, and restarted on the partition that has the data that it " +
"was requesting. If the transaction requested more than partition when it was aborted, then it " +
"will be executed as a multi-partition transaction on the partition that was requested most often " +
"by queries using random tie breakers). " +
"See http://ibm.co/fLR2cH for more information.",
defaultBoolean=true,
experimental=true
)
public boolean exec_db2_redirects;
@ConfigProperty(
description="Always execute transactions as single-partitioned (excluding sysprocs). If a transaction " +
"requests data on a partition that is different than where it is executing, then it is " +
"aborted, rolled back, and re-executed on the same partition as a multi-partition transaction " +
"that touches all partitions. Note that this is independent of how H-Store decides what" +
"partition to execute the transaction's Java control code on.",
defaultBoolean=true,
experimental=false
)
public boolean exec_force_singlepartitioned;
@ConfigProperty(
description="Always execute all requests as distributed transactions that lock all " +
"partitions in the cluster.",
defaultBoolean=false,
experimental=true
)
public boolean exec_force_allpartitions;
@ConfigProperty(
description="Use the VoltDB @ProcInfo annotations for stored procedures to determine whether " +
"a new request will be executed as a single-partitioned or distributed transaction. " +
"Note that if this option is enabled, any distributed transaction will have to lock all " +
"of the partitions in the cluster.",
defaultBoolean=false,
experimental=false
)
public boolean exec_voltdb_procinfo;
@ConfigProperty(
description="Always execute each transaction on a random partition on the node where the request " +
"originally arrived on. Note that this is independent of whether the transaction is " +
"selected to be single-partitioned or not. " +
"It is likely that you do not want to use this option.",
defaultBoolean=false,
experimental=false
)
public boolean exec_force_localexecution;
@ConfigProperty(
description="Whether the VoltProcedure should crash the HStoreSite when a transaction is mispredicted. " +
"A mispredicted transaction is one that was originally identified as single-partitioned " +
"but then executed a query that attempted to access multiple partitions. This is primarily " +
"used for debugging the TransactionEstimator.",
defaultBoolean=false,
experimental=false
)
public boolean exec_mispredict_crash;
@ConfigProperty(
description="If this enabled, HStoreSite will use a separate thread to process inbound requests " +
"from the clients.",
defaultBoolean=false,
experimental=false
)
public boolean exec_preprocessing_threads;
@ConfigProperty(
description="The number of TransactionPreProcessor threads to use per HStoreSite. " +
"If this parameter is set to -1, then the system will automatically use all " +
"of the non-PartitionExecutor cores for these processing threads. " +
"The ${site.exec_preprocessing_threads} parameter must be set to true. ",
defaultInt=-1,
experimental=true
)
public int exec_preprocessing_threads_count;
@ConfigProperty(
description="Use a separate TransactionPostProcessor thread in the HStoreSite to return " +
"results back to the client. This will to improve the throughput of " +
"the CommandLogWriter, since this thread will take care of all of the " +
"outbound network communication with clients.",
defaultBoolean=true,
experimental=false
)
public boolean exec_postprocessing_threads;
@ConfigProperty(
description="If this enabled with speculative execution, then HStoreSite only invoke the commit " +
"operation in the EE for the last transaction in the queued responses. This will cascade " +
"to all other queued responses successful transactions that were speculatively executed.",
defaultBoolean=true,
experimental=true
)
public boolean exec_queued_response_ee_bypass;
@ConfigProperty(
description="The maximum amount of time that the PartitionExecutor will wait for the results of a " +
"distributed query to return to the transaction's base partition. Usually if this limit " +
"is reached, then there is something very wrong with the distributed transaction protocol.",
defaultInt=10000,
experimental=true
)
public int exec_response_timeout;
@ConfigProperty(
description="If this parameter is enabled, then the PartitionExecutor will check for every SQLStmt batch " +
"for each distributed transaction contains valid WorkFragments.",
defaultBoolean=false,
experimental=true
)
public boolean exec_validate_work;
@ConfigProperty(
description="Enables the early 2PC prepare optimization.",
defaultBoolean=true,
experimental=false
)
public boolean exec_early_prepare;
@ConfigProperty(
description="Setting this configuration parameter to true allows clients to " +
"issue ad hoc query requests use the @AdHoc sysproc. This should be " +
"set to false if you are running benchmarking experiments because it " +
"will reduce the number of threads that are started per HStoreSite.",
defaultBoolean=true,
experimental=false
)
public boolean exec_adhoc_sql;
@ConfigProperty(
description="If this parameter is enabled, then the DBMS will attempt to prefetch commutative " +
"queries on remote partitions for distributed transactions.",
defaultBoolean=false,
experimental=true
)
public boolean exec_prefetch_queries;
@ConfigProperty(
description="If this parameter is enabled, then the DBMS will queue up any single-partitioned " +
"queries for later execution if they are marked as deferrable.",
defaultBoolean=false,
experimental=true
)
public boolean exec_deferrable_queries;
@ConfigProperty(
description="How often in milliseconds should the HStoreSite check for periodic work. " +
"This work includes checking for dead network connections and processing any " +
"ad-hoc SQL invocatons. You probably do not need to change this unless you " +
"want a lower latency for ad-hoc SQL queries or you want to completely remove " +
"the overhead of performing periodic checks.",
defaultInt=50,
experimental=false
)
public int exec_periodic_interval;
@ConfigProperty(
description="Enables H-Store's ExecutionEngine to track of what tuples a transaction " +
"reads and writes at each partition. " +
"This is currently only used for the OPTIMISTIC speculative execution" +
"conflict checker. " +
"See ${site.specexec_scheduler_checker}.",
defaultBoolean=false,
experimental=true
)
public boolean exec_readwrite_tracking;
// ----------------------------------------------------------------------------
// Speculative Execution Options
// ----------------------------------------------------------------------------
@ConfigProperty(
description="If this feature is enabled, then each HStoreSite will attempt to speculatively execute " +
"single-partition transactions whenever it completes a work request for a multi-partition " +
"transaction running on a different node.",
defaultBoolean=true,
experimental=true
)
public boolean specexec_enable;
@ConfigProperty(
description="This controls what conflict detection algorithm the SpecExecScheduler will use " +
"to use at run time to decide what transactions to run speculatively.",
defaultString="TABLE",
experimental=false,
enumOptions="org.voltdb.types.SpeculationConflictCheckerType"
)
public String specexec_scheduler_checker;
@ConfigProperty(
description="Speculative policy to pick the transactions to run speculatively. ",
defaultString="FIRST",
experimental=false,
enumOptions="org.voltdb.types.SpecExecSchedulerPolicyType"
)
public String specexec_scheduler_policy;
@ConfigProperty(
description="The window size to pick up txn to run speculatively. ",
defaultInt= 10,
experimental=false
)
public int specexec_scheduler_window;
@ConfigProperty(
description="If this parameter is true, then the SpecExecScheduler will not attempt to " +
"speculatively execute any transactions if the current distributed transaction " +
"is using only partitions that are all on the same site.",
defaultBoolean=false,
experimental=true
)
public boolean specexec_ignore_all_local;
@ConfigProperty(
description="If this parameter is true, then the SpecExecScheduler will not reset its internal " +
"iterator if the partition's lock queue changes in size. This will provide a minor " +
"speed up when checking for speculative transactions, but it also means that " +
"new transactions that are added to the front of the queue will be missed.",
defaultBoolean=false,
experimental=true
)
public boolean specexec_ignore_queue_size_change;
@ConfigProperty(
description="This parameter controls whether the SpecExecScheduler will ignore any " +
"interrupts from incoming WorkFragments added to its PartitionExecutor's queue. " +
"You most likely do not want to enable this because it will slow down the execution " +
"of distributed transactions.",
defaultBoolean=false,
experimental=true
)
public boolean specexec_ignore_interruptions;
@ConfigProperty(
description="Disable speculative execution at the given stall points. " ,
defaultNull=true,
experimental=false,
enumOptions="org.voltdb.types.SpeculationType"
)
public String specexec_ignore_stallpoints;
@ConfigProperty(
description="Experimental non-blocking remote query execution. All query results will be wrapped " +
"in a special VoltTable that acts as a placeholder for a remote query whose " +
"result has not returned yet. A transaction when it tries to access the real " +
"result. Otherwise, it will proceed as normal. This does not require any changes " +
"to existing stored procedure code.",
defaultBoolean=false,
experimental=true
)
public boolean specexec_nonblocking;
@ConfigProperty(
description="" +
"Note that ${site.markov_enable} must be set to true.",
defaultInt=-1,
experimental=true
)
public int specexec_unsafe_limit;
@ConfigProperty(
description="If enabled, then the SpecExecScheduler will keep track of various internal " +
"profile statistics. " +
"The profiling data collected can be retrieved using the @Statistics sysproc.",
defaultBoolean=false,
experimental=true
)
public boolean specexec_profiling;
@ConfigProperty(
description="Sample factor for speculative execution scheduler profiling (0.0 - 1.0). " +
"Note that the the ${site.specexec_profiling} parameter must also be enabled.",
defaultDouble=0.05,
experimental=true
)
public double specexec_profiling_sample;
@ConfigProperty(
description="Comma-separated list of partition ids to disable speculative execution on. " +
"This is only needed for debugging and experiments.",
defaultNull=true,
experimental=true
)
public String specexec_disable_partitions;
// ----------------------------------------------------------------------------
// Command Logging Options
// ----------------------------------------------------------------------------
@ConfigProperty(
description="If enabled, log all transaction requests to disk",
defaultBoolean=false,
experimental=true
)
public boolean commandlog_enable;
@ConfigProperty(
description="Directory for storage of command logging files",
defaultString="${global.temp_dir}/cmdlog",
experimental=true
)
public String commandlog_dir;
@ConfigProperty(
description="Timeout in milliseconds before group commit buffer flushes, if it does not fill",
defaultInt=10,
experimental=true
)
public int commandlog_timeout;
@ConfigProperty(
description="If enabled, then the CommandLogWriter will keep track of various internal " +
"profile statistics.",
defaultBoolean=false,
experimental=true
)
public boolean commandlog_profiling;
// ----------------------------------------------------------------------------
// AntiCache Options
// ----------------------------------------------------------------------------
@ConfigProperty(
description="Enable the anti-cache feature. This requires that the system " +
"is compiled with ${site.anticache_build} set to true.",
defaultBoolean=false,
experimental=true
)
public boolean anticache_enable;
@ConfigProperty(
description="Enable anti-caching warmup feature. This requires that the system "+
"is compiled with both ${site.anticache_enabled} and ${site.anticache_build "+
"set to true.",
defaultBoolean=true,
experimental=true
)
public boolean anticache_warmup_eviction_enable;
@ConfigProperty(
description="Reserved eviction time for anti-caching after warmup of the benchmark. This requires that the system "+
"is compiled with ${site.anticache_warmup_eviction_enable} "+
"set to true.",
//defaultInt = 450000,
//defaultInt = 0000,
defaultInt = 10000,
experimental=true
)
public int anticache_warmup_eviction_time;
@ConfigProperty(
description="Enable multilevel anti-caching feature. This requires that the system "+
"is compiled with both ${site.anticache_enabled} and ${site.anticache_build "+
"set to true.",
defaultBoolean=false,
experimental=true
)
public boolean anticache_enable_multilevel;
@ConfigProperty(
description="Build the anti-cache feature when compiling the H-Store source code. " +
"You probably always want to leave this flag enabled.",
defaultBoolean=true,
experimental=true
)
public boolean anticache_build;
@ConfigProperty(
description="Use a doubly-linked list for the anti-cache's LRU tracker. " +
"This will increase the memory overhead of the anti-cache's metatadata " +
"but it will improve the performance of eviction operations.",
defaultBoolean=true,
experimental=true
)
public boolean anticache_reversible_lru;
@ConfigProperty(
description="Enable the anti-cache profiling.",
defaultBoolean=false,
experimental=true
)
public boolean anticache_profiling;
@ConfigProperty(
description="The directory to use to store the evicted tuples.",
defaultString="${global.temp_dir}/anticache",
experimental=true
)
public String anticache_dir;
@ConfigProperty(
description="Configuration options for multilevel anticaching. Up to five " +
"levels can be set up. The format is type,blocking,block_size,db_size; " +
"The default is 'NVM,true,256K,64G;BERKELEY,false,256K,128G'.",
defaultString="NVM,true,256K,64G;BERKELEY,false,256K,128G",
experimental=true
)
public String anticache_levels;
@ConfigProperty(
description="The directories used for multilevel anticaching databases.",
defaultString="${global.temp_dir}/ac-level1;${global.temp_dir}/ac-level2;" +
"${global.temp_dir}/ac-level3;${global.temp_dir}/ac-level4;" +
"${global.temp_dir}/ac-level5",
experimental=true
)
public String anticache_multilevel_dirs;
@ConfigProperty(
description="The size (in bytes) for the anti-cache's blocks on disk." +
"WARNING: this seem to be buggy/broken. Please leave the default " +
"value of 256KB (262144) unless you know what you're doing.",
defaultLong=262144, // 256kb
//defaultLong=1048576, // 1MB
experimental=true
)
public long anticache_block_size;
@ConfigProperty(
description="The size of the anticache database.",
defaultString="2G",
experimental=true
)
public String anticache_dbsize;
@ConfigProperty(
description="Reset the anti-cache database directory for each partition when " +
"the HStoreSite is started.",
defaultBoolean=true,
experimental=true
)
public boolean anticache_reset;
@ConfigProperty(
description="How often in milliseconds should the AntiCacheManager check whether " +
"the HStoreSite is using too much memory and should start evicting tuples.",
defaultInt=30000,
experimental=true
)
public int anticache_check_interval;
@ConfigProperty(
description="Memory usage threshold, in MB, at which to start evicting",
defaultInt=200,
experimental=true
)
public int anticache_threshold_mb;
@ConfigProperty(
description="Maximum number of blocks evicted on this site",
defaultInt=200000,
experimental=true
)
public int anticache_max_evicted_blocks;
@ConfigProperty(
description="Maximum number of blocks per eviction",
defaultInt=200,
experimental=true
)
public int anticache_blocks_per_eviction;
@ConfigProperty(
description="Policy specifying how to distribute eviction load over partitions and tables.",
defaultString="UNEVICTION_RATIO",
experimental=true,
enumOptions="org.voltdb.types.AntiCacheEvictionPolicyType"
)
public String anticache_eviction_distribution;
@ConfigProperty(
description="Turn on batching for anticaching",
defaultBoolean=false,
experimental=false
)
public boolean anticache_batching;
@ConfigProperty(
description="Type of database for the highest level eviction",
defaultString="BERKELEY",
experimental=true,
enumOptions="org.voltdb.types.AntiCacheDBType"
)
public String anticache_dbtype;
@ConfigProperty(
description="Top level database blocks for evictions",
defaultBoolean=false,
experimental=true
)
public boolean anticache_db_blocks;
@ConfigProperty(
description="Merge entire block when unevicting. False merges just a single tuple",
defaultBoolean=true,
experimental=true
)
public boolean anticache_block_merge;
@ConfigProperty(
description="Enable the anti-cache counted merge-back feature. This requires that the system " +
"is compiled with ${site.anticache_enable} set to true and " +
"${site.anticache_db_blocks} set to true.",
defaultBoolean=false,
experimental=true
)
public boolean anticache_counter;
@ConfigProperty(
description="Enable the anti-cache timestamps feature. This requires that the system " +
"is compiled with ${site.anticache_enable} set to true.",
defaultBoolean=true,
experimental=true
)
public boolean anticache_timestamps;
@ConfigProperty(
description="Enable the anti-cache timestamps use a prime sample strategy instead of radom-tuple sampling." +
"This is compiled with ${site.anticache_timestamps} set to true.",
defaultBoolean=true,
experimental=true
)
public boolean anticache_timestamps_prime;
// ----------------------------------------------------------------------------
// Storage MMAP Options
// ----------------------------------------------------------------------------
@ConfigProperty(
description="Use mmap to store database on local filesystem. ",
defaultBoolean=false,
experimental=true
)
public boolean storage_mmap;
@ConfigProperty(
description="Location of where H-Store will store mmap files for each partition. " +
"This is only used if ${site.storage_mmap} is enabled. ",
defaultString="${global.temp_dir}/mmap",
experimental=true
)
public String storage_mmap_dir;
@ConfigProperty(
description="The size (in bytes) for the mmap file objects on NVM device.",
defaultLong=2097152, // 2MB
experimental=true
)
public long storage_mmap_file_size;
@ConfigProperty(
description="Reset the mmap directory for each partition when " +
"the HStoreSite is started.",
defaultBoolean=true,
experimental=true
)
public boolean storage_mmap_reset;
@ConfigProperty(
description="Frequency with which changes are synced via msync with memory",
defaultLong=100000,
experimental=true
)
public long storage_mmap_sync_frequency;
// ----------------------------------------------------------------------------
// ARIES Physical Recovery Options
// ----------------------------------------------------------------------------
@ConfigProperty(
description="ARIES recovery enabled. ",
defaultBoolean=false,
experimental=true
)
public boolean aries;
@ConfigProperty(
description="ARIES forward processing only enabled, recovery disabled - for throughput evaluation",
defaultBoolean=true,
experimental=true
)
public boolean aries_forward_only;
@ConfigProperty(
description="Location of where H-Store will store ARIES log files for each partition. " +
"This is only used if ${site.aries} is enabled. ",
defaultString="${global.temp_dir}/aries",
experimental=true
)
public String aries_dir;
@ConfigProperty(
description="Reset the ARIES directory for each partition when " +
"the HStoreSite is started (disabled by default).",
defaultBoolean=false,
experimental=true
)
public boolean aries_reset;
// ----------------------------------------------------------------------------
// Logical Recovery Options
// ----------------------------------------------------------------------------
@ConfigProperty(
description="Logical recovery using snapshots enabled. ",
defaultBoolean=false,
experimental=true
)
public boolean snapshot;
@ConfigProperty(
description="Location of where H-Store will store snapshot files for each partition's tables. " +
"This is only used if ${site.snapshot} is enabled. ",
defaultString="${global.temp_dir}/snapshot",
experimental=true
)
public String snapshot_dir;
@ConfigProperty(
description="Reset the snapshot directory for each partition when " +
"the HStoreSite is started (disabled by default).",
defaultBoolean=false,
experimental=true
)
public boolean snapshot_reset;
@ConfigProperty(
description="How often in milliseconds should we take snapshots in HStoreSite ",
defaultInt=10000,
experimental=true
)
public int snapshot_interval;
// ----------------------------------------------------------------------------
// MapReduce Options
// ----------------------------------------------------------------------------
@ConfigProperty(
description="If set to true, then the MAP phase of a MapReduceTransaction will be " +
"executed as a distributed transaction that blocks the entire cluster. This " +
"ensures that the aggregates computed by the MAP phase reads from consistent " +
"a consistent state of the database.",
defaultBoolean=true,
experimental=true
)
public boolean mr_map_blocking;
@ConfigProperty(
description="The way to execute reduce job, blocking or non-blocking by MapReduceHelperThread",
defaultBoolean=true,
experimental=true
)
public boolean mr_reduce_blocking;
// ----------------------------------------------------------------------------
// Networking Options
// ----------------------------------------------------------------------------
@ConfigProperty(
description="How often in milliseconds the HStoreCoordinator at each HStoreSite should send " +
"heartbeat notifications to the other coordinators in the cluster. ",
defaultInt=10000,
experimental=false
)
public int network_heartbeats_interval;
@ConfigProperty(
description="How long in milliseconds should the HStoreCoordinator wait to establish " +
"the initial connections to other nodes in the cluster at start-up. " +
"Increasing this number will help with larger cluster deployments.",
defaultInt=15000,
experimental=false
)
public int network_startup_wait;
@ConfigProperty(
description="If the HStoreCoordinator fails to connect to all of the other " +
"nodes in the cluster after ${site.network_startup_wait} has passed, " +
"this parameter defines the number of times that it is allowed to attempt " +
"to reconnect to them. This helps with some rare network issues with the " +
"ProtoRpc framework where the initial network connection attempt hangs " +
"or fails, even though both sites are available.",
defaultInt=2,
experimental=false
)
public int network_startup_retries;
@ConfigProperty(
description="Max size of queued transactions before an HStoreSite will stop accepting new requests " +
"from clients and will block the network connections.",
defaultInt=5000,
replacedBy="site.network_incoming_limit_txns",
experimental=false
)
@Deprecated
public int network_incoming_max_per_partition;
@ConfigProperty(
description="Max size of queued transactions before an HStoreSite will stop accepting new requests " +
"from clients and will block the network connections. This is per partition.",
defaultInt=8000,
experimental=false
)
public int network_incoming_limit_txns;
@ConfigProperty(