[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 )