data_lake.c
Go to the documentation of this file.
1 
10 #include "data_lake.h"
12 #include "mcl_core/mcl_memory.h"
13 #include "mcl_core/mcl_core.h"
14 
16 {
17  mcl_error_t code;
18 
19  MCL_DEBUG_ENTRY("mcl_data_lake_configuration_t *configuration = <%p>, mcl_data_lake_t **data_lake = <%p>", configuration, data_lake);
20 
21  // Null check.
22  MCL_ASSERT_NOT_NULL(data_lake, code);
23 
24  // Data lake must be NULL if anything goes wrong.
25  *data_lake = MCL_NULL;
26 
27  // Null check.
28  MCL_ASSERT_NOT_NULL(configuration, code);
29 
30  // Validate data lake configuration.
31  code = data_lake_configuration_validate(configuration);
32 
33  if (MCL_OK == code)
34  {
35  // Allocate memory for data_lake handle.
36  MCL_NEW(*data_lake);
37 
38  if (MCL_NULL == *data_lake)
39  {
40  code = MCL_OUT_OF_MEMORY;
41  }
42  else
43  {
44  // Set data lake configuration.
45  (*data_lake)->configuration = configuration;
46 
47  // Initialize data lake processor.
48  (*data_lake)->processor.access_token = MCL_NULL;
49  (*data_lake)->processor.client_id = mcl_core_get_client_id(configuration->core);
50  (*data_lake)->processor.http_client = mcl_core_get_http_client(configuration->core);
51  (*data_lake)->processor.upload_url_generation_url = configuration->upload_url_generation_url;
52 
53  if (MCL_NULL != configuration->certificate)
54  {
55  code = mcl_http_client_add_certificate((*data_lake)->processor.http_client, configuration->certificate, configuration->certificate_is_file);
56  }
57  }
58  }
59 
61 
62  if (MCL_OK != code)
63  {
64  mcl_data_lake_destroy(data_lake);
65  }
66 
67  MCL_DEBUG_LEAVE("retVal = <%d>", code);
68  return code;
69 }
70 
72 {
73  mcl_error_t code = MCL_OK;
74 
75  MCL_DEBUG_ENTRY("mcl_data_lake_t *data_lake = <%p>, mcl_data_lake_object_t *object = <%p>", data_lake, object);
76 
77  if (MCL_NULL == data_lake)
78  {
79  MCL_ERROR("data_lake parameter is NULL.");
81  }
82  else if (MCL_NULL == object)
83  {
84  MCL_ERROR("object parameter is NULL.");
86  }
87  else
88  {
89  // Free previous access token.
90  MCL_FREE(data_lake->processor.access_token);
91 
92  // Get access token.
93  code = mcl_core_get_last_access_token(data_lake->configuration->core, &data_lake->processor.access_token);
94 
95  if (MCL_OK == code)
96  {
97  // Get URL.
98  code = data_lake_processor_generate_upload_url(&data_lake->processor, object, MCL_NULL);
99  }
100  }
101 
102  MCL_DEBUG_LEAVE("retVal = <%d>", code);
103  return code;
104 }
105 
107 {
108  mcl_error_t code = MCL_OK;
109 
110  MCL_DEBUG_ENTRY("mcl_data_lake_t *data_lake = <%p>, mcl_list_t *object_list = <%p>", data_lake, object_list);
111 
112  if (MCL_NULL == data_lake)
113  {
114  MCL_ERROR("data_lake parameter is NULL.");
116  }
117  else if (MCL_NULL == object_list)
118  {
119  MCL_ERROR("object_list parameter is NULL.");
121  }
122  else
123  {
124  // Free previous access token.
125  MCL_FREE(data_lake->processor.access_token);
126 
127  // Get access token.
128  code = mcl_core_get_last_access_token(data_lake->configuration->core, &data_lake->processor.access_token);
129 
130  if (MCL_OK == code)
131  {
132  // Get URLs.
133  code = data_lake_processor_generate_upload_urls(&data_lake->processor, object_list, MCL_NULL);
134  }
135  }
136 
137  MCL_DEBUG_LEAVE("retVal = <%d>", code);
138  return code;
139 }
140 
142 {
143  mcl_error_t code = MCL_OK;
144 
145  MCL_DEBUG_ENTRY("mcl_data_lake_t *data_lake = <%p>, mcl_data_lake_object_t *object = <%p>", data_lake, object);
146 
147  if (MCL_NULL == data_lake)
148  {
149  MCL_ERROR("data_lake parameter is NULL.");
151  }
152  else if (MCL_NULL == object)
153  {
154  MCL_ERROR("object parameter is NULL.");
156  }
157  else
158  {
159  // Free previous access token.
160  MCL_FREE(data_lake->processor.access_token);
161 
162  // Get access token.
163  code = mcl_core_get_last_access_token(data_lake->configuration->core, &data_lake->processor.access_token);
164 
165  if (MCL_OK == code)
166  {
167  // Get URL.
168  code = data_lake_processor_generate_upload_url(&data_lake->processor, object, subtenant_id);
169  }
170  }
171 
172  MCL_DEBUG_LEAVE("retVal = <%d>", code);
173  return code;
174 }
175 
177 {
178  mcl_error_t code = MCL_OK;
179 
180  MCL_DEBUG_ENTRY("mcl_data_lake_t *data_lake = <%p>, mcl_list_t *object_list = <%p>", data_lake, object_list);
181 
182  if (MCL_NULL == data_lake)
183  {
184  MCL_ERROR("data_lake parameter is NULL.");
186  }
187  else if (MCL_NULL == object_list)
188  {
189  MCL_ERROR("object_list parameter is NULL.");
191  }
192  else
193  {
194  // Free previous access token.
195  MCL_FREE(data_lake->processor.access_token);
196 
197  // Get access token.
198  code = mcl_core_get_last_access_token(data_lake->configuration->core, &data_lake->processor.access_token);
199 
200  if (MCL_OK == code)
201  {
202  // Get URLs.
203  code = data_lake_processor_generate_upload_urls(&data_lake->processor, object_list, subtenant_id);
204  }
205  }
206 
207  MCL_DEBUG_LEAVE("retVal = <%d>", code);
208  return code;
209 }
210 
212 {
213  // Variable declaration.
214  mcl_error_t code = MCL_OK;
215 
216  MCL_DEBUG_ENTRY("mcl_data_lake_t *data_lake = <%p>, mcl_data_lake_object_t *object = <%p>", data_lake, object);
217 
218  // Null check.
219  if (MCL_NULL == data_lake)
220  {
221  MCL_ERROR("data_lake parameter is NULL.");
223  }
224  else if (MCL_NULL == object)
225  {
226  MCL_ERROR("object parameter is NULL.");
228  }
229  else
230  {
231  // Upload object.
232  code = data_lake_processor_upload(&(data_lake->processor), object);
233  }
234 
235  MCL_DEBUG_LEAVE("retVal = <%d>", code);
236  return code;
237 }
238 
240 {
241  MCL_DEBUG_ENTRY("mcl_data_lake_t **data_lake = <%p>", data_lake);
242 
243  if ((MCL_NULL != data_lake) && (MCL_NULL != *data_lake))
244  {
245  MCL_FREE((*data_lake)->processor.access_token);
246  MCL_FREE(*data_lake);
247  }
248 
249  MCL_DEBUG_LEAVE("retVal = void");
250 }
mcl_error_t data_lake_processor_generate_upload_url(data_lake_processor_t *processor, data_lake_object_t *object, const char *subtenant_id)
#define MCL_FUNCTION_LEAVE_LABEL
mcl_error_t mcl_data_lake_initialize(mcl_data_lake_configuration_t *configuration, mcl_data_lake_t **data_lake)
Definition: data_lake.c:15
MCL_OK
mcl_error_t mcl_data_lake_upload(mcl_data_lake_t *data_lake, mcl_data_lake_object_t *object)
Definition: data_lake.c:211
void mcl_data_lake_destroy(mcl_data_lake_t **data_lake)
Definition: data_lake.c:239
MCL_TRIGGERED_WITH_NULL
mcl_error_t mcl_data_lake_generate_upload_url_for_subtenant(mcl_data_lake_t *data_lake, mcl_data_lake_object_t *object, const char *subtenant_id)
Definition: data_lake.c:141
struct mcl_data_lake_configuration_t mcl_data_lake_configuration_t
mcl_error_t mcl_data_lake_generate_upload_url(mcl_data_lake_t *data_lake, mcl_data_lake_object_t *object)
Definition: data_lake.c:71
mcl_int32_t mcl_error_t
#define MCL_DEBUG_ENTRY(...)
mcl_error_t data_lake_processor_upload(data_lake_processor_t *processor, data_lake_object_t *object)
#define MCL_NEW(p)
#define MCL_NULL
#define MCL_ERROR(...)
MCL_CORE_EXPORT mcl_error_t mcl_core_get_last_access_token(mcl_core_t *core, char **token)
#define MCL_FREE(p)
mcl_error_t mcl_data_lake_generate_upload_urls(mcl_data_lake_t *data_lake, mcl_list_t *object_list)
Definition: data_lake.c:106
MCL_CORE_EXPORT mcl_error_t mcl_http_client_add_certificate(mcl_http_client_t *http_client, const char *certificate, mcl_bool_t is_file)
Data lake interface header file.
#define MCL_ASSERT_NOT_NULL(argument, return_variable)
mcl_error_t data_lake_processor_generate_upload_urls(data_lake_processor_t *processor, mcl_list_t *object_list, const char *subtenant_id)
Data lake configuration module header file.
struct mcl_data_lake_t mcl_data_lake_t
Definition: mcl_data_lake.h:34
struct mcl_data_lake_object_t mcl_data_lake_object_t
mcl_error_t data_lake_configuration_validate(data_lake_configuration_t *configuration)
MCL_CORE_EXPORT const char * mcl_core_get_client_id(mcl_core_t *core)
mcl_error_t mcl_data_lake_generate_upload_urls_for_subtenant(mcl_data_lake_t *data_lake, mcl_list_t *object_list, const char *subtenant_id)
Definition: data_lake.c:176
MCL_OUT_OF_MEMORY
MCL_CORE_EXPORT mcl_http_client_t * mcl_core_get_http_client(mcl_core_t *core)
#define MCL_DEBUG_LEAVE(...)
Data lake module header file.