Changeset 989 for vendor/current/ctdb/protocol
- Timestamp:
- Nov 25, 2016, 8:04:54 PM (9 years ago)
- Location:
- vendor/current/ctdb/protocol
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
vendor/current/ctdb/protocol/protocol.h
r988 r989 121 121 /* SRVID prefix used by CTDB */ 122 122 #define CTDB_SRVID_PREFIX 0xF000000000000000LL 123 124 /* SRVID prefix used during recovery for pulling and pushing databases */ 125 #define CTDB_SRVID_RECOVERY 0xF001000000000000LL 126 127 /* SRVID to assign of banning credits */ 128 #define CTDB_SRVID_BANNING 0xF002000000000000LL 123 129 124 130 /* SRVID to inform of election data */ … … 356 362 CTDB_CONTROL_DB_TRANSACTION_COMMIT = 144, 357 363 CTDB_CONTROL_DB_TRANSACTION_CANCEL = 145, 364 CTDB_CONTROL_DB_PULL = 146, 365 CTDB_CONTROL_DB_PUSH_START = 147, 366 CTDB_CONTROL_DB_PUSH_CONFIRM = 148, 358 367 }; 359 368 … … 456 465 #define CTDB_LMASTER_ANY 0xffffffff 457 466 uint32_t lmaster; 467 }; 468 469 struct ctdb_pulldb_ext { 470 uint32_t db_id; 471 uint32_t lmaster; 472 uint64_t srvid; 458 473 }; 459 474 … … 620 635 uint32_t mutex_enabled; 621 636 uint32_t lock_processes_per_db; 637 uint32_t rec_buffer_size_limit; 622 638 }; 623 639 … … 705 721 */ 706 722 #define CTDB_CAP_PARALLEL_RECOVERY 0x00010000 707 708 #define CTDB_CAP_FEATURES (CTDB_CAP_PARALLEL_RECOVERY) 723 #define CTDB_CAP_FRAGMENTED_CONTROLS 0x00020000 724 725 #define CTDB_CAP_FEATURES (CTDB_CAP_PARALLEL_RECOVERY | \ 726 CTDB_CAP_FRAGMENTED_CONTROLS) 709 727 710 728 #define CTDB_CAP_DEFAULT (CTDB_CAP_RECMASTER | \ … … 856 874 uint32_t loglevel; 857 875 struct ctdb_pulldb *pulldb; 876 struct ctdb_pulldb_ext *pulldb_ext; 858 877 struct ctdb_rec_buffer *recbuf; 859 878 uint32_t recmode; … … 924 943 struct ctdb_db_statistics *dbstats; 925 944 enum ctdb_runstate runstate; 945 uint32_t num_records; 926 946 } data; 927 947 }; … … 977 997 /* SRVID_MEM_DUMP, SRVID_TAKEOVER_RUN */ 978 998 struct ctdb_srvid_message *msg; 979 /* SRVID_ REBALANCE_NODE */999 /* SRVID_BANNING, SRVID_REBALANCE_NODE */ 980 1000 uint32_t pnn; 981 1001 /* SRVID_DISABLE_TAKEOVER_RUNS, SRVID_DISABLE_RECOVERIES */ -
vendor/current/ctdb/protocol/protocol_api.h
r988 r989 53 53 void *private_data); 54 54 55 int ctdb_rec_buffer_write(struct ctdb_rec_buffer *recbuf, int fd); 56 int ctdb_rec_buffer_read(int fd, TALLOC_CTX *mem_ctx, 57 struct ctdb_rec_buffer **out); 58 55 59 size_t ctdb_server_id_len(struct ctdb_server_id *sid); 56 60 void ctdb_server_id_push(struct ctdb_server_id *sid, uint8_t *buf); … … 635 639 int ctdb_reply_control_db_transaction_cancel(struct ctdb_reply_control *reply); 636 640 641 void ctdb_req_control_db_pull(struct ctdb_req_control *request, 642 struct ctdb_pulldb_ext *pulldb_ext); 643 int ctdb_reply_control_db_pull(struct ctdb_reply_control *reply, 644 uint32_t *num_records); 645 646 void ctdb_req_control_db_push_start(struct ctdb_req_control *request, 647 struct ctdb_pulldb_ext *pulldb_ext); 648 int ctdb_reply_control_db_push_start(struct ctdb_reply_control *reply); 649 650 void ctdb_req_control_db_push_confirm(struct ctdb_req_control *request, 651 uint32_t db_id); 652 int ctdb_reply_control_db_push_confirm(struct ctdb_reply_control *reply, 653 uint32_t *num_records); 654 637 655 /* From protocol/protocol_message.c */ 638 656 -
vendor/current/ctdb/protocol/protocol_client.c
r988 r989 2469 2469 return ctdb_reply_control_generic(reply); 2470 2470 } 2471 2472 /* CTDB_CONTROL_DB_PULL */ 2473 2474 void ctdb_req_control_db_pull(struct ctdb_req_control *request, 2475 struct ctdb_pulldb_ext *pulldb_ext) 2476 { 2477 request->opcode = CTDB_CONTROL_DB_PULL; 2478 request->pad = 0; 2479 request->srvid = 0; 2480 request->client_id = 0; 2481 request->flags = 0; 2482 2483 request->rdata.opcode = CTDB_CONTROL_DB_PULL; 2484 request->rdata.data.pulldb_ext = pulldb_ext; 2485 } 2486 2487 int ctdb_reply_control_db_pull(struct ctdb_reply_control *reply, 2488 uint32_t *num_records) 2489 { 2490 if (reply->status == 0 && 2491 reply->rdata.opcode == CTDB_CONTROL_DB_PULL) { 2492 *num_records = reply->rdata.data.num_records; 2493 } 2494 return reply->status; 2495 } 2496 2497 /* CTDB_CONTROL_DB_PUSH_START */ 2498 2499 void ctdb_req_control_db_push_start(struct ctdb_req_control *request, 2500 struct ctdb_pulldb_ext *pulldb_ext) 2501 { 2502 request->opcode = CTDB_CONTROL_DB_PUSH_START; 2503 request->pad = 0; 2504 request->srvid = 0; 2505 request->client_id = 0; 2506 request->flags = 0; 2507 2508 request->rdata.opcode = CTDB_CONTROL_DB_PUSH_START; 2509 request->rdata.data.pulldb_ext = pulldb_ext; 2510 } 2511 2512 int ctdb_reply_control_db_push_start(struct ctdb_reply_control *reply) 2513 { 2514 return ctdb_reply_control_generic(reply); 2515 } 2516 2517 /* CTDB_CONTROL_DB_PUSH_CONFIRM */ 2518 2519 void ctdb_req_control_db_push_confirm(struct ctdb_req_control *request, 2520 uint32_t db_id) 2521 { 2522 request->opcode = CTDB_CONTROL_DB_PUSH_CONFIRM; 2523 request->pad = 0; 2524 request->srvid = 0; 2525 request->client_id = 0; 2526 request->flags = 0; 2527 2528 request->rdata.opcode = CTDB_CONTROL_DB_PUSH_CONFIRM; 2529 request->rdata.data.db_id = db_id; 2530 } 2531 2532 int ctdb_reply_control_db_push_confirm(struct ctdb_reply_control *reply, 2533 uint32_t *num_records) 2534 { 2535 if (reply->status == 0 && 2536 reply->rdata.opcode == CTDB_CONTROL_DB_PUSH_CONFIRM) { 2537 *num_records = reply->rdata.data.num_records; 2538 } 2539 return reply->status; 2540 } -
vendor/current/ctdb/protocol/protocol_control.c
r988 r989 50 50 { 51 51 size_t len = 0; 52 uint64_t u64;53 52 54 53 if (cd == NULL) { … … 385 384 386 385 case CTDB_CONTROL_GET_DB_SEQNUM: 387 u64 = cd->data.db_id; 388 len = ctdb_uint64_len(u64); 386 len = ctdb_uint64_len((uint64_t)cd->data.db_id); 389 387 break; 390 388 … … 480 478 481 479 case CTDB_CONTROL_DB_TRANSACTION_CANCEL: 480 len = ctdb_uint32_len(cd->data.db_id); 481 break; 482 483 case CTDB_CONTROL_DB_PULL: 484 len = ctdb_pulldb_ext_len(cd->data.pulldb_ext); 485 break; 486 487 case CTDB_CONTROL_DB_PUSH_START: 488 len = ctdb_pulldb_ext_len(cd->data.pulldb_ext); 489 break; 490 491 case CTDB_CONTROL_DB_PUSH_CONFIRM: 482 492 len = ctdb_uint32_len(cd->data.db_id); 483 493 break; … … 490 500 uint8_t *buf) 491 501 { 492 uint64_t u64;493 494 502 switch (cd->opcode) { 495 503 case CTDB_CONTROL_PROCESS_EXISTS: … … 713 721 714 722 case CTDB_CONTROL_GET_DB_SEQNUM: 715 u64 = cd->data.db_id; 716 ctdb_uint64_push(u64, buf); 723 ctdb_uint32_push(cd->data.db_id, buf); 717 724 break; 718 725 … … 790 797 791 798 case CTDB_CONTROL_DB_TRANSACTION_CANCEL: 799 ctdb_uint32_push(cd->data.db_id, buf); 800 break; 801 802 case CTDB_CONTROL_DB_PULL: 803 ctdb_pulldb_ext_push(cd->data.pulldb_ext, buf); 804 break; 805 806 case CTDB_CONTROL_DB_PUSH_START: 807 ctdb_pulldb_ext_push(cd->data.pulldb_ext, buf); 808 break; 809 810 case CTDB_CONTROL_DB_PUSH_CONFIRM: 792 811 ctdb_uint32_push(cd->data.db_id, buf); 793 812 break; … … 801 820 { 802 821 int ret = 0; 803 uint64_t u64 = 0;804 822 805 823 cd->opcode = opcode; … … 1080 1098 1081 1099 case CTDB_CONTROL_GET_DB_SEQNUM: 1082 ret = ctdb_uint 64_pull(buf, buflen, mem_ctx, &u64);1083 cd->data.db_id = (uint32_t)u64;1100 ret = ctdb_uint32_pull(buf, buflen, mem_ctx, 1101 &cd->data.db_id); 1084 1102 break; 1085 1103 … … 1178 1196 &cd->data.db_id); 1179 1197 break; 1198 1199 case CTDB_CONTROL_DB_PULL: 1200 ret = ctdb_pulldb_ext_pull(buf, buflen, mem_ctx, 1201 &cd->data.pulldb_ext); 1202 break; 1203 1204 case CTDB_CONTROL_DB_PUSH_START: 1205 ret = ctdb_pulldb_ext_pull(buf, buflen, mem_ctx, 1206 &cd->data.pulldb_ext); 1207 break; 1208 1209 case CTDB_CONTROL_DB_PUSH_CONFIRM: 1210 ret = ctdb_uint32_pull(buf, buflen, mem_ctx, 1211 &cd->data.db_id); 1212 break; 1180 1213 } 1181 1214 … … 1574 1607 1575 1608 case CTDB_CONTROL_DB_TRANSACTION_CANCEL: 1609 break; 1610 1611 case CTDB_CONTROL_DB_PULL: 1612 len = ctdb_uint32_len(cd->data.num_records); 1613 break; 1614 1615 case CTDB_CONTROL_DB_PUSH_START: 1616 break; 1617 1618 case CTDB_CONTROL_DB_PUSH_CONFIRM: 1619 len = ctdb_uint32_len(cd->data.num_records); 1576 1620 break; 1577 1621 } … … 1727 1771 ctdb_node_map_push(cd->data.nodemap, buf); 1728 1772 break; 1773 1774 case CTDB_CONTROL_DB_PULL: 1775 ctdb_uint32_push(cd->data.num_records, buf); 1776 break; 1777 1778 case CTDB_CONTROL_DB_PUSH_CONFIRM: 1779 ctdb_uint32_push(cd->data.num_records, buf); 1780 break; 1729 1781 } 1730 1782 } … … 1913 1965 ret = ctdb_node_map_pull(buf, buflen, mem_ctx, 1914 1966 &cd->data.nodemap); 1967 break; 1968 1969 case CTDB_CONTROL_DB_PULL: 1970 ret = ctdb_uint32_pull(buf, buflen, mem_ctx, 1971 &cd->data.num_records); 1972 break; 1973 1974 case CTDB_CONTROL_DB_PUSH_CONFIRM: 1975 ret = ctdb_uint32_pull(buf, buflen, mem_ctx, 1976 &cd->data.num_records); 1915 1977 break; 1916 1978 } -
vendor/current/ctdb/protocol/protocol_message.c
r988 r989 41 41 42 42 switch (srvid) { 43 case CTDB_SRVID_BANNING: 44 len = ctdb_uint32_len(mdata->pnn); 45 break; 46 43 47 case CTDB_SRVID_ELECTION: 44 48 len = ctdb_election_message_len(mdata->election); … … 115 119 { 116 120 switch (srvid) { 121 case CTDB_SRVID_BANNING: 122 ctdb_uint32_push(mdata->pnn, buf); 123 break; 124 117 125 case CTDB_SRVID_ELECTION: 118 126 ctdb_election_message_push(mdata->election, buf); … … 190 198 191 199 switch (srvid) { 200 case CTDB_SRVID_BANNING: 201 ret = ctdb_uint32_pull(buf, buflen, mem_ctx, &mdata->pnn); 202 break; 203 192 204 case CTDB_SRVID_ELECTION: 193 205 ret = ctdb_election_message_pull(buf, buflen, mem_ctx, -
vendor/current/ctdb/protocol/protocol_private.h
r988 r989 91 91 int ctdb_pulldb_pull(uint8_t *buf, size_t buflen, TALLOC_CTX *mem_ctx, 92 92 struct ctdb_pulldb **out); 93 94 size_t ctdb_pulldb_ext_len(struct ctdb_pulldb_ext *pulldb); 95 void ctdb_pulldb_ext_push(struct ctdb_pulldb_ext *pulldb, uint8_t *buf); 96 int ctdb_pulldb_ext_pull(uint8_t *buf, size_t buflen, TALLOC_CTX *mem_ctx, 97 struct ctdb_pulldb_ext **out); 93 98 94 99 size_t ctdb_traverse_start_len(struct ctdb_traverse_start *traverse); -
vendor/current/ctdb/protocol/protocol_types.c
r988 r989 466 466 467 467 pulldb = talloc_memdup(mem_ctx, buf, sizeof(struct ctdb_pulldb)); 468 if (pulldb == NULL) { 469 return ENOMEM; 470 } 471 472 *out = pulldb; 473 return 0; 474 } 475 476 size_t ctdb_pulldb_ext_len(struct ctdb_pulldb_ext *pulldb) 477 { 478 return sizeof(struct ctdb_pulldb_ext); 479 } 480 481 void ctdb_pulldb_ext_push(struct ctdb_pulldb_ext *pulldb, uint8_t *buf) 482 { 483 memcpy(buf, pulldb, sizeof(struct ctdb_pulldb_ext)); 484 } 485 486 int ctdb_pulldb_ext_pull(uint8_t *buf, size_t buflen, TALLOC_CTX *mem_ctx, 487 struct ctdb_pulldb_ext **out) 488 { 489 struct ctdb_pulldb_ext *pulldb; 490 491 if (buflen < sizeof(struct ctdb_pulldb_ext)) { 492 return EMSGSIZE; 493 } 494 495 pulldb = talloc_memdup(mem_ctx, buf, sizeof(struct ctdb_pulldb_ext)); 468 496 if (pulldb == NULL) { 469 497 return ENOMEM; … … 771 799 772 800 return ret; 801 } 802 803 int ctdb_rec_buffer_write(struct ctdb_rec_buffer *recbuf, int fd) 804 { 805 ssize_t n; 806 807 n = write(fd, &recbuf->db_id, sizeof(uint32_t)); 808 if (n == -1 || n != sizeof(uint32_t)) { 809 return (errno != 0 ? errno : EIO); 810 } 811 n = write(fd, &recbuf->count, sizeof(uint32_t)); 812 if (n == -1 || n != sizeof(uint32_t)) { 813 return (errno != 0 ? errno : EIO); 814 } 815 n = write(fd, &recbuf->buflen, sizeof(size_t)); 816 if (n == -1 || n != sizeof(size_t)) { 817 return (errno != 0 ? errno : EIO); 818 } 819 n = write(fd, recbuf->buf, recbuf->buflen); 820 if (n == -1 || n != recbuf->buflen) { 821 return (errno != 0 ? errno : EIO); 822 } 823 824 return 0; 825 } 826 827 int ctdb_rec_buffer_read(int fd, TALLOC_CTX *mem_ctx, 828 struct ctdb_rec_buffer **out) 829 { 830 struct ctdb_rec_buffer *recbuf; 831 ssize_t n; 832 833 recbuf = talloc(mem_ctx, struct ctdb_rec_buffer); 834 if (recbuf == NULL) { 835 return ENOMEM; 836 } 837 838 n = read(fd, &recbuf->db_id, sizeof(uint32_t)); 839 if (n == -1 || n != sizeof(uint32_t)) { 840 return (errno != 0 ? errno : EIO); 841 } 842 n = read(fd, &recbuf->count, sizeof(uint32_t)); 843 if (n == -1 || n != sizeof(uint32_t)) { 844 return (errno != 0 ? errno : EIO); 845 } 846 n = read(fd, &recbuf->buflen, sizeof(size_t)); 847 if (n == -1 || n != sizeof(size_t)) { 848 return (errno != 0 ? errno : EIO); 849 } 850 851 recbuf->buf = talloc_size(recbuf, recbuf->buflen); 852 if (recbuf->buf == NULL) { 853 return ENOMEM; 854 } 855 856 n = read(fd, recbuf->buf, recbuf->buflen); 857 if (n == -1 || n != recbuf->buflen) { 858 return (errno != 0 ? errno : EIO); 859 } 860 861 *out = recbuf; 862 return 0; 773 863 } 774 864
Note:
See TracChangeset
for help on using the changeset viewer.