AVM,

    I've been playing around with your test program, and have gotten it to fail.

    I made the following changes:

  1.  Change init_dataX to be 1024k bytes, so that you are initializing the 
section to be 1024k.
  2.  Also, don't start the program on node B until A has finished 
writing/creating all the sections.
  3.  Before hitting the enter key on node B, wait for the OpenAsync call to 
finish.

    You might notice the CheckpointOpen call failing now with 
SA_AIS_ERR_TIMEOUT.  I had to turn this into OpenAsync, and add a thread to 
process CkptDispatch messages.  This uncovers another bug in OpenAsync.  I've 
attached the mods to your program here.

   The OpenAsync callback will be called twice, both times with error == 
SA_AIS_ERR_TIMEOUT.  If I call OpenAsync again when I get this error, the next 
callback returns success, but the callback gets called twice with success and 
with two different checkpoint handles!

Alex

On 01/06/2014 06:18 AM, A V Mahesh wrote:

Hi Alex,

I have  created 10K sections  ( please find the attached test
application  `Alex_test_node_A_app.c`  & `Alex_test_node_B_app.c ` )
with your specified scenario & configuration and I haven't observed any
issue with  sections  on another node.

Try to reproduce the problem on your setup & let me know the result .

One more importent point how much did you configured
`sectionCreationAttributes.expirationTime `  ?
I configured  SA_TIME_ONE_DAY.

Steps to rung the application :

===================================================================================================================

Compile :

NODE-A# gcc Alex_test_node_A_app.c -o checkpoint_A -lSaCkpt
NODE-A# gcc Alex_test_node_B_app.c -o checkpoint_B -lSaCkpt


Run :

1) saCkptCheckpointOpen On node A

NODE-A# ./checkpoint_A

CPSV:CPA:ONsaCkptSectionCreate  Waiting to Create Sections
safCkpt=test_checkpoint_name1,safApp=safCkptService....
saCkptSectionCreate Press <Enter> key to continue...

.
2) saCkptCheckpointOpen() same ckpt On node B

NODE-B# ./checkpoint_B

CPSV:CPA:ONsaCkptSectionIterationInitialize Waiting to read Sections
safCkpt=test_checkpoint_name1,safApp=safCkptService....
saCkptActiveReplicaSet saCkptSectionIterationInitialize Press <Enter>
key to continue...


3) saCkptSectionCreate() On node A  and read saCkptCheckpointStatusGet()

NODE-A#
  checkpointStatus.numberOfSections : 10000
  checkpointStatus.memoryUsed :756000
   checkpointCreationAttributes.creationFlags;10
  checkpointCreationAttributes.checkpointSize;10240000
  checkpointCreationAttributes.retentionDuration;60000000000
  checkpointCreationAttributes.maxSections;10000
  checkpointCreationAttributes.maxSectionSize;1024
  checkpointCreationAttributes.maxSectionIdSize;64
  ================================
saCkptCheckpointUnlink / saCkptCheckpointClose / saCkptFinalize Press
<Enter> key to continue...
saCkptCheckpoint Press <Enter> key to continue...


4) saCkptActiveReplicaSet() & On node B  and saCkptCheckpointStatusGet()

NODE-B#
  checkpointStatus.numberOfSections : 10000
  checkpointStatus.memoryUsed :756000
   checkpointCreationAttributes.creationFlags;10
  checkpointCreationAttributes.checkpointSize;10240000
  checkpointCreationAttributes.retentionDuration;60000000000
  checkpointCreationAttributes.maxSections;10000
  checkpointCreationAttributes.maxSectionSize;1024
  checkpointCreationAttributes.maxSectionIdSize;64

  saCkptCheckpointUnlink / saCkptCheckpointClose / saCkptFinalize Press
<Enter> key to continue...
  saCkptCheckpoint Press <Enter> key to continue..

================================================================================================================================

-AVM


On 1/6/2014 12:32 PM, A V Mahesh wrote:


Hi Alex,

We never tested the  7500 sections , will test & and let you know ,
can you please share your test application ,
 that allow us to respond quick.

-AVM

On 1/3/2014 8:23 PM, Alex Jones wrote:


Hello All,

     I'm experimenting with the checkpoint service, and some things
don't appear to work.

     The saCkptActiveReplicaSet and
saCkptCheckpointSynchronize[Async] don't appear to work when the
checkpoint has section numbers greater than around 5500.

     I've created a checkpoint with 7500 sections, each section being
