diff options
Diffstat (limited to 'lang/tcl/tcl_rep.c')
| -rw-r--r-- | lang/tcl/tcl_rep.c | 106 |
1 files changed, 80 insertions, 26 deletions
diff --git a/lang/tcl/tcl_rep.c b/lang/tcl/tcl_rep.c index a616cc7c..01710597 100644 --- a/lang/tcl/tcl_rep.c +++ b/lang/tcl/tcl_rep.c @@ -1,7 +1,7 @@ /*- * See the file LICENSE for redistribution information. * - * Copyright (c) 1999, 2012 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2015 Oracle and/or its affiliates. All rights reserved. * * $Id$ */ @@ -36,10 +36,13 @@ static const NAMEMAP rep_config_types[] = { {"autorollback", DB_REP_CONF_AUTOROLLBACK}, {"bulk", DB_REP_CONF_BULK}, {"delayclient", DB_REP_CONF_DELAYCLIENT}, + {"electloglength", DB_REP_CONF_ELECT_LOGLENGTH}, {"inmem", DB_REP_CONF_INMEM}, {"lease", DB_REP_CONF_LEASE}, {"mgr2sitestrict", DB_REPMGR_CONF_2SITE_STRICT}, {"mgrelections", DB_REPMGR_CONF_ELECTIONS}, + {"mgrprefmasclient", DB_REPMGR_CONF_PREFMAS_CLIENT}, + {"mgrprefmasmaster", DB_REPMGR_CONF_PREFMAS_MASTER}, {"nowait", DB_REP_CONF_NOWAIT}, {NULL, 0} }; @@ -137,6 +140,14 @@ tcl_RepGetTwo(interp, dbenv, op) case DBTCL_GETCLOCK: ret = dbenv->rep_get_clockskew(dbenv, &val1, &val2); break; + case DBTCL_GETINQUEUE_MAX: + ret = dbenv->repmgr_get_incoming_queue_max(dbenv, + &val1, &val2); + break; + case DBTCL_GETINQUEUE_REDZONE: + ret = __repmgr_get_incoming_queue_redzone(dbenv, + &val1, &val2); + break; case DBTCL_GETLIMIT: ret = dbenv->rep_get_limit(dbenv, &val1, &val2); break; @@ -456,7 +467,7 @@ tcl_RepLease(interp, objc, objv, dbenv) if ((result = _GetUInt32(interp, objv[0], &timeout)) != TCL_OK) return (result); - if (objc == 4) { + if (objc == 3) { if ((result = _GetUInt32(interp, objv[1], &clock_fast)) != TCL_OK) return (result); @@ -519,14 +530,14 @@ tcl_RepLimit(interp, objc, objv, dbenv) int result, ret; u_int32_t bytes, gbytes; - if (objc != 4) { + if (objc != 2) { Tcl_WrongNumArgs(interp, 2, objv, "gbytes bytes"); return (TCL_ERROR); } - if ((result = _GetUInt32(interp, objv[2], &gbytes)) != TCL_OK) + if ((result = _GetUInt32(interp, objv[0], &gbytes)) != TCL_OK) return (result); - if ((result = _GetUInt32(interp, objv[3], &bytes)) != TCL_OK) + if ((result = _GetUInt32(interp, objv[1], &bytes)) != TCL_OK) return (result); _debug_check(); @@ -589,14 +600,14 @@ tcl_RepRequest(interp, objc, objv, dbenv) int result, ret; long min, max; - if (objc != 4) { + if (objc != 2) { Tcl_WrongNumArgs(interp, 2, objv, "min max"); return (TCL_ERROR); } - if ((result = Tcl_GetLongFromObj(interp, objv[2], &min)) != TCL_OK) + if ((result = Tcl_GetLongFromObj(interp, objv[0], &min)) != TCL_OK) return (result); - if ((result = Tcl_GetLongFromObj(interp, objv[3], &max)) != TCL_OK) + if ((result = Tcl_GetLongFromObj(interp, objv[1], &max)) != TCL_OK) return (result); _debug_check(); @@ -944,7 +955,7 @@ tcl_RepStat(interp, objc, objv, dbenv) result = TCL_OK; if (objc > 3) { - Tcl_WrongNumArgs(interp, 2, objv, NULL); + Tcl_WrongNumArgs(interp, 2, objv, "?-clear?"); return (TCL_ERROR); } if (objc == 3) { @@ -970,7 +981,6 @@ tcl_RepStat(interp, objc, objv, dbenv) * list pairs and free up the memory. */ res = Tcl_NewObj(); -#ifdef HAVE_STATISTICS /* * MAKE_STAT_* assumes 'res' and 'error' label. */ @@ -998,6 +1008,7 @@ tcl_RepStat(interp, objc, objv, dbenv) MAKE_STAT_LIST("Generation number", sp->st_gen); MAKE_STAT_LIST("Election generation number", sp->st_egen); MAKE_STAT_LIST("Startup complete", sp->st_startup_complete); + MAKE_STAT_LIST("Is view", sp->st_view); MAKE_WSTAT_LIST("Lease messages sent", sp->st_lease_sends); MAKE_WSTAT_LIST("Lease checks", sp->st_lease_chk); MAKE_WSTAT_LIST("Lease check invalid", sp->st_lease_chk_misses); @@ -1046,8 +1057,10 @@ tcl_RepStat(interp, objc, objv, dbenv) sp->st_startsync_delayed); MAKE_STAT_LIST("Maximum lease seconds", sp->st_max_lease_sec); MAKE_STAT_LIST("Maximum lease usecs", sp->st_max_lease_usec); + /* Undocumented field used by tests only. */ MAKE_STAT_LIST("File fail cleanups done", sp->st_filefail_cleanups); -#endif + /* Undocumented field used by tests only. */ + MAKE_WSTAT_LIST("Future duplicated log records", sp->st_log_futuredup); Tcl_SetObjResult(interp, res); error: @@ -1130,6 +1143,7 @@ tcl_RepMgr(interp, objc, objv, dbenv) { static const char *rmgr[] = { "-ack", + "-inqueue", "-local", "-msgth", "-pri", @@ -1141,6 +1155,7 @@ tcl_RepMgr(interp, objc, objv, dbenv) }; enum rmgr { RMGR_ACK, + RMGR_INQUEUE, RMGR_LOCAL, RMGR_MSGTH, RMGR_PRI, @@ -1154,13 +1169,13 @@ tcl_RepMgr(interp, objc, objv, dbenv) long to; int ack, creator, i, j, legacy, myobjc, optindex; int peer, result, ret, totype, t_ret; - u_int32_t msgth, start_flag, uintarg; + u_int32_t call_start, msgth, start_flag, uintarg, uintarg2; char *arg; result = TCL_OK; ack = ret = totype = 0; msgth = 1; - start_flag = 0; + call_start = start_flag = 0; if (objc <= 2) { Tcl_WrongNumArgs(interp, 2, objv, "?args?"); @@ -1202,6 +1217,32 @@ tcl_RepMgr(interp, objc, objv, dbenv) result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret), "ack"); break; + case RMGR_INQUEUE: + result = Tcl_ListObjGetElements(interp, objv[i], + &myobjc, &myobjv); + if (result == TCL_OK) + i++; + else + break; + if (myobjc != 2) { + Tcl_WrongNumArgs(interp, 2, objv, + "?-inqueue {gbytes bytes}?"); + result = TCL_ERROR; + break; + } + arg = Tcl_GetStringFromObj(myobjv[0], NULL); + if ((result = _GetUInt32(interp, myobjv[0], &uintarg)) + != TCL_OK) + break; + if ((result = _GetUInt32(interp, myobjv[1], &uintarg2)) + != TCL_OK) + break; + _debug_check(); + ret = dbenv->repmgr_set_incoming_queue_max(dbenv, + uintarg, uintarg2); + result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret), + "repmgr_set_incoming_queue_max"); + break; case RMGR_LOCAL: result = Tcl_ListObjGetElements(interp, objv[i], &myobjc, &myobjv); @@ -1370,12 +1411,18 @@ tcl_RepMgr(interp, objc, objv, dbenv) start_flag = DB_REP_CLIENT; else if (strcmp(arg, "elect") == 0) start_flag = DB_REP_ELECTION; + else if (strcmp(arg, "none") == 0) { + start_flag = 0; + call_start = 1; + } else { Tcl_AddErrorInfo( interp, "start: illegal state"); result = TCL_ERROR; break; } + if (start_flag) + call_start = 1; /* * Some config functions need to be called * before repmgr_start. So finish parsing all @@ -1423,7 +1470,7 @@ tcl_RepMgr(interp, objc, objv, dbenv) * Only call repmgr_start if needed. The user may use this * call just to reconfigure, change policy, etc. */ - if (start_flag != 0 && result == TCL_OK) { + if (call_start && result == TCL_OK) { _debug_check(); ret = dbenv->repmgr_start(dbenv, (int)msgth, start_flag); result = _ReturnSetup( @@ -1448,9 +1495,9 @@ tcl_RepMgrSiteList(interp, objc, objv, dbenv) DB_ENV *dbenv; { DB_REPMGR_SITE *sp; - Tcl_Obj *myobjv[5], *res, *thislist; + Tcl_Obj *myobjv[6], *res, *thislist; u_int count, i; - char *pr, *st; + char *pr, *st, *vw; int myobjc, result, ret; result = TCL_OK; @@ -1483,11 +1530,9 @@ tcl_RepMgrSiteList(interp, objc, objv, dbenv) st = "disconnected"; else st = "unknown"; - if (F_ISSET(&sp[i], DB_REPMGR_ISPEER)) - pr = "peer"; - else - pr = "non-peer"; - MAKE_SITE_LIST(sp[i].eid, sp[i].host, sp[i].port, st, pr); + pr = F_ISSET(&sp[i], DB_REPMGR_ISPEER) ? "peer" : "non-peer"; + vw = F_ISSET(&sp[i], DB_REPMGR_ISVIEW) ? "view" : "participant"; + MAKE_SITE_LIST(sp[i].eid, sp[i].host, sp[i].port, st, pr, vw); } Tcl_SetObjResult(interp, res); @@ -1520,7 +1565,7 @@ tcl_RepMgrStat(interp, objc, objv, dbenv) result = TCL_OK; if (objc > 3) { - Tcl_WrongNumArgs(interp, 2, objv, NULL); + Tcl_WrongNumArgs(interp, 2, objv, "?-clear?"); return (TCL_ERROR); } if (objc == 3) { @@ -1546,18 +1591,27 @@ tcl_RepMgrStat(interp, objc, objv, dbenv) * list pairs and free up the memory. */ res = Tcl_NewObj(); -#ifdef HAVE_STATISTICS /* * MAKE_STAT_* assumes 'res' and 'error' label. */ MAKE_WSTAT_LIST("Acknowledgement failures", sp->st_perm_failed); MAKE_WSTAT_LIST("Messages delayed", sp->st_msgs_queued); MAKE_WSTAT_LIST("Messages discarded", sp->st_msgs_dropped); + MAKE_WSTAT_LIST("Incoming messages size (gbytes)", + sp->st_incoming_queue_gbytes); + MAKE_WSTAT_LIST("Incoming messages size (bytes)", + sp->st_incoming_queue_bytes); + MAKE_WSTAT_LIST("Incoming messages discarded", + sp->st_incoming_msgs_dropped); MAKE_WSTAT_LIST("Connections dropped", sp->st_connection_drop); MAKE_WSTAT_LIST("Failed re-connects", sp->st_connect_fail); - MAKE_WSTAT_LIST("Election threads", sp->st_elect_threads); - MAKE_WSTAT_LIST("Max elect threads", sp->st_max_elect_threads); -#endif + MAKE_STAT_LIST("Election threads", sp->st_elect_threads); + MAKE_STAT_LIST("Max elect threads", sp->st_max_elect_threads); + MAKE_STAT_LIST("Total sites", sp->st_site_total); + MAKE_STAT_LIST("View sites", sp->st_site_views); + MAKE_STAT_LIST("Participant sites", sp->st_site_participants); + MAKE_WSTAT_LIST("Automatic replication process takeovers", + sp->st_takeovers); Tcl_SetObjResult(interp, res); error: |
