Skip to content

Commit

Permalink
[#722] MUPIP REPLIC -SOURCE -TRIGUPDATE replicates updates inside tri…
Browse files Browse the repository at this point in the history
…ggers too

Background
----------
* Below is pasted from https://gitlab.com/YottaDB/DB/YDB/-/issues/722#description

  _Database updates made by triggers are [not propagated by the replication
  stream](https://docs.yottadb.com/ProgrammersGuide/triggers.html#multisite-database-replication) because
  the design point was that database updates from triggers are derivable from the primary update. However,
  this means that times (and other data such as process ids) are not replicated and hence not easily
  recreated. The proposed enhancement adds an option when starting a Source Server to include trigger
  updates in the replication stream._

Core changes
------------
* `sr_unix/mupip_cmd.c` has a new `TRIGUPDATE` option in the `gtmsource_qual[]` array.

* `-trigupdate` is allowed only if `-secondary` is also specified. This limits the possible commands that
  can specify `-trigupdate` to `mupip replic -source -start` or `mupip replic -source -activate` when they
  also specify `-secondary=...`. Towards this, `sr_unix/mupip_cmd_disallow.c` is modified to disallow
  `TRIGUPDATE` if `SECONDARY` is not also specified.

* An active source server startup (`mupip replic -source -start -secondary=...`) or a source server activation
  (`mupip replic -source -activate -secondary=...`) now supports an optional `-trigupdate` option which when
  specified implies that database updates made inside trigger invocations are also included in the replication
  stream.

* The fact that a `-trigupdate` option was specified is noted down in the boolean valued variable
  `gtmsource_options.trigupdate` (set to FALSE if `-trigupdate` was not specified and TRUE if it was).

  For a `mupip replic -source -start` command, the source server that eventually starts is forked off the
  process that specifies the source server startup command and so `gtmsource_options.trigupdate` is inherited
  implicitly and is therefore usable.

  But for a `mupip replic -source -activate` command, the process that specifies this command is different
  from the concurrently running source server and so `gtmsource_options.trigupdate` is only usable in the
  activate process and not transferred to the running source server. It is therefore necessary to copy over
  this user specified option from the activate command to the corresponding source server specific structure
  in the journal pool (`gtmsource_local` structure which is in shared memory). This copy happens in
  `sr_unix/jnlpool_init.c` (for a `mupip replic -source -start`) and in `sr_unix/gtmsource_mode_change.c`
  (for a `mupip replic -source -activate` command).

  And because of the above, the replication filter can safely use `jnlpool->gtmsource_local->trigupdate`
  when it needs to know whether `-trigupdate` was specified if the caller is a source server.

* The replication filter functions `jnl_v44TOv44()` and `jnl_v44TOv24()` were modified in `sr_port/repl_filter.c`
  to check if `-trigupdate` was specified (checked using `gtmsource_local->trigupdate`). And if so, they
  replicate updates that happen inside triggers (those which have `JS_NOT_REPLICATED_MASK` bit set in the
  `nodeflags` member). The `nodeflags` member is modified to clear the `JS_NOT_REPLICATED_MASK` bit in such
  records.

  Additionally they do not replicate any LGTRIG (trigger definitions) or ZTRIG (ZTRIGGER command) or
  $ZTWORMHOLE jnl records.

  Both these filter functions had code that previously issued an error if no conversion occurred as it was
  an out-of-design scenario. That code has now been replaced with code that generates a NULL record since in
  this case the entire transaction consists of journal records that are not replicated. This NULL record
  logic was copied over from the filter function `jnl_v44TOv22()` which was otherwise unchanged because
  that function is only used in case the receiver side is pre-V6.2-000 in which case it does not support
  LGTRIG records (issues a `%YDB-E-REPLNOHASHTREC` error).

  `jrec_null.bitmask.filler` is also initialized in `INITIALIZE_V44_NULL_RECORD` now that this macro is used
  for `jnl_v44TOv44()` filter conversion too (not just for `jnl_v44TOv22()` conversion like previously).

Misc changes
------------
* Since the `gtmsource_local_struct` structure has a new `trigupdate` member, `repl_inst_dump_gtmsourcelocal()`
  in `sr_unix/repl_inst_dump.c` was modified to dump this new field.

* Initialization of default values for `CONNECT_PARMS` was duplicated in `sr_unix/gtmsource_get_opt.c` in
  the `if` and `else` blocks. That is now moved to before the `if` thereby avoiding the duplication.

* A stale comment in `sr_port/jnl.h` was fixed (`align_str` was no longer in use like `ztworm_str` or
  `lgtrig_str` was).

* Regenerated GTMDefinedTypesInit*.m for sr_x86_64,sr_aarch64,sr_armv6l due to `gtmsource_local_struct` and
  `gtmsource_options_t` structure layout/size changes.

* Fixed a pre-existing issue with `gv_target` maintenance in `sr_port/gvcst_jrt_null.c`.

  Some background first. After enhancing the YDBTest test framework to test with `-trigupdate`, I noticed
  a rare test failure with the following symptom.

  This issue showed up only now due to more NULL records possible with the use of `-trigupdate`.

  ```sh
  $ cat ##REMOTE_PATH##/online_rollback_1_10/trestartrootverify/instance2/RCVR_22_01_55_4.log.updproc
  .
  .
  Thu Feb 16 22:02:29 2023 :  ----> TPRETRY for sequence number 11252 [0x2bf4]
  Thu Feb 16 22:02:29 2023 : Jnl seq no : 11252 [0x2bf4];Rectype : 17 - TCOM
  %YDB-F-ASSERT, Assert failed in sr_port/gvcst_root_search.c line 210 for expression (cs_addrs == gv_target->gd_csa)
  %YDB-I-IPCNOTDEL, Thu Feb 16 22:02:29 2023 : Update process did not delete IPC resources for region AREG
  ```

  And below was the debugger analysis.

  ```c
  (gdb) where
  #8  gvcst_redo_root_search () at sr_port/gvcst_root_search.c:210
  #9  t_retry (failure=cdb_sc_gvtrootmod2) at sr_port/t_retry.c:558
  #10 t_end (hist1=0x0, hist2=0x0, ctn=18446744071629176832) at sr_port/t_end.c:1896
  #11 gvcst_jrt_null (salvaged=0) at sr_port/gvcst_jrt_null.c:72
  #12 updproc_actions (gld_db_files=0x62d000001ac0) at sr_port/updproc.c:1046
  #13 updproc () at sr_port/updproc.c:502
  #14 mupip_main (argc=3, argv=0x7ffc86786618, envp=0x7ffc86786638) at sr_unix/mupip_main.c:122
  #15 dlopen_libyottadb (argc=3, argv=0x7ffc86786618, envp=0x7ffc86786638, main_func=0x563cba3c1020 "mupip_main") at sr_unix/dlopen_libyottadb.c:151
  #16 main (argc=3, argv=0x7ffc86786618, envp=0x7ffc86786638) at sr_unix/mupip.c:22

  (gdb) f 8
  #8  gvcst_redo_root_search () at sr_port/gvcst_root_search.c:210
  210             assert(cs_addrs == gv_target->gd_csa);

  (gdb) p cs_addrs
  $1 = (sgmnt_addrs *) 0x62d000026040

  (gdb) p gv_target->gd_csa
  $2 = (sgmnt_addrs *) 0x62d00001e840

  (gdb) p cs_addrs->sgm_info_ptr->gv_cur_region->rname
  $4 = "DREG", '\000' <repeats 27 times>

  (gdb) p $2->sgm_info_ptr->gv_cur_region->rname
  $5 = "DEFAULT", '\000' <repeats 24 times>

  (gdb) p gv_target->gvname
  $6 = {var_name = {char_len = 0, len = 31, addr = 0x62d000057f10 "jrandomvariableinimptpfillprogr"}, hash_code = 1897224776, marked = 0}
  ```

  ```m
  YDB>write $view("region","^jrandomvariableinimptpfillprogr")
  DEFAULT
  ```

  So the assert failure is because `gv_target` pointed to a global variable name that mapped to the `DEFAULT`
  region whereas the current region were writing the NULL record was for `DREG`.

  The cause of the assert was the call to `gvcst_redo_root_search()` in line 558.

  **sr_port/t_retry.c**
  ```c
      545   case cdb_sc_gvtrootmod2:
      546           if (!redo_root_search_done)
      547                   RESET_ALL_GVT_CLUES;
      548           /* It is possible for a read-only transaction to release crit after detecting gvtrootmod2, during
      549            * which time yet another root block could have moved. In that case, the MISMATCH_ROOT_CYCLES check
      550            * would have already done the redo_root_search.
      551            */
      552           assert(!redo_root_search_done || !update_trans);
      553           if (WANT_REDO_ROOT_SEARCH)
      554           {       /* Note: An online rollback can occur DURING gvcst_redo_root_search, which can remove gbls
      555                    * from db, leading to gv_target->root being 0, even though failure code is not
      556                    * cdb_sc_onln_rlbk2
      557                    */
  --> 558                   gvcst_redo_root_search();
      559           }
  ```

  The `cdb_sc_gvtrootmod2` failure code is because of a concurrent online rollback on the receiver side.
  But in order to handle it, we invoke the `gvcst_redo_root_search()` if the `WANT_REDO_ROOT_SEARCH` macro
  returned TRUE.

  The macro is defined as follows.

  **sr_port/t_retry.c**
  ```c
      67 /* In mu_reorg if we are in gvcst_bmp_mark_free, we actually have a valid gv_target. Find its root before the next iteration
      68  * in mu_reorg.
      69  */
      70 #define WANT_REDO_ROOT_SEARCH                                                           \
  --> 71                         (       (NULL != gv_target)                                     \
      72                              && (DIR_ROOT != gv_target->root)                           \
      73                              && !redo_root_search_done                                  \
      74                              && !TREF(in_gvcst_redo_root_search)                        \
      75                              && !mu_reorg_upgrd_dwngrd_in_prog                          \
      76                              && !mu_reorg_encrypt_in_prog                               \
      77                              && (!TREF(in_gvcst_bmp_mark_free) || mu_reorg_process)     \
      78                         )
  ```

  Line 71 is the issue. `gv_target` should have been `NULL` in the `gvcst_jrt_null()` case since we are
  not dealing with any global name (the `NULL` journal record is to denote an empty transaction).

  Given the above analysis, the fix is to set `gv_target` to `NULL` in `sr_port/gvcst_jrt_null.c`.

  Additionally, `gv_currkey->base[0]` had to also be cleared to keep it in sync with gv_target in DEBUG code
  (just like is being already done in the `GVTR_SWITCH_REG_AND_HASHT_BIND_NAME` macro in `sr_unix/gv_trigger.h`).

* Fixed `sr_unix/mupip_cmd_disallow.c` to disallow `ZEROBACKLOG` option if `SHUTDOWN` is not also specified.
  I noticed this issue while adding disallow code for `TRIGUPDATE`. The `ZEROBACKLOG` option was introduced
  in 60e7e2d (GT.M V6.3-000) which was many years ago but this option was allowed to be specified in various
  source server commands that had nothing to do with this option (for example, the command
  `mupip replic -source -deactivate -zerobacklog` was allowed but it did not make any sense). This misfeature
  is fixed in the current commit by generating a `%YDB-E-CLIERR` error for such meaningless commands.

* Made `cstart` and `jstart` variables DEBUG_ONLY in `sr_port/repl_filter.c`. This removed all the
  `clang-tidy` warnings related to these variables in the following reference files.
  - ci/tidy_warnings_release_x86_64.ref
  - ci/tidy_warnings_release_aarch64.ref

  In addition, a `Value stored to 'prefix' is never read [clang-analyzer-deadcode.DeadStores]` warning also
  no longer shows up after all changes to `sr_port/repl_filter.c` in this commit. Not exactly sure where
  the change happened but not spending time on it since the warning has now disappeared. This meant removing
  one line of warning from the following reference files.
  - ci/tidy_warnings_release_x86_64.ref
  - ci/tidy_warnings_release_aarch64.ref
  - ci/tidy_warnings_debug_aarch64.ref
  - ci/tidy_warnings_debug_x86_64.ref

* Enhanced `ci/create_tidy_warnings.sh` to capture detail in case of compilation errors.

  As a background, I had a `clang-tidy-amd64` pipeline job fail because my changes to `sr_port/repl_filter.c`
  had a compilation error. In this case, the `clang-tidy-14` call in `ci/create_tidy_warnings.sh` exited with
  a non-zero status but since we had redirected the stderr to `/dev/null` (i.e. `2>/dev/null`) we had no error
  text to look at to see why it exited abnormally. I had to run the same command locally to determine the
  cause of the error.

  This is fixed by redirecting stderr to `$output_dir/tidy_warnings.err`. And if the `clang-tidy` exited with
  a non-zero status, we examine this file for any lines containing `error` (case insensitive). We print those
  lines in the standard output. That way it is more likely to give helpful information as to which C file
  had compilation troubles.

  In my case, I saw the following 2 lines of extra output indicating `sr_port/repl_filter.c` had compilation
  errors.

  ```
  4617 warnings and 20 errors generated.
  Error while processing /builds/nars1/YDB/sr_port/repl_filter.c.
  ```
  • Loading branch information
nars1 committed Mar 7, 2023
1 parent e912848 commit a2c2efb
Show file tree
Hide file tree
Showing 21 changed files with 756 additions and 546 deletions.
13 changes: 11 additions & 2 deletions ci/create_tidy_warnings.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

#################################################################
# #
# Copyright (c) 2020-2022 YottaDB LLC and/or its subsidiaries. #
# Copyright (c) 2020-2023 YottaDB LLC and/or its subsidiaries. #
# All rights reserved. #
# #
# This source code contains the intellectual property #
Expand Down Expand Up @@ -80,10 +80,19 @@ CAT_EOF

# While we don't have file names with embedded spaces, we still use -print0/-0
# as a good practice, and shellcheck nudges us there as well.
set +e # Needed to record the failures with error detail, instead of silently exiting.
find sr_linux/ sr_unix/ sr_port/ sr_$(uname -m) -name '*.c' -print0 \
| xargs -0 -n 1 -P $(getconf _NPROCESSORS_ONLN) clang-tidy-14 --quiet -p="$build_dir" \
--config-file=$output_dir/clang_tidy_checks.txt \
>"$output_dir/tidy_warnings.txt" 2>/dev/null
>"$output_dir/tidy_warnings.txt" 2>"$output_dir/tidy_warnings.err"
status=$?
set -e
if ! [ $status = 0 ]; then
echo " --> clang-tidy exited with non-zero status. Most likely due to a C compilation error."
echo " --> [grep -i error $output_dir/tidy_warnings.err] output follows"
grep -i error $output_dir/tidy_warnings.err
exit $status
fi

cd "$output_dir"
"$root"/ci/sort_warnings.sh tidy_warnings.txt sorted_warnings.txt
Expand Down
1 change: 0 additions & 1 deletion ci/tidy_warnings_debug_aarch64.ref
Original file line number Diff line number Diff line change
Expand Up @@ -231,7 +231,6 @@ region_freeze.c:warning: Value stored to 'jnl_switch_done' is never read [clang-
region_freeze.c:warning: Value stored to 'jnl_switch_done' is never read [clang-analyzer-deadcode.DeadStores]
repl_comm.c:warning: Although the value stored to 'status' is used in the enclosing expression, the value is never actually read from 'status' [clang-analyzer-deadcode.DeadStores]
repl_comm.c:warning: Value stored to 'save_errno' is never read [clang-analyzer-deadcode.DeadStores]
repl_filter.c:warning: Value stored to 'prefix' is never read [clang-analyzer-deadcode.DeadStores]
repl_sort_tr_buff.c:warning: Although the value stored to 'cur_rec_idx' is used in the enclosing expression, the value is never actually read from 'cur_rec_idx' [clang-analyzer-deadcode.DeadStores]
restrict.c:warning: Value stored to 'fields' is never read [clang-analyzer-deadcode.DeadStores]
rtnobj.c:warning: Value stored to 'max_free_index' is never read [clang-analyzer-deadcode.DeadStores]
Expand Down
1 change: 0 additions & 1 deletion ci/tidy_warnings_debug_x86_64.ref
Original file line number Diff line number Diff line change
Expand Up @@ -236,7 +236,6 @@ region_freeze.c:warning: Value stored to 'jnl_switch_done' is never read [clang-
region_freeze.c:warning: Value stored to 'jnl_switch_done' is never read [clang-analyzer-deadcode.DeadStores]
repl_comm.c:warning: Although the value stored to 'status' is used in the enclosing expression, the value is never actually read from 'status' [clang-analyzer-deadcode.DeadStores]
repl_comm.c:warning: Value stored to 'save_errno' is never read [clang-analyzer-deadcode.DeadStores]
repl_filter.c:warning: Value stored to 'prefix' is never read [clang-analyzer-deadcode.DeadStores]
repl_sort_tr_buff.c:warning: Although the value stored to 'cur_rec_idx' is used in the enclosing expression, the value is never actually read from 'cur_rec_idx' [clang-analyzer-deadcode.DeadStores]
restrict.c:warning: Value stored to 'fields' is never read [clang-analyzer-deadcode.DeadStores]
rtnobj.c:warning: Value stored to 'max_free_index' is never read [clang-analyzer-deadcode.DeadStores]
Expand Down
11 changes: 0 additions & 11 deletions ci/tidy_warnings_release_aarch64.ref
Original file line number Diff line number Diff line change
Expand Up @@ -371,17 +371,6 @@ region_freeze.c:warning: Value stored to 'jnl_switch_done' is never read [clang-
remove_rms.c:warning: Value stored to 'rc' is never read [clang-analyzer-deadcode.DeadStores]
repl_comm.c:warning: Although the value stored to 'status' is used in the enclosing expression, the value is never actually read from 'status' [clang-analyzer-deadcode.DeadStores]
repl_comm.c:warning: Value stored to 'save_errno' is never read [clang-analyzer-deadcode.DeadStores]
repl_filter.c:warning: Value stored to 'cstart' is never read [clang-analyzer-deadcode.DeadStores]
repl_filter.c:warning: Value stored to 'cstart' is never read [clang-analyzer-deadcode.DeadStores]
repl_filter.c:warning: Value stored to 'cstart' is never read [clang-analyzer-deadcode.DeadStores]
repl_filter.c:warning: Value stored to 'cstart' is never read [clang-analyzer-deadcode.DeadStores]
repl_filter.c:warning: Value stored to 'cstart' is never read [clang-analyzer-deadcode.DeadStores]
repl_filter.c:warning: Value stored to 'jstart' is never read [clang-analyzer-deadcode.DeadStores]
repl_filter.c:warning: Value stored to 'jstart' is never read [clang-analyzer-deadcode.DeadStores]
repl_filter.c:warning: Value stored to 'jstart' is never read [clang-analyzer-deadcode.DeadStores]
repl_filter.c:warning: Value stored to 'jstart' is never read [clang-analyzer-deadcode.DeadStores]
repl_filter.c:warning: Value stored to 'jstart' is never read [clang-analyzer-deadcode.DeadStores]
repl_filter.c:warning: Value stored to 'prefix' is never read [clang-analyzer-deadcode.DeadStores]
repl_inst_create.c:warning: Although the value stored to 'status' is used in the enclosing expression, the value is never actually read from 'status' [clang-analyzer-deadcode.DeadStores]
repl_instance.c:warning: Value stored to 'csa' is never read [clang-analyzer-deadcode.DeadStores]
repl_instance.c:warning: Value stored to 'status' is never read [clang-analyzer-deadcode.DeadStores]
Expand Down
11 changes: 0 additions & 11 deletions ci/tidy_warnings_release_x86_64.ref
Original file line number Diff line number Diff line change
Expand Up @@ -371,17 +371,6 @@ region_freeze.c:warning: Value stored to 'jnl_switch_done' is never read [clang-
remove_rms.c:warning: Value stored to 'rc' is never read [clang-analyzer-deadcode.DeadStores]
repl_comm.c:warning: Although the value stored to 'status' is used in the enclosing expression, the value is never actually read from 'status' [clang-analyzer-deadcode.DeadStores]
repl_comm.c:warning: Value stored to 'save_errno' is never read [clang-analyzer-deadcode.DeadStores]
repl_filter.c:warning: Value stored to 'cstart' is never read [clang-analyzer-deadcode.DeadStores]
repl_filter.c:warning: Value stored to 'cstart' is never read [clang-analyzer-deadcode.DeadStores]
repl_filter.c:warning: Value stored to 'cstart' is never read [clang-analyzer-deadcode.DeadStores]
repl_filter.c:warning: Value stored to 'cstart' is never read [clang-analyzer-deadcode.DeadStores]
repl_filter.c:warning: Value stored to 'cstart' is never read [clang-analyzer-deadcode.DeadStores]
repl_filter.c:warning: Value stored to 'jstart' is never read [clang-analyzer-deadcode.DeadStores]
repl_filter.c:warning: Value stored to 'jstart' is never read [clang-analyzer-deadcode.DeadStores]
repl_filter.c:warning: Value stored to 'jstart' is never read [clang-analyzer-deadcode.DeadStores]
repl_filter.c:warning: Value stored to 'jstart' is never read [clang-analyzer-deadcode.DeadStores]
repl_filter.c:warning: Value stored to 'jstart' is never read [clang-analyzer-deadcode.DeadStores]
repl_filter.c:warning: Value stored to 'prefix' is never read [clang-analyzer-deadcode.DeadStores]
repl_inst_create.c:warning: Although the value stored to 'status' is used in the enclosing expression, the value is never actually read from 'status' [clang-analyzer-deadcode.DeadStores]
repl_instance.c:warning: Value stored to 'csa' is never read [clang-analyzer-deadcode.DeadStores]
repl_instance.c:warning: Value stored to 'status' is never read [clang-analyzer-deadcode.DeadStores]
Expand Down
139 changes: 77 additions & 62 deletions sr_aarch64/GTMDefinedTypesInitDebug.m
Original file line number Diff line number Diff line change
Expand Up @@ -6765,8 +6765,8 @@ Set gtmtypes("gtmsiginfo_t",8,"type")="int"
Set gtmtypfldindx("gtmsiginfo_t","signal")=8
;
Set gtmtypes("gtmsource_local_struct")="struct"
Set gtmtypes("gtmsource_local_struct",0)=54
Set gtmtypes("gtmsource_local_struct","len")=1552
Set gtmtypes("gtmsource_local_struct",0)=56
Set gtmtypes("gtmsource_local_struct","len")=1560
Set gtmtypes("gtmsource_local_struct",1,"name")="gtmsource_local_struct.secondary_instname"
Set gtmtypes("gtmsource_local_struct",1,"off")=0
Set gtmtypes("gtmsource_local_struct",1,"len")=16
Expand Down Expand Up @@ -7033,15 +7033,25 @@ Set gtmtypes("gtmsource_local_struct",53,"off")=1544
Set gtmtypes("gtmsource_local_struct",53,"len")=4
Set gtmtypes("gtmsource_local_struct",53,"type")="int32_t"
Set gtmtypfldindx("gtmsource_local_struct","num_renegotiations")=53
Set gtmtypes("gtmsource_local_struct",54,"name")="gtmsource_local_struct.filler_8byte_align"
Set gtmtypes("gtmsource_local_struct",54,"name")="gtmsource_local_struct.trigupdate"
Set gtmtypes("gtmsource_local_struct",54,"off")=1548
Set gtmtypes("gtmsource_local_struct",54,"len")=4
Set gtmtypes("gtmsource_local_struct",54,"type")="int32_t"
Set gtmtypfldindx("gtmsource_local_struct","filler_8byte_align")=54
Set gtmtypes("gtmsource_local_struct",54,"type")="boolean_t"
Set gtmtypfldindx("gtmsource_local_struct","trigupdate")=54
Set gtmtypes("gtmsource_local_struct",55,"name")="gtmsource_local_struct.filler_8byte_align1"
Set gtmtypes("gtmsource_local_struct",55,"off")=1552
Set gtmtypes("gtmsource_local_struct",55,"len")=4
Set gtmtypes("gtmsource_local_struct",55,"type")="boolean_t"
Set gtmtypfldindx("gtmsource_local_struct","filler_8byte_align1")=55
Set gtmtypes("gtmsource_local_struct",56,"name")="gtmsource_local_struct.filler_8byte_align2"
Set gtmtypes("gtmsource_local_struct",56,"off")=1556
Set gtmtypes("gtmsource_local_struct",56,"len")=4
Set gtmtypes("gtmsource_local_struct",56,"type")="int32_t"
Set gtmtypfldindx("gtmsource_local_struct","filler_8byte_align2")=56
;
Set gtmtypes("gtmsource_options_t")="struct"
Set gtmtypes("gtmsource_options_t",0)=34
Set gtmtypes("gtmsource_options_t","len")=2232
Set gtmtypes("gtmsource_options_t",0)=35
Set gtmtypes("gtmsource_options_t","len")=2240
Set gtmtypes("gtmsource_options_t",1,"name")="gtmsource_options_t.start"
Set gtmtypes("gtmsource_options_t",1,"off")=0
Set gtmtypes("gtmsource_options_t",1,"len")=4
Expand Down Expand Up @@ -7142,77 +7152,82 @@ Set gtmtypes("gtmsource_options_t",20,"off")=76
Set gtmtypes("gtmsource_options_t",20,"len")=4
Set gtmtypes("gtmsource_options_t",20,"type")="boolean_t"
Set gtmtypfldindx("gtmsource_options_t","zerobacklog")=20
Set gtmtypes("gtmsource_options_t",21,"name")="gtmsource_options_t.cmplvl"
Set gtmtypes("gtmsource_options_t",21,"name")="gtmsource_options_t.trigupdate"
Set gtmtypes("gtmsource_options_t",21,"off")=80
Set gtmtypes("gtmsource_options_t",21,"len")=4
Set gtmtypes("gtmsource_options_t",21,"type")="int32_t"
Set gtmtypfldindx("gtmsource_options_t","cmplvl")=21
Set gtmtypes("gtmsource_options_t",22,"name")="gtmsource_options_t.shutdown_time"
Set gtmtypes("gtmsource_options_t",21,"type")="boolean_t"
Set gtmtypfldindx("gtmsource_options_t","trigupdate")=21
Set gtmtypes("gtmsource_options_t",22,"name")="gtmsource_options_t.cmplvl"
Set gtmtypes("gtmsource_options_t",22,"off")=84
Set gtmtypes("gtmsource_options_t",22,"len")=4
Set gtmtypes("gtmsource_options_t",22,"type")="int32_t"
Set gtmtypfldindx("gtmsource_options_t","shutdown_time")=22
Set gtmtypes("gtmsource_options_t",23,"name")="gtmsource_options_t.buffsize"
Set gtmtypfldindx("gtmsource_options_t","cmplvl")=22
Set gtmtypes("gtmsource_options_t",23,"name")="gtmsource_options_t.shutdown_time"
Set gtmtypes("gtmsource_options_t",23,"off")=88
Set gtmtypes("gtmsource_options_t",23,"len")=8
Set gtmtypes("gtmsource_options_t",23,"type")="uint64_t"
Set gtmtypfldindx("gtmsource_options_t","buffsize")=23
Set gtmtypes("gtmsource_options_t",24,"name")="gtmsource_options_t.mode"
Set gtmtypes("gtmsource_options_t",23,"len")=4
Set gtmtypes("gtmsource_options_t",23,"type")="int32_t"
Set gtmtypfldindx("gtmsource_options_t","shutdown_time")=23
Set gtmtypes("gtmsource_options_t",24,"name")="gtmsource_options_t.buffsize"
Set gtmtypes("gtmsource_options_t",24,"off")=96
Set gtmtypes("gtmsource_options_t",24,"len")=4
Set gtmtypes("gtmsource_options_t",24,"type")="int32_t"
Set gtmtypfldindx("gtmsource_options_t","mode")=24
Set gtmtypes("gtmsource_options_t",25,"name")="gtmsource_options_t.secondary_port"
Set gtmtypes("gtmsource_options_t",25,"off")=100
Set gtmtypes("gtmsource_options_t",24,"len")=8
Set gtmtypes("gtmsource_options_t",24,"type")="uint64_t"
Set gtmtypfldindx("gtmsource_options_t","buffsize")=24
Set gtmtypes("gtmsource_options_t",25,"name")="gtmsource_options_t.mode"
Set gtmtypes("gtmsource_options_t",25,"off")=104
Set gtmtypes("gtmsource_options_t",25,"len")=4
Set gtmtypes("gtmsource_options_t",25,"type")="int32_t"
Set gtmtypfldindx("gtmsource_options_t","secondary_port")=25
Set gtmtypes("gtmsource_options_t",26,"name")="gtmsource_options_t.src_log_interval"
Set gtmtypes("gtmsource_options_t",26,"off")=104
Set gtmtypfldindx("gtmsource_options_t","mode")=25
Set gtmtypes("gtmsource_options_t",26,"name")="gtmsource_options_t.secondary_port"
Set gtmtypes("gtmsource_options_t",26,"off")=108
Set gtmtypes("gtmsource_options_t",26,"len")=4
Set gtmtypes("gtmsource_options_t",26,"type")="uint32_t"
Set gtmtypfldindx("gtmsource_options_t","src_log_interval")=26
Set gtmtypes("gtmsource_options_t",27,"name")="gtmsource_options_t.connect_parms"
Set gtmtypes("gtmsource_options_t",27,"off")=108
Set gtmtypes("gtmsource_options_t",27,"len")=24
Set gtmtypes("gtmsource_options_t",27,"type")="int32_t"
Set gtmtypfldindx("gtmsource_options_t","connect_parms")=27
Set gtmtypes("gtmsource_options_t",27,"dim")=6
Set gtmtypes("gtmsource_options_t",28,"name")="gtmsource_options_t.filter_cmd"
Set gtmtypes("gtmsource_options_t",28,"off")=132
Set gtmtypes("gtmsource_options_t",28,"len")=512
Set gtmtypes("gtmsource_options_t",28,"type")="char"
Set gtmtypfldindx("gtmsource_options_t","filter_cmd")=28
Set gtmtypes("gtmsource_options_t",29,"name")="gtmsource_options_t.secondary_host"
Set gtmtypes("gtmsource_options_t",29,"off")=644
Set gtmtypes("gtmsource_options_t",29,"len")=256
Set gtmtypes("gtmsource_options_t",26,"type")="int32_t"
Set gtmtypfldindx("gtmsource_options_t","secondary_port")=26
Set gtmtypes("gtmsource_options_t",27,"name")="gtmsource_options_t.src_log_interval"
Set gtmtypes("gtmsource_options_t",27,"off")=112
Set gtmtypes("gtmsource_options_t",27,"len")=4
Set gtmtypes("gtmsource_options_t",27,"type")="uint32_t"
Set gtmtypfldindx("gtmsource_options_t","src_log_interval")=27
Set gtmtypes("gtmsource_options_t",28,"name")="gtmsource_options_t.connect_parms"
Set gtmtypes("gtmsource_options_t",28,"off")=116
Set gtmtypes("gtmsource_options_t",28,"len")=24
Set gtmtypes("gtmsource_options_t",28,"type")="int32_t"
Set gtmtypfldindx("gtmsource_options_t","connect_parms")=28
Set gtmtypes("gtmsource_options_t",28,"dim")=6
Set gtmtypes("gtmsource_options_t",29,"name")="gtmsource_options_t.filter_cmd"
Set gtmtypes("gtmsource_options_t",29,"off")=140
Set gtmtypes("gtmsource_options_t",29,"len")=512
Set gtmtypes("gtmsource_options_t",29,"type")="char"
Set gtmtypfldindx("gtmsource_options_t","secondary_host")=29
Set gtmtypes("gtmsource_options_t",30,"name")="gtmsource_options_t.log_file"
Set gtmtypes("gtmsource_options_t",30,"off")=900
Set gtmtypfldindx("gtmsource_options_t","filter_cmd")=29
Set gtmtypes("gtmsource_options_t",30,"name")="gtmsource_options_t.secondary_host"
Set gtmtypes("gtmsource_options_t",30,"off")=652
Set gtmtypes("gtmsource_options_t",30,"len")=256
Set gtmtypes("gtmsource_options_t",30,"type")="char"
Set gtmtypfldindx("gtmsource_options_t","log_file")=30
Set gtmtypes("gtmsource_options_t",31,"name")="gtmsource_options_t.secondary_instname"
Set gtmtypes("gtmsource_options_t",31,"off")=1156
Set gtmtypes("gtmsource_options_t",31,"len")=16
Set gtmtypfldindx("gtmsource_options_t","secondary_host")=30
Set gtmtypes("gtmsource_options_t",31,"name")="gtmsource_options_t.log_file"
Set gtmtypes("gtmsource_options_t",31,"off")=908
Set gtmtypes("gtmsource_options_t",31,"len")=256
Set gtmtypes("gtmsource_options_t",31,"type")="char"
Set gtmtypfldindx("gtmsource_options_t","secondary_instname")=31
Set gtmtypes("gtmsource_options_t",32,"name")="gtmsource_options_t.freeze_comment"
Set gtmtypes("gtmsource_options_t",32,"off")=1172
Set gtmtypes("gtmsource_options_t",32,"len")=1024
Set gtmtypfldindx("gtmsource_options_t","log_file")=31
Set gtmtypes("gtmsource_options_t",32,"name")="gtmsource_options_t.secondary_instname"
Set gtmtypes("gtmsource_options_t",32,"off")=1164
Set gtmtypes("gtmsource_options_t",32,"len")=16
Set gtmtypes("gtmsource_options_t",32,"type")="char"
Set gtmtypfldindx("gtmsource_options_t","freeze_comment")=32
Set gtmtypes("gtmsource_options_t",33,"name")="gtmsource_options_t.tlsid"
Set gtmtypes("gtmsource_options_t",33,"off")=2196
Set gtmtypes("gtmsource_options_t",33,"len")=32
Set gtmtypfldindx("gtmsource_options_t","secondary_instname")=32
Set gtmtypes("gtmsource_options_t",33,"name")="gtmsource_options_t.freeze_comment"
Set gtmtypes("gtmsource_options_t",33,"off")=1180
Set gtmtypes("gtmsource_options_t",33,"len")=1024
Set gtmtypes("gtmsource_options_t",33,"type")="char"
Set gtmtypfldindx("gtmsource_options_t","tlsid")=33
Set gtmtypes("gtmsource_options_t",34,"name")="gtmsource_options_t.renegotiate_interval"
Set gtmtypes("gtmsource_options_t",34,"off")=2228
Set gtmtypes("gtmsource_options_t",34,"len")=4
Set gtmtypes("gtmsource_options_t",34,"type")="int32_t"
Set gtmtypfldindx("gtmsource_options_t","renegotiate_interval")=34
Set gtmtypfldindx("gtmsource_options_t","freeze_comment")=33
Set gtmtypes("gtmsource_options_t",34,"name")="gtmsource_options_t.tlsid"
Set gtmtypes("gtmsource_options_t",34,"off")=2204
Set gtmtypes("gtmsource_options_t",34,"len")=32
Set gtmtypes("gtmsource_options_t",34,"type")="char"
Set gtmtypfldindx("gtmsource_options_t","tlsid")=34
Set gtmtypes("gtmsource_options_t",35,"name")="gtmsource_options_t.renegotiate_interval"
Set gtmtypes("gtmsource_options_t",35,"off")=2236
Set gtmtypes("gtmsource_options_t",35,"len")=4
Set gtmtypes("gtmsource_options_t",35,"type")="int32_t"
Set gtmtypfldindx("gtmsource_options_t","renegotiate_interval")=35
;
Set gtmtypes("gtmsrc_lcl")="struct"
Set gtmtypes("gtmsrc_lcl",0)=4
Expand Down
Loading

0 comments on commit a2c2efb

Please sign in to comment.