This sample demonstrates how to re-attach a node to a cluster using
mco_cluster_attach()
. The nodes begin and work together, then each node detaches and performs local database updates; then reconnects to the cluster.
In a console window run:
cluster_attach 2 0Then in a second console window run:
cluster_attach 2 1But it is more instructive to run one instance in your development environment debugger, stepping through the code.
/* enables WRITE transaction and create objects in detached database */ mco_cluster_detach(db); { mco_trans_h t; Record rec; mco_trans_start(db, MCO_READ_WRITE, MCO_TRANS_FOREGROUND, &t); Record_new(t, &rec); Record_key_put(&rec, N_OBJECTS * 100 + cl_info.node_id); Record_value_put(&rec, 0); mco_trans_commit(t); } print_database(db, "Database content after local modifications : "); sample_sleep(1000); /* re-attach to cluster */ rc = mco_cluster_attach(db, &cl_params); ... printf("Re-attached to cluster\n"); sample_start_connected_task(&listener_task, ClusterListener, db_name, 0); /* restart listener thread */ update_database(db, RUN_TIME / 2); /* stop cluster, wait for listener thread, print database content & statistic */ mco_cluster_stop(db); sample_join_task(&listener_task); mco_cluster_info(db, &cl_info); print_database(db, "Database content after second mco_cluster_stop() (the same for all nodes) : "); printf("Bytes sent %" INT8_FORMAT "u, received %" INT8_FORMAT "u\n", cl_info.bytes_sent, cl_info.bytes_recv); ...