[svn:dbd-oracle] r14878 - dbd-oracle/branches/FAN
[email protected] Fri, 27 May 2011 07:18:09 -0700 (PDT)
| Newsgroups | perl.dbd.oracle.changes |
|---|---|
| Message-ID | <[email protected]> |
Author: byterock
Date: Fri May 27 07:18:09 2011
New Revision: 14878
Modified:
dbd-oracle/branches/FAN/oci8.c
Log:
Well sort of working
Modified: dbd-oracle/branches/FAN/oci8.c
==============================================================================
--- dbd-oracle/branches/FAN/oci8.c (original)
+++ dbd-oracle/branches/FAN/oci8.c Fri May 27 07:18:09 2011
@@ -1277,83 +1277,111 @@
}
-sb4
+void
ha_cbk(dvoid *ha_ctx, OCIEvent *eventhp){
dTHX;
- OCIServer *srvhp;
- OCIError *errhp;
- sb4 retcode;
- OraText *hostname;
- OraText *dbname;
- OraText *instname;
- OraText *svcname;
- OCIDate timestmp;
- OCIEnv *envhp = (OCIEnv *)ha_ctx;
- ub4 sizep;
+ OCIServer *srvhp;
+ OCIError *errhp;
+ sb4 retcode;
+ OraText *hostname;
+ OraText *dbname;
+ OraText *instname;
+ OraText *svcname;
+ OCIDate timestmp;
+ OCIEnv *envhp = (OCIEnv *)ha_ctx;
+ ub4 *sizep;
+
if (dbd_verbose >= 5 ) {
PerlIO_printf(DBILOGFP,"HA event received.\n");
}
-
+
if (OCIHandleAlloc( (dvoid *)envhp, (dvoid **)&errhp,(ub4) OCI_HTYPE_ERROR,(size_t) 0, (dvoid **) 0))
return;
-
- if (retcode = OCIAttrGet(eventhp, OCI_HTYPE_EVENT, (dvoid *)&srvhp,(ub4 *)0,OCI_ATTR_HA_SRVFIRST, errhp)){
- checkerr (errhp, (sword)retcode);
+
+
+ if (retcode = OCIAttrGet(eventhp, OCI_HTYPE_EVENT, (dvoid *)&srvhp, (ub4 *)0, OCI_ATTR_HA_SRVFIRST, errhp)) {
+ PerlIO_printf(DBILOGFP,"error is %d.\n", retcode);
}
else{
PerlIO_printf(DBILOGFP,"found first server handle.\n");
- if (retcode = OCIAttrGet(srvhp, OCI_HTYPE_SERVER, (dvoid *)&instname,(ub4 *)&sizep,OCI_ATTR_INSTNAME, errhp)){
- checkerr(errhp, (sword)retcode);
+ /*get associated instance name, */
+ if (retcode = OCIAttrGet(srvhp, OCI_HTYPE_SERVER, (dvoid *)&instname,(ub4 *)&sizep, OCI_ATTR_INSTNAME, errhp)){
+ PerlIO_printf(DBILOGFP,"error is %d.\n", retcode);
}
else{
- PerlIO_printf(DBILOGFP,"instance name is %s.\n", instname);
+ PerlIO_printf(DBILOGFP,"instance name is %s.\n", instname);
}
+
}
while(!retcode){
- if (retcode = OCIAttrGet(eventhp, OCI_HTYPE_EVENT, (dvoid *)&srvhp,(ub4 *)0,OCI_ATTR_HA_SRVNEXT, errhp)){
- checkerr (errhp, (sword)retcode);
+ if (retcode = OCIAttrGet(eventhp, OCI_HTYPE_EVENT, (dvoid *)&srvhp, (ub4 *)0,OCI_ATTR_HA_SRVNEXT, errhp)) {
+ PerlIO_printf(DBILOGFP,"error is %d.\n", retcode);
}
else{
- PerlIO_printf(DBILOGFP,"found another server handle.\n");
-/*get associated instance name, */
+ PerlIO_printf(DBILOGFP,"found another server handle.\n");
+ /*get associated instance name, */
- if (retcode = OCIAttrGet(srvhp, OCI_HTYPE_SERVER, (dvoid *)&instname,(ub4 *)&sizep,OCI_ATTR_INSTNAME, errhp)){
- checkerr(errhp, (sword)retcode);
+ if (retcode = OCIAttrGet(srvhp, OCI_HTYPE_SERVER, (dvoid *)&instname,(ub4 *)&sizep, OCI_ATTR_INSTNAME, errhp)){
+ PerlIO_printf(DBILOGFP,"error is %d.\n", retcode);
}
else {
- PerlIO_printf(DBILOGFP,"instance name is %s.\n", instname);
+ PerlIO_printf(DBILOGFP,"instance name is %s.\n", instname);
}
}
- }
-
+ }
OCIHandleFree((dvoid *)errhp, OCI_HTYPE_ERROR);
- PerlIO_printf(DBILOGFP,"Finished event callback function.\n");
-}
+ PerlIO_printf(DBILOGFP,"Finished event callback function.\n");
+ return;
-/*Registering HA callback function. */
-if (checkerr(errhp, OCIAttrSet(envhp, (ub4) OCI_HTYPE_ENV,
-(dvoid *)evtcallback_fn, (ub4)0,
-(ub4)OCI_ATTR_EVTCBK, errhp)))
-{
-printf("Failed to set register EVENT callback.\n");
-return EX_FAILURE;
}
-if (checkerr(errhp, OCIAttrSet(envhp, (ub4) OCI_HTYPE_ENV,
-(dvoid *)envhp, (ub4)0,
-(ub4)OCI_ATTR_EVTCTX, errhp)))
+
+
+sb4
+reg_ha_callback( imp_dbh_t *imp_dbh)
{
-printf("Failed to set register EVENT callback context.\n");
-return EX_FAILURE;
-}
-return EX_SUCCESS;
+ dTHX;
+ sword status;
+/* taf_callback_t *cb = NULL;
+/*allocate space for the callback
+ Newz(1, cb, 1, taf_callback_t);
+ cb->function= (char*)safemalloc(strlen(imp_dbh->taf_function));
+ cb->sleep = imp_dbh->taf_sleep;
+ strcpy((char *)cb->function,imp_dbh->taf_function);
+*/
+ if (dbd_verbose >= 5 ) {
+ PerlIO_printf(DBILOGFP, " In reg_ha_callback\n");
+ }
+
+ OCIAttrSet_log_stat(imp_dbh->srvhp, (ub4) OCI_HTYPE_ENV,
+ (dvoid *) &ha_cbk, (ub4) 0,
+ (ub4) OCI_ATTR_EVTCBK, imp_dbh->errhp, status);
+
+/* if (status != OCI_SUCCESS){
+ oci_error(dbh, imp_dbh->errhp, status, "OCIAttrSet Failed to set register OCI_ATTR_EVTCBK, HA callback");
+ return 0;
+ }
+*/
+
+ OCIAttrSet_log_stat(imp_dbh->srvhp, (ub4) OCI_HTYPE_ENV,
+ (dvoid *)imp_dbh->srvhp, (ub4) 0,
+ (ub4) OCI_ATTR_EVTCTX, imp_dbh->errhp, status);
+ /* if (status != OCI_SUCCESS){
+ oci_error(dbh, imp_dbh->errhp, status, "OCIAttrSet Failed to set register OCI_ATTR_EVTCTX, HA callback context");
+ return 0;
+ }
+*/
+
+ return status;
}
-/* TAF or Trasarent Application Failoever callback
- Works like this. The fuction below is registered on the server,
- when the server is set up to use it, when an exe is called (not sure about other server round trips)
- and the server fails tt should get into this cbk error below.
- It will wait X seconds and then try to reconnect (up to n times if that is the users choice)
- That is how I see it working */
+
+
+/* TAF or Trasarent Application Failoever callback */
+/* Works like this. The fuction below is registered on the server,*/
+/* when the server is set up to use it, when an exe is called (not sure about other server round trips)*/
+/* and the server fails tt should get into this cbk error below.*/
+/* It will wait X seconds and then try to reconnect (up to n times if that is the users choice)*/
+/* That is how I see it working */
sb4
taf_cbk(dvoid *svchp, dvoid *envhp, dvoid *fo_ctx,ub4 fo_type, ub4 fo_event )