Skip to content

Commit 7749875

Browse files
committed
Bug#28703392 ASAN leak plumbing in tools and mgmclient. Add missing ndb_free_defaults.
Backport of Bug#26930148 POOR RESOURCE MANAGEMENT IN NDB COMMAND LINE PROGRAMS ndb_load_defaults() lack matching call to ndb_free_defaults(), in trunk this was fixed by introducing Ndb_opts instead of ndb_load_defaults. In 7.6 we need to add calls to ndb_free_defaults(). Change-Id: I3d93c646c52518b17ae6d5456b3a0bffda204b6d
1 parent 377e0e9 commit 7749875

File tree

12 files changed

+108
-10
lines changed

12 files changed

+108
-10
lines changed

storage/ndb/src/mgmclient/main.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,8 @@ int main(int argc, char** argv){
194194
// Don't allow negative return code
195195
if (ret < 0)
196196
ret = 255;
197+
198+
ndb_free_defaults(argv);
197199
return ret;
198200
}
199201

storage/ndb/tools/delete_all.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,24 +78,30 @@ int main(int argc, char** argv){
7878
#endif
7979
if ((ho_error=handle_options(&argc, &argv, my_long_options,
8080
ndb_std_get_one_option)))
81+
{
82+
ndb_free_defaults(argv);
8183
return NDBT_ProgramExit(NDBT_WRONGARGS);
84+
}
8285

8386
Ndb_cluster_connection con(opt_ndb_connectstring, opt_ndb_nodeid);
8487
con.set_name("ndb_delete_all");
8588
if(con.connect(opt_connect_retries - 1, opt_connect_retry_delay, 1) != 0)
8689
{
8790
ndbout << "Unable to connect to management server." << endl;
91+
ndb_free_defaults(argv);
8892
return NDBT_ProgramExit(NDBT_FAILED);
8993
}
9094
if (con.wait_until_ready(30,0) < 0)
9195
{
9296
ndbout << "Cluster nodes not ready in 30 seconds." << endl;
97+
ndb_free_defaults(argv);
9398
return NDBT_ProgramExit(NDBT_FAILED);
9499
}
95100

96101
Ndb MyNdb(&con, _dbname );
97102
if(MyNdb.init() != 0){
98103
NDB_ERR(MyNdb.getNdbError());
104+
ndb_free_defaults(argv);
99105
return NDBT_ProgramExit(NDBT_FAILED);
100106
}
101107

@@ -105,6 +111,7 @@ int main(int argc, char** argv){
105111
const NdbDictionary::Table * pTab = NDBT_Table::discoverTableFromDb(&MyNdb, argv[i]);
106112
if(pTab == NULL){
107113
ndbout << " Table " << argv[i] << " does not exist!" << endl;
114+
ndb_free_defaults(argv);
108115
return NDBT_ProgramExit(NDBT_WRONGARGS);
109116
}
110117
ndbout << "Deleting all from " << argv[i];
@@ -116,6 +123,7 @@ int main(int argc, char** argv){
116123
ndbout << "FAILED" << endl;
117124
}
118125
}
126+
ndb_free_defaults(argv);
119127
return NDBT_ProgramExit(res);
120128
}
121129

storage/ndb/tools/desc.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,24 +102,30 @@ int main(int argc, char** argv){
102102
#endif
103103
if ((ho_error=handle_options(&argc, &argv, my_long_options,
104104
ndb_std_get_one_option)))
105+
{
106+
ndb_free_defaults(argv);
105107
return NDBT_ProgramExit(NDBT_WRONGARGS);
108+
}
106109

107110
Ndb_cluster_connection con(opt_ndb_connectstring, opt_ndb_nodeid);
108111
con.set_name("ndb_desc");
109112
if(con.connect(opt_connect_retries - 1, opt_connect_retry_delay, 1) != 0)
110113
{
111114
ndbout << "Unable to connect to management server." << endl;
115+
ndb_free_defaults(argv);
112116
return NDBT_ProgramExit(NDBT_FAILED);
113117
}
114118
if (con.wait_until_ready(30,0) < 0)
115119
{
116120
ndbout << "Cluster nodes not ready in 30 seconds." << endl;
121+
ndb_free_defaults(argv);
117122
return NDBT_ProgramExit(NDBT_FAILED);
118123
}
119124

120125
Ndb MyNdb(&con, _dbname);
121126
if(MyNdb.init() != 0){
122127
NDB_ERR(MyNdb.getNdbError());
128+
ndb_free_defaults(argv);
123129
return NDBT_ProgramExit(NDBT_FAILED);
124130
}
125131

@@ -143,6 +149,7 @@ int main(int argc, char** argv){
143149
ndbout << "No such object: " << argv[i] << endl << endl;
144150
}
145151

152+
ndb_free_defaults(argv);
146153
return NDBT_ProgramExit(NDBT_OK);
147154
}
148155

