@@ -262,40 +262,17 @@ CreateRequestTaskV1M0::createResultDataset(Cluster* cluster,
262262 BlossomStatus& status,
263263 Hanami::ErrorContainer& error)
264264{
265- const std::string datasetUuid = task->uuid .toString ();
266265 RequestInfo* taskInfo = &std::get<RequestInfo>(task->info );
267266
268267 bool success = false ;
269- std::string targetFilePath = GET_STRING_CONFIG (" storage" , " dataset_location" , success);
268+ const std::string datasetLocation = GET_STRING_CONFIG (" storage" , " dataset_location" , success);
270269 if (success == false ) {
271270 status.statusCode = INTERNAL_SERVER_ERROR_RTYPE;
272271 error.addMessage (" file-location to store dataset is missing in the config" );
273272 return ERROR;
274273 }
275274
276- if (targetFilePath.at (targetFilePath.size () - 1 ) != ' /' ) {
277- targetFilePath.append (" /" );
278- }
279- targetFilePath.append (datasetName + datasetUuid);
280-
281- // create new database-entry
282- DataSetTable::DataSetDbEntry dbEntry;
283- dbEntry.name = datasetName;
284- dbEntry.ownerId = userContext.userId ;
285- dbEntry.projectId = userContext.projectId ;
286- dbEntry.uuid = datasetUuid;
287- dbEntry.visibility = " private" ;
288- dbEntry.location = targetFilePath;
289-
290- // update database
291- if (DataSetTable::getInstance ()->addDataSet (dbEntry, userContext, error) != OK) {
292- status.statusCode = INTERNAL_SERVER_ERROR_RTYPE;
293- return ERROR;
294- }
295-
296- // create description for new dataset
297- json description;
298- uint64_t totalNumberOfOutputs = 0 ;
275+ // precheck input
299276 for (const json& item : resultMetaData) {
300277 if (item.contains (" hexagon_name" ) == false ) {
301278 status.statusCode = BAD_REQUEST_RTYPE;
@@ -307,35 +284,56 @@ CreateRequestTaskV1M0::createResultDataset(Cluster* cluster,
307284 status.errorMessage .append (" 'dataset_column' is missing" );
308285 return INVALID_INPUT;
309286 }
287+ }
310288
289+ // create new dataset, one for each output-hexagon
290+ for (const json& item : resultMetaData) {
311291 const std::string hexagonName = item[" hexagon_name" ];
312292 const std::string columnName = item[" dataset_column" ];
293+ const std::string datasetUuid = generateUuid ().toString ();
294+
295+ // create local file path
296+ std::string targetFilePath = datasetLocation;
297+ if (targetFilePath.at (targetFilePath.size () - 1 ) != ' /' ) {
298+ targetFilePath.append (" /" );
299+ }
300+ targetFilePath.append (datasetName + " _" + hexagonName + " _" + datasetUuid);
301+
302+ // create new database-entry
303+ DataSetTable::DataSetDbEntry dbEntry;
304+ dbEntry.uuid = datasetUuid;
305+ dbEntry.name = datasetName;
306+ dbEntry.ownerId = userContext.userId ;
307+ dbEntry.projectId = userContext.projectId ;
308+ dbEntry.visibility = " private" ;
309+ dbEntry.location = targetFilePath;
310+ dbEntry.taskUuid = task->uuid .toString ();
311+
312+ // update database
313+ if (DataSetTable::getInstance ()->addDataSet (dbEntry, userContext, error) != OK) {
314+ status.statusCode = INTERNAL_SERVER_ERROR_RTYPE;
315+ return ERROR;
316+ }
317+
313318 const uint64_t numberOfOutputs = cluster->outputInterfaces [hexagonName].ioBuffer .size ();
314- totalNumberOfOutputs += numberOfOutputs;
315319
316320 // prepare description of the dataset
321+ json description;
317322 json descriptionEntry;
318323 descriptionEntry[" column_start" ] = 0 ;
319324 descriptionEntry[" column_end" ] = numberOfOutputs;
320325 description[columnName] = descriptionEntry;
321- }
322326
323- // initialize dataset-file
324- ReturnStatus ret = initNewDataSetFile (
325- targetFilePath, datasetName, description, FLOAT_TYPE, totalNumberOfOutputs , error);
326- if (ret == INVALID_INPUT) {
327- status.errorMessage = " Data-set with uuid '" + datasetUuid + " ' not found" ;
328- status.statusCode = NOT_FOUND_RTYPE;
329- }
327+ // initialize dataset-file
328+ ReturnStatus ret = initNewDataSetFile (
329+ targetFilePath, datasetName, description, FLOAT_TYPE, numberOfOutputs , error);
330+ if (ret == INVALID_INPUT) {
331+ status.errorMessage = " Data-set with uuid '" + datasetUuid + " ' not found" ;
332+ status.statusCode = NOT_FOUND_RTYPE;
333+ }
330334
331- // prepare io-buffer
332- for (const json& item : resultMetaData) {
333- const std::string hexagonName = item[" hexagon_name" ];
334- const std::string columnName = item[" dataset_column" ];
335335 DataSetFileHandle fileHandle;
336-
337- const ReturnStatus ret
338- = fillTaskIo (fileHandle, userContext, columnName, datasetUuid, status, error);
336+ ret = fillTaskIo (fileHandle, userContext, columnName, datasetUuid, status, error);
339337 if (ret != OK) {
340338 return ret;
341339 }
0 commit comments