Skip to content

Commit aaa73c1

Browse files
committed
[Java] Support turning on access checks independently of bounds checks.
Introduces the system property: ``` sbe.enable.access.order.checks ```
1 parent d3f9abc commit aaa73c1

File tree

5 files changed

+193
-173
lines changed

5 files changed

+193
-173
lines changed

sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/java/JavaGenerator.java

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -280,8 +280,12 @@ private static CharSequence generateFieldOrderStates(final FieldOrderModel field
280280
{
281281
final StringBuilder sb = new StringBuilder();
282282

283-
sb.append(" private static final boolean DEBUG_MODE = ")
283+
sb.append(" private static final boolean ENABLE_BOUNDS_CHECKS = ")
284284
.append("!Boolean.getBoolean(\"agrona.disable.bounds.checks\");\n\n");
285+
sb.append(" private static final boolean ENABLE_ACCESS_ORDER_CHECKS = ")
286+
.append("Boolean.parseBoolean(System.getProperty(\n")
287+
.append(" \"sbe.enable.access.order.checks\",\n")
288+
.append(" Boolean.toString(ENABLE_BOUNDS_CHECKS)));\n\n");
285289

286290
sb.append(" /**\n");
287291
sb.append(" * The states in which a encoder/decoder/codec can live.\n");
@@ -329,7 +333,7 @@ private static CharSequence generateFieldOrderStateTransitions(
329333

330334
final StringBuilder sb = new StringBuilder();
331335

332-
sb.append(indent).append("if (DEBUG_MODE)\n")
336+
sb.append(indent).append("if (ENABLE_ACCESS_ORDER_CHECKS)\n")
333337
.append(indent).append("{\n");
334338

335339
generateFieldOrderStateTransitions(
@@ -352,7 +356,7 @@ private static CharSequence generateFieldOrderStateTransitions(
352356
{
353357
final StringBuilder sb = new StringBuilder();
354358

355-
sb.append(indent).append("if (DEBUG_MODE)\n")
359+
sb.append(indent).append("if (ENABLE_ACCESS_ORDER_CHECKS)\n")
356360
.append(indent).append("{\n")
357361
.append(indent).append(" final int remaining = ").append(remainingExpression).append(";\n")
358362
.append(indent).append(" if (remaining == 0)\n")
@@ -432,7 +436,7 @@ private static CharSequence generateFieldOrderStateTransitionsForNextGroupElemen
432436
{
433437
final StringBuilder sb = new StringBuilder();
434438

435-
sb.append(indent).append("if (DEBUG_MODE)\n")
439+
sb.append(indent).append("if (ENABLE_ACCESS_ORDER_CHECKS)\n")
436440
.append(indent).append("{\n")
437441
.append(indent).append(" final int remaining = ").append(remainingExpression).append(";\n")
438442
.append(indent).append(" if (remaining > 1)\n")
@@ -468,7 +472,7 @@ private static CharSequence generateFieldOrderStateTransitionForDecoderWrap(
468472
final String actingVersion)
469473
{
470474
final StringBuilder sb = new StringBuilder();
471-
sb.append(indent).append("if (DEBUG_MODE)\n")
475+
sb.append(indent).append("if (ENABLE_ACCESS_ORDER_CHECKS)\n")
472476
.append(indent).append("{\n")
473477
.append(indent).append(" switch(" + actingVersion + ")")
474478
.append(indent).append(" {\n");
@@ -3093,7 +3097,7 @@ private CharSequence generateDecoderFlyweightCode(
30933097
" sbeSkip();\n" +
30943098
" final int decodedLength = encodedLength();\n" +
30953099
" limit(currentLimit);\n\n" +
3096-
" if (DEBUG_MODE)\n" +
3100+
" if (ENABLE_ACCESS_ORDER_CHECKS)\n" +
30973101
" {\n" +
30983102
" codecState(currentCodecState);\n" +
30993103
" }\n\n" +
@@ -3221,7 +3225,7 @@ private CharSequence generateEncoderFlyweightCode(
32213225
" this.initialOffset = offset;\n" +
32223226
" this.offset = offset;\n" +
32233227
" limit(offset + BLOCK_LENGTH);\n\n" +
3224-
" if (DEBUG_MODE)\n" +
3228+
" if (ENABLE_ACCESS_ORDER_CHECKS)\n" +
32253229
" {\n" +
32263230
" codecState(" + qualifiedStateCase(fieldOrderModel.latestVersionWrappedState()) + ");\n" +
32273231
" }\n\n" +

sbe-tool/src/main/java/uk/co/real_logic/sbe/ir/generated/FrameCodecDecoder.java

Lines changed: 28 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,11 @@
1111
@SuppressWarnings("all")
1212
public final class FrameCodecDecoder
1313
{
14-
private static final boolean DEBUG_MODE = !Boolean.getBoolean("agrona.disable.bounds.checks");
14+
private static final boolean ENABLE_BOUNDS_CHECKS = !Boolean.getBoolean("agrona.disable.bounds.checks");
15+
16+
private static final boolean ENABLE_ACCESS_ORDER_CHECKS = Boolean.parseBoolean(System.getProperty(
17+
"sbe.enable.access.order.checks",
18+
Boolean.toString(ENABLE_BOUNDS_CHECKS)));
1519

1620
/**
1721
* The states in which a encoder/decoder/codec can live.
@@ -123,7 +127,7 @@ public FrameCodecDecoder wrap(
123127
this.actingVersion = actingVersion;
124128
limit(offset + actingBlockLength);
125129

126-
if (DEBUG_MODE)
130+
if (ENABLE_ACCESS_ORDER_CHECKS)
127131
{
128132
switch(actingVersion) {
129133
case 0:
@@ -171,7 +175,7 @@ public int sbeDecodedLength()
171175
final int decodedLength = encodedLength();
172176
limit(currentLimit);
173177

174-
if (DEBUG_MODE)
178+
if (ENABLE_ACCESS_ORDER_CHECKS)
175179
{
176180
codecState(currentCodecState);
177181
}
@@ -241,7 +245,7 @@ public static int irIdMaxValue()
241245

242246
public int irId()
243247
{
244-
if (DEBUG_MODE)
248+
if (ENABLE_ACCESS_ORDER_CHECKS)
245249
{
246250
if (codecState() == CodecState.NOT_WRAPPED)
247251
{
@@ -300,7 +304,7 @@ public static int irVersionMaxValue()
300304

301305
public int irVersion()
302306
{
303-
if (DEBUG_MODE)
307+
if (ENABLE_ACCESS_ORDER_CHECKS)
304308
{
305309
if (codecState() == CodecState.NOT_WRAPPED)
306310
{
@@ -359,7 +363,7 @@ public static int schemaVersionMaxValue()
359363

360364
public int schemaVersion()
361365
{
362-
if (DEBUG_MODE)
366+
if (ENABLE_ACCESS_ORDER_CHECKS)
363367
{
364368
if (codecState() == CodecState.NOT_WRAPPED)
365369
{
@@ -403,7 +407,7 @@ public static int packageNameHeaderLength()
403407

404408
public int packageNameLength()
405409
{
406-
if (DEBUG_MODE)
410+
if (ENABLE_ACCESS_ORDER_CHECKS)
407411
{
408412
switch (codecState())
409413
{
@@ -421,7 +425,7 @@ public int packageNameLength()
421425

422426
public int skipPackageName()
423427
{
424-
if (DEBUG_MODE)
428+
if (ENABLE_ACCESS_ORDER_CHECKS)
425429
{
426430
switch (codecState())
427431
{
@@ -444,7 +448,7 @@ public int skipPackageName()
444448

445449
public int getPackageName(final MutableDirectBuffer dst, final int dstOffset, final int length)
446450
{
447-
if (DEBUG_MODE)
451+
if (ENABLE_ACCESS_ORDER_CHECKS)
448452
{
449453
switch (codecState())
450454
{
@@ -468,7 +472,7 @@ public int getPackageName(final MutableDirectBuffer dst, final int dstOffset, fi
468472

469473
public int getPackageName(final byte[] dst, final int dstOffset, final int length)
470474
{
471-
if (DEBUG_MODE)
475+
if (ENABLE_ACCESS_ORDER_CHECKS)
472476
{
473477
switch (codecState())
474478
{
@@ -492,7 +496,7 @@ public int getPackageName(final byte[] dst, final int dstOffset, final int lengt
492496

493497
public void wrapPackageName(final DirectBuffer wrapBuffer)
494498
{
495-
if (DEBUG_MODE)
499+
if (ENABLE_ACCESS_ORDER_CHECKS)
496500
{
497501
switch (codecState())
498502
{
@@ -513,7 +517,7 @@ public void wrapPackageName(final DirectBuffer wrapBuffer)
513517

514518
public String packageName()
515519
{
516-
if (DEBUG_MODE)
520+
if (ENABLE_ACCESS_ORDER_CHECKS)
517521
{
518522
switch (codecState())
519523
{
@@ -573,7 +577,7 @@ public static int namespaceNameHeaderLength()
573577

574578
public int namespaceNameLength()
575579
{
576-
if (DEBUG_MODE)
580+
if (ENABLE_ACCESS_ORDER_CHECKS)
577581
{
578582
switch (codecState())
579583
{
@@ -591,7 +595,7 @@ public int namespaceNameLength()
591595

592596
public int skipNamespaceName()
593597
{
594-
if (DEBUG_MODE)
598+
if (ENABLE_ACCESS_ORDER_CHECKS)
595599
{
596600
switch (codecState())
597601
{
@@ -614,7 +618,7 @@ public int skipNamespaceName()
614618

615619
public int getNamespaceName(final MutableDirectBuffer dst, final int dstOffset, final int length)
616620
{
617-
if (DEBUG_MODE)
621+
if (ENABLE_ACCESS_ORDER_CHECKS)
618622
{
619623
switch (codecState())
620624
{
@@ -638,7 +642,7 @@ public int getNamespaceName(final MutableDirectBuffer dst, final int dstOffset,
638642

639643
public int getNamespaceName(final byte[] dst, final int dstOffset, final int length)
640644
{
641-
if (DEBUG_MODE)
645+
if (ENABLE_ACCESS_ORDER_CHECKS)
642646
{
643647
switch (codecState())
644648
{
@@ -662,7 +666,7 @@ public int getNamespaceName(final byte[] dst, final int dstOffset, final int len
662666

663667
public void wrapNamespaceName(final DirectBuffer wrapBuffer)
664668
{
665-
if (DEBUG_MODE)
669+
if (ENABLE_ACCESS_ORDER_CHECKS)
666670
{
667671
switch (codecState())
668672
{
@@ -683,7 +687,7 @@ public void wrapNamespaceName(final DirectBuffer wrapBuffer)
683687

684688
public String namespaceName()
685689
{
686-
if (DEBUG_MODE)
690+
if (ENABLE_ACCESS_ORDER_CHECKS)
687691
{
688692
switch (codecState())
689693
{
@@ -743,7 +747,7 @@ public static int semanticVersionHeaderLength()
743747

744748
public int semanticVersionLength()
745749
{
746-
if (DEBUG_MODE)
750+
if (ENABLE_ACCESS_ORDER_CHECKS)
747751
{
748752
switch (codecState())
749753
{
@@ -761,7 +765,7 @@ public int semanticVersionLength()
761765

762766
public int skipSemanticVersion()
763767
{
764-
if (DEBUG_MODE)
768+
if (ENABLE_ACCESS_ORDER_CHECKS)
765769
{
766770
switch (codecState())
767771
{
@@ -784,7 +788,7 @@ public int skipSemanticVersion()
784788

785789
public int getSemanticVersion(final MutableDirectBuffer dst, final int dstOffset, final int length)
786790
{
787-
if (DEBUG_MODE)
791+
if (ENABLE_ACCESS_ORDER_CHECKS)
788792
{
789793
switch (codecState())
790794
{
@@ -808,7 +812,7 @@ public int getSemanticVersion(final MutableDirectBuffer dst, final int dstOffset
808812

809813
public int getSemanticVersion(final byte[] dst, final int dstOffset, final int length)
810814
{
811-
if (DEBUG_MODE)
815+
if (ENABLE_ACCESS_ORDER_CHECKS)
812816
{
813817
switch (codecState())
814818
{
@@ -832,7 +836,7 @@ public int getSemanticVersion(final byte[] dst, final int dstOffset, final int l
832836

833837
public void wrapSemanticVersion(final DirectBuffer wrapBuffer)
834838
{
835-
if (DEBUG_MODE)
839+
if (ENABLE_ACCESS_ORDER_CHECKS)
836840
{
837841
switch (codecState())
838842
{
@@ -853,7 +857,7 @@ public void wrapSemanticVersion(final DirectBuffer wrapBuffer)
853857

854858
public String semanticVersion()
855859
{
856-
if (DEBUG_MODE)
860+
if (ENABLE_ACCESS_ORDER_CHECKS)
857861
{
858862
switch (codecState())
859863
{

0 commit comments

Comments
 (0)