storage/ndb/tools/drop_index.cpp

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,27 +59,34 @@ int main(int argc, char** argv){
5959
int ho_error;
6060
if ((ho_error=handle_options(&argc, &argv, my_long_options,
6161
ndb_std_get_one_option)))
62+
{
63+
ndb_free_defaults(argv);
6264
return NDBT_ProgramExit(NDBT_WRONGARGS);
65+
}
6366
if (argc < 1) {
6467
usage();
68+
ndb_free_defaults(argv);
6569
return NDBT_ProgramExit(NDBT_WRONGARGS);
6670
}
6771

6872
Ndb_cluster_connection con(opt_ndb_connectstring, opt_ndb_nodeid);
6973
con.set_name("ndb_drop_index");
7074
if(con.connect(opt_connect_retries - 1, opt_connect_retry_delay, 1) != 0)
7175
{
76+
ndb_free_defaults(argv);
7277
return NDBT_ProgramExit(NDBT_FAILED);
7378
}
7479
if (con.wait_until_ready(30,3) < 0)
7580
{
7681
ndbout << "Cluster nodes not ready in 30 seconds." << endl;
82+
ndb_free_defaults(argv);
7783
return NDBT_ProgramExit(NDBT_FAILED);
7884
}
7985

8086
Ndb MyNdb(&con, _dbname );
8187
if(MyNdb.init() != 0){
8288
NDB_ERR(MyNdb.getNdbError());
89+
ndb_free_defaults(argv);
8390
return NDBT_ProgramExit(NDBT_FAILED);
8491
}
8592

@@ -95,9 +102,12 @@ int main(int argc, char** argv){
95102
}
96103
}
97104

98-
if(res != 0){
105+
if(res != 0)
106+
{
107+
ndb_free_defaults(argv);
99108
return NDBT_ProgramExit(NDBT_FAILED);
100109
}
101110

111+
ndb_free_defaults(argv);
102112
return NDBT_ProgramExit(NDBT_OK);
103113
}