1024 bytes.  The checkpoint is co-located and the "active replica"
bit is set.

     I can create and write all the sections.  And from another node
I run saCkptCheckpointStatusGet, and the information all looks good.
Everything is there.  I see no errors from any CKPT API calls.

     The problem comes when I call saCkptActiveReplicaSet from this
other node.  After I do this, saCkptCheckpointStatusGet now returns
all the same information except the number of sections is no longer
7500 but 0.  If I do this test with 50,000 sections only about 3,000
entries get synced.  And iterating through the sections shows that
there are only 3,000 sections.

     Calling saCkptCheckpointSynchronize[Async] in this situation has
no effect, either.

     After looking through the code I see a comment in
cpnd_evt_proc_ckpt_arep_set that says "/* ###TBD sync up is missing
with old active if now this fellow is becoming active. */"  So, it
doesn't appear that syncing is being done in the
saCkptActiveReplicaSet, which it should be.

     Can someone comment?

     I'm going to fix this and post a patch unless someone else is
already working on it, but I didn't see a bug for it.

Alex



------------------------------------------------------------------------------

Rapidly troubleshoot problems before they affect your business. Most IT
organizations don't have a clear picture of how application performance
affects their revenue. With AppDynamics, you get 100% visibility into
your
Java,.NET, & PHP application. Start your 15-day FREE TRIAL of
AppDynamics Pro!
http://pubads.g.doubleclick.net/gampad/clk?id=84349831&iu=/4140/ostg.clktrk

_______________________________________________
Opensaf-devel mailing list
[email protected]<mailto:[email protected]>
https://lists.sourceforge.net/lists/listinfo/opensaf-devel








#include <saCkpt.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#include <unistd.h>
#include <pthread.h>

SaCkptHandleT ckptHandle;
#define DEMO_CKPT_NAME "safCkpt=DemoCkpt,safApp=safCkptService"
int is_active = 1;

void AppCkptOpenCallback(SaInvocationT invocation, SaCkptCheckpointHandleT 
checkpointHandle, SaAisErrorT error);
void AppCkptSyncCallback(SaInvocationT invocation, SaAisErrorT error);

