1. 11 8月, 2017 1 次提交
  2. 07 6月, 2017 1 次提交
    • P
      restore TCP interconnect · 353a937d
      Pengzhou Tang 提交于
      This commit restore TCP interconnect and fix some hang issues.
      
      * restore TCP interconnect code
      * Add GUC called gp_interconnect_tcp_listener_backlog for tcp to control the backlog param of listen call
      * use memmove instead of memcpy because the memory areas do overlap.
      * call checkForCancelFromQD() for TCP interconnect if there are no data for a while, this can avoid QD from getting stuck.
      * revert cancelUnfinished related modification in 8d251945, otherwise some queries will get stuck
      * move and rename faultinjector "cursor_qe_reader_after_snapshot" to make test cases pass under TCP interconnect.
      353a937d
  3. 15 5月, 2017 1 次提交
    • P
      Make a copy of Gp_interconnect_snd_queue_depth for each interconnect setup · 7ed4a178
      Pengzhou Tang 提交于
      Formally, GPDB assumed Gp_interconnect_queue_depth was constant during the interconnect life-time which was incorrect for Cursors, if Gp_interconnect_queue_depth was changed after a Cursor was declared, a panic occurred. To avoid this, we make a copy of Gp_interconnect_queue_depth when interconnect is set up. Gp_interconnect_snd_queue_depth has no such problem because it is only used by senders and senders of Cursor will never receive the GUC change command.
      7ed4a178
  4. 11 4月, 2017 1 次提交
    • P
      Remap transient typmods on receivers instead of on senders. · d8ac3308
      Pengzhou Tang 提交于
      QD used to send a transient types table to QEs, then QE would remap the
      tuples with this table before sending them to QD. However in complex
      queries QD can't discover all the transient types so tuples can't be
      correctly remapped on QEs. One example is like below:
      
          SELECT q FROM (SELECT MAX(f1) FROM int4_tbl
                         GROUP BY f1 ORDER BY f1) q;
          ERROR:  record type has not been registered
      
      To fix this issue we changed the underlying logic: instead of sending
      the possibly incomplete transient types table from QD to QEs, we now
      send the tables from motion senders to motion receivers and do the remap
      on receivers. Receivers maintain a remap table for each motion so tuples
      from different senders can be remapped accordingly. In such way, queries
      contain multi-slices can also handle transient record type correctly
      between two QEs.
      
      The remap logic is derived from the executor/tqueue.c in upstream
      postgres. There is support for composite/record types and arrays as well
      as range types, however as range types are not yet supported in GPDB so
      the logic is put under a conditional compilation macro, in theory it
      shall be automatically enabled when range types are supported in GPDB.
      
      One side effect for this approach is that on receivers a performance
      down is introduced as the remap requires recursive checks on each tuple
      of record types. However optimization is made to make this side effect
      minimum on non-record types.
      
      Old logic that building transient types table on QD and sending them to
      QEs are retired.
      Signed-off-by: NGang Xiong <gxiong@pivotal.io>
      Signed-off-by: NNing Yu <nyu@pivotal.io>
      d8ac3308
  5. 04 4月, 2017 2 次提交
    • D
      Revert "Remap transient typmods on receivers instead of on senders." · b1140e54
      Dhanashree Kashid and Jesse Zhang 提交于
      This reverts commit ab4398dd.
      [#142986717]
      b1140e54
    • H
      Fix duplicate typedefs. · 615b4c69
      Heikki Linnakangas 提交于
      It's an error in standard C - at least in older standards - to typedef
      the same type more than once, even if the definition is the same. Newer
      versions of gcc don't complain about it, but you can see the warnings
      with -pedantic (among a ton of other warnings, search for "redefinition").
      
      To fix, remove the duplicate typedefs. The ones in src/backend/gpopt and
      src/include/gpopt were actually OK, because a duplicate typedef is OK in
      C++, and those files are compiled with a C++ compiler. But many of the
      typedefs in those files were not used for anything, so I nevertheless
      removed duplicate ones there too, that caught my eye.
      
      In gpmon.h, we were redefining apr_*_t types when postgres.h had been
      included. But as far as I can tell, that was always - all the files that
      included gpmon, included postgres.h directly or indirectly before that.
      Search & replace the references to apr_*_t types in that file with the
      postgres equivalents, to make it more clear what they actually are.
      615b4c69
  6. 01 4月, 2017 1 次提交
    • P
      Remap transient typmods on receivers instead of on senders. · ab4398dd
      Pengzhou Tang 提交于
      QD used to send a transient types table to QEs, then QE would remap the
      tuples with this table before sending them to QD. However in complex
      queries QD can't discover all the transient types so tuples can't be
      correctly remapped on QEs. One example is like below:
      
          SELECT q FROM (SELECT MAX(f1) FROM int4_tbl
                         GROUP BY f1 ORDER BY f1) q;
          ERROR:  record type has not been registered
      
      To fix this issue we changed the underlying logic: instead of sending
      the possibly incomplete transient types table from QD to QEs, we now
      send the tables from motion senders to motion receivers and do the remap
      on receivers. Receivers maintain a remap table for each motion so tuples
      from different senders can be remapped accordingly. In such way, queries
      contain multi-slices can also handle transient record type correctly
      between two QEs.
      
      The remap logic is derived from the executor/tqueue.c in upstream
      postgres. There is support for composite/record types and arrays as well
      as range types, however as range types are not yet supported in GPDB so
      the logic is put under a conditional compilation macro, in theory it
      shall be automatically enabled when range types are supported in GPDB.
      
      One side effect for this approach is that on receivers a performance
      down is introduced as the remap requires recursive checks on each tuple
      of record types. However optimization is made to make this side effect
      minimum on non-record types.
      
      Old logic that building transient types table on QD and sending them to
      QEs are retired.
      Signed-off-by: NGang Xiong <gxiong@pivotal.io>
      Signed-off-by: NNing Yu <nyu@pivotal.io>
      ab4398dd
  7. 14 2月, 2017 1 次提交
  8. 10 2月, 2017 1 次提交
  9. 12 2月, 2016 2 次提交
    • H
      Misc header file cleanup · 442c105e
      Heikki Linnakangas 提交于
      Remove unnecessary #includes, add #includes that are actually needed by
      some headers.
      442c105e
    • H
      Replace "uint" type with uint32 or unsigned int. · ce33af22
      Heikki Linnakangas 提交于
      "uint" is not a standard C type, so it might not be available on all
      platforms. Indeed, we had a typedef for WIN32 for that. But there's no reason
      to use "uint", might as well just use the C standard "unsigned int", or the
      PostgreSQL-specific uint32. Makes the intention more clear too, IMHO.
      ce33af22
  10. 28 10月, 2015 1 次提交