storage/ndb/tools/drop_tab.cpp

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,13 @@ int main(int argc, char** argv){
5959
int ho_error;
6060
if ((ho_error=handle_options(&argc, &argv, my_long_options,
6161
ndb_std_get_one_option)))
62+
{
63+
ndb_free_defaults(argv);
6264
return NDBT_ProgramExit(NDBT_WRONGARGS);
65+
}
6366
if (argc < 1) {
6467
usage();
68+
ndb_free_defaults(argv);
6569
return NDBT_ProgramExit(NDBT_WRONGARGS);
6670
}
6771

@@ -70,17 +74,20 @@ int main(int argc, char** argv){
7074
if(con.connect(opt_connect_retries - 1, opt_connect_retry_delay, 1) != 0)
7175
{
7276
ndbout << "Unable to connect to management server." << endl;
77+
ndb_free_defaults(argv);
7378
return NDBT_ProgramExit(NDBT_FAILED);
7479
}
7580
if (con.wait_until_ready(30,3) < 0)
7681
{
7782
ndbout << "Cluster nodes not ready in 30 seconds." << endl;
83+
ndb_free_defaults(argv);
7884
return NDBT_ProgramExit(NDBT_FAILED);
7985
}
8086

8187
Ndb MyNdb(&con, _dbname );
8288
if(MyNdb.init() != 0){
8389
NDB_ERR(MyNdb.getNdbError());
90+
ndb_free_defaults(argv);
8491
return NDBT_ProgramExit(NDBT_FAILED);
8592
}
8693

@@ -96,9 +103,12 @@ int main(int argc, char** argv){
96103
}
97104
}
98105

99-
if(res != 0){
106+
if (res != 0)
107+
{
108+
ndb_free_defaults(argv);
100109
return NDBT_ProgramExit(NDBT_FAILED);
101110
}
102111

112+
ndb_free_defaults(argv);
103113
return NDBT_ProgramExit(NDBT_OK);
104114
}

storage/ndb/tools/listTables.cpp

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -349,20 +349,26 @@ int main(int argc, char** argv){
349349
opt_debug= "d:t:O,/tmp/ndb_show_tables.trace";
350350
#endif
351351
bool using_default_database = false;
352-
if ((ho_error=handle_options(&argc, &argv, my_long_options,
353-
ndb_std_get_one_option))) {
352+
if ((ho_error = handle_options(&argc, &argv, my_long_options,
353+
ndb_std_get_one_option)))
354+
{
355+
ndb_free_defaults(argv);
354356
return NdbToolsProgramExitCode::WRONG_ARGS;
355357
}
356358

357-
if(_dbname && argc==0) {
359+
if(_dbname && argc == 0)
360+
{
358361
ndbout << "-d option given without table name." << endl;
362+
ndb_free_defaults(argv);
359363
return NdbToolsProgramExitCode::WRONG_ARGS;
360364
}
361365
if (argc>0)
362366
_tabname = argv[0];
363-
if (argc > 1) {
367+
if (argc > 1)
368+
{
364369
ndbout << "Wrong Argument" << endl;
365370
ndbout << "Please use the option --help for usage." << endl;
371+
ndb_free_defaults(argv);
366372
return NdbToolsProgramExitCode::WRONG_ARGS;
367373
}
368374

@@ -401,6 +407,7 @@ int main(int argc, char** argv){
401407
ndbout << "Table " << _tabname << ": not found - "
402408
<< dic->getNdbError() << endl;
403409
}
410+
ndb_free_defaults(argv);
404411
return NdbToolsProgramExitCode::FAILED;
405412
}
406413
}
@@ -410,6 +417,7 @@ int main(int argc, char** argv){
410417
delete ndb;
411418
delete ndb_cluster_connection;
412419

420+
ndb_free_defaults(argv);
413421
return NdbToolsProgramExitCode::OK;
414422
}
415423

storage/ndb/tools/ndb_config.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -349,6 +349,7 @@ main(int argc, char** argv){
349349
}
350350
}
351351
printf("\n");
352+
ndb_free_defaults(argv);
352353
return 0;
353354
}
354355

storage/ndb/tools/ndbinfo_select_all.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,14 @@ main(int argc, char** argv)
6969
#endif
7070
if ((ho_error=handle_options(&argc, &argv, my_long_options,
7171
ndb_std_get_one_option)))
72+
{
73+
ndb_free_defaults(argv);
7274
return 1;
75+
}
7376

7477
if (argv[0] == 0)
7578
{
79+
ndb_free_defaults(argv);
7680
return 0;
7781
}
7882

@@ -81,19 +85,22 @@ main(int argc, char** argv)
8185
if(con.connect(opt_connect_retries - 1, opt_connect_retry_delay, 1) != 0)
8286
{
8387
ndbout << "Unable to connect to management server." << endl;
88+
ndb_free_defaults(argv);
8489
return 1;
8590
}
8691

8792
if (con.wait_until_ready(30,0) < 0)
8893
{
8994
ndbout << "Cluster nodes not ready in 30 seconds." << endl;
95+
ndb_free_defaults(argv);
9096
return 1;
9197
}
9298

9399
NdbInfo info(&con, "");
94100
if (!info.init())
95101
{
96102
ndbout << "Failed to init ndbinfo!" << endl;
103+
ndb_free_defaults(argv);
97104
return 1;
98105
}
99106

@@ -133,6 +140,7 @@ main(int argc, char** argv)
133140
if (pScan->readTuples() != 0)
134141
{
135142
ndbout << "scanOp->readTuples failed" << endl;
143+
ndb_free_defaults(argv);
136144
return 1;
137145
}
138146

@@ -143,6 +151,7 @@ main(int argc, char** argv)
143151
if (pRec == 0)
144152
{
145153
ndbout << "Failed to getValue(" << i << ")" << endl;
154+
ndb_free_defaults(argv);
146155
return 1;
147156
}
148157
recAttrs.push_back(pRec);
@@ -151,6 +160,7 @@ main(int argc, char** argv)
151160
if(pScan->execute() != 0)
152161
{
153162
ndbout << "scanOp->execute failed" << endl;
163+
ndb_free_defaults(argv);
154164
return 1;
155165
}
156166

@@ -190,6 +200,7 @@ main(int argc, char** argv)
190200
NdbSleep_SecSleep(delay);
191201
}
192202
}
203+
ndb_free_defaults(argv);
193204
return 0;
194205
}
195206

storage/ndb/tools/restore/restore_main.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1848,13 +1848,15 @@ main(int argc, char** argv)
18481848
if (!logIter.readHeader())
18491849
{
18501850
err << "Failed to read snapshot info from log file. Exiting..." << endl;
1851+
ndb_free_defaults(argv);
18511852
return NdbRestoreStatus::Failed;
18521853
}
18531854
bool snapshotstart = logIter.isSnapshotstartBackup();
18541855
for (i= 0; i < g_consumers.size(); i++)
18551856
if (!g_consumers[i]->update_apply_status(metaData, snapshotstart))
18561857
{
18571858
err << "Restore: Failed to restore epoch" << endl;
1859+
ndb_free_defaults(argv);
18581860
return -1;
18591861
}
18601862
}
@@ -1886,13 +1888,19 @@ main(int argc, char** argv)
18861888
for(Uint32 j= 0; j < g_consumers.size(); j++)
18871889
{
18881890
if (!g_consumers[j]->rebuild_indexes(* table))
1891+
{
1892+
ndb_free_defaults(argv);
18891893
return -1;
1894+
}
18901895
}
18911896
}
18921897
for(Uint32 j= 0; j < g_consumers.size(); j++)
18931898
{
18941899
if (!g_consumers[j]->endOfTablesFK())
1900+
{
1901+
ndb_free_defaults(argv);
18951902
return -1;
1903+
}
18961904
}
18971905
}
18981906

@@ -1912,6 +1920,7 @@ main(int argc, char** argv)
19121920
table_output[i] = NULL;
19131921
}
19141922
}
1923+
ndb_free_defaults(argv);
19151924
return NdbRestoreStatus::Ok;
19161925
} // main
19171926

0 commit comments

Comments
 (0)