mirror of
https://github.com/MariaDB/server.git
synced 2025-05-11 13:21:44 +03:00
ndb/test/tools/hugoCalculator.cpp: Rename: ndb/test/tools/hugoCalculator/hugoCalculator.cpp -> ndb/test/tools/hugoCalculator.cpp ndb/test/tools/hugoLoad.cpp: Rename: ndb/test/tools/hugoLoad/hugoLoad.cpp -> ndb/test/tools/hugoLoad.cpp ndb/test/tools/hugoFill.cpp: Rename: ndb/test/tools/hugoFill/hugoFill.cpp -> ndb/test/tools/hugoFill.cpp ndb/test/tools/hugoLockRecords.cpp: Rename: ndb/test/tools/hugoLockRecords/hugoLockRecords.cpp -> ndb/test/tools/hugoLockRecords.cpp ndb/test/tools/hugoPkRead.cpp: Rename: ndb/test/tools/hugoPkRead/hugoPkRead.cpp -> ndb/test/tools/hugoPkRead.cpp ndb/test/tools/hugoPkReadRecord.cpp: Rename: ndb/test/tools/hugoPkReadRecord/hugoPkReadRecord.cpp -> ndb/test/tools/hugoPkReadRecord.cpp ndb/test/tools/hugoScanRead.cpp: Rename: ndb/test/tools/hugoScanRead/hugoScanRead.cpp -> ndb/test/tools/hugoScanRead.cpp ndb/test/tools/restart.cpp: Rename: ndb/test/tools/restart/restart.cpp -> ndb/test/tools/restart.cpp ndb/test/ndbapi/TraceNdbApi.cpp: Rename: ndb/test/ndbapi/acid2/TraceNdbApi.cpp -> ndb/test/ndbapi/TraceNdbApi.cpp ndb/test/ndbapi/VerifyNdbApi.cpp: Rename: ndb/test/ndbapi/acid2/VerifyNdbApi.cpp -> ndb/test/ndbapi/VerifyNdbApi.cpp ndb/test/ndbapi/acid.cpp: Rename: ndb/test/ndbapi/acid/acid.cpp -> ndb/test/ndbapi/acid.cpp ndb/test/ndbapi/acid2.cpp: Rename: ndb/test/ndbapi/acid2/acid2.cpp -> ndb/test/ndbapi/acid2.cpp ndb/test/ndbapi/bulk_copy.cpp: Rename: ndb/test/ndbapi/bulk_copy/bulk_copy.cpp -> ndb/test/ndbapi/bulk_copy.cpp ndb/test/ndbapi/celloDb.cpp: Rename: ndb/test/ndbapi/cello-sessionDb/celloDb.cpp -> ndb/test/ndbapi/celloDb.cpp ndb/test/ndbapi/create_all_tabs.cpp: Rename: ndb/test/ndbapi/create_all_tabs/create_all_tabs.cpp -> ndb/test/ndbapi/create_all_tabs.cpp ndb/test/ndbapi/create_tab.cpp: Rename: ndb/test/ndbapi/create_tab/create_tab.cpp -> ndb/test/ndbapi/create_tab.cpp ndb/test/ndbapi/drop_all_tabs.cpp: Rename: ndb/test/ndbapi/drop_all_tabs/drop_all_tabs.cpp -> ndb/test/ndbapi/drop_all_tabs.cpp ndb/test/ndbapi/flexAsynch.cpp: Rename: ndb/test/ndbapi/flexAsynch/flexAsynch.cpp -> ndb/test/ndbapi/flexAsynch.cpp ndb/test/ndbapi/flexBench.cpp: Rename: ndb/test/ndbapi/flexBench/flexBench.cpp -> ndb/test/ndbapi/flexBench.cpp ndb/test/ndbapi/flexHammer.cpp: Rename: ndb/test/ndbapi/flexHammer/flexHammer.cpp -> ndb/test/ndbapi/flexHammer.cpp ndb/test/ndbapi/flexScan.cpp: Rename: ndb/test/ndbapi/flexScan/flexScan.cpp -> ndb/test/ndbapi/flexScan.cpp ndb/test/ndbapi/flexTT.cpp: Rename: ndb/test/ndbapi/flexTT/flexTT.cpp -> ndb/test/ndbapi/flexTT.cpp ndb/test/ndbapi/flexTimedAsynch.cpp: Rename: ndb/test/ndbapi/flexTimedAsynch/flexTimedAsynch.cpp -> ndb/test/ndbapi/flexTimedAsynch.cpp ndb/test/ndbapi/flex_bench_mysql.cpp: Rename: ndb/test/ndbapi/flex_bench_mysql/flex_bench_mysql.cpp -> ndb/test/ndbapi/flex_bench_mysql.cpp ndb/test/ndbapi/index.cpp: Rename: ndb/test/ndbapi/indexTest/index.cpp -> ndb/test/ndbapi/index.cpp ndb/test/ndbapi/asyncGenerator.cpp: Rename: ndb/test/ndbapi/lmc-bench/async-src/generator/asyncGenerator.cpp -> ndb/test/ndbapi/asyncGenerator.cpp ndb/test/ndbapi/index2.cpp: Rename: ndb/test/ndbapi/indexTest2/index2.cpp -> ndb/test/ndbapi/index2.cpp ndb/test/ndbapi/interpreterInTup.cpp: Rename: ndb/test/ndbapi/interpreterInTup/interpreterInTup.cpp -> ndb/test/ndbapi/interpreterInTup.cpp ndb/test/ndbapi/mainAsyncGenerator.cpp: Rename: ndb/test/ndbapi/lmc-bench/async-src/generator/mainAsyncGenerator.cpp -> ndb/test/ndbapi/mainAsyncGenerator.cpp ndb/test/ndbapi/ndb_async1.cpp: Rename: ndb/test/ndbapi/lmc-bench/async-src/user/ndb_async1.cpp -> ndb/test/ndbapi/ndb_async1.cpp ndb/test/ndbapi/ndb_async2.cpp: Rename: ndb/test/ndbapi/lmc-bench/async-src/user/ndb_async2.cpp -> ndb/test/ndbapi/ndb_async2.cpp ndb/test/ndbapi/ndb_user_populate.cpp: Rename: ndb/test/ndbapi/lmc-bench/src/user/ndb_user_populate.cpp -> ndb/test/ndbapi/ndb_user_populate.cpp ndb/test/ndbapi/ndb_user_transaction.cpp: Rename: ndb/test/ndbapi/lmc-bench/src/user/ndb_user_transaction.cpp -> ndb/test/ndbapi/ndb_user_transaction.cpp ndb/test/ndbapi/ndb_user_transaction2.cpp: Rename: ndb/test/ndbapi/lmc-bench/src/user/ndb_user_transaction2.cpp -> ndb/test/ndbapi/ndb_user_transaction2.cpp ndb/test/ndbapi/ndb_user_transaction3.cpp: Rename: ndb/test/ndbapi/lmc-bench/src/user/ndb_user_transaction3.cpp -> ndb/test/ndbapi/ndb_user_transaction3.cpp ndb/test/ndbapi/userInterface.cpp: Rename: ndb/test/ndbapi/lmc-bench/async-src/user/userInterface.cpp -> ndb/test/ndbapi/userInterface.cpp ndb/test/ndbapi/benchronja.cpp: Rename: ndb/test/ndbapi/ronja/benchronja/benchronja.cpp -> ndb/test/ndbapi/benchronja.cpp ndb/test/ndbapi/ndb_user_transaction4.cpp: Rename: ndb/test/ndbapi/lmc-bench/src/user/ndb_user_transaction4.cpp -> ndb/test/ndbapi/ndb_user_transaction4.cpp ndb/test/ndbapi/ndb_user_transaction5.cpp: Rename: ndb/test/ndbapi/lmc-bench/src/user/ndb_user_transaction5.cpp -> ndb/test/ndbapi/ndb_user_transaction5.cpp ndb/test/ndbapi/ndb_user_transaction6.cpp: Rename: ndb/test/ndbapi/lmc-bench/src/user/ndb_user_transaction6.cpp -> ndb/test/ndbapi/ndb_user_transaction6.cpp ndb/test/ndbapi/restarter.cpp: Rename: ndb/test/ndbapi/restarter/restarter.cpp -> ndb/test/ndbapi/restarter.cpp ndb/test/ndbapi/restarter2.cpp: Rename: ndb/test/ndbapi/restarter2/restarter2.cpp -> ndb/test/ndbapi/restarter2.cpp ndb/test/ndbapi/restarts.cpp: Rename: ndb/test/ndbapi/restarts/restarts.cpp -> ndb/test/ndbapi/restarts.cpp ndb/test/ndbapi/InsertRecs.cpp: Rename: ndb/test/ndbapi/telco/InsertRecs.cpp -> ndb/test/ndbapi/InsertRecs.cpp ndb/test/ndbapi/adoInsertRecs.cpp: Rename: ndb/test/ndbapi/telco/adoInsertRecs.cpp -> ndb/test/ndbapi/adoInsertRecs.cpp ndb/test/ndbapi/initronja.cpp: Rename: ndb/test/ndbapi/ronja/initronja/initronja.cpp -> ndb/test/ndbapi/initronja.cpp ndb/test/ndbapi/msa.cpp: Rename: ndb/test/ndbapi/telco/msa.cpp -> ndb/test/ndbapi/msa.cpp ndb/test/ndbapi/testBasic.cpp: Rename: ndb/test/ndbapi/testBasic/testBasic.cpp -> ndb/test/ndbapi/testBasic.cpp ndb/test/ndbapi/testDataBuffers.cpp: Rename: ndb/test/ndbapi/testDataBuffers/testDataBuffers.cpp -> ndb/test/ndbapi/testDataBuffers.cpp ndb/test/ndbapi/testDict.cpp: Rename: ndb/test/ndbapi/testDict/testDict.cpp -> ndb/test/ndbapi/testDict.cpp ndb/test/ndbapi/testGrep.cpp: Rename: ndb/test/ndbapi/testGrep/testGrep.cpp -> ndb/test/ndbapi/testGrep.cpp ndb/test/ndbapi/testGrepVerify.cpp: Rename: ndb/test/ndbapi/testGrep/verify/testGrepVerify.cpp -> ndb/test/ndbapi/testGrepVerify.cpp ndb/test/ndbapi/testIndex.cpp: Rename: ndb/test/ndbapi/testIndex/testIndex.cpp -> ndb/test/ndbapi/testIndex.cpp ndb/test/ndbapi/testInterpreter.cpp: Rename: ndb/test/ndbapi/testInterpreter/testInterpreter.cpp -> ndb/test/ndbapi/testInterpreter.cpp ndb/test/ndbapi/testMgm.cpp: Rename: ndb/test/ndbapi/testMgm/testMgm.cpp -> ndb/test/ndbapi/testMgm.cpp ndb/test/ndbapi/testNdbApi.cpp: Rename: ndb/test/ndbapi/testNdbApi/testNdbApi.cpp -> ndb/test/ndbapi/testNdbApi.cpp ndb/test/ndbapi/testNodeRestart.cpp: Rename: ndb/test/ndbapi/testNodeRestart/testNodeRestart.cpp -> ndb/test/ndbapi/testNodeRestart.cpp ndb/test/ndbapi/testOIBasic.cpp: Rename: ndb/test/ndbapi/testOIBasic/testOIBasic.cpp -> ndb/test/ndbapi/testOIBasic.cpp ndb/test/ndbapi/testOperations.cpp: Rename: ndb/test/ndbapi/testOperations/testOperations.cpp -> ndb/test/ndbapi/testOperations.cpp ndb/test/ndbapi/testOrderedIndex.cpp: Rename: ndb/test/ndbapi/testOrderedIndex/testOrderedIndex.cpp -> ndb/test/ndbapi/testOrderedIndex.cpp ndb/test/ndbapi/testRestartGci.cpp: Rename: ndb/test/ndbapi/testRestartGci/testRestartGci.cpp -> ndb/test/ndbapi/testRestartGci.cpp ndb/test/ndbapi/testScan.cpp: Rename: ndb/test/ndbapi/testScan/testScan.cpp -> ndb/test/ndbapi/testScan.cpp ndb/test/ndbapi/testScanInterpreter.cpp: Rename: ndb/test/ndbapi/testScanInterpreter/testScanInterpreter.cpp -> ndb/test/ndbapi/testScanInterpreter.cpp ndb/test/ndbapi/testSystemRestart.cpp: Rename: ndb/test/ndbapi/testSystemRestart/testSystemRestart.cpp -> ndb/test/ndbapi/testSystemRestart.cpp ndb/test/ndbapi/testTimeout.cpp: Rename: ndb/test/ndbapi/testTimeout/testTimeout.cpp -> ndb/test/ndbapi/testTimeout.cpp ndb/test/ndbapi/cdrserver.cpp: Rename: ndb/test/ndbapi/vw_test/cdrserver.cpp -> ndb/test/ndbapi/cdrserver.cpp ndb/test/ndbapi/size.cpp: Rename: ndb/test/ndbapi/vw_test/size.cpp -> ndb/test/ndbapi/size.cpp ndb/test/ndbapi/testTransactions.cpp: Rename: ndb/test/ndbapi/testTransactions/testTransactions.cpp -> ndb/test/ndbapi/testTransactions.cpp ndb/test/ndbapi/test_event.cpp: Rename: ndb/test/ndbapi/test_event/test_event.cpp -> ndb/test/ndbapi/test_event.cpp ndb/tools/delete_all.cpp: Rename: ndb/tools/delete_all/delete_all.cpp -> ndb/tools/delete_all.cpp ndb/tools/desc.cpp: Rename: ndb/tools/desc/desc.cpp -> ndb/tools/desc.cpp ndb/tools/drop_index.cpp: Rename: ndb/tools/drop_index/drop_index.cpp -> ndb/tools/drop_index.cpp ndb/tools/drop_tab.cpp: Rename: ndb/tools/drop_tab/drop_tab.cpp -> ndb/tools/drop_tab.cpp ndb/tools/listTables.cpp: Rename: ndb/tools/list_tables/listTables.cpp -> ndb/tools/listTables.cpp ndb/tools/ndbsql.cpp: Rename: ndb/tools/ndbsql/ndbsql.cpp -> ndb/tools/ndbsql.cpp ndb/tools/select_all.cpp: Rename: ndb/tools/select_all/select_all.cpp -> ndb/tools/select_all.cpp ndb/tools/select_count.cpp: Rename: ndb/tools/select_count/select_count.cpp -> ndb/tools/select_count.cpp ndb/test/tools/hugoScanUpdate.cpp: Rename: ndb/test/tools/hugoScanUpd.cpp -> ndb/test/tools/hugoScanUpdate.cpp ndb/test/tools/hugoPkUpdate.cpp: Rename: ndb/test/tools/hugoPkUpd.cpp -> ndb/test/tools/hugoPkUpdate.cpp ndb/test/tools/hugoPkDelete.cpp: Rename: ndb/test/tools/hugoPkDel.cpp -> ndb/test/tools/hugoPkDelete.cpp ndb/tools/Makefile_old: Rename: ndb/tools/Makefile -> ndb/tools/Makefile_old ndb/test/tools/transproxy.cpp: Rename: ndb/tools/transproxy.cpp -> ndb/test/tools/transproxy.cpp ndb/test/tools/verify_index.cpp: Rename: ndb/tools/verify_index.cpp -> ndb/test/tools/verify_index.cpp ndb/test/tools/copy_tab.cpp: Rename: ndb/tools/copy_tab.cpp -> ndb/test/tools/copy_tab.cpp ndb/test/tools/cpcc.cpp: Rename: ndb/tools/cpcc.cpp -> ndb/test/tools/cpcc.cpp ndb/test/tools/create_index.cpp: Rename: ndb/tools/create_index.cpp -> ndb/test/tools/create_index.cpp ndb/test/tools/old_dirs/waiter/Makefile_old: mvdir ndb/test/tools/old_dirs/waiter/waiter.cpp: mvdir ndb/test/tools/old_dirs/restart/Makefile: mvdir ndb/test/tools/old_dirs/hugoScanUpdate/Makefile: mvdir ndb/test/tools/old_dirs/hugoScanRead/Makefile: mvdir ndb/test/tools/old_dirs/hugoPkUpdate/Makefile: mvdir ndb/test/tools/old_dirs/hugoPkReadRecord/Makefile: mvdir ndb/test/tools/old_dirs/hugoPkRead/Makefile: mvdir ndb/test/tools/old_dirs/hugoPkDelete/Makefile: mvdir ndb/test/tools/old_dirs/hugoLockRecords/Makefile: mvdir ndb/test/tools/old_dirs/hugoLoad/Makefile: mvdir ndb/test/tools/old_dirs/hugoFill/Makefile: mvdir ndb/test/tools/old_dirs/hugoCalculator/Makefile: mvdir ndb/tools/old_dirs/copy_tab/Makefile: mvdir ndb/tools/old_dirs/cpcc/Makefile: mvdir ndb/tools/old_dirs/create_index/Makefile: mvdir ndb/tools/old_dirs/delete_all/Makefile: mvdir ndb/tools/old_dirs/desc/Makefile: mvdir ndb/tools/old_dirs/drop_index/Makefile: mvdir ndb/tools/old_dirs/drop_tab/Makefile: mvdir ndb/tools/old_dirs/list_tables/Makefile: mvdir ndb/tools/old_dirs/select_all/Makefile: mvdir ndb/tools/old_dirs/select_count/Makefile: mvdir ndb/test/tools/old_dirs/transproxy/Makefile: mvdir ndb/test/tools/old_dirs/verify_index/Makefile: mvdir ndb/test/ndbapi/old_dirs/flexTT/Makefile: mvdir ndb/test/ndbapi/old_dirs/flexTimedAsynch/Makefile: mvdir ndb/test/ndbapi/old_dirs/flexHammer/Makefile: mvdir ndb/test/ndbapi/old_dirs/flexHammer/README: mvdir ndb/test/ndbapi/old_dirs/flexBench/Makefile.am: mvdir ndb/test/ndbapi/old_dirs/flexBench/Makefile_old: mvdir ndb/test/ndbapi/old_dirs/flexBench/ndbplot.pl: mvdir ndb/test/ndbapi/old_dirs/flexAsynch/Makefile: mvdir ndb/test/ndbapi/old_dirs/drop_all_tabs/Makefile: mvdir ndb/test/ndbapi/old_dirs/create_tab/Makefile: mvdir ndb/test/ndbapi/old_dirs/testOIBasic/Makefile: mvdir ndb/test/ndbapi/old_dirs/testOIBasic/times.txt: mvdir ndb/test/ndbapi/old_dirs/testNodeRestart/Makefile: mvdir ndb/test/ndbapi/old_dirs/testOperations/Makefile: mvdir ndb/test/ndbapi/old_dirs/testBlobs/Makefile: mvdir ndb/test/ndbapi/old_dirs/testBackup/Makefile: mvdir ndb/test/ndbapi/old_dirs/testDict/Makefile: mvdir ndb/test/ndbapi/old_dirs/test_event/Makefile: mvdir ndb/test/ndbapi/old_dirs/testTransactions/Makefile: mvdir ndb/test/ndbapi/old_dirs/testTimeout/Makefile: mvdir ndb/test/ndbapi/old_dirs/testSystemRestart/Makefile: mvdir ndb/test/ndbapi/old_dirs/testScanInterpreter/Makefile: mvdir ndb/test/ndbapi/old_dirs/testDataBuffers/Makefile: mvdir ndb/test/ndbapi/old_dirs/testIndex/Makefile: mvdir ndb/test/ndbapi/old_dirs/testMgm/Makefile: mvdir ndb/test/ndbapi/old_dirs/restarter/Makefile: mvdir ndb/test/ndbapi/old_dirs/flexScan/Makefile: mvdir ndb/test/ndbapi/old_dirs/flexScan/README: mvdir ndb/test/ndbapi/old_dirs/testRestartGci/Makefile: mvdir ndb/test/ndbapi/old_dirs/flex_bench_mysql/Makefile: mvdir ndb/test/ndbapi/old_dirs/indexTest/Makefile: mvdir ndb/test/ndbapi/old_dirs/indexTest2/Makefile: mvdir ndb/test/ndbapi/old_dirs/testBasic/Makefile: mvdir ndb/test/ndbapi/old_dirs/basicAsynch/Makefile: mvdir ndb/test/ndbapi/old_dirs/create_all_tabs/Makefile: mvdir ndb/test/ndbapi/old_dirs/testNdbApi/Makefile: mvdir ndb/test/ndbapi/old_dirs/testOrderedIndex/Makefile: mvdir ndb/test/ndbapi/old_dirs/restarter2/Makefile: mvdir ndb/test/ndbapi/old_dirs/telco/Makefile: mvdir ndb/test/ndbapi/old_dirs/telco/readme: mvdir ndb/test/ndbapi/old_dirs/acid/Makefile: mvdir ndb/test/ndbapi/old_dirs/acid2/Makefile: mvdir ndb/test/ndbapi/old_dirs/acid2/TraceNdbApi.hpp: mvdir ndb/test/ndbapi/old_dirs/acid2/VerifyNdbApi.hpp: mvdir ndb/test/ndbapi/old_dirs/interpreterInTup/Makefile: mvdir ndb/test/ndbapi/old_dirs/ronja/Makefile: mvdir ndb/test/ndbapi/old_dirs/ronja/benchronja/Makefile: mvdir ndb/test/ndbapi/old_dirs/ronja/initronja/Makefile: mvdir ndb/test/ndbapi/old_dirs/testScan/Makefile: mvdir ndb/test/ndbapi/old_dirs/vw_test/Makefile: mvdir ndb/test/ndbapi/old_dirs/vw_test/bcd.h: mvdir ndb/test/ndbapi/old_dirs/vw_test/utv.h: mvdir ndb/test/ndbapi/old_dirs/vw_test/vcdrfunc.h: mvdir ndb/test/ndbapi/old_dirs/vw_test/script/client_start: mvdir ndb/test/ndbapi/old_dirs/testGrep/Makefile: mvdir ndb/test/ndbapi/old_dirs/testGrep/verify/Makefile: mvdir ndb/test/ndbapi/old_dirs/testInterpreter/Makefile: mvdir ndb/test/ndbapi/old_dirs/restarts/Makefile: mvdir ndb/test/ndbapi/old_dirs/bulk_copy/Makefile: mvdir ndb/test/ndbapi/old_dirs/lmc-bench/Makefile: mvdir ndb/test/ndbapi/old_dirs/lmc-bench/async-src/Makefile: mvdir ndb/test/ndbapi/old_dirs/lmc-bench/async-src/generator/Makefile: mvdir ndb/test/ndbapi/old_dirs/lmc-bench/async-src/include/dbGenerator.h: mvdir ndb/test/ndbapi/old_dirs/lmc-bench/async-src/include/testData.h: mvdir ndb/test/ndbapi/old_dirs/lmc-bench/async-src/include/userInterface.h: mvdir ndb/test/ndbapi/old_dirs/lmc-bench/async-src/user/Makefile: mvdir ndb/test/ndbapi/old_dirs/lmc-bench/async-src/user/macros.h: mvdir ndb/test/ndbapi/old_dirs/lmc-bench/async-src/user/ndb_error.hpp: mvdir ndb/test/ndbapi/old_dirs/lmc-bench/bin/.empty: mvdir ndb/test/ndbapi/old_dirs/lmc-bench/include/ndb_schema.hpp: mvdir ndb/test/ndbapi/old_dirs/lmc-bench/include/testDefinitions.h: mvdir ndb/test/ndbapi/old_dirs/lmc-bench/lib/.empty: mvdir ndb/test/ndbapi/old_dirs/lmc-bench/script/Makefile: mvdir ndb/test/ndbapi/old_dirs/lmc-bench/script/async-lmc-bench-l-p10.sh: mvdir ndb/test/ndbapi/old_dirs/lmc-bench/script/async-lmc-bench-l.sh: mvdir ndb/test/ndbapi/old_dirs/lmc-bench/script/async-lmc-bench-p10.sh: mvdir ndb/test/ndbapi/old_dirs/lmc-bench/script/async-lmc-bench.sh: mvdir ndb/test/ndbapi/old_dirs/lmc-bench/src/Makefile: mvdir ndb/test/ndbapi/old_dirs/lmc-bench/src/README: mvdir ndb/test/ndbapi/old_dirs/lmc-bench/src/generator/Makefile: mvdir ndb/test/ndbapi/old_dirs/lmc-bench/src/generator/dbGenerator.c: mvdir ndb/test/ndbapi/old_dirs/lmc-bench/src/makevars.linux: mvdir ndb/test/ndbapi/old_dirs/lmc-bench/src/makevars.sparc: mvdir ndb/test/ndbapi/old_dirs/lmc-bench/src/generator/dbGenerator.h: mvdir ndb/test/ndbapi/old_dirs/lmc-bench/src/generator/mainGenerator.c: mvdir ndb/test/ndbapi/old_dirs/lmc-bench/src/include/testData.h: mvdir ndb/test/ndbapi/old_dirs/lmc-bench/src/include/userInterface.h: mvdir ndb/test/ndbapi/old_dirs/lmc-bench/src/populator/Makefile: mvdir ndb/test/ndbapi/old_dirs/lmc-bench/src/populator/dbPopulate.c: mvdir ndb/test/ndbapi/old_dirs/lmc-bench/src/populator/dbPopulate.h: mvdir ndb/test/ndbapi/old_dirs/lmc-bench/src/populator/mainPopulate.c: mvdir ndb/test/ndbapi/old_dirs/lmc-bench/src/user/Makefile: mvdir ndb/test/ndbapi/old_dirs/lmc-bench/src/user/localDbPrepare.c: mvdir ndb/test/ndbapi/old_dirs/lmc-bench/src/user/macros.h: mvdir ndb/test/ndbapi/old_dirs/lmc-bench/src/user/ndb_error.hpp: mvdir ndb/test/ndbapi/old_dirs/lmc-bench/src/user/old/Makefile: mvdir ndb/test/ndbapi/old_dirs/lmc-bench/src/user/old/userHandle.h: mvdir ndb/test/ndbapi/old_dirs/lmc-bench/src/user/old/userInterface.c: mvdir ndb/test/ndbapi/old_dirs/lmc-bench/src/user/old/userTransaction.c: mvdir ndb/test/ndbapi/old_dirs/lmc-bench/src/user/userHandle.h: mvdir ndb/test/ndbapi/old_dirs/lmc-bench/src/user/userInterface.cpp: mvdir ndb/test/ndbapi/old_dirs/lmc-bench/src/user/userTransaction.c: mvdir ndb/test/ndbapi/testBasicAsynch.cpp: Change mode to -rw-rw-r-- ndb/tools/old_dirs/ndbnet/Makefile.PL: mvdir ndb/tools/old_dirs/ndbnet/lib/NDB/Net.pm: mvdir ndb/tools/old_dirs/ndbnet/lib/NDB/Net/Base.pm: mvdir ndb/tools/old_dirs/ndbnet/lib/NDB/Net/Client.pm: mvdir ndb/tools/old_dirs/ndbnet/lib/NDB/Net/Command.pm: mvdir ndb/tools/old_dirs/ndbnet/lib/NDB/Net/Config.pm: mvdir ndb/tools/old_dirs/ndbnet/lib/NDB/Run.pm: mvdir ndb/tools/old_dirs/ndbnet/lib/NDB/Util.pm: mvdir ndb/tools/old_dirs/ndbnet/ndbnet.pl: mvdir ndb/tools/old_dirs/ndbnet/ndbnetd.pl: mvdir ndb/tools/old_dirs/ndbnet/ndbrun: mvdir ndb/tools/old_dirs/ndbnet/lib/NDB/Net/Database.pm: mvdir ndb/tools/old_dirs/ndbnet/lib/NDB/Net/Env.pm: mvdir ndb/tools/old_dirs/ndbnet/lib/NDB/Net/Node.pm: mvdir ndb/tools/old_dirs/ndbnet/lib/NDB/Net/NodeApi.pm: mvdir ndb/tools/old_dirs/ndbnet/lib/NDB/Net/NodeDb.pm: mvdir ndb/tools/old_dirs/ndbnet/lib/NDB/Net/NodeMgmt.pm: mvdir ndb/tools/old_dirs/ndbnet/lib/NDB/Net/Server.pm: mvdir ndb/tools/old_dirs/ndbnet/lib/NDB/Net/ServerINET.pm: mvdir ndb/tools/old_dirs/ndbnet/lib/NDB/Net/ServerUNIX.pm: mvdir ndb/tools/old_dirs/ndbnet/lib/NDB/Run/Base.pm: mvdir ndb/tools/old_dirs/ndbnet/lib/NDB/Run/Database.pm: mvdir ndb/tools/old_dirs/ndbnet/lib/NDB/Run/Env.pm: mvdir ndb/tools/old_dirs/ndbnet/lib/NDB/Run/Node.pm: mvdir ndb/tools/old_dirs/ndbnet/lib/NDB/Util/Base.pm: mvdir ndb/tools/old_dirs/ndbnet/lib/NDB/Util/Dir.pm: mvdir ndb/tools/old_dirs/ndbnet/lib/NDB/Util/Event.pm: mvdir ndb/tools/old_dirs/ndbnet/lib/NDB/Util/File.pm: mvdir ndb/tools/old_dirs/ndbnet/lib/NDB/Util/IO.pm: mvdir ndb/tools/old_dirs/ndbnet/lib/NDB/Util/Lock.pm: mvdir ndb/tools/old_dirs/ndbnet/lib/NDB/Util/Log.pm: mvdir ndb/tools/old_dirs/ndbnet/lib/NDB/Util/Socket.pm: mvdir ndb/tools/old_dirs/ndbnet/lib/NDB/Util/SocketINET.pm: mvdir ndb/tools/old_dirs/ndbnet/lib/NDB/Util/SocketUNIX.pm: mvdir ndb/tools/old_dirs/ndbsql/Makefile: mvdir ndb/tools/old_dirs/src/counterviewer/CounterViewer.java: mvdir ndb/test/ndbapi/bank/Bank.hpp: mvdir ndb/test/ndbapi/bank/Makefile_old: Rename: ndb/test/ndbapi/bank/Makefile -> ndb/test/ndbapi/bank/Makefile_old ndb/test/ndbapi/bank/old_dirs/bankCreator/Makefile: mvdir ndb/test/ndbapi/bank/old_dirs/bankSumAccounts/Makefile: mvdir ndb/test/ndbapi/bank/old_dirs/bankMakeGL/Makefile: mvdir ndb/test/ndbapi/bank/old_dirs/bankTimer/Makefile: mvdir ndb/test/ndbapi/bank/old_dirs/bankValidateAllGLs/Makefile: mvdir ndb/test/ndbapi/bank/old_dirs/bankTransactionMaker/Makefile: mvdir ndb/test/ndbapi/bank/old_dirs/src/Makefile: mvdir ndb/test/ndbapi/bank/old_dirs/testBank/Makefile: mvdir ndb/test/ndbapi/ScanFilter.hpp: Rename: ndb/test/ndbapi/old_dirs/testScanInterpreter/ScanFilter.hpp -> ndb/test/ndbapi/ScanFilter.hpp ndb/test/ndbapi/ScanInterpretTest.hpp: Rename: ndb/test/ndbapi/old_dirs/testScanInterpreter/ScanInterpretTest.hpp -> ndb/test/ndbapi/ScanInterpretTest.hpp ndb/test/ndbapi/ScanFunctions.hpp: Rename: ndb/test/ndbapi/old_dirs/testScan/ScanFunctions.hpp -> ndb/test/ndbapi/ScanFunctions.hpp
748 lines
18 KiB
Perl
748 lines
18 KiB
Perl
package NDB::Net::Node;
|
|
|
|
use strict;
|
|
use Carp;
|
|
use Symbol;
|
|
use Socket;
|
|
use IPC::Open3;
|
|
use POSIX();
|
|
use Errno;
|
|
use File::Spec;
|
|
|
|
require NDB::Net::Base;
|
|
|
|
use vars qw(@ISA);
|
|
@ISA = qw(NDB::Net::Base);
|
|
|
|
# constructors
|
|
|
|
my $log;
|
|
|
|
sub initmodule {
|
|
$log = NDB::Util::Log->instance;
|
|
}
|
|
|
|
my %nodecache = ();
|
|
|
|
NDB::Net::Node->attributes(
|
|
db => sub { ref && $_->isa('NDB::Net::Database') },
|
|
comment => sub { defined },
|
|
id => sub { s/^\s+|\s+$//g; s/^0+(\d+)$/$1/; /^\d+$/ && $_ > 0 },
|
|
type => sub { s/^\s+|\s+$//g; /^(mgmt|db|api)$/ },
|
|
server => sub { ref && $_->isa('NDB::Net::Server') },
|
|
base => sub { File::Spec->file_name_is_absolute($_) },
|
|
home => sub { File::Spec->file_name_is_absolute($_) },
|
|
state => sub { /^(new|run|stop)$/ },
|
|
run => sub { defined },
|
|
runenv => sub { defined },
|
|
runtype => sub { m!(auto|once|manual)$! },
|
|
lockpid => sub { $_ != 0 },
|
|
iow => sub { ref && $_->isa('NDB::Util::IO') },
|
|
ior => sub { ref && $_->isa('NDB::Util::IO') },
|
|
pid => sub { $_ > 1 },
|
|
event => sub { ref && $_->isa('NDB::Util::Event') },
|
|
);
|
|
|
|
sub desc {
|
|
my $node = shift;
|
|
my $dbname = $node->getdb->getname;
|
|
my $id = $node->getid;
|
|
my $type = $node->gettype;
|
|
return "$dbname.$id-$type";
|
|
}
|
|
|
|
sub new {
|
|
my $class = shift;
|
|
@_ % 2 == 0 or confess 0+@_;
|
|
my(%attr) = @_;
|
|
my $node = $class->SUPER::new(%attr);
|
|
$node->setdb($attr{db})
|
|
or $log->push, return undef;
|
|
$node->setid($attr{id})
|
|
or $log->push, return undef;
|
|
if ($nodecache{$node->getdb->getname,$node->getid}) {
|
|
$log->put("duplicate node")->push($node);
|
|
return undef;
|
|
}
|
|
$node->setcomment($attr{comment});
|
|
$node->settype($attr{type})
|
|
or $log->push, return undef;
|
|
if ($node->getdb->cmpversion("1.0") <= 0 && $node->gettype eq 'mgmt') {
|
|
$log->put("no mgmt nodes in db version <= 1.0")->push($node);
|
|
return undef;
|
|
}
|
|
$node->setserver($attr{server})
|
|
or $log->push, return undef;
|
|
for my $base ($attr{base}, $node->getdb->getbase(undef)) {
|
|
if (defined($base)) {
|
|
$node->setbase($base)
|
|
or $log->push, return undef;
|
|
}
|
|
}
|
|
for my $home ($attr{home}, $node->getdb->gethome(undef)) {
|
|
if (defined($home)) {
|
|
if ($^O ne 'MSWin32' && $home !~ m!^/! && $node->hasbase) {
|
|
$home = $node->getbase . "/$home";
|
|
}
|
|
$node->sethome($home)
|
|
or $log->push, return undef;
|
|
}
|
|
}
|
|
if (! $node->hashome) {
|
|
$log->put("home not defined")->push($node);
|
|
return undef;
|
|
}
|
|
$node->setstate('new')
|
|
or $log->push, return undef;
|
|
if (defined($attr{run})) {
|
|
$node->setrun($attr{run})
|
|
or $log->push, return undef;
|
|
}
|
|
if (defined($attr{runenv})) {
|
|
$node->setrunenv($attr{runenv})
|
|
or $log->push, return undef;
|
|
}
|
|
if (defined($attr{runtype})) {
|
|
$node->setruntype($attr{runtype})
|
|
or $log->push, return undef;
|
|
}
|
|
if (! $node->hasruntype) {
|
|
my $runtype = "manual";
|
|
$runtype = "once"
|
|
if $node->gettype =~ /^(mgmt|db)$/ || $node->hasrun;
|
|
$node->setruntype($runtype)
|
|
or $log->push, return undef;
|
|
}
|
|
if (! $node->getdb->addnode($node)) {
|
|
$log->push;
|
|
return undef;
|
|
}
|
|
$nodecache{$node->getdb->getname,$node->getid} = $node;
|
|
return $node;
|
|
}
|
|
|
|
sub delete {
|
|
my $node = shift;
|
|
delete $nodecache{$node->getdb->getname,$node->getid} or
|
|
confess 'oops';
|
|
}
|
|
|
|
sub deleteall {
|
|
my $class = shift;
|
|
for my $k (sort keys %nodecache) {
|
|
my $node = $nodecache{$k};
|
|
$node->delete;
|
|
}
|
|
}
|
|
|
|
# node startup
|
|
|
|
sub getconfdir {
|
|
my $node = shift;
|
|
@_ == 0 or confess 0+@_;
|
|
my $netenv = NDB::Net::Env->instance;
|
|
my $name = File::Spec->catfile($netenv->getbase, "etc");
|
|
my $dir = NDB::Util::Dir->new(path => $name);
|
|
return $dir;
|
|
}
|
|
|
|
sub getdbdir {
|
|
my $node = shift;
|
|
@_ == 0 or confess 0+@_;
|
|
my $netenv = NDB::Net::Env->instance;
|
|
my $name = File::Spec->catfile($netenv->getbase, "db", $node->getdb->getname);
|
|
my $dir = NDB::Util::Dir->new(path => $name);
|
|
return $dir;
|
|
}
|
|
|
|
sub getnodedir {
|
|
my $node = shift;
|
|
@_ == 0 or confess 0+@_;
|
|
my $name = sprintf("%s-%s", $node->getid, $node->gettype);
|
|
my $dir = $node->getdbdir->getdir($name);
|
|
return $dir;
|
|
}
|
|
|
|
sub getrundir {
|
|
my $node = shift;
|
|
@_ == 0 or confess 0+@_;
|
|
my $name = sprintf("run");
|
|
my $dir = $node->getdbdir->getdir($name);
|
|
return $dir;
|
|
}
|
|
|
|
sub getlogdir {
|
|
my $node = shift;
|
|
@_ == 0 or confess 0+@_;
|
|
my $name = sprintf("log");
|
|
my $dir = $node->getdbdir->getdir($name);
|
|
return $dir;
|
|
}
|
|
|
|
sub getlock {
|
|
my $node = shift;
|
|
@_ == 0 or confess 0+@_;
|
|
my $name = sprintf("%s-%s.pid", $node->getid, $node->gettype);
|
|
my $lock = $node->getrundir->getfile($name)->getlock;
|
|
return $lock;
|
|
}
|
|
|
|
sub getsocketfile {
|
|
my $node = shift;
|
|
@_ == 0 or confess 0+@_;
|
|
my $name = sprintf("%s-%s.socket", $node->getid, $node->gettype);
|
|
my $file = $node->getrundir->getfile($name);
|
|
return $file;
|
|
}
|
|
|
|
sub getlogfile {
|
|
my $node = shift;
|
|
@_ == 0 or confess 0+@_;
|
|
my $name = sprintf("%s-%s.log", $node->getid, $node->gettype);
|
|
my $file = $node->getlogdir->getfile($name);
|
|
return $file;
|
|
}
|
|
|
|
sub getshellfile {
|
|
my $node = shift;
|
|
@_ == 0 or confess 0+@_;
|
|
my $name = sprintf("run.sh");
|
|
my $file = $node->getnodedir->getfile($name);
|
|
return $file;
|
|
}
|
|
|
|
sub getlocalcfg {
|
|
my $node = shift;
|
|
@_ == 0 or confess 0+@_;
|
|
my $name = "Ndb.cfg";
|
|
my $file = $node->getnodedir->getfile($name);
|
|
return $file;
|
|
}
|
|
|
|
sub writelocalcfg {
|
|
my $node = shift;
|
|
@_ == 0 or confess 0+@_;
|
|
my $db = $node->getdb;
|
|
my $file = $node->getlocalcfg;
|
|
$file->mkdir or $log->push, return undef;
|
|
if ($db->cmpversion("1.0") <= 0) {
|
|
my $section = "";
|
|
my $edit = sub {
|
|
chomp;
|
|
if (/^\s*\[\s*(\S+)\s*\]/) {
|
|
$section = uc($1);
|
|
}
|
|
if ($section eq 'OWN_HOST') {
|
|
if (/^\s*ThisHostId\b/i) {
|
|
$_ = "ThisHostId " . $node->getid;
|
|
}
|
|
}
|
|
if ($section eq 'CM') {
|
|
if (/^\s*ThisNodeId\b/i) {
|
|
$_ = "ThisNodeId " . $node->getid;
|
|
}
|
|
}
|
|
if (0 and $section eq 'PROCESS_ID') {
|
|
if (/^\s*Host(\d+)\s+(\S+)(.*)/) {
|
|
my $id2 = $1;
|
|
my $host2 = $2;
|
|
my $rest2 = $3;
|
|
my $node2 = $db->getnode($id2)
|
|
or $log->push, return undef;
|
|
$_ = "Host$id2 ";
|
|
$_ .= $node2->getserver->getcanon;
|
|
$_ .= " $rest2";
|
|
}
|
|
}
|
|
$_ .= "\n";
|
|
return 1;
|
|
};
|
|
$node->getinifile->copyedit($file, $edit)
|
|
or $log->push, return undef;
|
|
}
|
|
else {
|
|
my @text = ();
|
|
push(@text, sprintf("OwnProcessId %s", $node->getid));
|
|
my $nodesmgmt = $db->getnodelist('mgmt');
|
|
for my $mnode (@$nodesmgmt) {
|
|
my $host = $mnode->getserver->getcanon;
|
|
my $port = $mnode->getport;
|
|
push(@text, "$host $port");
|
|
}
|
|
$file->putlines(\@text) or $log->push, return undef;
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
sub getinifile {
|
|
my $node = shift;
|
|
@_ == 0 or confess 0+@_;
|
|
my $name = sprintf("%s.ini", $node->getdb->getname);
|
|
my $file = $node->getconfdir->getfile($name);
|
|
return $file;
|
|
}
|
|
|
|
sub getbincfg {
|
|
my $node = shift;
|
|
@_ == 0 or confess 0+@_;
|
|
my $name = sprintf("config.bin");
|
|
my $file = $node->getnodedir->getfile($name);
|
|
return $file;
|
|
}
|
|
|
|
sub getenvdefs {
|
|
my $node = shift;
|
|
@_ == 1 or confess 0+@_;
|
|
my $opts = shift;
|
|
my $home = $opts->{home} || $node->gethome;
|
|
my $netenv = NDB::Net::Env->instance;
|
|
if (! File::Spec->file_name_is_absolute($home)) {
|
|
$netenv->hasbase
|
|
or $log->put("no base and home=$home not absolute"), return undef;
|
|
$home = File::Spec->catfile($netenv->getbase, $home);
|
|
}
|
|
(-d $home)
|
|
or $log->put("$home: no such directory"), return undef;
|
|
my $defs;
|
|
if ($^O ne 'MSWin32') {
|
|
$defs = <<END;
|
|
# @{[ $node->desc ]} @{[ $node->getcomment("") ]}
|
|
# @{[ $node->getserver->desc ]} @{[ $node->getserver->getcanon ]}
|
|
#
|
|
debugger=\$1
|
|
#
|
|
NDB_TOP=$home
|
|
export NDB_TOP
|
|
PATH=\$NDB_TOP/bin:\$PATH
|
|
export PATH
|
|
LD_LIBRARY_PATH=\$NDB_TOP/lib:\$LD_LIBRARY_PATH
|
|
export LD_LIBRARY_PATH
|
|
PERL5LIB=\$NDB_TOP/lib/perl5:\$PERL5LIB
|
|
export PERL5LIB
|
|
NDB_NODEID=@{[ $node->getid ]}
|
|
export NDB_NODEID
|
|
NDB_NODETYPE=@{[ $node->gettype ]}
|
|
export NDB_NODETYPE
|
|
ulimit -Sc unlimited
|
|
END
|
|
if ($node->hasrunenv) {
|
|
$defs .= <<END;
|
|
#
|
|
cd @{[ $node->getnodedir->getpath ]} || exit 1
|
|
@{[ $node->getrunenv ]}
|
|
END
|
|
}
|
|
$defs .= <<END;
|
|
#
|
|
unset NDB_HOME # current NdbConfig.c would look here
|
|
#
|
|
END
|
|
} else {
|
|
$defs = <<END;
|
|
rem @{[ $node->desc ]} @{[ $node->getcomment("") ]}
|
|
rem @{[ $node->getserver->desc ]} @{[ $node->getserver->getcanon ]}
|
|
rem
|
|
set NDB_TOP=$home
|
|
set PATH=%NDB_TOP%\\bin;%PATH%
|
|
set PERL5LIB=%NDB_TOP%\\lib\\perl5;%PERL5LIB%
|
|
set NDB_NODEID=@{[ $node->getid ]}
|
|
set NDB_NODETYPE=@{[ $node->gettype ]}
|
|
END
|
|
if ($node->hasrunenv) {
|
|
$defs .= <<END;
|
|
rem
|
|
@{[ $node->getrunenv ]}
|
|
END
|
|
}
|
|
$defs .= <<END;
|
|
rem
|
|
rem current NdbConfig.c would look here
|
|
set NDB_HOME=
|
|
rem
|
|
END
|
|
}
|
|
chomp($defs);
|
|
return $defs;
|
|
}
|
|
|
|
sub startlocal {
|
|
my $node = shift;
|
|
@_ == 1 or confess 0+@_;
|
|
my($opts) = @_;
|
|
$log->put("start local")->push($node)->info;
|
|
my $lock = $node->getlock;
|
|
$lock->mkdir or $log->push, return undef;
|
|
anon: {
|
|
my $ret = $lock->test;
|
|
defined($ret) or $log->push, return undef;
|
|
if ($ret) {
|
|
$log->put("already running under serverpid=%s",
|
|
$lock->getpid)->push($node)->user;
|
|
return 1;
|
|
}
|
|
$lock->set or $log->push, return undef;
|
|
}
|
|
if ($opts->{clean}) {
|
|
$node->getnodedir->rmdir(1);
|
|
$node->getlogfile->unlink;
|
|
}
|
|
if (! $opts->{old}) {
|
|
$node->writelocalcfg or $log->push, return undef;
|
|
$node->handleprepare($opts) or $log->push, return undef;
|
|
}
|
|
anon: {
|
|
$lock->close;
|
|
if ($opts->{config}) {
|
|
return 1;
|
|
}
|
|
my $file = $node->getlogfile;
|
|
$file->mkdir or $log->push, return undef;
|
|
my $pid = fork();
|
|
defined($pid) or $log->put("fork failed: $!"), return undef;
|
|
if ($pid) {
|
|
exit(0);
|
|
}
|
|
$lock->set or $log->push->fatal;
|
|
$node->setlockpid($$) or $log->push->fatal;
|
|
if ($^O ne 'MSWin32') {
|
|
POSIX::setsid() or $log->put("setsid failed: $!")->fatal;
|
|
}
|
|
$log->setfile($file->getpath) or $log->push->fatal;
|
|
}
|
|
my $socket;
|
|
anon: {
|
|
my $file = $node->getsocketfile;
|
|
$file->mkdir or $log->push($node)->fatal;
|
|
unlink($file->getpath);
|
|
if ($^O ne 'MSWin32') {
|
|
$socket = NDB::Util::SocketUNIX->new
|
|
or $log->push($node)->fatal;
|
|
} else {
|
|
$socket = NDB::Util::SocketINET->new
|
|
or $log->push($node)->fatal;
|
|
}
|
|
$socket->setopt(SOL_SOCKET, SO_REUSEADDR, 1)
|
|
or $log->push($node)->fatal;
|
|
if ($^O ne 'MSWin32') {
|
|
$socket->bind($file->getpath)
|
|
or $log->push($node)->fatal;
|
|
} else {
|
|
$socket->bind($node->getdb->getnodeport + $node->getid)
|
|
or $log->push($node)->fatal;
|
|
}
|
|
$socket->listen
|
|
or $log->push($node)->fatal;
|
|
}
|
|
START: {
|
|
my $w = gensym();
|
|
my $r = gensym();
|
|
my @arg = ('/bin/sh', $node->getshellfile->getpath);
|
|
my $pid = open3($w, $r, undef, @arg);
|
|
$node->setiow(NDB::Util::IO->new(fh => $w))
|
|
or $log->push->fatal;
|
|
$node->setior(NDB::Util::IO->new(fh => $r))
|
|
or $log->push->fatal;
|
|
$node->setpid($pid)
|
|
or $log->push->fatal;
|
|
}
|
|
$node->setstate('run')
|
|
or $log->push($node)->fatal;
|
|
$log->put("started host=%s pid=%s",
|
|
$node->getserver->gethost, $node->getpid)->push($node)->user;
|
|
$log->push("started")->push($node)->putvalue(1)->user;
|
|
$log->detachuser;
|
|
NDB::Net::Client->deleteall;
|
|
my $event = NDB::Util::Event->new;
|
|
$event->set($socket, 'r');
|
|
$event->set($node->getior, 'r');
|
|
loop: {
|
|
try: {
|
|
my $n = $event->poll(10);
|
|
if (! defined($n)) {
|
|
$log->push->error;
|
|
sleep 1;
|
|
last try;
|
|
}
|
|
if (! $n) {
|
|
$log->push->debug;
|
|
last try;
|
|
}
|
|
if ($node->hasior && $event->test($node->getior, 'r')) {
|
|
my $data = $node->getior->read;
|
|
if (! defined($data)) {
|
|
$log->push->fatal;
|
|
}
|
|
if (length($data) > 0) {
|
|
$node->handleoutput($opts, $data);
|
|
}
|
|
if ($node->getior->getreadend) {
|
|
$log->put("input closed")->warn;
|
|
$event->clear($node->getior, 'r');
|
|
$node->getior->close;
|
|
$node->delior;
|
|
$node->handleeof($opts);
|
|
last loop;
|
|
}
|
|
}
|
|
if (! $event->test($socket, 'r')) {
|
|
last try;
|
|
}
|
|
my $csocket = $socket->accept(10);
|
|
if (! defined($csocket)) {
|
|
$log->push->error;
|
|
last try;
|
|
}
|
|
if (! $csocket) {
|
|
$log->push->warn;
|
|
last try;
|
|
}
|
|
my $client = NDB::Net::Client->new(
|
|
socket => $csocket,
|
|
serversocket => $socket,
|
|
serverlock => $lock,
|
|
event => $event,
|
|
context => $node,
|
|
);
|
|
$client or $log->push->fatal;
|
|
}
|
|
NDB::Net::Client->processall;
|
|
redo loop;
|
|
}
|
|
if ($node->getruntype eq "auto") {
|
|
if ($node->getstate eq "run") {
|
|
$log->put("restart in 5 seconds...")->info;
|
|
sleep 5;
|
|
goto START;
|
|
}
|
|
$log->put("stopping, skip restart")->info;
|
|
}
|
|
$lock->close;
|
|
$node->getsocketfile->unlink;
|
|
while (wait() != -1) {}
|
|
$log->put("exit")->push->info;
|
|
exit(0);
|
|
}
|
|
|
|
# handlers can be overridden in subclass
|
|
|
|
sub handleprepare { confess 'oops'; }
|
|
|
|
sub handleoutput {
|
|
my $node = shift;
|
|
@_ == 2 or confess 0+@_;
|
|
my($opts, $data) = @_;
|
|
$data =~ s/\015//g;
|
|
$data = $node->{savedata} . $data;
|
|
while ((my $i = index($data, "\n")) >= 0) {
|
|
my $line = substr($data, 0, $i);
|
|
$data = substr($data, $i+1);
|
|
$log->put($line)->info;
|
|
if ($opts->{user} && $line !~ /^\s*$/) {
|
|
$log->put($line)->user;
|
|
}
|
|
}
|
|
$node->{savedata} = $data;
|
|
if (1 && length $node->{savedata}) { # XXX partial line
|
|
my $line = $node->{savedata};
|
|
$log->put($line)->info;
|
|
if ($opts->{user} && $line !~ /^\s*$/) {
|
|
$log->put($line)->user;
|
|
}
|
|
$node->{savedata} = "";
|
|
}
|
|
}
|
|
|
|
sub handleeof {
|
|
}
|
|
|
|
# command subs can be overridden by subclass
|
|
|
|
sub waitforexit {
|
|
my $node = shift;
|
|
my $lock = $node->getlock;
|
|
my $lockpid = $node->getlockpid;
|
|
my $n1 = 0;
|
|
my $n2 = 10;
|
|
while (1) {
|
|
my $ret = $lock->test;
|
|
defined($ret) or $log->push, return undef;
|
|
if (! $ret) {
|
|
$log->put("exit done")->push($node)->user;
|
|
last;
|
|
}
|
|
if ($lockpid != $lock->getpid) {
|
|
$log->put("restarted: lock pid changed %s->%s",
|
|
$lockpid, $lock->getpid)->push($node);
|
|
return undef;
|
|
}
|
|
if (++$n1 >= $n2) {
|
|
$n2 *= 2;
|
|
$log->put("wait for exit")->push($node)->user;
|
|
}
|
|
select(undef, undef, undef, 0.1);
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
sub cmd_stopnode_bg {
|
|
my($node, $cmd) = @_;
|
|
return $node->waitforexit;
|
|
}
|
|
|
|
sub cmd_killnode_fg {
|
|
my($node, $cmd) = @_;
|
|
my $pid = $node->getpid;
|
|
$log->put("kill -9 $pid")->push($node)->user;
|
|
kill(9, $pid);
|
|
$node->setstate('stop')
|
|
or $log->push($node), return undef;
|
|
return 1;
|
|
}
|
|
|
|
sub cmd_killnode_bg {
|
|
my($node, $cmd) = @_;
|
|
return $node->waitforexit;
|
|
}
|
|
|
|
sub cmd_statnode_bg {
|
|
my($node, $cmd) = @_;
|
|
return "up";
|
|
}
|
|
|
|
sub cmd_writenode_fg {
|
|
my($node, $cmd) = @_;
|
|
my $text = $cmd->getarg(2);
|
|
while(chomp($text)) {};
|
|
$log->put("write: $text")->push($node)->user;
|
|
$node->getiow->write("$text\n");
|
|
my $output = "";
|
|
if ((my $num = $cmd->getopt("wait")) > 0) {
|
|
my $lim = time + $num;
|
|
$node->getior->settimeout(1);
|
|
loop: {
|
|
my $data = $node->getior->read;
|
|
if (length($data) > 0) {
|
|
$node->handleoutput({user => 1}, $data);
|
|
$output .= $data;
|
|
}
|
|
redo loop if time < $lim;
|
|
}
|
|
$node->getior->settimeout(0);
|
|
}
|
|
return { output => $output };
|
|
}
|
|
|
|
# commands
|
|
|
|
sub doremote {
|
|
my $node = shift;
|
|
my($cmdname, $opts, @args) = @_;
|
|
my $server = $node->getserver;
|
|
$log->put("$cmdname remote")->push($server)->push($node)->info;
|
|
my $argv = [
|
|
$cmdname, q(--local),
|
|
$opts, $node->getdb->getname, $node->getid, @args ];
|
|
my $cmd = NDB::Net::Command->new(argv => $argv)
|
|
or $log->push, return undef;
|
|
my $ret = $server->request($cmd)
|
|
or $log->push, return undef;
|
|
return $ret;
|
|
}
|
|
|
|
sub dolocal {
|
|
my $node = shift;
|
|
my($cmdname, $opts, @args) = @_;
|
|
$log->put("$cmdname local")->push($node)->info;
|
|
if (! $node->getserver->islocal) {
|
|
$log->put("not local")->push($node->getserver)->push($node);
|
|
return undef;
|
|
}
|
|
if ($cmdname eq "startnode") {
|
|
return $node->startlocal($opts);
|
|
}
|
|
my $lock = $node->getlock;
|
|
anon: {
|
|
my $ret = $lock->test;
|
|
defined($ret) or $log->push, return undef;
|
|
if (! $ret) {
|
|
if ($cmdname eq "statnode") {
|
|
return "down";
|
|
}
|
|
$log->put("not running")->push($node)->user;
|
|
return $cmdname eq "writenode" ? undef : 1;
|
|
}
|
|
}
|
|
my $server;
|
|
anon: {
|
|
my $path = $node->getsocketfile->getpath;
|
|
if (! -e $path) {
|
|
$log->put("$path: no socket")->push($node);
|
|
return undef;
|
|
}
|
|
if ($^O ne 'MSWin32') {
|
|
$server = NDB::Net::ServerUNIX->new(id => 0, path => $path)
|
|
or $log->push, return undef;
|
|
} else {
|
|
$server = NDB::Net::ServerINET->new(id => 0, host => $node->getserver->getcanon, port => $node->getdb->getnodeport + $node->getid)
|
|
or $log->push, return undef;
|
|
}
|
|
}
|
|
my $argv = [
|
|
$cmdname,
|
|
$opts, $node->getdb->getname, $node->getid, @args ];
|
|
my $cmd = NDB::Net::Command->new(argv => $argv)
|
|
or $log->push, return undef;
|
|
my $ret = $server->request($cmd)
|
|
or $log->push, return undef;
|
|
$log->put("$cmdname done")->push($node)->info;
|
|
return $ret;
|
|
}
|
|
|
|
sub start {
|
|
my $node = shift;
|
|
@_ == 1 or confess 0+@_;
|
|
my($opts) = @_;
|
|
$log->put("start")->push($node)->info;
|
|
my $do = $opts->{local} ? "dolocal" : "doremote";
|
|
return $node->$do("startnode", $opts);
|
|
}
|
|
|
|
sub stop {
|
|
my $node = shift;
|
|
@_ == 1 or confess 0+@_;
|
|
my($opts) = @_;
|
|
$log->put("stop")->push($node)->info;
|
|
my $do = $opts->{local} ? "dolocal" : "doremote";
|
|
return $node->$do("stopnode", $opts);
|
|
}
|
|
|
|
sub kill {
|
|
my $node = shift;
|
|
@_ == 1 or confess 0+@_;
|
|
my($opts) = @_;
|
|
$log->put("kill")->push($node)->info;
|
|
my $do = $opts->{local} ? "dolocal" : "doremote";
|
|
return $node->$do("killnode", $opts);
|
|
}
|
|
|
|
sub stat {
|
|
my $node = shift;
|
|
@_ == 1 or confess 0+@_;
|
|
my($opts) = @_;
|
|
$log->put("stat")->push($node)->info;
|
|
my $do = $opts->{local} ? "dolocal" : "doremote";
|
|
return $node->$do("statnode", $opts);
|
|
}
|
|
|
|
sub write {
|
|
my $node = shift;
|
|
@_ == 2 or confess 0+@_;
|
|
my($opts, $text) = @_;
|
|
$log->put("write: $text")->push($node)->info;
|
|
my $do = $opts->{local} ? "dolocal" : "doremote";
|
|
return $node->$do("writenode", $opts, $text);
|
|
}
|
|
|
|
1;
|
|
# vim:set sw=4:
|