@@ -648,6 +648,7 @@ static void
648648show_archive_plain (const char * instance_name , uint32 xlog_seg_size ,
649649 parray * tli_list , bool show_name )
650650{
651+ parray * actual_tli_list = parray_new ();
651652#define SHOW_ARCHIVE_FIELDS_COUNT 10
652653 int i ;
653654 const char * names [SHOW_ARCHIVE_FIELDS_COUNT ] =
@@ -663,15 +664,24 @@ show_archive_plain(const char *instance_name, uint32 xlog_seg_size,
663664 for (i = 0 ; i < SHOW_ARCHIVE_FIELDS_COUNT ; i ++ )
664665 widths [i ] = strlen (names [i ]);
665666
666- rows = (ShowArchiveRow * ) palloc0 (parray_num (tli_list ) *
667+ /* Ignore empty timelines */
668+ for (i = 0 ; i < parray_num (tli_list ); i ++ )
669+ {
670+ timelineInfo * tlinfo = (timelineInfo * ) parray_get (tli_list , i );
671+
672+ if (tlinfo -> n_xlog_files > 0 )
673+ parray_append (actual_tli_list , tlinfo );
674+ }
675+
676+ rows = (ShowArchiveRow * ) palloc0 (parray_num (actual_tli_list ) *
667677 sizeof (ShowArchiveRow ));
668678
669679 /*
670680 * Fill row values and calculate maximum width of each field.
671681 */
672- for (i = 0 ; i < parray_num (tli_list ); i ++ )
682+ for (i = 0 ; i < parray_num (actual_tli_list ); i ++ )
673683 {
674- timelineInfo * tlinfo = (timelineInfo * ) parray_get (tli_list , i );
684+ timelineInfo * tlinfo = (timelineInfo * ) parray_get (actual_tli_list , i );
675685 ShowArchiveRow * row = & rows [i ];
676686 int cur = 0 ;
677687 float zratio = 0 ;
@@ -770,7 +780,7 @@ show_archive_plain(const char *instance_name, uint32 xlog_seg_size,
770780 /*
771781 * Print values.
772782 */
773- for (i = parray_num (tli_list ) - 1 ; i >= 0 ; i -- )
783+ for (i = parray_num (actual_tli_list ) - 1 ; i >= 0 ; i -- )
774784 {
775785 ShowArchiveRow * row = & rows [i ];
776786 int cur = 0 ;
@@ -818,6 +828,7 @@ show_archive_plain(const char *instance_name, uint32 xlog_seg_size,
818828 }
819829
820830 pfree (rows );
831+ //TODO: free timelines
821832}
822833
823834static void
@@ -826,6 +837,7 @@ show_archive_json(const char *instance_name, uint32 xlog_seg_size,
826837{
827838 int i ;
828839 PQExpBuffer buf = & show_buf ;
840+ parray * actual_tli_list = parray_new ();
829841
830842 if (!first_instance )
831843 appendPQExpBufferChar (buf , ',' );
@@ -836,18 +848,28 @@ show_archive_json(const char *instance_name, uint32 xlog_seg_size,
836848 json_add_value (buf , "instance" , instance_name , json_level , true);
837849 json_add_key (buf , "timelines" , json_level );
838850
851+ /* Ignore empty timelines */
852+
853+ for (i = 0 ; i < parray_num (tli_list ); i ++ )
854+ {
855+ timelineInfo * tlinfo = (timelineInfo * ) parray_get (tli_list , i );
856+
857+ if (tlinfo -> n_xlog_files > 0 )
858+ parray_append (actual_tli_list , tlinfo );
859+ }
860+
839861 /*
840862 * List timelines.
841863 */
842864 json_add (buf , JT_BEGIN_ARRAY , & json_level );
843865
844- for (i = parray_num (tli_list ) - 1 ; i >= 0 ; i -- )
866+ for (i = parray_num (actual_tli_list ) - 1 ; i >= 0 ; i -- )
845867 {
846- timelineInfo * tlinfo = (timelineInfo * ) parray_get (tli_list , i );
868+ timelineInfo * tlinfo = (timelineInfo * ) parray_get (actual_tli_list , i );
847869 char tmp_buf [20 ];
848870 float zratio = 0 ;
849871
850- if (i != (parray_num (tli_list ) - 1 ))
872+ if (i != (parray_num (actual_tli_list ) - 1 ))
851873 appendPQExpBufferChar (buf , ',' );
852874
853875 json_add (buf , JT_BEGIN_OBJECT , & json_level );
0 commit comments