diff options
author | Kota Tsuyuzaki <bloodeagle40234@gmail.com> | 2015-02-20 10:46:08 +0900 |
---|---|---|
committer | Kota Tsuyuzaki <bloodeagle40234@gmail.com> | 2015-02-26 02:15:30 -0800 |
commit | 7b2b759a2f2a683398ba954c3e728fb3537e7c8b (patch) | |
tree | a5a5e500af5c35e72ae0f7881d7c88887a121975 | |
parent | 238edcf4cad5de34a4bebb73873ed25d31c47c37 (diff) | |
download | liberasurecode-7b2b759a2f2a683398ba954c3e728fb3537e7c8b.tar.gz |
Add liberasurecode_get_fragment_size function
For get_segment_info function of PyECLib, liberasurecode should
support get_fragment_size function because if pyeclib and liberasurecode
have the calculation of fragment size each other, it might cause
the size mismatch (i.e. it'll be a bug) in the future development work.
This patch introduces liberasurecode_get_fragment_size function to return
the fragment_size calculated at liberasurecode accoring to specified
backend descriptor.
It really usefull to help caller knows how large size it have to expect
and all pyeclib has to do for retrieving fragment_size will be just calling
the liberasurecode_get_fragment_size function on get_segment_info.
-rw-r--r-- | include/erasurecode/erasurecode.h | 2 | ||||
-rw-r--r-- | src/erasurecode.c | 10 |
2 files changed, 12 insertions, 0 deletions
diff --git a/include/erasurecode/erasurecode.h b/include/erasurecode/erasurecode.h index f811555..b85a9df 100644 --- a/include/erasurecode/erasurecode.h +++ b/include/erasurecode/erasurecode.h @@ -328,6 +328,8 @@ int liberasurecode_get_aligned_data_size(int desc, uint64_t data_len); */ int liberasurecode_get_minimum_encode_size(int desc); +int liberasurecode_get_fragment_size(int desc, int size); + /* ==~=*=~===~=*=~==~=*=~== liberasurecode Error codes =~=*=~==~=~=*=~==~== */ /* Error codes */ diff --git a/src/erasurecode.c b/src/erasurecode.c index f4e9c5b..6d2cc10 100644 --- a/src/erasurecode.c +++ b/src/erasurecode.c @@ -1121,6 +1121,16 @@ int liberasurecode_get_minimum_encode_size(int desc) return liberasurecode_get_aligned_data_size(desc, 1); } +int liberasurecode_get_fragment_size(int desc, int orig_data_size) +{ + ec_backend_t instance = liberasurecode_backend_instance_get_by_desc(desc); + // TODO: Create a common function to calculate fragment size also for preprocessing + int aligned_data_len = get_aligned_data_size(instance, orig_data_size); + int size = (aligned_data_len / instance->args.uargs.k) + instance->common.metadata_adder; + + return size; +} + /* ==~=*=~==~=*=~==~=*=~==~=*=~==~=* misc *=~==~=*=~==~=*=~==~=*=~==~=*=~== */ #if 0 |