Skip to content

Commit f6ce9f0

Browse files
committed
Ignore empty timelines in show archive
1 parent 32e6407 commit f6ce9f0

File tree

1 file changed

+29
-7
lines changed

1 file changed

+29
-7
lines changed

src/show.c

+29-7
Original file line numberDiff line numberDiff line change
@@ -648,6 +648,7 @@ static void
648648
show_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

823834
static 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

Comments
 (0)