Skip to content

Commit

Permalink
NDMP: tested version of elementaddress-slot calculations
Browse files Browse the repository at this point in the history
  • Loading branch information
pstorz committed Dec 21, 2018
1 parent e03847f commit 1a02acf
Show file tree
Hide file tree
Showing 2 changed files with 79 additions and 73 deletions.
7 changes: 4 additions & 3 deletions src/dird/dird.h
Expand Up @@ -149,11 +149,12 @@ struct changer_vol_list_t {
};


#if HAVE_NDMP
/**
* same as smc_element_address_assignment
* from ndmp/smc.h
*/
struct smc_elem_aa {
struct smc_element_address_assignment {

unsigned mte_addr; /* media transport element */
unsigned mte_count;
Expand All @@ -169,7 +170,7 @@ struct smc_elem_aa {

};

#if HAVE_NDMP

struct ndmp_deviceinfo_t {
std::string device;
std::string model;
Expand All @@ -184,7 +185,7 @@ struct runtime_storage_status_t {
slot_number_t slots; /**< Number of slots in autochanger */
pthread_mutex_t changer_lock; /**< Any access to the autochanger is controlled by this lock */
unsigned char smc_ident[32]; /**< smc ident info = changer name */
smc_elem_aa storage_mapping; /**< smc element assignment */
smc_element_address_assignment storage_mapping; /**< smc element assignment */
changer_vol_list_t *vol_list; /**< Cached content of autochanger */
std::list<ndmp_deviceinfo_t> *ndmp_deviceinfo; /**< NDMP device info for devices in this Storage */
pthread_mutex_t ndmp_deviceinfo_lock; /**< Any access to the list devices is controlled by this lock */
Expand Down
145 changes: 75 additions & 70 deletions src/dird/storage.c
Expand Up @@ -872,96 +872,101 @@ void invalidate_vol_list(STORERES *store)
/**
* calculate the element address for given slotnumber and slot_type
*/
slot_number_t get_physical_slotnumber_by_logical_slotnumber(STORERES *store, slot_type slot_type, slot_number_t slotnumber)
slot_number_t get_physical_slotnumber_by_logical_slotnumber(smc_element_assignment *smc_elem_aa, slot_type slot_type, slot_number_t slotnumber)
{


unsigned storage_slots_base = store->rss->storage_mapping.se_addr;
unsigned storage_slots_count = store->rss->storage_mapping.se_count;

unsigned impexp_slots_base = store->rss->storage_mapping.iee_addr;
unsigned impexp_slots_count = store->rss->storage_mapping.iee_count;

unsigned drive_base = store->rss->storage_mapping.dte_addr;
unsigned drive_count = store->rss->storage_mapping.dte_count;

unsigned picker_base = store->rss->storage_mapping.mte_addr;
unsigned picker_count = store->rss->storage_mapping.mte_count;

if (slot_type == slot_type_storage) {
return (slotnumber
+ storage_slots_base
- 1); // normal slots count start from 1

} else if(slot_type == slot_type_import) {
if (slot_type == slot_type_storage) {
if ( (slotnumber > (smc_elem_aa->se_count) )
|| ( slotnumber < 1 ) ) {
return -1;
} else {
return (slotnumber
+ impexp_slots_base
- storage_slots_count // i/e slots follow after normal slots
- 1); // normal slots count start from 1

+ smc_elem_aa->se_addr
- 1); // normal slots count start from 1
}
} else if(slot_type == slot_type_import) {
if ( (slotnumber < (smc_elem_aa->se_count + 1) )
|| ( slotnumber > (smc_elem_aa->se_count + smc_elem_aa->iee_count + 1)) ) {
return -1;
} else {
return (slotnumber
- smc_elem_aa->se_count // i/e slots follow after normal slots
- 1 // normal slots count start from 1
+ smc_elem_aa->iee_addr
);
}
} else if (slot_type == slot_type_picker) {
return (slotnumber
+ picker_base
);

if ( (slotnumber < 0) ||
slotnumber > (smc_elem_aa->mte_count - 1) ) {
return -1;
} else{
return (slotnumber
+ smc_elem_aa->mte_addr
);
}
} else if (slot_type == slot_type_drive) {
return (slotnumber
+ drive_base
);

if ( (slotnumber > (smc_elem_aa->dte_count) - 1 )
|| (slotnumber < 0 ) ) {
return -1;
}else{
return (slotnumber
+ smc_elem_aa->dte_addr
);
}
} else if (slot_type == slot_type_unknown){
return -1;
} else {
return -1;
}


}

/**
* calculate the slotnumber for element address and slot_type
*/
slot_number_t get_logical_slotnumber_by_physical_slotnumber(STORERES *store, slot_type slot_type, slot_number_t element_addr)
slot_number_t get_logical_slotnumber_by_physical_slotnumber(smc_element_assignment *smc_elem_aa, slot_type slot_type, slot_number_t element_addr)
{

unsigned storage_slots_base = store->rss->storage_mapping.se_addr;
unsigned storage_slots_count = store->rss->storage_mapping.se_count;

unsigned impexp_slots_base = store->rss->storage_mapping.iee_addr;
unsigned impexp_slots_count = store->rss->storage_mapping.iee_count;

unsigned drive_base = store->rss->storage_mapping.dte_addr;
unsigned drive_count = store->rss->storage_mapping.dte_count;

unsigned picker_base = store->rss->storage_mapping.mte_addr;
unsigned picker_count = store->rss->storage_mapping.mte_count;

if (slot_type == slot_type_storage) {
if (slot_type == slot_type_storage) {
if ( (element_addr < smc_elem_aa->se_addr)
|| (element_addr > smc_elem_aa->se_addr + smc_elem_aa->se_count - 1 ) ) {
return -1;
} else {
return (element_addr
- storage_slots_base
+ 1); // slots count start from 1
- smc_elem_aa->se_addr
+ 1); // slots count start from 1

} else if(slot_type == slot_type_import) {
return (element_addr
- impexp_slots_base
+ storage_slots_count // i/e slots follow after normal slots
+ 1); // slots count start from 1

/*
} else if (slot_type == slot_type_drive) {
}
} else if(slot_type == slot_type_import) {
if ( (element_addr < smc_elem_aa->iee_addr)
|| (element_addr > smc_elem_aa->iee_addr + smc_elem_aa->iee_count - 1 ) ) {
return -1;
} else {
return (element_addr
- drive_base
);
} else if (slot_type == slot_type_picker) {
+ smc_elem_aa->se_count // i/e slots follow after normal slots
- smc_elem_aa->iee_addr
+ 1
); // slots count start from 1
}
} else if (slot_type == slot_type_drive) {
if ( (element_addr < smc_elem_aa->dte_addr)
|| (element_addr > smc_elem_aa->dte_addr + smc_elem_aa->dte_count - 1) ) {
return -1;
} else {
return (element_addr
- picker_base
);
- smc_elem_aa->dte_addr
);
}
} else if (slot_type == slot_type_picker) {
return (element_addr
- smc_elem_aa->mte_addr
);

} else if (slot_type == slot_type_unknown){
return -1;
*/
} else {
return -1;
}
} else if (slot_type == slot_type_unknown){
return -1;

}
} else {
return -1;
}

}

0 comments on commit 1a02acf

Please sign in to comment.