From 51f2dceaeeea6c4b86f37154ca25ffe33c5099b8 Mon Sep 17 00:00:00 2001
From: Ali Mohammed <ali.mohammed@hpe.com>
Date: Fri, 12 Nov 2021 15:37:52 +0100
Subject: [PATCH] calculate layout intersections at PC, calculate src, dst, and
 intersection lenght, add src and dst offsets and number of pieces to the init
 and transfer tickets,  find source and sink cdo by local-id

---
 maestro/cdo.c                   | 15 ++++++++
 maestro/pool_manager_registry.c | 64 ---------------------------------
 2 files changed, 15 insertions(+), 64 deletions(-)

diff --git a/maestro/cdo.c b/maestro/cdo.c
index 449551aa..969aaade 100644
--- a/maestro/cdo.c
+++ b/maestro/cdo.c
@@ -2630,6 +2630,21 @@ mstro_cdo__mark_transfer_complete(mstro_cdo cdo)
   }
   
 
+  int64_t n_pieces;
+
+  /* reduce the number of outstanding segments by 1 as we received one part*/
+  n_pieces = atomic_fetch_sub(&cdo->n_segments, 1);
+  
+  assert(n_pieces > 0); /* there is some outstanding communication */
+  n_pieces--; /* decrement n_pieces to reflect cdo->n_segments after fetch and sub operation */
+
+  if (n_pieces != 0)
+  {
+    DEBUG("There are %zu outstanding pieces for CDO %zu \n", n_pieces, cdo->id.local_id);
+    return MSTRO_OK;
+  }
+  
+
   /* clear in-transport flag */
   s = s & ~(MSTRO_CDO_STATE_IN_TRANSPORT);
   switch(s) {
diff --git a/maestro/pool_manager_registry.c b/maestro/pool_manager_registry.c
index 8f0d33dc..6f1eb45f 100644
--- a/maestro/pool_manager_registry.c
+++ b/maestro/pool_manager_registry.c
@@ -875,50 +875,6 @@ mstro_pm__mmbLayoutIntersecton_to_candidates(
   return status;
 }
 
-/** If a CDO has is_distributed flag set at the mstro_pm_cdo_registry_entry but
-  * the cdo handle does not has a distribution defined,
-  *
-  * we cook up a default distributed for it, which consists of one piece holding
-  * all the cdo data */
-mstro_status
-mstro_pm_cdo_create_default_dist_layout(mmbLayout *src_layout, mmbLayout **default_layout){
-  mstro_status status = MSTRO_OK;
-
-
-  /*FIXME only support irregular 1D layouts */
-  if ((src_layout->type != MMB_IRREGULAR) || (src_layout->n_dims != 1)) {
-    ERR("FIXME only support now 1D irregular layouts \n");
-    return MSTRO_UNIMPL;
-  }
-
-  size_t *offsets, *sizes;
-  offsets = (size_t *) malloc(sizeof(size_t) * 1);
-  sizes = (size_t *) malloc(sizeof(size_t) * 1);
-
-  if ((!offsets) || (!sizes) ) {
-    ERR("Can not allocate memory for default layout offsets and sizes \n");
-    return MSTRO_NOMEM;
-  }
-
-  offsets[0] = 0; // data starts from the begining
-  /* get cdo size */
-  sizes[0] = 0; // cdo size
-  for (size_t i = 0; i < src_layout->irregular.n_blocks.d[0]; i++) {
-    sizes[0] += src_layout->irregular.lengths[i]; // cdo size
-  }
-
-
-  mmbError stat = MMB_OK;
-  stat = mmb_layout_create_dist_irregular_1d(src_layout->element.size_bytes,
-                                       0, /*index = 0*/
-                                       1, /* nblocks = 1*/
-                                       offsets,
-                                       sizes,
-                                       default_layout);
-
-  return (stat == MMB_OK) ? MSTRO_OK : MSTRO_FAIL;
-}
-
 static inline
 mstro_status
 mstro_pm__find_cdo_with_layout(
@@ -1743,26 +1699,6 @@ mstro_pm_cdo_registry_find(mstro_app_id app, const struct mstro_cdo_id *id)
     return MSTRO_FAIL;
 }
 
-mstro_status
-mstro_pm_cdo_registry_attributes_to_dist_layout(Mstro__Pool__Attributes *attributes, mmbLayout **dist_layout)
-{
-  mstro_status status = MSTRO_OK;
-  size_t n = attributes->kv_map->n_map;
-
-  DEBUG("looking for distributed layout among %d attributes \n", n);
-  const char *key;
-  for(size_t i=0; i<n; i++) {
-     key = attributes->kv_map->map[i]->key;
-     if(strcmp(key,".maestro.core.cdo.dist-layout")==0) {
-       DEBUG("DIST Layout found ... \n\n\n");
-       status = mstro_attribute_pool_aval_to_mmbLayout(attributes->kv_map->map[i]->val->mmblayout, dist_layout);
-      break;
-     }
-   }
-
-  return status;
-}
-
 mstro_status
 mstro_pm_cdo_registry_store_attributes(const struct mstro_cdo_id *cdo_id,
                                        mstro_app_id app_id,
-- 
GitLab