File: dpm_testget.c

package info (click to toggle)
dpm-postgres 1.7.4.7-1
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 13,788 kB
  • ctags: 10,782
  • sloc: ansic: 146,136; sh: 13,362; perl: 11,142; python: 5,529; cpp: 5,113; sql: 1,790; makefile: 955; fortran: 113
file content (91 lines) | stat: -rw-r--r-- 2,609 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include "dpm_api.h"
#include "serrno.h"
#define DEFPOLLINT 10

main(argc, argv)
int argc;
char **argv;
{
	static char *f_stat[] = {"Success", "Queued", "Active", "Ready", "Running", "Done", "Failed", "Aborted"};
	struct dpm_getfilestatus *filestatuses;
	int i;
	int nbfiles;
	int nbprotocols;
	int nbreplies;
	static char *protocols[] = {"rfio"};
	int r = 0;
	char r_token[CA_MAXDPMTOKENLEN+1];
	struct dpm_getfilereq *reqfiles;
	int status;

	if (argc < 2) {
		fprintf (stderr, "usage: %s SURLs\n", argv[0]);
		exit (1);
	}
	nbfiles = argc - 1;

	if ((reqfiles = calloc (nbfiles, sizeof(struct dpm_getfilereq))) == NULL) {
		perror ("calloc");
		exit (1);
	}
	for (i = 0; i < nbfiles; i++)
		reqfiles[i].from_surl = argv[i+1];
	nbprotocols = sizeof(protocols) / sizeof(char *);

	if ((status = dpm_get (nbfiles, reqfiles, nbprotocols, protocols, NULL,
	    0, r_token, &nbreplies, &filestatuses)) < 0) {
		sperror ("dpm_get");
		exit (1);
	}

	printf ("dpm_get returned r_token: %s\n", r_token);

	/* wait for request status "Done" or "Failed" */

	while (status == DPM_QUEUED || status == DPM_ACTIVE) {
		for (i = 0; i < nbreplies; i++) {
			if ((filestatuses+i)->from_surl)
				free ((filestatuses+i)->from_surl);
			if ((filestatuses+i)->turl)
				free ((filestatuses+i)->turl);
			if ((filestatuses+i)->errstring)
				free ((filestatuses+i)->errstring);
		}
		free (filestatuses);
		printf("request state Pending\n");
		sleep ((r++ == 0) ? 1 : DEFPOLLINT);
		if ((status = dpm_getstatus_getreq (r_token, 0, NULL,
		    &nbreplies, &filestatuses)) < 0) {
			sperror ("dpm_getstatus_getreq");
			exit (1);
		}
	}
	printf ("request state %s\n", status == DPM_DONE ? "Done" : "Failed");
	if (status == DPM_FAILED)
		exit (1);
	for (i = 0; i < nbreplies; i++) {
		if ((filestatuses+i)->turl)
			printf ("state[%d] = %s, TURL = %s\n", i,
			    f_stat[(filestatuses+i)->status >> 12],
			    (filestatuses+i)->turl);
		else if (((filestatuses+i)->status & DPM_FAILED) == DPM_FAILED)
			printf ("state[%d] = %s, serrno = %d, errstring = <%s>\n", i,
			    f_stat[(filestatuses+i)->status >> 12],
			    (filestatuses+i)->status & 0xFFF,
			    (filestatuses+i)->errstring ? (filestatuses+i)->errstring : "");
		else
			printf ("state[%d] = %s\n", i,
			    f_stat[(filestatuses+i)->status >> 12]);
		if ((filestatuses+i)->from_surl)
			free ((filestatuses+i)->from_surl);
		if ((filestatuses+i)->turl)
			free ((filestatuses+i)->turl);
		if ((filestatuses+i)->errstring)
			free ((filestatuses+i)->errstring);
	}
	free (filestatuses);
	exit (0);
}