1
0
mirror of https://github.com/MariaDB/server.git synced 2025-05-11 13:21:44 +03:00
unknown abee640f44 neww ndb automake
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
2004-05-26 15:36:55 +00:00

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: