aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorThomas White <taw@physics.org>2021-07-06 15:15:21 +0200
committerThomas White <taw@physics.org>2022-06-02 12:15:38 +0200
commit45d3a8670da1d40145202ed42129c7cddba18df5 (patch)
tree48297ece6772830025a9063105fec34eb3542725 /src
parentb28228b5826235ca917d9f42af7d22f75b38bb13 (diff)
ASAP::O: Group ID stuff
Diffstat (limited to 'src')
-rw-r--r--src/im-asapo.c49
-rw-r--r--src/im-asapo.h54
-rw-r--r--src/im-sandbox.c25
-rw-r--r--src/im-sandbox.h1
-rw-r--r--src/indexamajig.c12
5 files changed, 124 insertions, 17 deletions
diff --git a/src/im-asapo.c b/src/im-asapo.c
index e6061268..4eafd058 100644
--- a/src/im-asapo.c
+++ b/src/im-asapo.c
@@ -60,10 +60,50 @@ static void show_asapo_error(const char *msg, const AsapoErrorHandle err)
}
+AsapoStringHandle im_asapo_group_id_from_string(const char *str)
+{
+ /* FIXME: This function does not yet exist */
+ return asapostringhandle_from_string(str);
+}
+
+
+AsapoStringHandle im_asapo_make_unique_group_id(const char *endpoint,
+ const char *token,
+ const char *beamtime,
+ const char *path)
+{
+ AsapoConsumerHandle consumer;
+ AsapoSourceCredentialsHandle cred;
+ AsapoStringHandle group_id;
+ AsapoErrorHandle err = asapo_new_handle();
+
+ cred = asapo_create_source_credentials(kProcessed, beamtime, "", "", token);
+ consumer = asapo_create_consumer(endpoint, path, 1, cred, &err);
+ asapo_free_handle(&cred);
+ if ( err ) {
+ show_asapo_error("Cannot create temporary ASAP::O consumer", err);
+ asapo_free_handle(&consumer);
+ return NULL;
+ }
+
+ asapo_consumer_set_timeout(consumer, 1000);
+
+ group_id = asapo_consumer_generate_new_group_id(consumer, &err);
+ asapo_free_handle(&consumer);
+ if ( err ) {
+ show_asapo_error("Cannot create ASAP::O group ID", err);
+ return NULL;
+ }
+
+ return group_id;
+}
+
+
struct im_asapo *im_asapo_connect(const char *endpoint,
const char *token,
const char *beamtime,
- const char *path)
+ const char *path,
+ AsapoStringHandle group_id)
{
struct im_asapo *a;
AsapoSourceCredentialsHandle cred;
@@ -83,12 +123,7 @@ struct im_asapo *im_asapo_connect(const char *endpoint,
asapo_consumer_set_timeout(a->consumer, 1000);
- a->group_id = asapo_consumer_generate_new_group_id(a->consumer, &err);
- if ( err ) {
- show_asapo_error("Cannot create ASAP::O group ID", err);
- free(a);
- return NULL;
- }
+ a->group_id = group_id;
return a;
}
diff --git a/src/im-asapo.h b/src/im-asapo.h
index 254e7df3..3ffc5808 100644
--- a/src/im-asapo.h
+++ b/src/im-asapo.h
@@ -36,15 +36,61 @@
#if defined(HAVE_ASAPO)
-extern struct im_asapo *im_asapo_connect();
+#include <asapo/consumer_c.h>
+
+extern struct im_asapo *im_asapo_connect(const char *endpoint,
+ const char *token,
+ const char *beamtime,
+ const char *path,
+ AsapoStringHandle group_id);
+
extern void im_asapo_shutdown(struct im_asapo *a);
+
extern void *im_asapo_fetch(struct im_asapo *a, size_t *pdata_size);
+extern AsapoStringHandle im_asapo_group_id_from_string(const char *str);
+
+extern AsapoStringHandle im_asapo_make_unique_group_id(const char *endpoint,
+ const char *token,
+ const char *beamtime,
+ const char *path);
+
#else /* defined(HAVE_ASAPO) */
-static UNUSED struct im_asapo *im_asapo_connect() { return NULL; }
-static UNUSED void im_asapo_shutdown(struct im_asapo *a) { }
-static UNUSED void *im_asapo_fetch(struct im_asapo *a, size_t *psize) { *psize = 0; return NULL; }
+typedef void* AsapoStringHandle;
+
+static UNUSED struct im_asapo *im_asapo_connect(const char *endpoint,
+ const char *token,
+ const char *beamtime,
+ const char *path,
+ AsapoStringHandle group_id)
+{
+ return NULL;
+}
+
+static UNUSED void im_asapo_shutdown(struct im_asapo *a)
+{
+}
+
+static UNUSED void *im_asapo_fetch(struct im_asapo *a, size_t *psize)
+{
+ *psize = 0;
+ return NULL;
+}
+
+static UNUSED AsapoStringHandle im_asapo_group_id_from_string(const char *str)
+{
+ return NULL;
+}
+
+static UNUSED AsapoStringHandle im_asapo_make_unique_group_id(const char *endpoint,
+ const char *token,
+ const char *beamtime,
+ const char *path
+ AsapoStringHandle group_id)
+{
+ return NULL;
+}
#endif /* defined(HAVE_ASAPO) */
diff --git a/src/im-sandbox.c b/src/im-sandbox.c
index ed58a3be..654f07d1 100644
--- a/src/im-sandbox.c
+++ b/src/im-sandbox.c
@@ -62,6 +62,7 @@
#include "process_image.h"
#include "im-zmq.h"
#include "profile.h"
+#include "im-asapo.h"
struct sandbox
@@ -110,6 +111,7 @@ struct sandbox
const char *asapo_token;
const char *asapo_beamtime;
const char *asapo_path;
+ AsapoStringHandle asapo_group_id;
/* Final output */
Stream *stream;
@@ -356,12 +358,13 @@ static int run_work(const struct index_args *iargs, Stream *st,
}
if ( sb->asapo ) {
- zmqstuff = im_zmq_connect(sb->zmq_address,
- sb->zmq_subscriptions,
- sb->n_zmq_subscriptions,
- sb->zmq_request);
- if ( zmqstuff == NULL ) {
- ERROR("ZMQ setup failed.\n");
+ asapostuff = im_asapo_connect(sb->asapo_endpoint,
+ sb->asapo_token,
+ sb->asapo_beamtime,
+ sb->asapo_path,
+ sb->asapo_group_id);
+ if ( asapostuff == NULL ) {
+ ERROR("ASAP::O setup failed.\n");
return 1;
}
}
@@ -1077,6 +1080,7 @@ int create_sandbox(struct index_args *iargs, int n_proc, char *prefix,
int n_zmq_subscriptions, const char *zmq_request,
const char *asapo_endpoint, const char *asapo_token,
const char *asapo_beamtime, const char *asapo_path,
+ const char *asapo_group_id,
int timeout, int profile)
{
int i;
@@ -1132,6 +1136,15 @@ int create_sandbox(struct index_args *iargs, int n_proc, char *prefix,
return 0;
}
+ if ( asapo_group_id != NULL ) {
+ sb->asapo_group_id = im_asapo_group_id_from_string(asapo_group_id);
+ } else {
+ sb->asapo_group_id = im_asapo_make_unique_group_id(asapo_endpoint,
+ asapo_token,
+ asapo_beamtime,
+ asapo_path);
+ }
+
sb->fds = NULL;
sb->fhs = NULL;
sb->stream = stream;
diff --git a/src/im-sandbox.h b/src/im-sandbox.h
index 5efd3595..0415cb80 100644
--- a/src/im-sandbox.h
+++ b/src/im-sandbox.h
@@ -89,6 +89,7 @@ extern int create_sandbox(struct index_args *iargs, int n_proc, char *prefix,
int n_zmq_subscriptions, const char *zmq_request,
const char *asapo_endpoint, const char *asapo_token,
const char *asapo_beamtime, const char *asapo_path,
+ const char *asapo_group_id,
int timeout, int profile);
#endif /* IM_SANDBOX_H */
diff --git a/src/indexamajig.c b/src/indexamajig.c
index 252a9e8f..ee23fcc3 100644
--- a/src/indexamajig.c
+++ b/src/indexamajig.c
@@ -88,6 +88,7 @@ struct indexamajig_arguments
char *asapo_token;
char *asapo_beamtime;
char *asapo_path;
+ char *asapo_group_id;
int serial_start;
char *temp_location;
int if_refine;
@@ -422,6 +423,10 @@ static error_t parse_arg(int key, char *arg, struct argp_state *state)
args->asapo_path = strdup(arg);
break;
+ case 217 :
+ args->asapo_group_id = strdup(arg);
+ break;
+
case 219 :
args->iargs.data_format = parse_data_format(arg);
if ( args->iargs.data_format == DATA_SOURCE_TYPE_UNKNOWN ) {
@@ -846,6 +851,11 @@ int main(int argc, char *argv[])
args.basename = 0;
args.zmq_addr = NULL;
args.zmq_request = NULL;
+ args.asapo_endpoint = NULL;
+ args.asapo_token = NULL;
+ args.asapo_beamtime = NULL;
+ args.asapo_path = NULL;
+ args.asapo_group_id = NULL;
args.n_zmq_subscriptions = 0;
args.serial_start = 1;
args.if_peaks = 1;
@@ -958,6 +968,7 @@ int main(int argc, char *argv[])
{"asapo-token", 214, "str", OPTION_NO_USAGE, "ASAP::O token"},
{"asapo-beamtime", 215, "str", OPTION_NO_USAGE, "ASAP::O beamtime ID"},
{"asapo-path", 216, "str", OPTION_NO_USAGE, "ASAP::O path to files"},
+ {"asapo-group", 217, "str", OPTION_NO_USAGE, "ASAP::O group ID"},
{"data-format", 219, "str", OPTION_NO_USAGE, "Streamed data format"},
{NULL, 0, 0, OPTION_DOC, "Peak search options:", 3},
@@ -1319,6 +1330,7 @@ int main(int argc, char *argv[])
args.n_zmq_subscriptions, args.zmq_request,
args.asapo_endpoint, args.asapo_token,
args.asapo_beamtime, args.asapo_path,
+ args.asapo_group_id,
timeout, args.profile);
cell_free(args.iargs.cell);