void AppCkptOpenCallback(SaInvocationT invocation, SaCkptCheckpointHandleT 
checkpointHandle, SaAisErrorT error)
{
        if (error != SA_AIS_OK) {
                printf("Checkpoint Open Async callback unsuccessful\n");
                return;
        }
        else{
                printf("Checkpoint Open Async callback success and ckpt_hdl 
%llu \n",checkpointHandle);
                return;
        }
}
void AppCkptSyncCallback(SaInvocationT invocation, SaAisErrorT error)
{
        if (error != SA_AIS_OK) {
                printf("Checkpoint Sync Callback unsuccessful\n");
                return;
        }
        else    {
                printf("Checkpoint Sync Callback success\n");
                return;
        }
}


SaVersionT    version = {'B', 2, 2};

void checkpoint_loop(unsigned int thread_number) {
        SaAisErrorT result;
        unsigned char read_buff[10001][100];

        SaCkptCheckpointDescriptorT checkpointStatus;
        memset(&checkpointStatus, '\0', sizeof(SaCkptCheckpointDescriptorT));

        SaUint32T erroneousVectorIndex;
        SaCkptIOVectorElementT writeVector[10001], readVector[10001];
#if 0
        char init_data1[] = 
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
        char init_data2[] = 
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB";
        char init_data3[] = 
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC";
        char init_data4[] = 
"DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD";
        char init_data5[] = 
"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE";
#else
        char init_data1[] = 
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
        char init_data2[] = 
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB";
        char init_data3[] = 
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC";
        char init_data4[] = 
"DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD";
        char init_data5[] = 
"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE";
#endif
        char wdata[]      = "POLARIS WIRELESS INC POLARIS WIRELESS INC POLARIS 
WIRELESS INC POLARIS WIRELESS INCPOLARIS WIRELESS";
        SaNameT checkpointName = {0, ""};
        SaCkptCheckpointOpenFlagsT checkpointOpenFlags;

        const SaTimeT timeout = 1000000000;
        SaCkptCheckpointHandleT checkpointHandle;
        int asynchronous = 0 ;

        SaCkptSectionCreationAttributesT sectionCreationAttributes;

        SaUint32T dummy;
        checkpointName.length = snprintf((char*)checkpointName.value,
                        sizeof(checkpointName.value),
                        DEMO_CKPT_NAME);

        if(checkpointName.length >= sizeof(checkpointName.value)) {
                checkpointName.length = sizeof(checkpointName.value) - 1;
        }

        /*UN-comment below if asynchronous is configured */
        asynchronous = 1;       

        const SaCkptCheckpointCreationAttributesT checkpointCreationAttributes 
= {
                //.creationFlags     = SA_CKPT_WR_ALL_REPLICAS,  // 
Non-collocated synchronous
                //.creationFlags     = SA_CKPT_CHECKPOINT_COLLOCATED | 
SA_CKPT_WR_ALL_REPLICAS,  //collocated synchronous
                .creationFlags     = SA_CKPT_CHECKPOINT_COLLOCATED | 
SA_CKPT_WR_ACTIVE_REPLICA_WEAK, //collocated Asynchronous
                .checkpointSize    = 1024 * 10000,
                .retentionDuration = SA_TIME_ONE_MINUTE,
                .maxSections       = 10000,
                .maxSectionSize    = 1024,                      
                .maxSectionIdSize  = 64
        };

        checkpointOpenFlags = SA_CKPT_CHECKPOINT_CREATE | 
SA_CKPT_CHECKPOINT_WRITE  | SA_CKPT_CHECKPOINT_READ;
        result = saCkptCheckpointOpen(ckptHandle,
                        &checkpointName,
                        &checkpointCreationAttributes,
                        checkpointOpenFlags,
                        timeout,
                        &checkpointHandle);

        if(result != SA_AIS_OK) {
                if (result == SA_AIS_ERR_EXIST )
                {
                        checkpointOpenFlags =  SA_CKPT_CHECKPOINT_WRITE  | 
SA_CKPT_CHECKPOINT_READ;
                        result = saCkptCheckpointOpen(ckptHandle,
                                        &checkpointName,
                                        &checkpointCreationAttributes,
                                        checkpointOpenFlags,
                                        timeout,
                                        &checkpointHandle);
                        if(result != SA_AIS_OK) {
                                fprintf(stderr,"saCkptCheckpointOpen  returned 
%d.\n", result);
                                exit(0);
                        }
                } else {
                        fprintf(stderr," Create saCkptCheckpointOpen  returned 
%d.\n", result);
                        exit(0);
                }
        }
#if 1
        /* Do this only when u get a active csi assignment and the checkpoint 
is async collocated */
        if (asynchronous == 1 && is_active == 1 ) {
                result = saCkptActiveReplicaSet(checkpointHandle);
                if(result != SA_AIS_OK) {
                        fprintf(stderr,"saCkptActiveReplicaSet  returned 
%d.\n", result);
                        exit(0);
                }
        }
#endif

        printf("saCkptSectionCreate  Waiting to Create Sections  
%s....\n",DEMO_CKPT_NAME);
        printf("saCkptSectionCreate Press <Enter> key to continue...\n");
        getchar();
        char section_id_str[25];
        sectionCreationAttributes.sectionId = (SaCkptSectionIdT*) 
malloc(sizeof(SaCkptSectionIdT));

        int i = 0;
        for ( i = 0 ; i <2000 ; i++) 
        {
                sprintf((unsigned 
char*)section_id_str,"test_section_keyname1_%d",i);
                sectionCreationAttributes.sectionId->id = (unsigned char 
*)section_id_str;
                sectionCreationAttributes.sectionId->idLen = 
strlen(sectionCreationAttributes.sectionId->id);

#if 0
                printf("saCkptSectionCreated : %s idLen: %d 
\n",sectionCreationAttributes.sectionId->id,sectionCreationAttributes.sectionId->idLen);

#endif
                sectionCreationAttributes.expirationTime = SA_TIME_ONE_DAY;

                result  = saCkptSectionCreate( checkpointHandle,
                                
&sectionCreationAttributes,init_data1,strlen(init_data1));
                if(result != SA_AIS_OK && result != SA_AIS_ERR_EXIST ) {
                        fprintf(stderr, " saCkptSectionCreate 1  returned 
%d.\n", result);
                        exit(0);
                }
#if 0
                usleep(1000);
#endif

                sprintf((unsigned 
char*)section_id_str,"test_section_keyname2_%d",i);
                sectionCreationAttributes.sectionId->id = (unsigned char 
*)section_id_str;
                sectionCreationAttributes.sectionId->idLen = 
strlen(sectionCreationAttributes.sectionId->id);           
#if 0
                printf("saCkptSectionCreated : %s idLen: %d 
\n",sectionCreationAttributes.sectionId->id,sectionCreationAttributes.sectionId->idLen);
            
#endif
                result  = saCkptSectionCreate( checkpointHandle,
                                
&sectionCreationAttributes,init_data2,strlen(init_data2));
                if(result != SA_AIS_OK && result != SA_AIS_ERR_EXIST ) {
                        fprintf(stderr, " saCkptSectionCreate 2  returned 
%d.\n", result);
                        exit(0);
                }
#if 0
                usleep(1000);
#endif

                sprintf((unsigned 
char*)section_id_str,"test_section_keyname3_%d",i);    
                sectionCreationAttributes.sectionId->id = (unsigned char 
*)section_id_str;
                sectionCreationAttributes.sectionId->idLen = 
strlen(sectionCreationAttributes.sectionId->id);
#if 0
                printf("saCkptSectionCreated : %s idLen: %d 
\n",sectionCreationAttributes.sectionId->id,sectionCreationAttributes.sectionId->idLen);
#endif

                result  = saCkptSectionCreate( checkpointHandle,
                                
&sectionCreationAttributes,init_data3,strlen(init_data3));
                if(result != SA_AIS_OK && result != SA_AIS_ERR_EXIST ) {
                        fprintf(stderr, " saCkptSectionCreate 3  returned 
%d.\n", result);
                        exit(0);
                }
#if 0
                usleep(1000);
#endif

                sprintf((unsigned 
char*)section_id_str,"test_section_keyname4_%d",i);                          
                sectionCreationAttributes.sectionId->id = (unsigned char 
*)section_id_str;
                sectionCreationAttributes.sectionId->idLen = 
strlen(sectionCreationAttributes.sectionId->id);
#if 0
                printf("saCkptSectionCreated : %s idLen: %d 
\n",sectionCreationAttributes.sectionId->id,sectionCreationAttributes.sectionId->idLen);
#endif


                result  = saCkptSectionCreate( checkpointHandle,
                                
&sectionCreationAttributes,init_data4,strlen(init_data4));
                if(result != SA_AIS_OK  &&  result != SA_AIS_ERR_EXIST ) {
                        fprintf(stderr, " saCkptSectionCreate 4  returned 
%d.\n", result);
                        exit(0);
                }
#if 0
                usleep(1000);
#endif

                sprintf((unsigned 
char*)section_id_str,"test_section_keyname5_%d",i);       
                sectionCreationAttributes.sectionId->id = (unsigned char 
*)section_id_str;
                sectionCreationAttributes.sectionId->idLen = 
strlen(sectionCreationAttributes.sectionId->id);
#if 0
                printf("saCkptSectionCreated : %s idLen: %d 
\n",sectionCreationAttributes.sectionId->id,sectionCreationAttributes.sectionId->idLen);
#endif

again5:
                result  = saCkptSectionCreate( checkpointHandle,
                                
&sectionCreationAttributes,init_data5,strlen(init_data5));
                if(result != SA_AIS_OK) {
                  if (result == SA_AIS_ERR_TRY_AGAIN) {
                    printf("saCkptSectionCreate 5 timed out: trying again\n");
                    sleep(3);
                    goto again5;
                  }
                  else if (result != SA_AIS_ERR_EXIST ) {
                        fprintf(stderr, " saCkptSectionCreate 5  returned 
%d.\n", result);
                        exit(0);

                  }
                }
#if 0
                usleep(1000);
#endif
        }

        fprintf(stderr, "\nsaCkptSectionCreate  completed Sucessfull.\n"); 
#if 0
        SaCkptSectionIterationHandleT sectionIterationHandle;
        SaCkptSectionsChosenT sectionsChosen = SA_CKPT_SECTIONS_ANY;
        SaCkptSectionDescriptorT sectionDescriptor;
        int iter_flag = 1;
        char secid[10001][128] = {'\0'};
        char secidw[10001][128] = {'\0'};
        int total = 0;

        /* Iteration Sequence not really required TBD*/
        result = saCkptSectionIterationInitialize(checkpointHandle,
                        sectionsChosen,
                        0,
                        &sectionIterationHandle);
        if(result != SA_AIS_OK) {
                fprintf(stderr, "saCkptSectionIterationInitialize returned 
%lld.\n",(long long int)result);
        } else {
                fprintf(stderr, "saCkptSectionIterationInitialize returned 
%lld.\n",(long long int)result);

                memset(&sectionDescriptor, 0, sizeof(SaCkptSectionDescriptorT));
                while(iter_flag) {
                        result = 
saCkptSectionIterationNext(sectionIterationHandle,
                                        &sectionDescriptor);
                        if(result != SA_AIS_OK) {
                                if(result == SA_AIS_ERR_NO_SECTIONS) {
                                        iter_flag = 0;
                                        fprintf(stderr, 
"saCkptSectionIterationNext completed Sucessfull.\n");
                                } else {
                                        fprintf(stderr, 
"saCkptSectionIterationNext returned %lld.\n", (long long int)result);
                                }
                        } else {

                                fprintf(stderr,"saCkptSectionIterationNext 
TOTAL %d returned %lld.\n",total ,(long long int)result);
                                usleep(1000);
                                total ++;
                        }
                }

                fprintf(stderr,"saCkptSectionIterationNext TOTAL-sections: %d 
\n",total);  
                result = saCkptSectionIterationFinalize(sectionIterationHandle);
                if(result != SA_AIS_OK) {
                        fprintf(stderr, "saCkptSectionIterationFinalize 
returned %lld.\n",
                                        (long long int)result);
                }
        }
#endif


        memset(&checkpointStatus, '\0', sizeof(SaCkptCheckpointDescriptorT));
        result  = saCkptCheckpointStatusGet( checkpointHandle,
                        &checkpointStatus);


        if(result != SA_AIS_OK) {
                fprintf(stderr,
                                " saCkptCheckpointStatusGet  returned %d.\n", 
result);
                exit(0);

        }
        else {

                fprintf(stderr," checkpointStatus.numberOfSections : %lu\n 
checkpointStatus.memoryUsed :%lu\n ", 
checkpointStatus.numberOfSections,checkpointStatus.memoryUsed);

                fprintf(stderr," 
checkpointCreationAttributes.creationFlags;%lu\n 
checkpointCreationAttributes.checkpointSize;%llu\n 
checkpointCreationAttributes.retentionDuration;%llu\n 
checkpointCreationAttributes.maxSections;%lu \n 
checkpointCreationAttributes.maxSectionSize;%llu \n 
checkpointCreationAttributes.maxSectionIdSize;%llu \n 
================================\n", 
checkpointCreationAttributes.creationFlags, 
checkpointCreationAttributes.checkpointSize, 
checkpointCreationAttributes.retentionDuration,checkpointCreationAttributes.maxSections,
 
checkpointCreationAttributes.maxSectionSize,checkpointCreationAttributes.maxSectionIdSize);
        }

        printf("saCkptCheckpointUnlink / saCkptCheckpointClose / saCkptFinalize 
Press <Enter> key to continue...\n");
        printf("saCkptCheckpoint Press <Enter> key to continue...\n");
        getchar();

#if 0
        if (is_active == 1 ) {
                result  = saCkptCheckpointUnlink(ckptHandle,&checkpointName);
                if(result != SA_AIS_OK) {
                        fprintf(stderr, "saCkptCheckpointUnlink returned 
%d.\n", (long long int)result);
                }       
        }
#endif

        result = saCkptCheckpointClose(checkpointHandle);
        if(result != SA_AIS_OK) {
                fprintf(stderr, "saCkptCheckpointClose returned %d.\n", (long 
long int)result);
        }

        result = saCkptFinalize(ckptHandle);
        if(result != SA_AIS_OK) {
                fprintf(stderr, "saCkptFinalize  returned %d.\n",(long long 
int)result);
                exit(0);
        }
        printf("PASSED \n");
        exit(0);

}




int main(int argc, char** argv) {
        int           result;
        pthread_t     thread;

        SaCkptCallbacksT callbk;

        callbk.saCkptCheckpointOpenCallback = AppCkptOpenCallback;
        callbk.saCkptCheckpointSynchronizeCallback = AppCkptSyncCallback;
        result = saCkptInitialize(&ckptHandle, &callbk, &version);
        if(result != SA_AIS_OK) {
                fprintf(stderr, "saCkptInitialize failed with code %d.\n", 
result);
        } else {
                checkpoint_loop(1);
        }
        return result;
}



#include <saCkpt.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#include <unistd.h>
#include <pthread.h>
#include <poll.h>
#include <errno.h>

SaCkptCheckpointHandleT checkpointHandle = 0;
SaCkptHandleT ckptHandle;
#define DEMO_CKPT_NAME "safCkpt=DemoCkpt,safApp=safCkptService"
int is_active = 0;

void AppCkptOpenCallback(SaInvocationT invocation, SaCkptCheckpointHandleT 
checkpointHandle, SaAisErrorT error);
void AppCkptSyncCallback(SaInvocationT invocation, SaAisErrorT error);

static const SaCkptCheckpointCreationAttributesT checkpointCreationAttributes = 
{
                //.creationFlags     = SA_CKPT_WR_ALL_REPLICAS,  // 
Non-collocated synchronous
                //.creationFlags     = SA_CKPT_CHECKPOINT_COLLOCATED | 
SA_CKPT_WR_ALL_REPLICAS,  //collocated synchronous
                .creationFlags     = SA_CKPT_CHECKPOINT_COLLOCATED | 
SA_CKPT_WR_ACTIVE_REPLICA_WEAK, //collocated Asynchronous
                .checkpointSize    = 1024 * 10000,
                .retentionDuration = SA_TIME_ONE_MINUTE,
                .maxSections       = 10000,
                .maxSectionSize    = 1024,                      
                .maxSectionIdSize  = 64
        };

static void
checkpoint_open(void)
{
        SaCkptCheckpointOpenFlagsT checkpointOpenFlags;
        int result = 0;
        SaNameT checkpointName = {0, ""};
        const SaTimeT timeout = SA_TIME_END;

        checkpointName.length = snprintf((char*)checkpointName.value,
                        sizeof(checkpointName.value),
                        DEMO_CKPT_NAME);

        if(checkpointName.length >= sizeof(checkpointName.value)) {
                checkpointName.length = sizeof(checkpointName.value) - 1;
        }


        checkpointOpenFlags =  SA_CKPT_CHECKPOINT_CREATE | 
SA_CKPT_CHECKPOINT_WRITE  | SA_CKPT_CHECKPOINT_READ;
#if 0
        result = saCkptCheckpointOpen(ckptHandle,
                        &checkpointName,
                        &checkpointCreationAttributes,
                        checkpointOpenFlags,
                        timeout,
                        &checkpointHandle);
#else
        result = saCkptCheckpointOpenAsync(ckptHandle,
                        0xff,
                        &checkpointName,
                        &checkpointCreationAttributes,
                        checkpointOpenFlags);
#endif

        if(result != SA_AIS_OK) {
                if (result == SA_AIS_ERR_EXIST )
                {
                        checkpointOpenFlags =  SA_CKPT_CHECKPOINT_WRITE  | 
SA_CKPT_CHECKPOINT_READ;
                        result = saCkptCheckpointOpen(ckptHandle,
                                        &checkpointName,
                                        &checkpointCreationAttributes,
                                        checkpointOpenFlags,
                                        timeout,
                                        &checkpointHandle);
                        if(result != SA_AIS_OK) {
                                fprintf(stderr,"saCkptCheckpointOpen  returned 
%d.\n", result);
                                exit(0);
                        }
                } else {
                        fprintf(stderr," Create saCkptCheckpointOpen  returned 
%d.\n", result);
                        exit(0);
                }
        }
        
        
}

void AppCkptOpenCallback(SaInvocationT invocation, SaCkptCheckpointHandleT 
checkpointHandle_local, SaAisErrorT error)
{
        if (error != SA_AIS_OK) {
                if (error == SA_AIS_ERR_TIMEOUT)
                        checkpoint_open();
                else {
                        printf("Checkpoint Open Async callback unsuccessful\n");
                        return;
                }
        }
        else{
                checkpointHandle = checkpointHandle_local;
                printf("Checkpoint Open Async callback success and ckpt_hdl 
%llu \n",checkpointHandle);
                return;
        }
}
void AppCkptSyncCallback(SaInvocationT invocation, SaAisErrorT error)
{
        if (error != SA_AIS_OK) {
                printf("Checkpoint Sync Callback unsuccessful\n");
                return;
        }
        else    {
                printf("Checkpoint Sync Callback success\n");
                return;
        }
}


SaVersionT    version = {'B', 2, 2};

void checkpoint_loop(unsigned int thread_number) {
        SaAisErrorT result;
        unsigned char read_buff[10001][100];

        SaCkptCheckpointDescriptorT checkpointStatus;
        memset(&checkpointStatus, '\0', sizeof(SaCkptCheckpointDescriptorT));

        SaUint32T erroneousVectorIndex;
        SaCkptIOVectorElementT writeVector[10001], readVector[10001];
        char init_data1[] = 
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
        char init_data2[] = 
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB";
        char init_data3[] = 
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC";
        char init_data4[] = 
"DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD";
        char init_data5[] = 
"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE";
        char wdata[]      = "POLARIS WIRELESS INC POLARIS WIRELESS INC POLARIS 
WIRELESS INC POLARIS WIRELESS INCPOLARIS WIRELESS";

#if 0
        SaCkptCheckpointHandleT checkpointHandle;
#endif
        int asynchronous = 0 ;

        SaCkptSectionCreationAttributesT sectionCreationAttributes;

        SaUint32T dummy;

        checkpoint_open();

        /*UN-comment below if asynchronous is configured */
        asynchronous = 1;       

        printf("saCkptSectionIterationInitialize  Waiting to read Sections  
%s....\n",DEMO_CKPT_NAME);
        printf("saCkptActiveReplicaSet saCkptSectionIterationInitialize Press 
<Enter> key to continue...\n");
        getchar();

        while (true) {
          if (!checkpointHandle) {
            printf("open not done: still waiting\n");
            sleep(3);
          }
          else
            break;
        }

        /* Do this only when u get a active csi assignment and the checkpoint 
is async collocated */
        if (asynchronous == 1 ) {
                result = saCkptActiveReplicaSet(checkpointHandle);
                if(result != SA_AIS_OK) {
                        fprintf(stderr,"saCkptActiveReplicaSet  returned 
%d.\n", result);
                        exit(0);
                }
        }

        char section_id_str[25];
        sectionCreationAttributes.sectionId = (SaCkptSectionIdT*) 
malloc(sizeof(SaCkptSectionIdT));

        SaCkptSectionIterationHandleT sectionIterationHandle;
        SaCkptSectionsChosenT sectionsChosen = SA_CKPT_SECTIONS_ANY;
        SaCkptSectionDescriptorT sectionDescriptor;
        int iter_flag = 1;
        char secid[10001][128] = {'\0'};
        char secidw[10001][128] = {'\0'};
        int total = 0;

        /* Iteration Sequence not really required TBD*/
        result = saCkptSectionIterationInitialize(checkpointHandle,
                        sectionsChosen,
                        0,
                        &sectionIterationHandle);
        if(result != SA_AIS_OK) {
                fprintf(stderr, "saCkptSectionIterationInitialize returned 
%lld.\n",(long long int)result);
        } else {
                fprintf(stderr, "saCkptSectionIterationInitialize returned 
%lld.\n",(long long int)result);

                memset(&sectionDescriptor, 0, sizeof(SaCkptSectionDescriptorT));
                while(iter_flag) {
                        result = 
saCkptSectionIterationNext(sectionIterationHandle,
                                        &sectionDescriptor);
                        if(result != SA_AIS_OK) {
                                if(result == SA_AIS_ERR_NO_SECTIONS) {
                                        iter_flag = 0;
                                        fprintf(stderr, 
"saCkptSectionIterationNext completed Sucessfull.\n");
                                } else {
                                        fprintf(stderr, 
"saCkptSectionIterationNext returned %lld.\n", (long long int)result);
                                }
                        } else {

#if 0
                                fprintf(stderr,"saCkptSectionIterationNext 
TOTAL %d returned %lld.\n",total ,(long long int)result);
                                usleep(1000);
#endif
                                total ++;
                        }
                }

                fprintf(stderr,"saCkptSectionIterationNext TOTAL-sections: %d 
\n",total);  
                result = saCkptSectionIterationFinalize(sectionIterationHandle);
                if(result != SA_AIS_OK) {
                        fprintf(stderr, "saCkptSectionIterationFinalize 
returned %lld.\n",
                                        (long long int)result);
                }
        }


        memset(&checkpointStatus, '\0', sizeof(SaCkptCheckpointDescriptorT));
        result  = saCkptCheckpointStatusGet( checkpointHandle,
                        &checkpointStatus);


        if(result != SA_AIS_OK) {
                fprintf(stderr,
                                " saCkptCheckpointStatusGet  returned %d.\n", 
result);
                exit(0);

        }
        else {

                fprintf(stderr," checkpointStatus.numberOfSections : %lu\n 
checkpointStatus.memoryUsed :%lu\n ", 
checkpointStatus.numberOfSections,checkpointStatus.memoryUsed);

                fprintf(stderr," 
checkpointCreationAttributes.creationFlags;%lu\n 
checkpointCreationAttributes.checkpointSize;%llu\n 
checkpointCreationAttributes.retentionDuration;%llu\n 
checkpointCreationAttributes.maxSections;%lu \n 
checkpointCreationAttributes.maxSectionSize;%llu \n 
checkpointCreationAttributes.maxSectionIdSize;%llu \n 
================================\n", 
checkpointCreationAttributes.creationFlags, 
checkpointCreationAttributes.checkpointSize, 
checkpointCreationAttributes.retentionDuration,checkpointCreationAttributes.maxSections,
 
checkpointCreationAttributes.maxSectionSize,checkpointCreationAttributes.maxSectionIdSize);
        }

        printf("saCkptCheckpointUnlink / saCkptCheckpointClose / saCkptFinalize 
Press <Enter> key to continue...\n");
        printf("saCkptCheckpoint Press <Enter> key to continue...\n");
        getchar();

#if 0
        if (is_active == 1 ) {
                result  = saCkptCheckpointUnlink(ckptHandle,&checkpointName);
                if(result != SA_AIS_OK) {
                        fprintf(stderr, "saCkptCheckpointUnlink returned 
%d.\n", (long long int)result);
                }       
        }
#endif
        result = saCkptCheckpointClose(checkpointHandle);
        if(result != SA_AIS_OK) {
                fprintf(stderr, "saCkptCheckpointClose returned %d.\n", (long 
long int)result);
        }

        result = saCkptFinalize(ckptHandle);
        if(result != SA_AIS_OK) {
                fprintf(stderr, "saCkptFinalize  returned %d.\n",(long long 
int)result);
                exit(0);
        }
        printf("PASSED \n");
        exit(0);

}


static void *
ckpt_dispatch(void *arg)
{
  do {
    SaSelectionObjectT ckptSelectionObject = 0;

    SaAisErrorT rc = saCkptSelectionObjectGet(ckptHandle, &ckptSelectionObject);

    if (rc != SA_AIS_OK) {
      fprintf(stderr, "saCkptSelectionObjectGet error: %i", rc);
      break;
    }

    struct pollfd fds[] = {
      { ckptSelectionObject, POLLIN, 0 }
    };

    while (true) {
      if (poll(fds, sizeof(fds) / sizeof(struct pollfd), -1) < 0) {
        if (errno != EINTR)
          fprintf(stderr, "poll failed: %i", errno);

        continue;
      }

      if (fds[0].revents & POLLIN) {
        rc = saCkptDispatch(ckptHandle, SA_DISPATCH_ONE);

        if (rc != SA_AIS_OK)
          fprintf(stderr, "saCkptDispatch failed: %i", rc);
      }
    }
  } while (false);

  return 0;
}


int main(int argc, char** argv) {
        int           result;
        pthread_t     thread;

        SaCkptCallbacksT callbk;

        callbk.saCkptCheckpointOpenCallback = AppCkptOpenCallback;
        callbk.saCkptCheckpointSynchronizeCallback = AppCkptSyncCallback;
        result = saCkptInitialize(&ckptHandle, &callbk, &version);

        if(result != SA_AIS_OK) {
                fprintf(stderr, "saCkptInitialize failed with code %d.\n", 
result);
        } else {
                result = pthread_create(&thread, 0, ckpt_dispatch, 0);
                if (result != 0) {
                        fprintf("unable to create ckpt thread: %d", result);
                        exit(1);
                }

                checkpoint_loop(1);
        }
        return result;
}



------------------------------------------------------------------------------
Rapidly troubleshoot problems before they affect your business. Most IT 
organizations don't have a clear picture of how application performance 
affects their revenue. With AppDynamics, you get 100% visibility into your 
Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro!
http://pubads.g.doubleclick.net/gampad/clk?id=84349831&iu=/4140/ostg.clktrk
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to